Go to list of users who liked
Share on X(Twitter)
Share on Facebook
More than 5 years have passed since last update.
5分でMask-RCNNを試す
Mask-RCNNを試すだけの記事
こぉいうのが動くようになります。learnopencvは面白い講座があるので是非受けてみたいですが、今回Mask RCNNを動かしてみるだけです。CPUの場合劇遅です。OpenCVでもGPU使えるようにできるので、やれば早いはずです。動かすだけの場合環境作るのに5分もかかりませんでした。
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がクラス分類とエリア検出に繋いでる部分です。

とりあえず動かす
やった環境
- mac
- python3.5
git clone https://github.com/spmallick/learnopencv.gitあれ動かない。OpenCvのバージョン古いんでしょう。
(py35) miyamoto:Mask-RCNN miyamoto$ python3 mask_rcnn.py --image=cars.jpgTraceback (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 opencvopencv3 3.1.0 py35_0 menpomenpoが古いので一旦消しす。
sudo conda update -c menpo opencv3 -n py35sudo conda uninstall -c menpo opencv3 -n py35conda-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 darwinType "help", "copyright", "credits" or "license" for more information.>>> import cv2Traceback (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 opencvopencv 3.4.3 py35_blas_openblash553dce0_200 [blas_openblas] conda-forge画像で動かす
python3 mask_rcnn.py --image=cars.jpg動画で動かす
これはCPUだと劇遅です。
python3 mask_rcnn.py --video=cars.mp4OpenCV追加機能をちょっとコード見る
# 画像を読むcap=cv.VideoCapture(args.image)# 動画を読むcap=cv.VideoCapture(args.video)# web camcap=cv.VideoCapture(0)//画像を読むstr=parser.get<String>("image");ifstreamifile(str);if(!ifile)throw("error");cap.open(str);//動画を読むstr=parser.get<String>("video");ifstreamifile(str);if(!ifile)throw("error");cap.open(str);//web camcap.open(parser.get<int>("device"));TFモデル読み込み
OpenCVにtensorflowから読み込む機能追加されてるんですね。
net=cv.dnn.readNetFromTensorflow(modelWeights,textGraph);net.setPreferableBackend(cv.dnn.DNN_BACKEND_OPENCV)net.setPreferableTarget(cv.dnn.DNN_TARGET_CPU)Netnet=readNetFromTensorflow(modelWeights,textGraph);net.setPreferableBackend(DNN_BACKEND_OPENCV);net.setPreferableTarget(DNN_TARGET_CPU);検出コード
OpenCVは検出エリアを表示する関数があるので、簡単にかけます。
cv.drawContours(frame[top:bottom+1,left:right+1],contours,-1,color,3,cv.LINE_8,hierarchy,100)drawContours(coloredRoi,contours,-1,color,5,LINE_8,hierarchy,100);coloredRoi.copyTo(frame(box),mask);参考
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme


