SE_BOKUのまとめノート的ブログ

SE_BOKUが知ってること・勉強したこと・考えたことetc

windows10にpycocotoolsとprotoc.exe(protocolbuffers)をインストールする

f:id:arakan_no_boku:20191221000914p:plain

目次

windowsでtesorflow2.0のチュートリアルでエラーになった

tesorflow2.0のチュートリアルをやろうとしました。

すると、手順として、以下のような記述がありました。

 !pip install pycocotools

protoc object_detection/protos/*.proto --python_out=

で。

その通り実行すると、エラーになります。

windowsの場合はこの手順ではだめでした。

そこで、pycocotoolsとprotoc.exe(protocolbuffers)の概要を調べて、Windows10環境にインストールしてみた手順をまとめておきます。 

環境は、Anacondaで、Python=3.7の仮想環境を作成してます。

tensorflow2.0はインストール済です。

www.tensorflow.org

 

pycocotools

pycocotoolsとはCOCOAPIを、pythonで利用するためのツールです。

COCOAPIは、CoCo(Common Object Context)という物体検出など様々な用途に使えるデータセットのことのようです。

それを各言語で利用するためのAPIが「COCOAPI」・・ということみたいです。

cocodataset.org

チュートリアルに書いてあるとおり「pip install pycocotools」でインストールできれば楽勝ですが、Windowsではpipでインストールできません。

エラーがでまくります。

Windows10で使うためには、ビルドする必要があります。(;^_^A

 

pycocotoolsのビルド

ビルドする手順です。

まず。

python側で以下がインストールされている必要があります。

  • pip install setuptools
  • pip install cython
  • pip install matplotlib

そしてコンパイラするために、Visual Studio 2017 build tools もしくは、同等のものが必要です。

visualstudio.microsoft.com

さらに。

Gitがインストールされてない場合は、Gitもインストールする必要があります。

arakan-pgm-ai.hatenablog.com

で・・。

ここからが本番です。

まず。

適当な作業フォルダをカレントフォルダにして、以下を実行します。

git clone https://github.com/cocodataset/cocoapi.git

cocoapiフォルダができて、以下のような内容になってます。

f:id:arakan_no_boku:20200104163434p:plain

この「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」というフォルダができます。

あとでコピーしますが、とりあえず、次にいきます。

 

protoc.exeのインストール

protoc.exeは Protocol Buffersを扱うコマンドです。

Protocol BuffersはGoogleが開発した「あらゆる種類のフォーマットをシリアライズすることができる」シリアライズフォーマットです。

公式にサポートされた実装ではXMLJSONと同じくらい容易にシリアライズ機構を整備することができるそうです。

チュートリアルのデモ用モデルは、このフォーマットでシリアライズされているみたいなのですね。

だから、元にもどすにはprotoc.exeというツールを使うというわけです。

まだの場合はインストールします。

インストーラはないので、以下からダウンロードします。

github.com

protoc-xxxxx-win64.zipでいいと思います。

ダウンロードしたら解凍して、どこかにおき、protoc.exeにパスを通します。

ウィルスチェックソフトがはいっていると、protoc.exeが削除されるときありますので対応して消されないにはしないとだめです。

さて。

object-detectionのチュートリアルのネタで試しに使ってみる例をします。 

デモソースを置くワークフォルダを、そこをカレントフォルダにして、以下を実行します。

git clone --depth 1 https://github.com/tensorflow/models

modelsフォルダができます。

中身はこんな感じ。

f:id:arakan_no_boku:20200104170351p:plain

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=

とりあえず。

無理やりWindowsチュートリアルをするには必要な手順です。 

ではでは。