仮想GPUで、GUIから実行できる画像分類の学習・推論をやってみた (NVIDIA DIGITS)
NVIDIA vGPU を自由に使える環境を手に入れたので、
Deep Learning の実行を試してみることに。
環境はこんなかんじ。
ワークロードは手軽さ&初めて見る人へのわかりやすさを考えて、
NVIDIA DIGITSを利用した画像分類をチョイス。
9割がたの操作をGUIからできるDeep Learning試行用ツール。
※画バレ
コンテナなどの無料リポジトリ NGC (NVIDIA GPU Cloud) からNVIDIA-DIGITSを取得。
https://ngc.nvidia.com/catalog/containers/nvidia:digits
$ sudo docker pull nvcr.io/nvidia/digits:21.09-tensorflow-py3
しばらく待って確認。赤字のように出たらOK。
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nvcr.io/nvidia/digits 21.09-tensorflow-py3 22d4b7c5ed49 6 weeks ago 14.6GB
イメージをとってこれたので、さっそく起動。
$ nvidia-docker run --name digits -d -p 8888:5000 -v /home/user01/digits:/data nvcr.io/nvidia/digits:21.09-tensorflow-py3
↑
DIGITSのWeb GUIはコンテナ内で5000番ポートを使って起動するので、
これをコンテナ外、つまりUbuntu VMの8888番にバインド。
Ubuntu VMにDIGITS用データ置き場 /home/user01/digits を作成し、
コンテナ内の /data にマウント。
これで /home/user01/digits に置いたデータはコンテナ内でも参照できる。
GUIにアクセスしてみる。
今回は0-9の手書き数字の分類ができるモデルの学習に使えるオープンデータである
MNISTの画像を拝借。
http://yann.lecun.com/exdb/mnist/
データ置き場に画像を配置。WinSCPなどで。
DIGITSの画像分類のデータセットの特徴:
たとえばディレクトリ"dog"をつくってその中に画像を放り込み、
データセット作成を実行すると、自動的にそれらの画像へタグ"dog"をつけてくれる。
テキストファイルでリストを作ったりする必要はない。
Tensorflowなどでやるようにコード実行してデータセット作る流れに慣れていると、
なんだか冗長な手順な気がするかもだが、わかりやすいといえばわかりやすいか。
今回は0-9の分類なので、フォルダの中身は以下のとおり。
データセット作成へ。ターゲットとして↑のMNISTのディレクトリを指定。
グレースケールで、ピクセルはMNISTなので28x28で。他はデフォルト。
データセットができた。
モデルの作成へ。
オプションはEpochのみ変更(30->5)。他はデフォルト。
モデル名の入力とデータセットの選択は必須なので注意。
学習開始。進捗が表示される。
完了。オレンジ・赤の線画accuracy、つまりモデルの精度を表す値。
けっこうよさそう。
GUIからできる推論を試してみる。まずファイルをアップロード。ここから。
ちなみに、事前にペイントでこんなかんじに手書き数字をつくっておいた。
ファイル名:jimae01.jpg
jimae01.jpgをアップロード。
Classify One をクリックして推論を実行。
別ウインドウが立ち上がり推論が開始される。
少し待つと結果が返ってくる。もう少し確信をもってほしいけど、いちおう正解。
やりかたさえ確立してしまえば、ここまで実行するのは極めて簡単。
あとはデータセットやネットワーク、パラメータを変更して色々試すのがよさそう。
ちなみに今回、TensorFlowが備わっているDIGITSコンテナを利用したが、
フレームワークは他にCaffeも選べる模様。いずれそっちもやってみたい。