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のデータセットを用いて、モデルの作成を行います。
また、上の記事で発生したエラーは、CaffeとPythonで利用するOpenCVのバージョンが違っていることが原因でしたので、以下の記事を参照して、Pythonで利用しているOpenCVのバージョンを確認し、OpenCV 2.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」を選択します。
すると、以下の「New Object Detection Dataset」ページが表示されます。このページでは、上で作成したsmallディレクトリの下のtrain/images、train/labels、val/images、val/labelsディレクトリを「Training image folder」等に指定します。
「Dataset Name」に名前(ここでは、「KITTI_S」)を入力した後、「Create」ボタンをクリックします。
Dataset「KITTI_S」の作成は、約2分で終了します。ページの再読み込みを行うと、以下のようなページが表示されます。
このページ左上の「DIGITS」ロゴをクリックして、DIGITS「Home」ページに戻ります。
DIGITS 4 Model
DIGITS「Home」ページの「New Model」下の「Images」ボタンをクリックし、プルダウンメニューから「Object Detection」を選択します。
すると、以下の「New Object Detection Model」ページが表示されます。このページの左側の「Select Dataset」では、上で作成した「KITTI_S」を選択します。
中央の「Solver type」と「Base Learning Rate」に、それぞれAdamと0.0001を設定します。なお、VRAMが4GBの場合、「Batch size」と「Batch Accumulation」に、それぞれ2と5を入力します。
「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時間経過したところで、正常終了しました。
mAP (val)は、全データを用いたNVIDIAの(グラフ表示が変な)チュートリアルでも、55~60%くらいなので、約1/10のデータセットで、約50%であれば、十分な感じがします。
DIGITS 4 物体検出
「Test a single image」の「Upload image」に、kitti_data/raw/testing/image_2ディレクトリの000439.pngを指定して物体検出した結果が、この記事の最初の画像です。
また、「Test a list of images」の「Upload Image List」に、複数の画像のパスとファイル名を記載したtest_list.txtを指定して物体検出した結果が、下の図です。
まとめ
Ubuntu 14.04にインストールしたNVIDIA DIGITS 4で、物体検出(object detection)モデルを作成してみました。
GTX 960の場合、チュートリアル通りでは、1エポック1時間半掛かっていましたが、約1/10のデータセットを用いることで、30エポック約4時間(1エポック約8分)で、モデルを作成することができました。