ファインチューニングしたResNet101の実装

実装の流れ

  • データの前処理
  • 学習済みモデルの入手
  • 学習
  • 分類

データの前処理

(フォルダ構成が以下のようになっていない場合)ラベルリストと画像とラベルの書いたファイルからフォルダ構成を変更する。

mkdir assorted
python assort_files_to_label_dir.py -i data_cookpad/clf_train_images_labeled_1/ -o assorted -l data_cookpad/clf_category_master.tsv -p data_cookpad/clf_train_master.tsv
python assort_files_to_label_dir.py -i data_cookpad/clf_train_images_labeled_2/ -o assorted -l data_cookpad/clf_category_master.tsv -p data_cookpad/clf_train_master.tsv

フォルダ構成

--data_set
 |--category1
 | |-train0.jpg
 |    ...
 |--category2
 | |-train100.jpg
      ...

データを学習用と検証用に分割する。

python separate_train_val.py --root assorted/ --output_dir train_val_img --val_freq 10

整形されたデータで画像を256x256にリサイズし、ラベルリストを作成する。

python resize.py -i train_label.txt -o resized_train_imgs --rename 1 --label 1 --out_imglabel ./trainlabel_pairs.txt 
python resize.py -i val_label.txt -o resized_val_imgs --rename 1 --label 1 --out_imglabel ./vallabel_pairs.txt

平均画像を作成する。

python compute_mean.py trainlabel_pairs.txt --root . --output mean.npy

学習済みモデルの入手

以下のコマンドでresnetの学習済みモデルを入手したら、pretrained_models配下に入れる。

mkdir pretrained_models
wget https://www.dropbox.com/s/yqasroj1poru24u/ResNet101.model
mv ResNet101.model pretrained_models/

学習

python train_cookpad.py trainlabel_pairs.txt vallabel_pairs.txt --arch resnet_c --epoch 150 --gpu 0 --initmodel pretrained_models/ResNet101.model --loaderjob 4 --mean mean.npy --out result --output_model cookpad_resnet.h5 --output_optimizer optimizer_cookpad_resnet.h5

分類

リサイズしてそれをテスト用のフォルダに入れる。

python resize.py -i data_cookpad/clf_test_images_1/*.jpg -o resized_tests/
python resize.py -i data_cookpad/clf_test_images_2/*.jpg -o resized_tests/

画像を分類してcsvファイルに出力する。

python classify.py --gpu 0 --arch resnet_c --initmodel result/cookpad_resnet.h5 --img_list data_cookpad/clf_test.tsv --root resized_tests --mean mean.npy

参考

https://github.com/ta-oyama/chainer_tutorial https://github.com/yasunorikudo/chainer-ResNet