今回は、学習データベース作成のお話。
概要
Caffeで学習を行うときは、以下の2種類のデータ(以下、「学習データベース」と呼びます)のどちらかから読み込むことになります。
- leveldb
- lmdb
これを作成するモジュールが「convert_imageset.exe」です。
※「lebeldb」「lmdb」についてはこことかここなどを参照してください
今回は複数の画像から学習データベースを作成することを想定して話を進めていきます。
引数
「convert_imageset.exe」のシンタックスは以下のようになっています。
convert_imageset [FLAGS] ROOTFORDER/ LISTFILE DB_NAME
FLAGS
代表的な引数は以下の通りです。
(全てを知りたい人は「convert_imageset -help」を実行)
FLAGS | 意味 | 設定例 |
---|---|---|
-backend | データベースの種類 | -backend lmdb |
-resize_height | 登録する画像の高さを指定 | -resize_height 256 |
-resize_width | 登録する画像の幅を指定 | -resize_width 256 |
-shuffle | 画像の順番をランダムに入れ替えるか(指定するとtrueになる) | -shuffle |
あらかじめ画像サイズをそろえておくのもよいですが、ここでそろえたほうが楽です。
ただしあまり大きくし過ぎると処理が重くなる(GPU使用の場合はエラーになることも)ので注意が必要です。
画像の順番をランダムに設定するのは、非常に重要です。
ROTFOLDER
用意した画像ファイルがあるフォルダ名を指定します。
最後の「/」を付け忘れないように。
このフォルダが基準となり、次の「LISTFILE」や「DB_NAME」にファイル名やフォルダ名を指定します。
LISTFILE
学習に使用する画像ファイルをすべて指定したテキストファイルを用意し、そのファイル名を指定します。(ROOTFOLDERからの相対パス)
フォーマットは、以下の2項目をスペース区切りで指定します。
- パス(ROOTFOLDERからの相対パス)
- 分類番号
こんな感じです。
data/segment0/image1.jpg 0
data/segment1/image1.jpg 1
分類ごとにフォルダ分けしておいた方が、作りやすいし、メンテナンスもしやすいです。
分類番号は0スタートです。
後で学習するときに、分類番号と分類名を関連付けるファイルを読み込むことになります。(1行目が0、2行目が1といった感じのファイルになります)
DB_NAME
学習データベースのフォルダ名(ファイル名ではない!)です。
こちらもROOTFOLDERからの相対パスで指定します。
その他
この学習データベースは、「トレーニング用」と「テスト用」の2種類用意します。
トレーニング用で学習を行い、テスト用で誤差率を計測します。
同じデータを使うと正しく精度がでませんのでご注意ください。
ファイル数の比率は5:1~10:1ぐらいがよいかと思います。
参考資料
http://caffe.berkeleyvision.org/
関連記事
C++プログラマがWindows上でCaffeを使ってDeep Learningするお話(1)
C++プログラマがWindows上でCaffeを使ってDeep Learningするお話(3)
C++プログラマがWindows上でCaffeを使ってDeep Learningするお話(4)
C++プログラマがWindows上でCaffeを使ってDeep Learningするお話(5)
C++プログラマがWindows上でCaffeを使ってDeep Learningするお話(6)
C++プログラマがWindows上でCaffeを使ってDeep Learningするお話(7)
C++プログラマがWindows上でCaffeを使ってDeep Learningするお話(8)