SSDで自分のデータセットを訓練する(VOC 2007フォーマット)


SSDで自分のデータセットを訓練する(VOC 2007フォーマット)
一.caffe環境の構成
ubunt 16.04下caffe環境インストール
二.ssdソースコードのダウンロード、コンパイル、テスト
(一)ソースコードのダウンロード
githubリンク
またはgit cloneを実行するhttps://github.com/weiliu89/caffe.git
(二)ソースコードのコンパイル
コンパイル中にpythonモジュールがいくつか欠けている可能性があります.プロンプトに従ってインストールします.
(1)Markfile構成の変更
参考ubunt 16.04下caffe環境インストールでMakefile.configを修正する
(2)pythonインタフェースのコンパイル
make -j8      ,    
make pycaffe

(3)訓練したモデルをダウンロードする
ダウンロードリンク元のリンクが必要な場合は、models_というファイル名の他のリンクを探してダウンロードできます.VGGNet_VOC0712_SSD_300 x 300.tar.gz、CAFFE_に解凍ROOT/ディレクトリの下
(4)VOC 2007データのダウンロード
cd $CAFFE_ROOT/data
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
tar -xvf VOCtrainval_11-May-2012.tar
tar -xvf VOCtrainval_06-Nov-2007.tar
tar -xvf VOCtest_06-Nov-2007.tar

(5)LMDB形式データセットファイルの生成
data/VOC 0712/でtrainval.txt,test.txt,and test_を生成name_size.txt inはcreate_を変更できますlist.shとcreate_Data.shは、自分のデータセットに対してLMDBファイルを生成する
cd $CAFFE_ROOT
./data/VOC0712/create_list.sh
./data/VOC0712/create_data.sh

生成されたtrainvalとtestデータはCAFFE_にあります.ROOT/data/VOCdevkit/VOC0712/lmdb/VOC0712_trainval_lmdbとCAFFE_ROOT/data/VOCdevkit/VOC0712/lmdb/VOC0712_test_lmdb
(三)テストソース
score_ssd_pascal.pyの中のtest_image_numは4952であるべきで、ソースプログラムは関連する誤りを報告して少し直すことができます
cd $CAFFE_ROOT
python examples/ssd/score_ssd_pascal.py

0.77*程度のMAPスコアが得られるはずで、モデルが正常に動作することを示しています.
三.SSDを用いて自分のデータセットを訓練する
(一)事前訓練パラメータ及びモデルのダウンロード
リンクのダウンロード
(二)データセットの作成
独自の画像データセットを作成する(VOC 2007形式)
作成したVOC 2007フォルダをdata/VOCdevkitフォルダの下に置き、なければ新しいVOCdevkitフォルダを作成する
(三)構成ファイルの修正
(1)修正$CAFFE_ROOT/data/$dataset_name/下create_list.shとcreate_Data.sh 2ファイルcreate_list.sh:
root_dir=$HOME/data/VOCdevkit/
sub_dir=ImageSets/Main
bash_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
for dataset in trainval test
do
dst_file=$bash_dir/$dataset.txt
if [ -f $dst_file ]
then
    rm -f $dst_file
fi
for name in VOC2007 VOC2012  #         $dataset_name

create_data.sh、データセットフォルダ名$dataset_name、このフォルダはcreate_を保存することです.list.shとcreate_Data.shの2つのファイルとlabelmapファイルの場所のフォルダ名は、VCOdevkitの下のデータセット名と一致することを推奨します.
data_root_dir="$HOME/data/VOCdevkit" #              
dataset_name="VOC0712"
mapfile="$root_dir/data/$dataset_name/labelmap_voc.prototxt"

(2)修正$CAFFE_ROOT/data/$dataset_name/下labelmap_voc.prototxt
name: "cat" # xml       
label: 1
display_name: "Cat" #          

(3)トレーニングファイル$CAFFE_の修正ROOT/data/example/ssd/ssd_pascal.py
  • データセットフォルダ名を変更すると、プログラムパスのVOC 0712があなたのデータセット名$dataset_に置き換えられます.name、そうでなければ変更する必要はありません.元のモデルを上書きしないように、データセット名
  • を変更することをお勧めします.
  • カテゴリ数:num_classes = open(label_map_file).read().count(‘label’)
  • テスト画像数:num_test_image = len(open(name_size_file).readlines())

  • (4)$CAFFE_ROOT/example/ssd/ssd_pascal.pyパラメータ設定
  • solver_param中’max_iter’:120000、最大反復回数
  • を表す
  • solver_param中’test_interval’:10000、モデル効果の間隔反復回数を評価するたびに、収束するかどうかおよびオーバーフィットするかどうかを観察するために使用される
  • その他のパラメータは、
  • を適宜変更することができる.
    (四)訓練を開始する
    cd $CAFFE_ROOT
    python example/ssd/ssd_pascal.py
    

    訓練に成功したらssd_pascal.pyファイルのjob_dirパスの下でログファイルを生成し、snapshot_dir経路の下にブレークポイントモデルが保存され、訓練が中断すると最大反復回数から訓練が継続されます.
    (五)テスト訓練結果
    (1)example/ssd/score_の修正ssd_pascal.pyファイルの変更方法とssd_pascal.pyはdet_で同じですeval_param追加'show_per_class_result’:Trueパラメータは各カテゴリのAP(average precision)を現実化することができる
    (2)テストを行う
    cd $CAFFE_ROOT
    python example/ssd/score_ssd_pascal.py
    

    四.かつて現れたバグ
    (1)原ファイル中num_classesとnum_test_イメージが常に変動すると修正を忘れてエラーが発生しやすく、labelmapとtestfileを読み取ることで自動的に対応する数値を得ることができます
    (2)test_の修正batch_sizeはテスト速度に影響しないようです