NVIDIA DIGITSで犬の詳細画像分類モデルを作成してみた

digits

Stanford Dogs Datasetの一部(12カテゴリー・2,289枚)の犬の画像を使って、NVIDIAのDIGITS(Caffeバックエンド)で詳細画像分類(Fine-Grained Visual Categorization)モデルを作成してみました。

スポンサーリンク

データセット

TensorFlowのInception-v3でStanford Dogsを分類してみた
Stanford Dogs Datasetの120カテゴリーの犬の画像を使って、TensorFlowのInception-v3で詳細画像分類(Fine-Grained Visual Categorization)を実施してみました。

上の記事で使用したStanford Dogs Dataset(http://vision.stanford.edu/aditya86/ImageNetDogs/)の120カテゴリー・20,580枚の中から、今回はWordNet IDの小さな「n02085620-Chihuahua」から「n02088364-beagle」までの12カテゴリー・2,289枚を使用します。

以下のコマンドで、新たにdogsというディレクトリを作成し、

$ mkdir ~/dogs

Stanford Dogs Datasetの「n02085620-Chihuahua」から「n02088364-beagle」までの12個のディレクトリを、新たに作成したディレクトリの中にコピーします。

DIGITSでデータセットの作成

ここでは、以下の記事でインストールしたDIGITSを使用します。

NVIDIA DIGITS 3.0をインストールしてみた
NVIDIAからDeep Learning用トレーニングシステムのDIGITS 3.0がリリースされていたので、Ubuntu 14.04にインストールしてみました。

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

digits-home1

DIGITS「Home」ページの左側にある「New Dataset」下の「Images」ボタンをクリックし、プルダウンメニューから「Classification」を選択すると、「New Image Classification Dataset」 ページが表示されます。

このページで、下の図のように、
「Image Type」は、Color
「Image size」は、256 x 256
「Training Images」に、画像データセットへのパス(ここでは、/home/sora/dogs)
「Dataset Name」に、DIGITSにおけるデータセットの名前(ここでは、Dogs12)
を設定し、「Create」ボタンをクリックします。

dogs12

すると、データセットが作成され、データセットの作成が終了すると、以下のような表示になります。

dog12out

このページの左上の「DIGITS」ロゴをクリックすると、DIGITS「Home」ページに戻り、作成したデータセット(Dogs12)が表示されます。

digits-home2

DIGITSでモデルの学習

DIGITS「Home」ページの右側にある「New Model」下の「Images」ボタンをクリックし、プルダウンメニューから「Classification」を選択すると、「New Image Classification Model」 ページが表示されます。

このページで、下の図のように、
「Select Dataset」フィールドは、Dogs12
「Standard Networks」タブは、CaffeのAlexNet(ここでは、accuracy (train)を表示させるために、Custom Networkにしています)
「Model Name」に、DIGITSにおけるモデルの名前(ここでは、AlexNet_Dogs12)
を設定し、「Create」ボタンをクリックします。

alexnet-dogs12-1

すると、モデルの学習が開始されます。

(2016/07/17追記)
なお、DIGITSでトレーニング時の精度「accuracy (train)」を表示する方法は、以下の記事をご覧ください。

NVIDIA DIGITSでトレーニング時の精度を表示する方法
NVIDIA DIGITSでトレーニング時の精度が表示できたら良いと思いませんか?この記事では、その方法を実際の画面キャプチャーを使って紹介します。
Training epochsがデフォルトの30の場合、低火力のGTX 960でも、約6分で学習が終了しました。
しかし、グラフを見てみると、accuracy (train)とloss (train)が中途半端な状態で、Training epochsが足りないようです。

alexnet-dogs12-1out

上のモデルのTraining epochsを100に変更したモデル(ここでは、AlexNet_Dogs12_Epochs100)を新たに作成し、学習させてみます。

alexnet-dogs12-2

学習結果は、下の図のようになりました。
trainのaccuracyとlossだけ見ると、いい感じなのですが、30-60エポックあたりのval(validation)を見ると、accuracyは上昇せず、lossが増加しているので、過学習していそうな感じです。

alexnet-dogs12-2out

まとめ

Stanford Dogs Datasetの一部(12カテゴリー・2,289枚)の犬の画像を使って、NVIDIAのDIGITS(Caffeバックエンド)で詳細画像分類(Fine-Grained Visual Categorization)モデルを学習させてみたところ、過学習していそうな感じはありますが、accuracy (train)が95%位、accuracy (val)が45%位のモデルが作成できました。