Tensorflow-bin
TPU-MobilenetSSD
1.Introduction
前回記事は Docker によるTPUモデルのローカル転移学習の手順を整理しました。
Edge TPU Accelaratorの動作を少しでも高速化したかったのでMobileNetv2-SSD/MobileNetv1-SSD+MS-COCOをPascal VOCで転移学習して.tfliteを生成した_Docker編_その2
今回は、手元にGPU搭載端末が無い場合を想定して、 無料のGoogle Colaboratory環境
により同様の作業を実施します。 最終的には、 TPU Edge Accelarator へデプロイするための 独自.tfliteファイル をクラウド上で生成することを目的としています。 クラウドで作業を実施するとはいえ、ローカルで出来ることはほぼ全て同じようにできます。 利用時間制限があるぐらいです。
Dockerで作業をするのと大して変わりはありませんが、GPUがハイスペックということやGPU分の電気代がタダ、出先から制御出来る、というメリットはありそうです。 なお、デメリットは GPU暖房が使えなくなるために暖房費がかさむこと
です。 そうです、まさに本末転倒ですね。
正直に言いまして、今さら感があると思いますのであくまで自分用のメモとして残します。
懺悔します。 Googleドライブのマウントが面倒だったので全てマウントせずに実施しました。
なお、リソース一式は上図のニコちゃんマークの リポジトリ にコミットしてあります。
2.Environment (2019.03.31)
- Google Colaboratory [GPU / Free]
- Tensorflow-GPU v1.13.1
- Protobuf 3.7.0
- CUDA 10
- NVIDIA Tesla K80
- Pascal VOC 2007 /2012
- Python 3.6
3.Procedure
Please adjust the Batch size
as you like.
train_config {
batch_size: 64 #<------------- Batch size
data_augmentation_options {
random_horizontal_flip {
}
}
data_augmentation_options {
ssd_random_crop {
}
}
sync_replicas: true
optimizer {
adam_optimizer: {
learning_rate: {
manual_step_learning_rate {
initial_learning_rate: .0002
schedule {
step: 500
learning_rate: .00003
}
Increasing the total number of training steps
does not dramatically improve accuracy.
Adjust the number of NUM_TRAINING_STEPS
as you like.
!source "$PWD/constants.sh"
%env NUM_TRAINING_STEPS=1000
%env NUM_EVAL_STEPS=500
!rm -rf learn/train
!./retrain_detection_model.sh \
--num_training_steps ${NUM_TRAINING_STEPS} \
--num_eval_steps ${NUM_EVAL_STEPS}
First of all, prepare the environment of Google Colaboratory referring to the following article.
This article is very polite and appreciated.
【秒速で無料GPUを使う】深層学習実践 Tips on Colaboratory - Qiita - tomo_makes
Next, execute the following script in Google Colaboratory.
# -*- coding: utf-8 -*-
"""TPU-Transfer-learning.ipynb
Automatically generated by Colaboratory.
"""
!uname -a && python -V && pip -V
!apt-get update;apt-get upgrade -y
!apt-get install -y protobuf-compiler python-pil python-lxml python-tk \
autoconf automake libtool curl make g++ unzip wget git nano \
libgflags-dev libgoogle-glog-dev liblmdb-dev libleveldb-dev \
libhdf5* python3-dev python3-numpy python3-skimage gfortran libturbojpeg \
python-dev python-numpy python-skimage python3-pip python-pip \
libboost-all-dev libopenblas-dev libsnappy-dev software-properties-common \
protobuf-compiler python-pil python-lxml python-tk libfreetype6-dev pkg-config libpng12*
!pip install pip==18.0.0 --upgrade
!pip install --user Cython opencv-python lxml
!git clone https://github.com/tensorflow/models.git
from google.colab import files
files.upload()
!ls -l
!mv collabo.zip models/research
%cd models/research
!unzip collabo.zip
!rm collabo.zip
!chmod +x constants.sh
!chmod +x prepare_checkpoint_and_dataset.sh
!chmod +x retrain_detection_model.sh
!chmod +x protoc_update.sh
!chmod +x convert_checkpoint_to_edgetpu_tflite.sh
!cp object_detection_evaluation.py object_detection/utils
!mkdir configs
!git clone https://github.com/pdollar/coco.git
%cd coco/PythonAPI
!python3 setup.py install
%cd ../..
!wget https://github.com/protocolbuffers/protobuf/archive/v3.7.0.zip
!unzip v3.7.0.zip;rm v3.7.0.zip
%cd protobuf-3.7.0
!./autogen.sh
!./configure
!make -j$(($(nproc) + 1))
!make install
%cd python
!export LD_LIBRARY_PATH=../src/.libs
!python3 setup.py build --cpp_implementation
!python3 setup.py test --cpp_implementation
!python3 setup.py install --cpp_implementation
!ldconfig
%cd ../..
!protoc --version
!./prepare_checkpoint_and_dataset.sh --network_type mobilenet_v2_ssd --train_whole_model false
!source "$PWD/constants.sh"
%env NUM_TRAINING_STEPS=1000
%env NUM_EVAL_STEPS=100
!rm -rf learn/train
!./retrain_detection_model.sh \
--num_training_steps ${NUM_TRAINING_STEPS} \
--num_eval_steps ${NUM_EVAL_STEPS}
!ls -l learn/train
!./convert_checkpoint_to_edgetpu_tflite.sh --network_type mobilenet_v2_ssd --checkpoint_num 292
!ls -l learn/models
from google.colab import files
files.download("learn/models/output_tflite_graph.tflite")
https://coral.withgoogle.com/web-compiler/
[Successful] MobileNetv1-SSD / MobileNetv2-SSD
4.Finally
Next time I would like to try Google Colaboratory [TPU].
5.Reference Articles, Great thanks!
AI & Machine Learning Products - Cloud TPU Quickstart
Google ColaboratoryのTPUを試してみる - Qiita - koshian2
https://twitter.com/tomo_makes/status/1045198738614976513
【Tips】Google Colaboratory でPythonのファイル入出力演習 - Qiita - GandT
【秒速で無料GPUを使う】深層学習実践 Tips on Colaboratory - Qiita - tomo_makes
6.Soliloquy
本題とは関係ありませんが、この場をお借りしまして皆様にお礼を言わせていただきたいです。
気がつけばPython部門で日本の30傑入りをしていました。 みなさんありがとうございます。 おかげさまでモチベーションが維持できています。
※ 手動で定期的にランキングをアップデートをしないと集計対象にならないサービスですので、上位の方々は頻繁にアップデートをしていないだけであって実はもっと高みにいらっしゃいます。 もっと多くのスターを獲得されている方はおそらく沢山いらっしゃいますが、この Git Awards で集計開始ボタンを自分で押さない限りは集計対象になりません。 また、分析対象はパブリックリポジトリだけですので、プライベートリポジトリでスゴい仕事をされていても集計されません。 大した意味のないランキングですので完全なる自己満足です。
Git Awards http://git-awards.com/users/pinto0309
ちなみに、日本の上位5傑は下図のとおりです。 突き抜け過ぎていて笑えます。