画像セグメンテーション(Semantic segmentation)技術として注目を集めている「Mask R-CNN」をMacで動かす機会があったのでその手順を紹介します。
Python3, TensorFlow, Kerasを使った実装(「Mask R-CNN for Object Detection and Segmentation」)を利用し、学習済みのパラメタを使うことで簡単にセグメンテーションを試すことができました。
実行環境
以下の環境で動作をさせています。
- Mac: MacBook Air 2013 Mid
- OS: High Sierra
- Anaconda 5.0.1
GPUは搭載されていないのでCPUのみでMask R-CNNを動かします。
Python環境の構築
まずMask R-CNN用の環境を作成します。環境管理コマンドcondaを使って
$ conda create -n mask_rcnn python=3.6 pip $ source activate mask_rcnn
とPython仮想環境を作成します。
Mask R-CNNの設定
ここではPython3, TensorFlow, Kerasを使った実装(「Mask R-CNN for Object Detection and Segmentation」)を利用します。まず、
(mask_rcnn) $ git clone https://github.com/matterport/Mask_RCNN.git (mask_rcnn) $ cd
としてレポジトリのクローンを取得します。
次に必要なパッケージのインストールとセットアップをします。
(mask_rcnn) $ pip install -r requirements.txt (mask_rcnn) $ python setup.py install
提供されているデモ用ノートブック(samples/demo.ipynb)を動かすにはpycocotoolsというパッケージが必要なので
(mask_rcnn) $ git clone https://github.com/pdollar/coco.git (mask_rcnn) $ cd coco/PythonAPI (mask_rcnn) $ make (mask_rcnn) $ make install (mask_rcnn) $ python setup.py install (mask_rcnn) $ cd ../..
でインストールします。最後に事前学習済みのモデルをダウンロードします。
(mask_rcnn) $ wget https://github.com/matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_coco.h5
Mask R-CNNの実行
(mask_rcnn) $ jupyter notebook
でJupyter notebookを立ち上げて「samples」>「demo.ipynb」を選択します。メニューの「Cell」>「Run All」を選ぶと「images」ディレクトリの画像がランダムに選ばれセグメンテーションの結果が表示されます。
(1990年代の大阪 日本橋ですね。person, carの多さが当時の活況ぶりを表していますね。)
手元の画像を使いたい時は「Run Object Detection」の直後のセルの
file_name = random.choice(file_names)
を
file_name = (画像パス)
「トリケラトプスの模型に颯爽と近くドキンちゃんカバンを背負った四歳児」
- ドキンちゃんカバンが「handbag」(「backpack」の方が適切)
- トリケラトプスの模型が「cow」(牛)
だったりとしますが、トリケラトプスが四足歩行でツノのある動物と考えれば「牛」も当たらずとも遠からずという気がします。それ以上に各物体の領域をきちんと切り出せていてて思わず感動してしまいました。
論文やプレスでは上手くいったごく一部の例だけがピックアップされていることも多いのですがMask R-CNNは手元の画像でも安定して納得感のある結果を出してくれるので試してみると面白いと思います。