tesorflow2.0のチュートリアルに手順として、以下のような記述がありました。
!pip install pycocotools
protoc object_detection/protos/*.proto --python_out=
でも、その通り実行すると、Windowsの場合エラーになります。Windows10環境にインストールした手順をまとめておきます。環境は、Anacondaで、Python=3.7の仮想環境を作成してます。tensorflow2.0はインストール済です。
pycocotoolsとは
pycocotoolsとはCOCOAPIを、pythonで利用するためのツールです。COCOAPIは、CoCo(Common Object Context)という物体検出など様々な用途に使えるデータセットのことです。それを各言語で利用するためのAPIが「COCOAPI」です。
チュートリアルに書いてあるとおり「pip install pycocotools」でインストールできれば楽勝ですが、Windowsではpipでインストールできません。エラーがでまくります。Windows10で使うためには、ビルドする必要があります。(;^_^A
手順1:pycocotoolsのビルド準備
ビルドするには、python側で以下がインストールされている必要があります。
- pip install setuptools
- pip install cython
- pip install matplotlib
コンパイラするために、Visual Studio 2017 build tools が必要です。
Gitがインストールされてない場合は、Gitもインストールする必要があります。
手順2:ビルド
適当な作業フォルダをカレントフォルダにして、以下を実行します。
cocoapiフォルダができて、以下のような内容になってます。

この「PythonAPI」フォルダをカレントフォルダにします。すると、そこにsetup.pyがあります。そのsetup.pyの中に「ext_modules」というブロックがあり、そこに
extra_compile_args=['-Wno-cpp', '-Wno-unused-function', '-std=c99'],
とありますが、このコンパイラオプションはエラーになるので、
extra_compile_args=[],
に変更します。変更後のブロックは
ext_modules = [
Extension(
'pycocotools._mask',
sources=['../common/maskApi.c', 'pycocotools/_mask.pyx'],
include_dirs = [np.get_include(), '../common'],
extra_compile_args=[],
)
]
になります。 これを保存したら、setup.pyのあるフォルダをカレントにして以下を実行します。
python setup.py build_ext install
すると、そのフォルダに「pycocotools」というフォルダができます。あとでコピーしますが、とりあえず、次にいきます。
手順3:protoc.exeのインストール
protoc.exeは Protocol Buffersを扱うコマンドです。Protocol BuffersはGoogleが開発した「あらゆる種類のフォーマットをシリアライズすることができる」シリアライズフォーマットです。公式にサポートされた実装ではXMLやJSONと同じくらい容易にシリアライズ機構を整備することができます。チュートリアルのデモ用モデルは、このフォーマットでシリアライズされているみたいで、元にもどすにはprotoc.exeというツールを使うというわけです。
インストールします。インストーラはないので、以下からダウンロードします。
protoc-xxxxx-win64.zipでいいと思います。ダウンロードしたら解凍して、どこかにおき、protoc.exeにパスを通します。ウィルスチェックソフトがはいっていると、protoc.exeが削除されるときありますので対応して消されないにはしないとだめです。
できたので試してみる
object-detectionのチュートリアルで試しに使ってみます。 デモソースを置くワークフォルダを、そこをカレントフォルダにして、以下を実行します。
git clone --depth 1 https://github.com/tensorflow/models
modelsフォルダができます。中身はこんな感じ。

models/researchフォルダをカレントフォルダにして、protocコマンドを使います。
protoc.exe object_detection/protos/*.proto --python_out=.
成功すると、シリアライズされていたものが展開されて、reaeachフォルダに「object_detection」フォルダができます。そしたら。reaearchフォルダがカレントフォルダの状態で、
pip install .
を実行して、researchフォルダのモジュールをすべてインストールする・・。こんな感じです。やれやれ。たかがチュートリアルの実行でえらい手間取りました。Linuxでは以下の2行で終わることなのですが(笑)。
!pip install pycocotools
protoc object_detection/protos/*.proto --python_out=
ではでは。