はじめに
Google Colaboratory上でObject Detection APIを用いたモデルの学習を実行してみたので、環境構築から学習実行までの内容を共有します。今回は自宅で飼っている熱帯魚の検出を行ってみました。
今回は環境構築部分について共有します。
Google Colaboratory
Google Colaboratory(以下Colab)は、機械学習の教育や研究用にGoogleから無償で提供されているJupyter Notebook環境です。GPU搭載環境も使用できます。
自宅には貧弱なPCしかないので、GPU搭載環境が無料で使用できてとてもありがたい!!
GPUの有効化
Colabへアクセスして「ランタイム」-> 「ランタイムタイプの変更」
を選択。
学習データの格納先
Colab環境では一定時間経つと自動で環境がシャットダウンされます。シャットダウンされるとColab環境上のファイルがリセットされてしまうため、学習データ等は別の場所に格納しておく必要があります。
格納先としては、Google Driveが便利です。
以下を実行すると簡単にGoogle DriveをColab環境上にマウントできます。
表示されたURLから認証キーを取得、入力フォームに認証キーを入力すればGoogle Driveのマイドライブが/content/gdrive/My Drive/
にマウントされます。
from google.colab import drive
drive.mount('/content/gdrive')
今回は/content/gdrive/My Drive/aqua
という作業ディレクトリで作業します。
Object Detection APIの環境構築
一連の操作のJupyter Notebookを以下で公開してます。
https://gist.github.com/hirokikmr/3d73831beeec8e3342689ca6d9d329d3
基本的な流れは以下を参照しています。
https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/installation.md
Colab上ではすでにインストール済みのものがあったりするので必要な操作のみ実施しています。
Object Detection APIの取得
Google Driveがマウント済みの状態にしてください。
Google Drive上にObject Detection APIのソースを配置します。
%cd /content/gdrive/My\ Drive/aqua/
!git clone https://github.com/tensorflow/models.git
COCO APIのインストール
COCO APIを使用しない場合は不要なようですがインストールしておきます。
%cd /content/gdrive/My\ Drive/aqua/
!git clone https://github.com/cocodataset/cocoapi.git
%cd cocoapi/PythonAPI
!make
!cp -r pycocotools /content/gdrive/My\ Drive/aqua/models/research/
protoファイルのコンパイル
%cd /content/gdrive/My\ Drive/aqua/models/research/
!protoc object_detection/protos/*.proto --python_out=.
テスト実行
以上でObject Detection APIの実行環境構築は完了です。テストプログラムが問題なく実行できるか確認してください。
%cd /content/gdrive/My\ Drive/aqua/models/research/
%env PYTHONPATH=/env/python:/content/gdrive/My Drive/aqua/models/research/:/content/gdrive/My Drive/aqua/models/research/slim
%env
!python object_detection/builders/model_builder_test.py
実行結果の最後に以下が表示されれば問題ありません。
----------------------------------------------------------------------
Ran 22 tests in 0.139s
OK (skipped=1)
これで環境構築は完了です。学習の実行については別記事で説明しようと思います。