顔認証に GPU の導入!環境設定

グラフィックカード

画像の処理に於いて GPU の活用は当たり前になっています。
もともと Face01 シリーズは CPU だけでも処理が行えるように設計してあります。

今回は Face01 シリーズで GPU を用いるための環境設定をご紹介します。

CUDA と cuDNN の導入

Face01 が用いるライブラリには openCV、Dlib など GPU を活用できるものがあります。
それらを「GPU が使える状態」にするには CUDA と cuDNN を先に導入する必要があります。
これらライブラリは NVIDIA 社から提供されています。
NVIDIA 製のグラフィックボードを導入している場合のみ使用することが出来ます。

まずは端末から
$ nvidia-smi
と入力してください。

nvidia-smi が表示されている様子
nvidia-smi が表示されている様子

上記のように表示されていれば OK です。

ドライバは以下のように表示されていれば OK です。

「追加のドライバー」の表示
「追加のドライバー」の表示

「ソフトウェアとアップデート」の「他のソフトウェア」タブから次の2つのリポジトリを追加してください。

http://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64
http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64
リポジトリを追加する
リポジトリを追加する

synaptic パッケージマネージャから「再読込」をしてください。
端末の場合は
$ sudo apt-get update
と入力します。

synaptic で cuda を選択
synaptic で cuda を選択
synaptic で cuDNN を選択
synaptic で cuDNN を選択

端末からだと以下のような感じです。

$ sudo apt-get install -y --no-install-recommends cuda-10-0 libcudnn7 libcudnn7-dev
[sudo] パスワード:
パッケージリストを読み込んでいます… 完了
依存関係ツリーを作成しています
状態情報を読み取っています… 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
libnvidia-common-430
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
cuda-command-line-tools-10-0 cuda-compiler-10-0 cuda-cublas-10-0
cuda-cublas-dev-10-0 cuda-cudart-10-0 cuda-cudart-dev-10-0 cuda-cufft-10-0
cuda-cufft-dev-10-0 cuda-cuobjdump-10-0 cuda-cupti-10-0 cuda-curand-10-0
cuda-curand-dev-10-0 cuda-cusolver-10-0 cuda-cusolver-dev-10-0
cuda-cusparse-10-0 cuda-cusparse-dev-10-0 cuda-demo-suite-10-0
cuda-documentation-10-0 cuda-driver-dev-10-0 cuda-drivers cuda-gdb-10-0
cuda-gpu-library-advisor-10-0 cuda-libraries-10-0 cuda-libraries-dev-10-0
cuda-license-10-0 cuda-memcheck-10-0 cuda-misc-headers-10-0 cuda-npp-10-0
cuda-npp-dev-10-0 cuda-nsight-10-0 cuda-nsight-compute-10-0 cuda-nvcc-10-0
cuda-nvdisasm-10-0 cuda-nvgraph-10-0 cuda-nvgraph-dev-10-0 cuda-nvjpeg-10-0
cuda-nvjpeg-dev-10-0 cuda-nvml-dev-10-0 cuda-nvprof-10-0 cuda-nvprune-10-0
cuda-nvrtc-10-0 cuda-nvrtc-dev-10-0 cuda-nvtx-10-0 cuda-nvvp-10-0
cuda-runtime-10-0 cuda-samples-10-0 cuda-toolkit-10-0 cuda-tools-10-0
cuda-visual-tools-10-0 libxmu-dev libxmu-headers nvidia-modprobe
nvidia-settings

ずらずらと色々出てきますが、これでとりあえずはOKです。

NVIDIA 公式サイト登録とダウンロード

NVIDIA の公式サイトから cuDNN をダウンロード出来るよう登録を済ませてください。
注意書きがありますが、おひとりさま一回限りのダウンロード許可です。

NVIDIA 登録サイト
NVIDIA 登録サイト
cuDNN をダウンロードする
cuDNN をダウンロードする
*** LICENSE AGREEMENT ***
By using this software you agree to fully comply with the terms and
conditions of the EULA (End User License Agreement). The EULA is located
at /usr/local/cuda-10.0/doc/EULA.txt. The EULA can also be found at
http://docs.nvidia.com/cuda/eula/index.html. If you do not agree to the
terms and conditions of the EULA, do not use the software.
CUDA のデモが見られる
CUDA のデモが見られる
CUDA のデモ
CUDA のデモ

「demo_suit」の中には上の図のように波をシミュレーションするプログラムもあります。ゲームなんかではおなじみですね。

Dlib の再インストール

端末から操作します。

$ pip3 uninstall dlib
Uninstalling dlib-19.19.0:
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/DESCRIPTION.rst
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/INSTALLER
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/METADATA
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/RECORD
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/WHEEL
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/metadata.json
/home/terms/.local/lib/python3.6/site-packages/dlib-19.19.0.dist-info/top_level.txt
/home/terms/.local/lib/python3.6/site-packages/dlib.cpython-36m-x86_64-linux-gnu.so
Proceed (y/n)? y
Successfully uninstalled dlib-19.19.0
terms@terms-comp:~$ pip3 install dlib --verbose
Collecting dlib
1 location(s) to search for versions of dlib:

Dlib の最新版を git clone します。
github のここのページに書いてあるとおりにインストールしてください。
(CMake や build-essential などはインストール済みとします)
最後に

$ python3 setup.py install

を忘れないようにしてください。間違いやすいところなのでこのページを参考にしてください。

まとめ

以上です。
かなり端折りましたが順番通りやっていただければ GPU に対応した Dlib をインストールすることが出来ます。
ちなみに GPU を使用すると下の図のように GPU Utilization の値が上がります。
検証に使った PC のグラフィックカードは GeForce GT 710 でローエンドになります。

GPU Utilization の値が上がっている図
GPU Utilization の値が上がっている図

この状態で動く Face01 は体感で分かるほど性能が上がります。

深層学習を使った顔位置判定をプログラム側に施すと、GPU Utilization が 100% になってしまい効果が十分に引き出せません。この様なローエンドのグラフィックカードではなく、相応のグラフィックカードが必要になりますが、この機能をオンにすることでより多人数の集団でも顔を認識させる事が出来るようになります。

下に GPU 使用時の Face01 の動作の様子を動画で載せました。
CUDA 環境でライブラリが統一されるとこのように動きが滑らかになります。
顔認証は画像解析ですから、やはり環境としては GPU と何らかの GPGPU フレームワークを使うのが吉です。
個人的にはベンダーロックインされる CUDA より他もあるじゃないか…とは思うのですが、一番盛り上がっているのが CUDA ですから仕方のないことかも知れません。

GPU 使用時のデモ動画

以上です

最後までお読み頂きありがとうございました。

Follow me!