githubで公開されているtensorflow/models/research/slimを使って、独自データセットをgoogle cloud mlでトレーニング
https://github.com/tensorflow/models.git
データセットをTFRecordへ変更
独自データセットは3クラス(Mont_Saint_Michel、Sagrada_Familia、Taj_Mahal)
1クラス200枚、合計600枚
download_and_convert_data.pyを使用して独自データをTFRecord形式へ変換
ここで画像をシャッフルしてからtrainとtestに分けられる
・train 500枚
・test 100枚
訓練済みモデルダウンロード
inception V3で事前に訓練されたモデルを微調整するので、訓練済みモデルをダウンロード
$ CHECKPOINT_DIR=/tmp/checkpoints
$ mkdir ${CHECKPOINT_DIR}
$ wget http://download.tensorflow.org/models/inception_v3_2016_08_28.tar.gz
$ tar -xvf inception_v3_2016_08_28.tar.gz
$ mv inception_v3.ckpt ${CHECKPOINT_DIR}
$ rm inception_v3_2016_08_28.tar.gz
トレーニング
gcloud ml-engine jobs submit training $JOB_NAME \
--job-dir $OUTPUT_PATH \
--runtime-version 1.4 \
--module-name slim.train_image_classifier \
--package-path slim/ \
--region $REGION \
--scale-tier BASIC_GPU \
-- \
--train_dir=${OUTPUT_PATH} \
--dataset_dir=${DATASET_DIR} \
--dataset_name=flowers \
--dataset_split_name=train \
--model_name=inception_v3 \
--checkpoint_path=${CHECKPOINT_PATH} \
--checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits \
--trainable_scopes=InceptionV3/Logits,InceptionV3/AuxLogits
lossが下がらなくなってきたので途中でジョブを停止
テスト
最後のチェックポイントを指定してeval_image_classifier.pyを使ってテスト
gcloud ml-engine jobs submit training $JOB_NAME \
--job-dir $OUTPUT_PATH \
--runtime-version 1.4 \
--module-name slim.eval_image_classifier \
--package-path slim/ \
--region $REGION \
--scale-tier BASIC_GPU \
-- \
--alsologtostderr \
--checkpoint_path=$OUTPUT_PATH/model.ckpt-1450 \
--dataset_dir=${DATASET_DIR} \
--dataset_name=flowers \
--dataset_split_name=validation \
--model_name=inception_v3
Test Accuracy 94%
kerasが公開しているInceptionV3 imagenet訓練済みモデルでのトレーニングと比べると、こちらの方が精度が高く出た。
https://qiita.com/Ryota7101/items/f1103ba4969113e65adf
チェックポイントをsavedmodelへ変換
訓練したモデルをGCPへデプロイしたいので、savedmodelへ変換し、デプロイ
inputのnode名が間違っていた為、デプロイ出来ず
微調整時のinput nodeの調べ方がわからないので、ここで中止
pbファイルをGCPにデプロイ、予測までを行う簡単な方法があればご教授ください・・・