はじめに
自身のWindows端末でMask R-CNNを動かしてみようと思ったとき、一部戸惑ったところがあったので、ほんのちょっとしたことですが記事にします。
実行環境
- Windows10
- Anaconda
環境構築
一連の流れは色々な方がすでに記事にしてはいますが、流れにそって紹介します。
c:/~/> conda create -n r_cnn python=3.6
c:/~/> active r_cnn
まずはAnacondaで仮想環境を作成し、起動します。
続いてこちらからクローンします
(r_cnn)c:/~/> git clone https://github.com/matterport/Mask_RCNN.git
次に必要なライブラリを一括インストールするために
(r_cnn)c:/~/> cd Mask_RCNN
(r_cnn)c:/~/Mask_RCNN> pip install -r requirements.txt
(r_cnn)c:/~/Mask_RCNN> python setup.py install
これで環境構築自体は完了なのですが、サンプルプログラムを動かすにはpycocotoolsというモジュールが必要なので、こちらもクローンし、インストールします
(r_cnn)c:/~/Mask_RCNN> git clone https://github.com/pdollar/coco.git
(r_cnn)c:/~/Mask_RCNN> cd coco/PythonAPI
(r_cnn)c:/~/Mask_RCNN/coco/PythonAPI> python setup.py install
これで、環境構築は完了できます。また、学習済みサンプルモデルも別途にあります。
環境構築が完了したので、sample/demo.ipynb を実行すれば、サンプルプログラムが動き、実際にサンプルで入ってる画像にオブジェクト検知とセグメンテーションを行うはずです。
Windows環境で起きた問題
本来、この手順で環境構築は完了し、サンプルプログラムが正常に実行されるはずなのですが、このようなエラーが出てしまいました。
ModuleNotFoundError: No module named 'pycocotools'
先ほど、cocoapiというモジュールをインストールしたはずなのに、このエラーが出てしまいました。再度インストールしなおしても、改善はされませんでした。
解決方法
こちらの記事を参考にさせていただきました。
引用;Mask R-CNNをWindows+Keras環境で動かす
(http://blog.livedoor.jp/tmako123-programming/archives/51025848.html)
#14行目
extra_compile_args=['-Wno-cpp', '-Wno-unused-function', '-std=c99'],
#修正後
extra_compile_args=['-std=c99'],
この修正を行ってから、再度
(r_cnn)c:/~/Mask_RCNN/coco/PythonAPI> python setup.py install
を実行することで、エラーが解消され、正常に実行することが出来ました。
手持ちの画像で実行
蛇足ではありますが、サンプル画像ではなく、自分自身が所持している画像で実行する方法の紹介です。
サンプルプログラムの最初のセル(jupyter-notebookで開いた場合)の最終行の
IMAGE_DIR = os.path.join(ROOT_DIR, "images")
こちらのディレクトリ名やパスを変更し、また最終セルの
file_names = next(os.walk(IMAGE_DIR))[2]
image = skimage.io.imread(os.path.join(IMAGE_DIR, random.choice(file_names)))
もともとimagesフォルダの中からランダムに画像を選択。となっているので、ここに手を加えれば、好きな画像をセグメンテーション出来ます。
また、少々強引ではありますが、そもそものサンプルで指定されているimagesフォルダの中身を全部消去し、新たに好きな画像を追加すれば、頭を使わずに好きな画像で実行することが出来ます。