ついに評価のお話です。
これがないと、学習の意味がありません。
※今回は入出力のお話だけにして、次回に処理の中身のお話をしたいと思います。
実行モジュール
基本的に評価モジュールは自分で作成するのですが、Caffeにはちゃんとサンプルが付いています。
「classification.exe」がそうです。
ここではこれを説明していきます。
なお、ソースは「caffe\examples\cpp_classification」にあります。
引数
「classification.exe」のシンタックスは以下のようになっています。
classification deploy.prototxt network.caffemodel mean.binaryproto labels.txt img.jpg
では一つづつ説明していきます。
deploy.prototxt
評価用のモデル設定になります。
トレーニング用モデルとほぼ同じ設定を使用しますが、入力ファイルの設定の部分がちょっと違います。
layer {
name: "data"
type: "Input"
top: "data"
input_param { shape: { dim: 10 dim: 3 dim: 227 dim: 227 } }
}
「input_param」内の最初のdimはバッチサイズ、2番目が画像のチェンネル数(ここではRGB)、3番目4番目が評価を行う画像サイズ(実際の画像の一部)になります。
※このサンプルは1画像しか評価しないため、バッチサイズを1より大きくしても意味がありません
※画像サイズは「高さ」「幅」の順番です
network.cafffemodel
学習済みのモデルデータとなります。
「caffe_alexnet_train_iter_48000.caffemodel」みたいな感じの名前になっているかと思います。
ここに苦労して学習した結果(調整に調整を重ねたパラメータ値)が入っており、評価では順方向に処理するだけで答えが出てくるため、非常に早く処理が終わります。
ただし、読み込みに時間がかかります。
何度も評価を行う場合は、先に1回だけ読み込んでおくのがよいです。
mean.binaryproto
学習で使用した平均画像を評価でも使用します。
(このサンプルでは平均画像を使わないというのは無しのようですので、学習時にも平均画像を使うようにしてください)
labels.txt
画像データベースを作成する際に「LISTFILE」というものを指定したかと思います。
その際、全ての画像ファイルに「分類番号」を設定したはずです。
この分類番号を行番号として、分類名を記述したテキストファイルを用意します。
accordion
airplanes
anchor
ant
barrel
bass
beaver
binocular
bonsai
brain
...
Caffeで評価した結果は分類番号で帰ってくるのですが、それだと人間は理解できませんので、"このサンプルプログラムでは"、分類名に変換して表示するようになっています。
img.jpg
評価したい画像ファイル(JPEG以外でも大丈夫です)になります。
なお、学習したときと同じ画像サイズにしてください。
出力結果
今はデフォルトで、上位5つの候補(確率の高い順)が表示されます。
0.9917 - "airplanes"
0.0067 - "ferry"
0.0004 - "car_side"
0.0004 - "grand_piano"
0.0003 - "chair"
いくつ以上であれば確実とは言えませんが、2番目以降との差が大きいときはほぼ確実といってよいかと思います。
関連記事
C++プログラマがWindows上でCaffeを使ってDeep Learningするお話(1)
C++プログラマがWindows上でCaffeを使ってDeep Learningするお話(2)
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するお話(8)