Mask R-CNN(keras)で人物検出 on Colaboratory

More than 1 year has passed since last update.


はじめに

最新の物体検出手法というMask R-CNN(keras版)を動かしてみます。

せっかくなので、Google Colaboratoryでやってみることにしました。

実行ソースはこちら→GitHub


Mask R-CNN

物体検出、セグメンテーションのみならず、人の骨格推定も可能なようです。

mask_rnn.PNG

mask_rnn2.PNG

出典:https://arxiv.org/pdf/1703.06870v1.pdf

処理内容についての説明は、以下サイトを参考に


環境

Google Colaboratory(python3/GPU)

Google Colaboratoryのノートブックを新規作成し、「ランタイム」「ランタイムのタイプを変更」で、python3/GPUを選択。

colaboratory.PNG


インストール

今回試すのは、こちら→Github

ReadMeの「Installation」に従って、作業を進めていきます。


■1.Clone this repository

githubからソースを取得します。


maskRnn-keras.ipynb

# gitからソースを取得

!git clone https://github.com/matterport/Mask_RCNN.git

# 確認
!ls



■2.Install dependencies

Mask_RCNN-master/requirements.txt に記載されている関連ライブラリをインストールします。


maskRnn-keras.ipynb

# フォルダへ移動

%cd Mask_RCNN

# 確認
!ls

# ライブラリを取得
!pip install -r requirements.txt



■3.Run setup from the repository root directory

Mask_RCNN-master/setup.py を実行します。


maskRnn-keras.ipynb

# フォルダへ移動

%cd Mask_RCNN

# setup.pyを実行
%run -i setup.py install



■4.Download pre-trained COCO weights (mask_rcnn_coco.h5)

学習済の重み (mask_rcnn_coco.h5)を取得します。


maskRnn-keras.ipynb

# フォルダへ移動

%cd Mask_RCNN

# 重みを取得
!wget https://github.com/matterport/Mask_RCNN/releases/download/v2.0/mask_rcnn_coco.h5



■5.MS COCO install

Microsoft COCO が提供する画像データセット用APIをインストールします。


maskRnn-keras.ipynb

# COCO 用ソースを取得

!git clone https://github.com/waleedka/coco.git

# 確認
!ls

# cythonをインストール
!pip install cython

# python用APIをインストール
%cd Mask_RCNN/coco/PythonAPI
%run -i setup.py build_ext --inplace
%run -i setup.py build_ext install


上記で問題ないようなのですが、、、インストールしたpycocotoolsがない、とエラーになってしまうので、

パスを設定しました。


maskRnn-keras.ipynb

import sys

sys.path.append('/content/Mask_RCNN/coco/PythonAPI')


デモを実行


■1.kerasをインストール

Google Colaboratoryにはデフォルトで入っていないkerasをインストール


maskRnn-keras.ipynb

!pip install keras



■2.demo.ipynbを実行

https://github.com/matterport/Mask_RCNN/blob/master/samples/demo.ipynb をコピペして実行

実行結果。キリンとシマウマを見分けてます。

colaboratory-run.PNG


人物検出

openCVとKerasで画像から人物検出 でも使ったスポーツシーンの画像で試した結果

mask-rnn-keras.PNG


まとめ

同じ形状のものが重なっている場合にうまく検出できていない?

(人が重なっている場合に、別人と判定したり、人が検出できていなかったり)

ただ、前回試したSSDでは検出できなかったボールやバット、グローブなど小さな形状まで検出できていて、すごい。

利用目的に合わせて、使い分けるのがよいのかな??


参考サイト