FC2カウンター FPGAの部屋 Edge TPU
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Edge TPU の”Retrain an image classification model”をやってみる5(モデル全体を転移学習2)

”Edge TPU の”Retrain an image classification model”をやってみる4(モデル全体を転移学習)”の続き。

前回は、モデル全体を転移学習して、最後の層だけ転移学習を行って、評価した。今回は、モデルを”Edge TPU Model Compiler”でコンパイルしてEdge TPU 用のモデルにしてから、推論を試してみよう。

最初に transfer_learn の model ディレクトリをリネームする。
cd transfer_learn/
mv models models_few_layers
ls
cd ..

Edge_TPU_52_190315.png

学習時のチェックポイントのファイルを tflite に変換する。
./convert_checkpoint_to_edgetpu_tflite.sh --network_type mobilenet_v1 --checkpoint_num 300
Edge_TPU_53_190315.png

transfer_learn/model ディレクトリを生成し、その下に model ディレクトリが生成された。
model ディレクトリの下に、output_tflite_graph.tflite が生成されている。(ホストパソコンでの作業)
そのoutput_tflite_graph.tflite を”Edge TPU Model Compiler”にドラックアンドドロップし、2つのチェックボックスにチェックを入れる。すると Edge TPU 用にコンパイルされる。
Edge_TPU_55_190315.png

Download model ボタンをクリックして、コンパイル済みのモデルをダウンロードする。モデルの名前は、output_tflite_graph_1552679795_edgetpu.tflite だった。
output_tflite_graph_1552679795_edgetpu.tflite を ~/python-tflite-source/edgetpu/classify/models/ に output_tflite_graph_edgetpu.tflite という名前で移動する。(ホストパソコンでの作業)
sudo mv ~/ダウンロード/temp/output_tflite_graph_1552679795_edgetpu.tflite ~/python-tflite-source/edgetpu/classify/models/output_tflite_graph_edgetpu.tflite
Edge_TPU_56_190315.png

Edge_TPU_57_190315.png

Docker コンテナに戻って、transfer_learn/models/labels.txt を編集し、デリミタの : をスペースに変更する。
vim transfer_learn/models/labels.txt
Edge_TPU_58_190315.png

flower.jpg を推論してみよう。
python3 demo/classify_image.py \
--model classify/models/output_tflite_graph_edgetpu.tflite \
--label classify/models/labels.txt \
--image classify/flower.jpg

Edge_TPU_59_190316.png

labels.txt の中では、ひまわりに近かったのかもしれないが実際はゆりである。
Edge_TPU_43_190314.jpg

最後の層だけ転移学習では、最初の選択はひまわりだが、ひまわりの確率は 65 % で、デージーとかもそれなりの確率がある。しかし、全部の層を転移学習では、94 % でひまわりと言っている。最後の層だけ転移学習の flower.jpg の推論結果を示す。
Edge_TPU_44_190314.png

次に flower2.jpg を推論してみよう。
python3 demo/classify_image.py \
--model classify/models/output_tflite_graph_edgetpu.tflite \
--label classify/models/labels.txt \
--image classify/flower2.jpg

Edge_TPU_60_190316.png

こちらは、ひまわりの写真なので、 99.6 % ひまわりということだ。
Edge_TPU_45_190314.jpg

こちらも、最後の層だけ転移学習の flower.jpg の推論結果を示す。
Edge_TPU_46_190314.png

ひまわりの確率は、 94.9 % だった。

次に、flower3.jpg の推論をやってみよう。これは、チューリップの写真だ。
python3 demo/classify_image.py \
--model classify/models/output_tflite_graph_edgetpu.tflite \
--label classify/models/labels.txt \
--image classify/flower3.jpg

Edge_TPU_61_190316.png

99.6 % の確率でチューリップということだ。
Edge_TPU_47_190314.jpg

最後の層だけ転移学習の flower.jpg の推論結果を示す。
Edge_TPU_48_190314.png

チューリップの確率が 99.2 % だった。
  1. 2019年03月18日 04:32 |
  2. Edge TPU
  3. | トラックバック:0
  4. | コメント:0

Edge TPU の”Retrain an image classification model”をやってみる4(モデル全体を転移学習)

Edge TPU の”Retrain an image classification model”をやってみる3(花の写真を推論)”の続き。

前回は、画像分類モデルを最後の層だけ転移学習したモデルを評価するために、Edge TPU を使用して、推論してみた。今回は、モデル全体を転移学習して、最後の層だけ転移学習した場合とどのくらい精度に違いがあるか?を確かめてみよう。

モデル全体の転移学習を行った。
./start_training.sh --network_type mobilenet_v1 --train_whole_model true
Edge_TPU_49_190315.png

mkdir: cannot create directory '/tensorflow/models/research/slim/transfer_learn/train': File exists

エラーになった。 transfer_learn/train がすでに存在することがだめらしい。
そこで、 transfer_learn/train を train_last_few_layers にリネームしよう。
cd transfer_learn/
mv train train_last_few_layers
cd ..

Edge_TPU_50_190315.png

もう一度
./start_training.sh --network_type mobilenet_v1 --train_whole_model true
今度はうまく行った。
Edge_TPU_51_190315.png

global step 300 で loss が 0.2972 だった。最後の層だけ転移学習した場合の loss は 0.6365 だった。

ログを示す。

root@abedb1f7136c:/tensorflow/models/research/slim# ./start_training.sh --network_type mobilenet_v1 --train_whole_model true
+ network_type=mobilenet_v1
+ train_whole_model=false
+ train_steps=300
+ quantize_delay=100
+ [[ 4 -gt 0 ]]
+ case "$1" in
+ network_type=mobilenet_v1
+ shift 2
+ [[ 2 -gt 0 ]]
+ case "$1" in
+ train_whole_model=true
+ shift 2
+ [[ 0 -gt 0 ]]
+ source /tensorflow/models/research/slim/constants.sh
++ declare -A ckpt_link_map
++ declare -A ckpt_name_map
++ declare -A image_size_map
++ declare -A scopes_map
++ declare -A input_tensors_map
++ declare -A output_tensors_map
++ ckpt_link_map["mobilenet_v1"]=http://download.tensorflow.org/models/mobilenet_v1_2018_08_02/mobilenet_v1_1.0_224_quant.tgz
++ ckpt_link_map["mobilenet_v2"]=http://download.tensorflow.org/models/tflite_11_05_08/mobilenet_v2_1.0_224_quant.tgz
++ ckpt_link_map["inception_v1"]=http://download.tensorflow.org/models/inception_v1_224_quant_20181026.tgz
++ ckpt_link_map["inception_v2"]=http://download.tensorflow.org/models/inception_v2_224_quant_20181026.tgz
++ ckpt_link_map["inception_v3"]=http://download.tensorflow.org/models/tflite_11_05_08/inception_v3_quant.tgz
++ ckpt_link_map["inception_v4"]=http://download.tensorflow.org/models/inception_v4_299_quant_20181026.tgz
++ ckpt_name_map["mobilenet_v1"]=mobilenet_v1_1.0_224_quant
++ ckpt_name_map["mobilenet_v2"]=mobilenet_v2_1.0_224_quant
++ ckpt_name_map["inception_v1"]=inception_v1_224_quant
++ ckpt_name_map["inception_v2"]=inception_v2_224_quant
++ ckpt_name_map["inception_v3"]=inception_v3_quant
++ ckpt_name_map["inception_v4"]=inception_v4_299_quant
++ image_size_map["mobilenet_v1"]=224
++ image_size_map["mobilenet_v2"]=224
++ image_size_map["inception_v1"]=224
++ image_size_map["inception_v2"]=224
++ image_size_map["inception_v3"]=299
++ image_size_map["inception_v4"]=299
++ scopes_map["mobilenet_v1"]=MobilenetV1/Logits
++ scopes_map["mobilenet_v2"]=MobilenetV2/Logits
++ scopes_map["inception_v1"]=InceptionV1/Logits
++ scopes_map["inception_v2"]=InceptionV2/Logits
++ scopes_map["inception_v3"]=InceptionV3/Logits,InceptionV3/AuxLogits
++ scopes_map["inception_v4"]=InceptionV4/Logits,InceptionV4/AuxLogits
++ input_tensors_map["mobilenet_v1"]=input
++ input_tensors_map["mobilenet_v2"]=input
++ input_tensors_map["inception_v1"]=input
++ input_tensors_map["inception_v2"]=input
++ input_tensors_map["inception_v3"]=input
++ input_tensors_map["inception_v4"]=input
++ output_tensors_map["mobilenet_v1"]=MobilenetV1/Predictions/Reshape_1
++ output_tensors_map["mobilenet_v2"]=MobilenetV2/Predictions/Softmax
++ output_tensors_map["inception_v1"]=InceptionV1/Logits/Predictions/Softmax
++ output_tensors_map["inception_v2"]=InceptionV2/Predictions/Reshape_1
++ output_tensors_map["inception_v3"]=InceptionV3/Predictions/Reshape_1
++ output_tensors_map["inception_v4"]=InceptionV4/Logits/Predictions
++ SLIM_DIR=/tensorflow/models/research/slim
++ LEARN_DIR=/tensorflow/models/research/slim/transfer_learn
++ CKPT_DIR=/tensorflow/models/research/slim/transfer_learn/ckpt
++ DATASET_DIR=/tensorflow/models/research/slim/transfer_learn/flowers
++ TRAIN_DIR=/tensorflow/models/research/slim/transfer_learn/train
++ OUTPUT_DIR=/tensorflow/models/research/slim/transfer_learn/models
+ mkdir /tensorflow/models/research/slim/transfer_learn/train
+ image_size=224
+ ckpt_name=mobilenet_v1_1.0_224_quant
+ scopes=MobilenetV1/Logits
+ [[ true == \t\r\u\e ]]
+ echo 'TRAINING all layers ...'
TRAINING all layers ...
+ python train_image_classifier.py --train_dir=/tensorflow/models/research/slim/transfer_learn/train --dataset_name=flowers --dataset_split_name=train --dataset_dir=/tensorflow/models/research/slim/transfer_learn/flowers --model_name=mobilenet_v1 --checkpoint_path=/tensorflow/models/research/slim/transfer_learn/ckpt/mobilenet_v1_1.0_224_quant.ckpt --max_number_of_steps=300 --batch_size=100 --learning_rate=0.01 --learning_rate_decay_type=fixed --save_interval_secs=60 --save_summaries_secs=60 --log_every_n_steps=20 --optimizer=sgd --weight_decay=0.00004 --quantize_delay=100 --clone_on_cpu --train_image_size=224 --checkpoint_exclude_scopes=MobilenetV1/Logits
WARNING:tensorflow:From train_image_classifier.py:413: create_global_step (from tensorflow.contrib.framework.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Please switch to tf.train.create_global_step
WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/python/training/input.py:187: __init__ (from tensorflow.python.training.queue_runner_impl) is deprecated and will be removed in a future version.
Instructions for updating:
To construct input pipelines, use the `tf.data` module.
WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/python/training/input.py:187: add_queue_runner (from tensorflow.python.training.queue_runner_impl) is deprecated and will be removed in a future version.
Instructions for updating:
To construct input pipelines, use the `tf.data` module.
WARNING:tensorflow:From train_image_classifier.py:481: softmax_cross_entropy (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.
Instructions for updating:
Use tf.losses.softmax_cross_entropy instead. Note that the order of the logits and labels arguments has been changed.
WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:398: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.
Instructions for updating:

Future major versions of TensorFlow will allow gradients to flow
into the labels input on backprop by default.

See `tf.nn.softmax_cross_entropy_with_logits_v2`.

WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:399: compute_weighted_loss (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.
Instructions for updating:
Use tf.losses.compute_weighted_loss instead.
WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:147: add_loss (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.
Instructions for updating:
Use tf.losses.add_loss instead.
INFO:tensorflow:Fine-tuning from /tensorflow/models/research/slim/transfer_learn/ckpt/mobilenet_v1_1.0_224_quant.ckpt
WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/contrib/slim/python/slim/learning.py:737: __init__ (from tensorflow.python.training.supervisor) is deprecated and will be removed in a future version.
Instructions for updating:
Please switch to tf.train.MonitoredTrainingSession
2019-03-14 19:43:50.952328: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
INFO:tensorflow:Restoring parameters from /tensorflow/models/research/slim/transfer_learn/ckpt/mobilenet_v1_1.0_224_quant.ckpt
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Starting Session.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Starting Queues.
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:Recording summary at step 0.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.0375885
INFO:tensorflow:Recording summary at step 2.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.0673802
INFO:tensorflow:Recording summary at step 6.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.0499222
INFO:tensorflow:Recording summary at step 9.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.0500195
INFO:tensorflow:Recording summary at step 13.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.0667236
INFO:tensorflow:Recording summary at step 16.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.0500385
INFO:tensorflow:global step 20: loss = 0.7637 (21.146 sec/step)
INFO:tensorflow:Recording summary at step 20.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.0666414
INFO:tensorflow:Recording summary at step 23.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.0500105
INFO:tensorflow:Recording summary at step 26.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.0665609
INFO:tensorflow:Recording summary at step 30.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 33.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 36.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 39.
INFO:tensorflow:global step 40: loss = 0.7104 (25.263 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 43.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 45.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 49.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 52.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 56.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 59.
INFO:tensorflow:global step 60: loss = 0.5362 (20.882 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 62.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 65.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 68.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 71.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 75.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 78.
INFO:tensorflow:global step 80: loss = 0.5970 (15.896 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 81.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 84.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 88.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 91.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 95.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 98.
INFO:tensorflow:global step 100: loss = 0.5090 (14.821 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 102.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 105.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 108.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 112.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 115.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 119.
INFO:tensorflow:global step 120: loss = 0.4690 (15.645 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 122.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 125.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 128.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 131.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 134.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 138.
INFO:tensorflow:global step 140: loss = 0.2592 (15.237 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 141.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 144.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 147.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 151.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 154.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 157.
INFO:tensorflow:global step 160: loss = 0.3922 (14.742 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 161.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 164.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 168.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 171.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 175.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 178.
INFO:tensorflow:global step 180: loss = 0.2914 (14.689 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 182.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 185.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 189.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 192.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 196.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 199.
INFO:tensorflow:global step 200: loss = 0.5038 (22.475 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 203.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 206.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 210.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 213.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 217.
INFO:tensorflow:global step 220: loss = 0.3047 (15.426 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 220.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 223.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 227.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 230.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 233.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 236.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global step 240: loss = 0.3607 (24.436 sec/step)
INFO:tensorflow:Recording summary at step 240.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 243.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 246.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 249.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 252.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 256.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 259.
INFO:tensorflow:global step 260: loss = 0.2697 (23.522 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 263.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 266.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 270.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 273.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 277.
INFO:tensorflow:global step 280: loss = 0.2771 (14.920 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 280.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 284.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 287.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 290.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 294.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 297.
INFO:tensorflow:global step 300: loss = 0.2972 (14.734 sec/step)
INFO:tensorflow:Stopping Training.
INFO:tensorflow:Finished training! Saving model to disk.


評価を行った。
./run_evaluation.sh --network_type mobilenet_v1
Edge_TPU_62_190316.png

eval/Accuracy[0.8575] だった。最後の層だけ転移学習の場合は、eval/Accuracy[0.75] だったので、精度も良くなっているようだ。
  1. 2019年03月17日 08:44 |
  2. Edge TPU
  3. | トラックバック:0
  4. | コメント:0

Edge TPU の”Retrain an image classification model”をやってみる3(花の写真を推論)

Edge TPU の”Retrain an image classification model”をやってみる2(転移学習したモデルをEdge TPU 用にコンパイル)”の続き。

前回は、画像分類モデルを最後の層だけ転移学習した結果をEdge TPU Model Compiler でコンパイルして、Edge TPU 用のモデルを作った。今回はそのモデルを評価してみよう。実際にEdge TPU を使用して、推論してみた。

モデルを評価するために、花の写真を取得する。Open Images Datasetから無料で入手できる画像を wget する。
ホストパソコンで次のコマンドを起動した。
cd ~/python-tflite-source/edgetpu/classify/
wget https://c2.staticflickr.com/9/8374/8519435096_45e27efd0d_o.jpg -O flower.jpg

Edge_TPU_40_190314.png

flower.jpg ができた。

Docker コンテナで transfer_learn/models/labels.txt を編集する。
Edge_TPU_41_190314.png

数字の後の : をスペースに入れ替えた。
Edge_TPU_42_190314.png

ホストパソコンに戻って、flower.jpg を推論してみよう。
python3 demo/classify_image.py \
--model classify/models/output_tflite_graph_edgetpu.tflite \
--label classify/models/labels.txt \
--image classify/flower.jpg

Edge_TPU_44_190314.png

ひまわり(sunflowers)ということなのだが、実際はゆりの花だ。
Edge_TPU_43_190314.jpg

分類に lily が無いので、著作権フリーのひまわりの写真を pxhere から持ってきた。それを flower2.jpg にセーブした。
flower2.jpg を推論してみよう。
python3 demo/classify_image.py \
--model classify/models/output_tflite_graph_edgetpu.tflite \
--label classify/models/labels.txt \
--image classify/flower2.jpg

Edge_TPU_46_190314.png

今度は、ひまわりの確率が 94.9 % だった。
flower2.jpg を示す。
Edge_TPU_45_190314.jpg

次に、チューリップの写真をpxhere から持ってきた。それを flower3.jpg にセーブした。
flower3.jpg を推論してみよう。
python3 demo/classify_image.py \
--model classify/models/output_tflite_graph_edgetpu.tflite \
--label classify/models/labels.txt \
--image classify/flower3.jpg

Edge_TPU_48_190314.png

チューリップの確率が 99.2 % だった。
flower3.jpg を示す。
Edge_TPU_47_190314.jpg
  1. 2019年03月16日 03:12 |
  2. Edge TPU
  3. | トラックバック:0
  4. | コメント:0

Edge TPU の”Retrain an image classification model”をやってみる2(転移学習したモデルをEdge TPU 用にコンパイル)

Edge TPU の”Retrain an image classification model”をやってみる1”の続きをやってみよう。画像分類モデルを再学習する。最後の層だけ転移学習したところまでやったので、その続きをやってみよう。

転移学習をしている途中に、TensorBoard で状況を見ようということで、ターミナルを起動して、docker exec で現在起動しているDocker コンテナに接続して、TensorBoard を起動する。
docker exec -it edgetpu-classify /bin/bash
tensorboard --logdir=./transfer_learn/train/

edgetpu-classify は現在起動してるDocker コンテナの名前である。
Edge_TPU_29_190313.png

TensorBoard の表示の一部を示す。
Edge_TPU_30_190313.png

転移学習が終了したので、ターミナルを新しく起動しないで、最後のチェックポイントの性能評価を実行する。
./run_evaluation.sh --network_type mobilenet_v1
Edge_TPU_31_190313.png

精度は 0.75 だった。

Edge TPU 用にモデルをコンパイルしよう。
チェックポイント300 を指定して TensorFlow Liteに変換する。
./convert_checkpoint_to_edgetpu_tflite.sh --network_type mobilenet_v1 --checkpoint_num 300
Edge_TPU_32_190313.png

すると、Docker コンテナ上の /tensorflow/models/research/slim/transfer_learn/models/ に output_tflite_graph.tflite が出力される。これは、ホストパソコンの ~/python-tflite-source/edgetpu/classify/models/ に出力されている。
Edge_TPU_33_190313.png

ホストパソコンでEdge TPU Model Compiler ページを開く。
Upload your model に output_tflite_graph.tflite をドラックアンドドロップする。
”I have read and acknowledged Google's Terms of Service.”と”I agree that my model will only be used for applications that follow Google's AI Principles.”のチェックボックスにチェックを入れる。
Edge_TPU_34_190313.png

するとコンパイルが始まる。
Edge_TPU_35_190313.png

Model successfully compiled したら、Download model をクリックしてコンパイル済みモデルをダウンロードする。
Edge_TPU_36_190313.png

~/ダウンロード/temp に output_tflite_graph_1552476979_edgetpu.tflite をダウンロードした。
Edge_TPU_37_190313.png

output_tflite_graph_1552476979_edgetpu.tflite を ~/python-tflite-source/edgetpu/classify/models/ にコピーする。(ホストパソコン側です)
cd ダウンロード/temp
sudo mv output_tflite_graph_1552476979_edgetpu.tflite ~/python-tflite-source/edgetpu/classify/models/

Edge_TPU_38_190314.png

ホストパソコンで output_tflite_graph_1552476979_edgetpu.tflite の名前を output_tflite_graph_edgetpu.tflite に変更した。
cd ~/python-tflite-source/edgetpu/classify/models/
sudo mv output_tflite_graph_1552476979_edgetpu.tflite output_tflite_graph_edgetpu.tflite

するとDocker コンテナでも output_tflite_graph_edgetpu.tflite が見えている。
Edge_TPU_39_190314.png
  1. 2019年03月15日 04:30 |
  2. Edge TPU
  3. | トラックバック:0
  4. | コメント:0

Edge TPU の”Retrain an image classification model”をやってみる1(画像分類モデルを転移学習)

Corel Beta の”TensorFlow models on the Edge TPU”のリンクに”Retrain an image classification model”があったので、やってみようと思う。

このチュートリアルでは、量子化された MobileNet V1モデルを再学習してさまざまな種類の花を認識する方法をやってみるそうだ。
具体的には転移学習で、最後の層だけの再学習と全部の層の再学習の2つを試す事ができるそうだ。また、Docker を使ってチュートリアルを実行する手順になっているのも魅力的だ。まずは、最後の層だけ再学習をやってみよう。

まずは、CLASSIFY_DIR を定義しよう。CLASSIFY_DIR は ~/python-tflite-source/edgetpu/classify に設定する。
export CLASSIFY_DIR=/home/masaaki/python-tflite-source/edgetpu/classify

~/python-tflite-source/edgetpu/ ディレクトリの下に classify ディレクトリを生成する。
mkdir classify
cd classify


Docker ファイルをダウンロードする。
wget -O Dockerfile "http://storage.googleapis.com/cloud-iot-edge-pretrained-models/docker/classify_docker"
Edge_TPU_24_190312.png

docker build を行った。
docker build - < Dockerfile --tag classify-tutorial
Edge_TPU_25_190312.png

Docker コンテナを起動する。
docker run --name edgetpu-classify \
--rm -it --privileged -p 6006:6006 \
--mount type=bind,src=${CLASSIFY_DIR},dst=/tensorflow/models/research/slim/transfer_learn \
classify-tutorial

実行すると

root@abedb1f7136c:/tensorflow/models/research/slim#

のプロンプトが表示された。
Edge_TPU_27_190313.png

flowersデータセットをダウンロードしてTFRecord形式に変換する必要があるそうだ。
./prepare_checkpoint_and_dataset.sh --network_type mobilenet_v1
Edge_TPU_28_190313.png

ログを示す。

root@abedb1f7136c:/tensorflow/models/research/slim# ./prepare_checkpoint_and_dataset.sh --network_type mobilenet_v1
+ network_type=mobilenet_v1
+ [[ 2 -gt 0 ]]
+ case "$1" in
+ network_type=mobilenet_v1
+ shift 2
+ [[ 0 -gt 0 ]]
+ source /tensorflow/models/research/slim/constants.sh
++ declare -A ckpt_link_map
++ declare -A ckpt_name_map
++ declare -A image_size_map
++ declare -A scopes_map
++ declare -A input_tensors_map
++ declare -A output_tensors_map
++ ckpt_link_map["mobilenet_v1"]=http://download.tensorflow.org/models/mobilenet_v1_2018_08_02/mobilenet_v1_1.0_224_quant.tgz
++ ckpt_link_map["mobilenet_v2"]=http://download.tensorflow.org/models/tflite_11_05_08/mobilenet_v2_1.0_224_quant.tgz
++ ckpt_link_map["inception_v1"]=http://download.tensorflow.org/models/inception_v1_224_quant_20181026.tgz
++ ckpt_link_map["inception_v2"]=http://download.tensorflow.org/models/inception_v2_224_quant_20181026.tgz
++ ckpt_link_map["inception_v3"]=http://download.tensorflow.org/models/tflite_11_05_08/inception_v3_quant.tgz
++ ckpt_link_map["inception_v4"]=http://download.tensorflow.org/models/inception_v4_299_quant_20181026.tgz
++ ckpt_name_map["mobilenet_v1"]=mobilenet_v1_1.0_224_quant
++ ckpt_name_map["mobilenet_v2"]=mobilenet_v2_1.0_224_quant
++ ckpt_name_map["inception_v1"]=inception_v1_224_quant
++ ckpt_name_map["inception_v2"]=inception_v2_224_quant
++ ckpt_name_map["inception_v3"]=inception_v3_quant
++ ckpt_name_map["inception_v4"]=inception_v4_299_quant
++ image_size_map["mobilenet_v1"]=224
++ image_size_map["mobilenet_v2"]=224
++ image_size_map["inception_v1"]=224
++ image_size_map["inception_v2"]=224
++ image_size_map["inception_v3"]=299
++ image_size_map["inception_v4"]=299
++ scopes_map["mobilenet_v1"]=MobilenetV1/Logits
++ scopes_map["mobilenet_v2"]=MobilenetV2/Logits
++ scopes_map["inception_v1"]=InceptionV1/Logits
++ scopes_map["inception_v2"]=InceptionV2/Logits
++ scopes_map["inception_v3"]=InceptionV3/Logits,InceptionV3/AuxLogits
++ scopes_map["inception_v4"]=InceptionV4/Logits,InceptionV4/AuxLogits
++ input_tensors_map["mobilenet_v1"]=input
++ input_tensors_map["mobilenet_v2"]=input
++ input_tensors_map["inception_v1"]=input
++ input_tensors_map["inception_v2"]=input
++ input_tensors_map["inception_v3"]=input
++ input_tensors_map["inception_v4"]=input
++ output_tensors_map["mobilenet_v1"]=MobilenetV1/Predictions/Reshape_1
++ output_tensors_map["mobilenet_v2"]=MobilenetV2/Predictions/Softmax
++ output_tensors_map["inception_v1"]=InceptionV1/Logits/Predictions/Softmax
++ output_tensors_map["inception_v2"]=InceptionV2/Predictions/Reshape_1
++ output_tensors_map["inception_v3"]=InceptionV3/Predictions/Reshape_1
++ output_tensors_map["inception_v4"]=InceptionV4/Logits/Predictions
++ SLIM_DIR=/tensorflow/models/research/slim
++ LEARN_DIR=/tensorflow/models/research/slim/transfer_learn
++ CKPT_DIR=/tensorflow/models/research/slim/transfer_learn/ckpt
++ DATASET_DIR=/tensorflow/models/research/slim/transfer_learn/flowers
++ TRAIN_DIR=/tensorflow/models/research/slim/transfer_learn/train
++ OUTPUT_DIR=/tensorflow/models/research/slim/transfer_learn/models
+ echo 'PREPARING checkpoint ...'
PREPARING checkpoint ...
+ mkdir -p /tensorflow/models/research/slim/transfer_learn
+ mkdir /tensorflow/models/research/slim/transfer_learn/ckpt
+ cd /tensorflow/models/research/slim/transfer_learn/ckpt
+ ckpt_link=http://download.tensorflow.org/models/mobilenet_v1_2018_08_02/mobilenet_v1_1.0_224_quant.tgz
+ ckpt_name=mobilenet_v1_1.0_224_quant
+ wget -O mobilenet_v1_1.0_224_quant.tgz http://download.tensorflow.org/models/mobilenet_v1_2018_08_02/mobilenet_v1_1.0_224_quant.tgz
--2019-03-12 11:22:56--  http://download.tensorflow.org/models/mobilenet_v1_2018_08_02/mobilenet_v1_1.0_224_quant.tgz
Resolving download.tensorflow.org (download.tensorflow.org)... 172.217.25.208, 2404:6800:4004:818::2010
Connecting to download.tensorflow.org (download.tensorflow.org)|172.217.25.208|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 35069912 (33M) [application/x-compressed-tar]
Saving to: 'mobilenet_v1_1.0_224_quant.tgz'

mobilenet_v1_1.0_22 100%[===================>]  33.44M  9.83MB/s    in 3.4s    

2019-03-12 11:23:00 (9.83 MB/s) - 'mobilenet_v1_1.0_224_quant.tgz' saved [35069912/35069912]

+ tar zxvf mobilenet_v1_1.0_224_quant.tgz
./
./mobilenet_v1_1.0_224_quant.ckpt.index
./mobilenet_v1_1.0_224_quant_eval.pbtxt
./mobilenet_v1_1.0_224_quant_info.txt
./mobilenet_v1_1.0_224_quant.ckpt.data-00000-of-00001
./mobilenet_v1_1.0_224_quant.tflite
./mobilenet_v1_1.0_224_quant.ckpt.meta
./mobilenet_v1_1.0_224_quant_frozen.pb
+ echo 'PREPARING dataset ...'
PREPARING dataset ...
+ mkdir /tensorflow/models/research/slim/transfer_learn/flowers
+ cd /tensorflow/models/research/slim
+ python download_and_convert_data.py --dataset_name=flowers --dataset_dir=/tensorflow/models/research/slim/transfer_learn/flowers
>> Downloading flower_photos.tgz 100.0%
Successfully downloaded flower_photos.tgz 228813984 bytes.
2019-03-12 11:23:25.559151: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
>> Converting image 3320/3320 shard 4
>> Converting image 350/350 shard 4

Finished converting the Flowers dataset!
+ echo 'CHECKPOINT and dataset available in /tensorflow/models/research/slim/transfer_learn'
CHECKPOINT and dataset available in /tensorflow/models/research/slim/transfer_learn



画像分類モデルを再学習する。最後の層だけを再学習してみよう。
./start_training.sh --network_type mobilenet_v1
Edge_TPU_26_190312.png

ログを示す。

root@abedb1f7136c:/tensorflow/models/research/slim# ./start_training.sh --network_type mobilenet_v1
+ network_type=mobilenet_v1
+ train_whole_model=false
+ train_steps=300
+ quantize_delay=100
+ [[ 2 -gt 0 ]]
+ case "$1" in
+ network_type=mobilenet_v1
+ shift 2
+ [[ 0 -gt 0 ]]
+ source /tensorflow/models/research/slim/constants.sh
++ declare -A ckpt_link_map
++ declare -A ckpt_name_map
++ declare -A image_size_map
++ declare -A scopes_map
++ declare -A input_tensors_map
++ declare -A output_tensors_map
++ ckpt_link_map["mobilenet_v1"]=http://download.tensorflow.org/models/mobilenet_v1_2018_08_02/mobilenet_v1_1.0_224_quant.tgz
++ ckpt_link_map["mobilenet_v2"]=http://download.tensorflow.org/models/tflite_11_05_08/mobilenet_v2_1.0_224_quant.tgz
++ ckpt_link_map["inception_v1"]=http://download.tensorflow.org/models/inception_v1_224_quant_20181026.tgz
++ ckpt_link_map["inception_v2"]=http://download.tensorflow.org/models/inception_v2_224_quant_20181026.tgz
++ ckpt_link_map["inception_v3"]=http://download.tensorflow.org/models/tflite_11_05_08/inception_v3_quant.tgz
++ ckpt_link_map["inception_v4"]=http://download.tensorflow.org/models/inception_v4_299_quant_20181026.tgz
++ ckpt_name_map["mobilenet_v1"]=mobilenet_v1_1.0_224_quant
++ ckpt_name_map["mobilenet_v2"]=mobilenet_v2_1.0_224_quant
++ ckpt_name_map["inception_v1"]=inception_v1_224_quant
++ ckpt_name_map["inception_v2"]=inception_v2_224_quant
++ ckpt_name_map["inception_v3"]=inception_v3_quant
++ ckpt_name_map["inception_v4"]=inception_v4_299_quant
++ image_size_map["mobilenet_v1"]=224
++ image_size_map["mobilenet_v2"]=224
++ image_size_map["inception_v1"]=224
++ image_size_map["inception_v2"]=224
++ image_size_map["inception_v3"]=299
++ image_size_map["inception_v4"]=299
++ scopes_map["mobilenet_v1"]=MobilenetV1/Logits
++ scopes_map["mobilenet_v2"]=MobilenetV2/Logits
++ scopes_map["inception_v1"]=InceptionV1/Logits
++ scopes_map["inception_v2"]=InceptionV2/Logits
++ scopes_map["inception_v3"]=InceptionV3/Logits,InceptionV3/AuxLogits
++ scopes_map["inception_v4"]=InceptionV4/Logits,InceptionV4/AuxLogits
++ input_tensors_map["mobilenet_v1"]=input
++ input_tensors_map["mobilenet_v2"]=input
++ input_tensors_map["inception_v1"]=input
++ input_tensors_map["inception_v2"]=input
++ input_tensors_map["inception_v3"]=input
++ input_tensors_map["inception_v4"]=input
++ output_tensors_map["mobilenet_v1"]=MobilenetV1/Predictions/Reshape_1
++ output_tensors_map["mobilenet_v2"]=MobilenetV2/Predictions/Softmax
++ output_tensors_map["inception_v1"]=InceptionV1/Logits/Predictions/Softmax
++ output_tensors_map["inception_v2"]=InceptionV2/Predictions/Reshape_1
++ output_tensors_map["inception_v3"]=InceptionV3/Predictions/Reshape_1
++ output_tensors_map["inception_v4"]=InceptionV4/Logits/Predictions
++ SLIM_DIR=/tensorflow/models/research/slim
++ LEARN_DIR=/tensorflow/models/research/slim/transfer_learn
++ CKPT_DIR=/tensorflow/models/research/slim/transfer_learn/ckpt
++ DATASET_DIR=/tensorflow/models/research/slim/transfer_learn/flowers
++ TRAIN_DIR=/tensorflow/models/research/slim/transfer_learn/train
++ OUTPUT_DIR=/tensorflow/models/research/slim/transfer_learn/models
+ mkdir /tensorflow/models/research/slim/transfer_learn/train
+ image_size=224
+ ckpt_name=mobilenet_v1_1.0_224_quant
+ scopes=MobilenetV1/Logits
+ [[ false == \t\r\u\e ]]
+ echo 'TRAINING last few layers ...'
TRAINING last few layers ...
+ python train_image_classifier.py --train_dir=/tensorflow/models/research/slim/transfer_learn/train --dataset_name=flowers --dataset_split_name=train --dataset_dir=/tensorflow/models/research/slim/transfer_learn/flowers --model_name=mobilenet_v1 --checkpoint_path=/tensorflow/models/research/slim/transfer_learn/ckpt/mobilenet_v1_1.0_224_quant.ckpt --max_number_of_steps=300 --batch_size=100 --learning_rate=0.01 --learning_rate_decay_type=fixed --save_interval_secs=60 --save_summaries_secs=60 --log_every_n_steps=20 --optimizer=sgd --weight_decay=0.00004 --quantize_delay=100 --clone_on_cpu --train_image_size=224 --checkpoint_exclude_scopes=MobilenetV1/Logits --trainable_scopes=MobilenetV1/Logits
WARNING:tensorflow:From train_image_classifier.py:413: create_global_step (from tensorflow.contrib.framework.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Please switch to tf.train.create_global_step
WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/python/training/input.py:187: __init__ (from tensorflow.python.training.queue_runner_impl) is deprecated and will be removed in a future version.
Instructions for updating:
To construct input pipelines, use the `tf.data` module.
WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/python/training/input.py:187: add_queue_runner (from tensorflow.python.training.queue_runner_impl) is deprecated and will be removed in a future version.
Instructions for updating:
To construct input pipelines, use the `tf.data` module.
WARNING:tensorflow:From train_image_classifier.py:481: softmax_cross_entropy (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.
Instructions for updating:
Use tf.losses.softmax_cross_entropy instead. Note that the order of the logits and labels arguments has been changed.
WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:398: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.
Instructions for updating:

Future major versions of TensorFlow will allow gradients to flow
into the labels input on backprop by default.

See `tf.nn.softmax_cross_entropy_with_logits_v2`.

WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:399: compute_weighted_loss (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.
Instructions for updating:
Use tf.losses.compute_weighted_loss instead.
WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:147: add_loss (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.
Instructions for updating:
Use tf.losses.add_loss instead.
INFO:tensorflow:Fine-tuning from /tensorflow/models/research/slim/transfer_learn/ckpt/mobilenet_v1_1.0_224_quant.ckpt
WARNING:tensorflow:From /usr/local/lib/python2.7/dist-packages/tensorflow/contrib/slim/python/slim/learning.py:737: __init__ (from tensorflow.python.training.supervisor) is deprecated and will be removed in a future version.
Instructions for updating:
Please switch to tf.train.MonitoredTrainingSession
2019-03-12 11:27:30.706494: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
INFO:tensorflow:Restoring parameters from /tensorflow/models/research/slim/transfer_learn/ckpt/mobilenet_v1_1.0_224_quant.ckpt
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Starting Session.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Starting Queues.
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:Recording summary at step 1.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.134039
INFO:tensorflow:Recording summary at step 9.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.149296
INFO:tensorflow:Recording summary at step 18.
INFO:tensorflow:global step 20: loss = 1.8288 (5.751 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.150273
INFO:tensorflow:Recording summary at step 27.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.150492
INFO:tensorflow:Recording summary at step 36.
INFO:tensorflow:global step 40: loss = 1.2239 (5.355 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.147502
INFO:tensorflow:Recording summary at step 45.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.15272
INFO:tensorflow:Recording summary at step 54.
INFO:tensorflow:global step 60: loss = 1.0667 (5.793 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.149623
INFO:tensorflow:Recording summary at step 63.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.13363
INFO:tensorflow:Recording summary at step 72.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global_step/sec: 0.14869
INFO:tensorflow:global step 80: loss = 0.8747 (9.908 sec/step)
INFO:tensorflow:Recording summary at step 80.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 89.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 99.
INFO:tensorflow:global step 100: loss = 0.9789 (5.818 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 108.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 117.
INFO:tensorflow:global step 120: loss = 0.7836 (5.771 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 126.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 135.
INFO:tensorflow:global step 140: loss = 0.7582 (5.641 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 144.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 153.
INFO:tensorflow:global step 160: loss = 0.7289 (5.561 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 162.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 171.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:global step 180: loss = 0.7996 (8.771 sec/step)
INFO:tensorflow:Recording summary at step 180.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 190.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 199.
INFO:tensorflow:global step 200: loss = 0.6564 (6.531 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 208.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 217.
INFO:tensorflow:global step 220: loss = 0.7724 (5.751 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 226.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 236.
INFO:tensorflow:global step 240: loss = 0.7227 (5.387 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 245.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 255.
INFO:tensorflow:global step 260: loss = 0.7362 (5.324 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 264.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 274.
INFO:tensorflow:global step 280: loss = 0.5858 (5.351 sec/step)
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 283.
INFO:tensorflow:Saving checkpoint to path /tensorflow/models/research/slim/transfer_learn/train/model.ckpt
INFO:tensorflow:Recording summary at step 293.
INFO:tensorflow:global step 300: loss = 0.6365 (5.394 sec/step)
INFO:tensorflow:Stopping Training.
INFO:tensorflow:Finished training! Saving model to disk.

  1. 2019年03月13日 06:37 |
  2. Edge TPU
  3. | トラックバック:0
  4. | コメント:0

Edge TPU(USB Accelerator)のdemo をやってみる

Edge TPU(USB Accelerator)の”Get started with the USB Accelerator”をやってみた”の続き。

続けてEdge TPU のデモをやってみたい。
~python-tflite-source/edgetpu/demo のPython ファイルのコメントにサンプルの実行方法が書いてあるので、それをやってみよう。

最初に object_detection.py から、顔認識をやってみたい。
python3 demo/object_detection.py \
--model='test_data/mobilenet_ssd_v2_face_quant_postprocess_edgetpu.tflite' \
--input='test_data/face.jpg'

コマンドを実行した。
Edge_TPU_14_190311.png

ログを示す。

masaaki@masaaki-H110M4-M01:~/python-tflite-source/edgetpu$ python3 demo/object_detection.py \
> --model='test_data/mobilenet_ssd_v2_face_quant_postprocess_edgetpu.tflite' \
> --input='test_data/face.jpg'
-----------------------------------------
score =  0.99609375
box =  [474.22854804992676, 38.03488787482766, 738.8013491630554, 353.5309683683231]
-----------------------------------------
score =  0.99609375
box =  [205.4297697544098, 110.28378465056959, 487.75309658050537, 439.73802454331343]
-----------------------------------------
score =  0.83203125
box =  [7.522284880280495, 183.90177454883695, 125.84126299619675, 324.99404113217173]
-----------------------------------------
score =  0.5
box =  [859.8422718048096, 213.5472493581642, 1008.978108882904, 383.9367261515483]


4人の顔が認識されている。
認識画像を示す。
Edge_TPU_15_190311.jpg

次に、classification_transfer_learning.py を使用して転移学習をやってみよう。
まずは、転移学習用のデータセットを用意する。画像をダウンロードしよう。
bash test_data/download_imprinting_test_data.sh
Edge_TPU_16_190311.png

~python-tflite-source/edgetpu/test_data/open_image_v4_subset/ ディレクトリに 10 個の画像のディレクトリが作成された。
Edge_TPU_17_190311.png

その内の Alarm_Clock ディレクトリを見てみよう。20 個のワイン 時計の画像がある。
Edge_TPU_18_190311.png

~python-tflite-source/edgetpu/test_data/ ディレクトリの下に imprinting ディレクトリを作成し、mobilenet_v1_1.0_224_quant_embedding_extractor_edgetpu.tflite を wget する。
cd ../test_data
mkdir imprinting
cd imprinting
wget http://storage.googleapis.com/cloud-iot-edge-pretrained-models/canned_models/mobilenet_v1_1.0_224_quant_embedding_extractor_edgetpu.tflite

Edge_TPU_19_190311.png
Edge_TPU_20_190311.png

demo ディレクトリに行って、 classification_transfer_learning.py を実行するがエラーになった。
cd ../../demo
python3 classification_transfer_learning.py --output='my_model.tflite'

Edge_TPU_21_190311.png

エラー内容を示す。

Traceback (most recent call last):
  File "classification_transfer_learning.py", line 210, in <module>
    main()
  File "classification_transfer_learning.py", line 179, in main
    labels_map = engine.TrainAll(train_input)
  File "/home/masaaki/python-tflite-source/edgetpu/learn/imprinting/engine.py", line 20, in TrainAll
    ret[self.Train(tensors)] = category
  File "/home/masaaki/python-tflite-source/edgetpu/swig/edgetpu_cpp_wrapper.py", line 175, in Train
    return _edgetpu_cpp_wrapper.ImprintingEngine_Train(self, input)
TypeError: Cannot cast array data from dtype('O') to dtype('uint8') according to the rule 'safe'



エラーなってしまったので、もう1つ Object Detection をやってみよう。
mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite を使用して、転移学習用にダウンロードした猫の画像で Object Detection してみた。
python3 demo/object_detection.py \
--model='test_data/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite' \
--label='test_data/coco_labels.txt' \
--input='test_data/open_image_v4_subset/Cat/4278078325_fe95b2d365_o.jpg'

Edge_TPU_22_190312.png

ログを示す。

masaaki@masaaki-H110M4-M01:~/python-tflite-source/edgetpu$ python3 demo/object_detection.py \
> --model='test_data/mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite' \
> --label='test_data/coco_labels.txt' \
> --input='test_data/open_image_v4_subset/Cat/4278078325_fe95b2d365_o.jpg'
-----------------------------------------
cat
score =  0.7890625
box =  [544.3585515022278, 161.8559150240529, 906.7766070365906, 574.1258810512984]
-----------------------------------------
cat
score =  0.5
box =  [544.8259115219116, 180.16657727447586, 780.6186676025391, 557.7862670074156]
-----------------------------------------
bench
score =  0.16015625
box =  [0.0, 286.536341216696, 1000.0, 664.0]
-----------------------------------------
cup
score =  0.12109375
box =  [927.8294444084167, 9.622623872517341, 996.2391257286072, 125.93606662510628]
-----------------------------------------
car
score =  0.12109375
box =  [347.52047061920166, 159.55350482883165, 548.1888055801392, 321.0489713965948]
-----------------------------------------
bench
score =  0.12109375
box =  [3.985762596130371, 350.9136437171668, 989.7855520248413, 664.0]
-----------------------------------------
cup
score =  0.12109375
box =  [829.7642469406128, 9.965896396780732, 932.0130348205566, 139.7531082881755]
-----------------------------------------
bench
score =  0.12109375
box =  [17.50752329826355, 482.14271655633826, 998.0459213256836, 664.0]
-----------------------------------------
bench
score =  0.12109375
box =  [0.0, 0.0, 339.12184834480286, 514.3285784889106]
-----------------------------------------
cat
score =  0.08984375
box =  [407.7613055706024, 186.5492222297132, 986.0997200012207, 610.9205907313668]


猫の Object Detection された画像を示す。
Edge_TPU_23_190312.jpg
  1. 2019年03月12日 05:17 |
  2. Edge TPU
  3. | トラックバック:0
  4. | コメント:2

Edge TPU(USB Accelerator)の”Get started with the USB Accelerator”をやってみた

Edge TPU(USB Accelerator)を使用して、”Get started with the USB Accelerator”をやってみた。

Get started with the USB Accelerator”で支持された手順で Edge TPU Python library をインストールする。

wget http://storage.googleapis.com/cloud-iot-edge-pretrained-models/edgetpu_api.tar.gz
Edge_TPU_4_190311.png

tar xzf edgetpu_api.tar.gz
cd python-tflite-source
bash ./install.sh

Edge_TPU_5_190311.png

bash ./install.sh でエラーになった。 python3.5 が無いようだ。apt でインストールできなかったので、install.sh を python3.5 から python3.6 に修正した。
Edge_TPU_7_190311.png

もう一度、
bash ./install.sh
を実行した。
Edge_TPU_8_190311.png

成功したようだ。

edgetpu ディレクトリに入った。demo を見ると classify_image.py もあった。
cd edgetpu
Edge_TPU_9_190311.png

python3 demo/classify_image.py \
--model test_data/mobilenet_v2_1.0_224_inat_bird_quant_edgetpu.tflite \
--label test_data/inat_bird_labels.txt \
--image test_data/parrot.jpg

を実行した。
Edge_TPU_10_190311.png

成功したようだ。
Ara macao (Scarlet Macaw) はコンゴウインコのようだ。

test_data ディレクトリを見ると、parrot.jpg があった。
Edge_TPU_11_190311.png

parrot.jpg を示す。
Edge_TPU_12_190311.jpg

Owl もあるので、これもやってみよう。
Edge_TPU_13_190311.png

Athene cunicularia (Burrowing Owl) はアナホリフクロウだそうだ。

推論はできていそうだ。ただ現在は、Edge TPU(USB Accelerator) をUSB2.0 のUSBコネクタに接続している。
  1. 2019年03月11日 04:44 |
  2. Edge TPU
  3. | トラックバック:0
  4. | コメント:0
»