Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
30
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

5分でMask-RCNNを試す

Mask-RCNNを試すだけの記事

こぉいうのが動くようになります。learnopencvは面白い講座があるので是非受けてみたいですが、今回Mask RCNNを動かしてみるだけです。CPUの場合劇遅です。OpenCVでもGPU使えるようにできるので、やれば早いはずです。動かすだけの場合環境作るのに5分もかかりませんでした。

スクリーンショット 2018-10-02 18.29.41.png

Mask R-CNNについてはこの辺参考になります。
https://qiita.com/shtamura/items/4283c851bc3d9721ed96
https://engineer.dena.jp/2017/12/chainercvmask-r-cnn.html

Faster R-CNNにmask headが追加されてるようです。
Faster R-CNNはBackboneとRegionProporsalNetworkとHeadでできてます。
BackboneはCNN部分。RegionProporsalNetworkは物体らしき場所を検出する部分。Headがクラス分類とエリア検出に繋いでる部分です。

スクリーンショット 2018-10-05 12.11.20.png

とりあえず動かす

やった環境

  • mac
  • python3.5
git clone https://github.com/spmallick/learnopencv.git

あれ動かない。OpenCvのバージョン古いんでしょう。

(py35) miyamoto:Mask-RCNN miyamoto$ python3 mask_rcnn.py --image=cars.jpg
Traceback (most recent call last):
  File "mask_rcnn.py", line 99, in <module>
    net = cv.dnn.readNetFromTensorflow(modelWeights, textGraph);
AttributeError: module 'cv2' has no attribute 'dnn'

3.1.0は古いので自分でビルドか、新しいの入れる必要あり。

(py35) miyamoto:Mask-RCNN miyamoto$ conda list | grep opencv
opencv3                   3.1.0                    py35_0    menpo

menpoが古いので一旦消しす。

sudo conda update -c menpo opencv3 -n py35
sudo conda uninstall -c menpo opencv3 -n py35

conda-forgeでopencv入れる。

sudo conda install -c conda-forge opencv

やっぱりない。

Python 3.5.5 |Anaconda, Inc.| (default, Mar 12 2018, 16:25:05) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named 'cv2'
>>> exit()

-nで環境指定指定れると良かった。

sudo conda install -c conda-forge opencv -n py35

無事3.4.3が入りました。

(py35) miyamoto:Mask-RCNN miyamoto$ conda list | grep opencv
opencv                    3.4.3           py35_blas_openblash553dce0_200  [blas_openblas]  conda-forge

画像で動かす

python3 mask_rcnn.py --image=cars.jpg

スクリーンショット 2018-10-02 18.29.41.png

動画で動かす

これはCPUだと劇遅です。

python3 mask_rcnn.py --video=cars.mp4

OpenCV追加機能をちょっとコード見る

python
#画像を読む
cap = cv.VideoCapture(args.image)
#動画を読む
cap = cv.VideoCapture(args.video)
#web cam
cap = cv.VideoCapture(0)
cpp
//画像を読む
str = parser.get<String>("image");
ifstream ifile(str);
if (!ifile) throw("error");
  cap.open(str);
//動画を読む
str = parser.get<String>("video");
ifstream ifile(str);
if (!ifile) throw("error");
  cap.open(str);
//web cam
cap.open(parser.get<int>("device"));

TFモデル読み込み

OpenCVにtensorflowから読み込む機能追加されてるんですね。

python
net = cv.dnn.readNetFromTensorflow(modelWeights, textGraph);
net.setPreferableBackend(cv.dnn.DNN_BACKEND_OPENCV)
net.setPreferableTarget(cv.dnn.DNN_TARGET_CPU)
cpp
Net net = readNetFromTensorflow(modelWeights, textGraph);
net.setPreferableBackend(DNN_BACKEND_OPENCV);
net.setPreferableTarget(DNN_TARGET_CPU);

検出コード

OpenCVは検出エリアを表示する関数があるので、簡単にかけます。

python
cv.drawContours(frame[top:bottom+1, left:right+1], contours, -1, color, 3, cv.LINE_8, hierarchy, 100)
cpp
drawContours(coloredRoi, contours, -1, color, 5, LINE_8, hierarchy, 100);
coloredRoi.copyTo(frame(box), mask);

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
30
Help us understand the problem. What are the problem?