はじめに
先のページで caffeを使ってシーン認識(8分類問題)を試みた。今回は、caffe が提供する pre-training モデルを用いて、同じ問題を考察する。
計算機環境
AmazonのEC2を利用した。インスタンス名は g2.2xlarge である。GPUを搭載したマシーンである。
データセット
データセットは前回と同じである。ただし、pre-trainingモデルに合わせるため、画像サイズを256$\times$256に、チャンネル数を3に変更した。
caffe用データの作成
ここも前回と同じである。 以下のコマンドにより caffe 用の入力データを作成する。 前回はグレー画像を扱ったのでコマンドオプションに -gray を付けたが、今回は3チャンネルなので -gray は付けない。
ネットワークの設計
caffeのソースコードを納めたディレクトリ
/home/ubuntu/buildspace/caffe-master/models/bvlc_reference_caffenetにある train_val.prototxt を下敷きにして以下のようなネットワーク構造を定義した(model/scene_recognition/train_val.prototxt)。 変更部分は、data 層と fc8 層の2つである(fc8 層を scene_fc8 層に置き換えた)。 また、このページの解説に従って、scene_fc8 層のパラメータ lr_mult を変更した。
solverの作成
訓練を行なうためのテキストファイル model/scene_recognition/solver.prototxt を以下のように記述した。caffe の提供するサンプルファイル(models/bvlc_reference_caffenet/solver.prototxt)を下敷きにした。 現在の test 画像の枚数は730枚、batch size を10としたので73(=test_iter)回で一通り画像を走査することになる。また、testの実行はtrainを500(=test_interval)回まわすごとに行なうようにした。
訓練
以下を実行する。 コマンドオプション -weights の引数として与えられている models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel がcaffeが提供するpre-trainingモデルである。上記のコマンドにより、大規模データであらかじめ作られた pre-training モデルを、私のデータで fine-tuning することができる。
結果
以下に結果を示す。
test画像: train画像: 縦軸はaccuracy(正解率)、横軸は iteration(繰り返し数)である。いまの場合、繰り返し数の総数が44238である。500回ごとにtest画像でテストするようにしたので、test画像の結果の横軸は89(=44238/500)まで表示されている。一方、 trainに対しては、73(=display)回ごとに出力するようにしたので、607(=44238/73)個の結果が表示されている。前回、test画像に対する正解率は88%であったが、今回は97%となり大幅に改善していることが分る。
検出器の作成
ここまでの計算で、ファイル scene_train_iter_40000.caffemodel ができている。ここには、fine-tuning によりパラメータの確定したネットワーク構造が納められている。このファイルから検出器を作るには、以下のようなdeploy.prototxt ファイルが必要である。 これは、先に定義した model/scene_recognition/train_val.prototxt のデータ層を取り除き を追加し、最終層にある loss 層と accuracy 層を取り除き を追加したものである。データ層の代わりに挿入した input_dim の意味は以下の通りである。
- input_dim: 10 --- バッチサイズ
- input_dim: 3 --- 入力画像のチャンネル数
- input_dim: 227 --- 入力画像の幅
- input_dim: 227 --- 入力画像の高さ
0 件のコメント:
コメントを投稿