NVIDIA DIGITS 4で物体検出モデルを作成してみた

digits4-kitti
Ubuntu 14.04にインストールしたNVIDIA DIGITS 4で、物体検出(object detection)モデルを作成してみました。

なお、以下の記事のように、GitHubのNVIDIAのDIGITSチュートリアル(https://github.com/NVIDIA/DIGITS/tree/digits-4.0/examples/object-detection)通りに実行すると、GTX 960では1エポックに1時間半掛かるので、約1/10のデータセットを用いて、モデルの作成を行います。

NVIDIA DIGITS 4.0をインストールしてみた
NVIDIAからDeep Learning用トレーニングシステムのDIGITS 4がリリースされたので、Ubuntu 14.04にインストールしてみました。今回は、DIGITS 4、cuDNN 5.1等へのアップデートが行われています。

また、上の記事で発生したエラーは、CaffeとPythonで利用するOpenCVのバージョンが違っていることが原因でしたので、以下の記事を参照して、Pythonで利用しているOpenCVのバージョンを確認し、OpenCV 2.4系でない場合は、対策を行っておきます。

NVIDIA DIGITS 4の物体検出トレーニング時のエラーに対策してみた
DIGITS 4の物体検出トレーニングにおいてエラーが発生した原因が分かりましたので、対策を行いました。結論から言うと、CaffeとPythonで利用するOpenCVのバージョンが違っていることが原因でした。

更に、物体検出トレーニングのグラフ表示を修正しておきたい場合は、以下の記事を参照して、対策を行っておきます。

NVIDIA DIGITS 4の物体検出トレーニングのグラフが変?
DIGITS 4の物体検出トレーニング時のグラフ表示が変なので、暫定処置を行ってみました。
スポンサーリンク

KITTI Data

ここでは、チュートリアルのようにprepare_kitti_data.pyを実行して作成されたkitti-dateディレクトリの下のtrain/images、train/labels、val/images、val/labelsディレクトリのデータを利用して、約1/10のデータセットを作成します。

kitti-dateディレクトリと同じ階層にsmallディレクトリを作成し、このディレクトリの下にtrainとvalディレクトリを作成し、更に、それぞれのディレクトリの下にimagesとlabelsディレクトリを作成しておきます。

kitti-dateディレクトリの下のtrain/imagesとtrain/labelsの6373個のデータの内、最初の640個のデータをsmallディレクトリの下のtrain/imagesとtrain/labelsに、それぞれコピーします。

同様に、kitti-dateディレクトリの下のval/imagesとval/labelsの1108個のデータの内、最初の100個のデータをsmallディレクトリの下のval/imagesとval/labelsに、それぞれコピーします。

DIGITS 4

Firefox等のブラウザを起動し、URLにlocalhostを入力すると、DIGITS「Home」ページが表示されます。

ここでは、DatasetやModelを作成(・削除)するので、ページ右上の「Login」ロゴをクリックして、予めLoginしておきます。

DIGITS 4 Dataset

DIGITS「Home」ページの「New Dataset」下の「Images」ボタンをクリックし、プルダウンメニューから「Object Detection」を選択します。

digits4-2
すると、以下の「New Object Detection Dataset」ページが表示されます。このページでは、上で作成したsmallディレクトリの下のtrain/images、train/labels、val/images、val/labelsディレクトリを「Training image folder」等に指定します。

digits4-kitti-1
「Dataset Name」に名前(ここでは、「KITTI_S」)を入力した後、「Create」ボタンをクリックします。

Dataset「KITTI_S」の作成は、約2分で終了します。ページの再読み込みを行うと、以下のようなページが表示されます。

digits4-kitti-2
このページ左上の「DIGITS」ロゴをクリックして、DIGITS「Home」ページに戻ります。

DIGITS 4 Model

DIGITS「Home」ページの「New Model」下の「Images」ボタンをクリックし、プルダウンメニューから「Object Detection」を選択します。

digits4-6
すると、以下の「New Object Detection Model」ページが表示されます。このページの左側の「Select Dataset」では、上で作成した「KITTI_S」を選択します。

中央の「Solver type」と「Base Learning Rate」に、それぞれAdamと0.0001を設定します。なお、VRAMが4GBの場合、「Batch size」と「Batch Accumulation」に、それぞれ2と5を入力します。

digits4-kitti-3
「New Object Detection Model」ページの下側のNetwork(s)では、「Custom Network」タブを選択し、「Torch」タブではなく「Caffe」タブが選択されていることを確認し、テキストボックスにdetectnet_network.prototxt(https://raw.githubusercontent.com/NVIDIA/caffe/caffe-0.15/examples/kitti/detectnet_network.prototxt)の内容をコピー・ペーストします。

また、予めここ(https://github.com/BVLC/caffe/tree/rc3/models/bvlc_googlenet)からbvlc_googlenet.caffemodelをダウンロードしておき、「Pretrained model(s)」に(パスとファイル名を)設定します。

「Model Name」に名前(ここでは、「Detector_S」)を入力した後、「Create」ボタンをクリックします。

今回は、約4時間経過したところで、正常終了しました。

digits4-kitti-4
mAP (val)は、全データを用いたNVIDIAの(グラフ表示が変な)チュートリアルでも、55~60%くらいなので、約1/10のデータセットで、約50%であれば、十分な感じがします。

DIGITS 4 物体検出

「Test a single image」の「Upload image」に、kitti_data/raw/testing/image_2ディレクトリの000439.pngを指定して物体検出した結果が、この記事の最初の画像です。

digits4-kitti-5
また、「Test a list of images」の「Upload Image List」に、複数の画像のパスとファイル名を記載したtest_list.txtを指定して物体検出した結果が、下の図です。

digits4-kitti-6

まとめ

Ubuntu 14.04にインストールしたNVIDIA DIGITS 4で、物体検出(object detection)モデルを作成してみました。

GTX 960の場合、チュートリアル通りでは、1エポック1時間半掛かっていましたが、約1/10のデータセットを用いることで、30エポック約4時間(1エポック約8分)で、モデルを作成することができました。