2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MASK-RCNNの学習済みモデルをCPU環境で動かしてみた

Last updated at Posted at 2021-08-07

spmallickさんがGitHUbに上げている実コードを動かしてみました。
Macbook(mac Catalina OS)のCPU環境で、問題なく動くことを確認しました。

また、Wifi接続をオフにた後のオフライン環境でも、問題なく動きました。

###実行結果

####( 静止画像ファイル )

スクリーンショット 2021-08-07 15.16.17.png

スクリーンショット 2021-08-07 16.02.04.png

スクリーンショット 2021-08-07 16.00.54.png

####( 動画ファイル )

###git cloneした実装コード

今回、使うのは、以下のGitHubリポジトリにある実装コードです。

Termimal
electron@diynoMacBook-Pro Desktop % git clone https://github.com/spmallick/learnopencv.git
electron@diynoMacBook-Pro Desktop % 
Termimal
electron@diynoMacBook-Pro Desktop % cd learnopencv 

このリポジトリには、様々な用途で利用可能な多くの資源が同梱されている。

Termimal
electron@diynoMacBook-Pro learnopencv % ls 
AgeGender									Non-Maximum-Suppression
AlphaBlending									NonPhotorealisticRendering
AugmentedRealityWithArucoMarkers						OCR
Autoencoder-in-TensorFlow							ObjectDetection-YOLO
Background-Subtraction								OpenCV-dnn-gpu-support-Linux
Bag-Of-Tricks-For-Image-Classification						OpenCV-dnn-gpu-support-Windows
BatchNormalization								OpenPose
BlobDetector									OpenPose-Multi-Person
CI										OpenVINO-OpenCV
CameraCalibration								Optical-Flow-Estimation-using-Deep-Learning-RAFT
CenterofBlob									Optical-Flow-in-OpenCV
CharClassification								Photoshop-Filters-in-OpenCV
Classification-with-localization-convert-any-keras-classifier-into-a-detector	Playing-Chrome-TRex-Game-with-Facial-Gestures
ColorSpaces									Playing-rock-paper-scissors-with-AI
Colorization									PyTorch-Fully-Convolutional-Image-Classification
Colormap									PyTorch-Keypoint-RCNN
Conditional-GAN-PyTorch-TensorFlow						PyTorch-Mask-RCNN
Contour-Detection-using-OpenCV							PyTorch-Multi-Label-Image-Classification
ConvexHull									PyTorch-Multi-Label-Image-Classification-Image-Tagging
Creating-a-Virtual-Pen-and-Eraser						PyTorch-ONNX-TensorRT
DNN-OpenCV-Classification-Android						PyTorch-ONNX-TensorRT-CPP
DNN-OpenCV-Classification-with-Java						PyTorch-Receptive-Field-With-Backprop
Deep-Convolutional-GAN								PyTorch-Segmentation-torchvision
Deep-Learning-with-OpenCV-DNN-Module						PyTorch-Vision-Experiment-Logging
Delaunay									PyTorch-faster-RCNN
DenoisingAutoencoder								PyTorch-for-Beginners
Depth-Perception-Using-Stereo-Camera						PyTorch-to-CoreML-model-conversion
Efficient-image-loading								PyTorch-to-TensorFlow-Model-Conversion
EfficientNet									Pytorch-Lightning
EigenFace									Pytorch-Net-Surgery
EpipolarGeometryAndStereoVision							QRCode-OpenCV
ExposureFusion									Quora-Dataset-Duplicate-Search
FBAMatting									README.md
FPS										ReconstructFaceUsingEigenFaces
Face-Recognition-with-ArcFace							RedEyeRemover
FaceAverage									RotationMatrixToEulerAngles
FaceDetectionComparison								SVM-using-Python
FaceMaskOverlay									SeamlessCloning
FaceMorph									SelectiveSearch
FaceSwap									SnakeGame
FacialAttractiveness								Super-Resolution-in-OpenCV
FacialLandmarkDetection								TSNE
Federated-Learning-Intro							TensorBoard-With-Pytorch-Lightning
FunnyMirrors									TensorFlow-Fully-Convolutional-Image-Classification
GOTURN										TensorFlow-Receptive-Field-With-Backprop
Getting-Started-OpenCV-CUDA-Module						Tetris
Graph-Convolutional-Networks-Model-Relations-In-Data				TextDetectionEAST
HandPose									Threshold
Hangman										Training_a_custom_hand_detector_with_dlib
HeadPose									UI-cvui
Holes										UnderstandingLensDistortion
Homography									Universal-Sentence-Encoder
Hough-Transform									Variational-Autoencoder-TensorFlow
HuMoments									VideoBackgroundEstimation
Human-Action-Recognition-Using-Detectron2-And-Lstm				VideoReadWriteDisplay
Image-Classification-in-PyTorch							VideoStabilization
Image-Inpainting								WarpTriangle
Image-classification-pre-trained-models						XeusCling
Image-to-Image-Translation-with-GAN						YOLOv3-Training-Snowman-Detector
ImageAlignment									app-seperation-semseg
ImageAlignment-FeatureBased							barcode-QRcodeScanner
ImageMetrics									digits-classification
Improving-Illumination-in-Night-Time-Images					docs
Inference-for-PyTorch-Models							downloadOpenImages
Install-OpenCV-Windows-exe							forEach
InstallScripts									hdr
Intro-to-Generative-Adversarial-Network						heatmap
InvisibilityCloak								imread
Keras-Fine-Tuning								keras-linear-regression
Keras-ImageNet-Models								ninjaEyeDetector
Keras-Transfer-Learning								otsu-method
KerasCNN-CIFAR									pymodule
KerasMLP-MNIST									qt-test
MRNet-Single-Model								stereo-camera
MRnet-MultiTask-Approach							tracking
Mask-RCNN									video-classification-and-human-activity-recognition
MultiObjectTracker
electron@diynoMacBook-Pro learnopencv % 
electron@diynoMacBook-Pro learnopencv % ls MASK-RCNN
CMakeLists.txt					cars.mp4					mask_rcnn.py
LICENSE						colors.txt					mask_rcnn_inception_v2_coco_2018_01_28.pbtxt
README.md					mask_rcnn.cpp					mscoco_labels.names
cars.jpg					mask_rcnn.out
electron@diynoMacBook-Pro learnopencv %

このうち、__MASK-RCNN__を使います。

Termimal
electron@diynoMacBook-Pro learnopencv % cd MASK-RCNN
electron@diynoMacBook-Pro MASK-RCNN % ls
CMakeLists.txt					cars.mp4					mask_rcnn.py
LICENSE						colors.txt					mask_rcnn_inception_v2_coco_2018_01_28.pbtxt
README.md					mask_rcnn.cpp					mscoco_labels.names
cars.jpg					mask_rcnn.out
electron@diynoMacBook-Pro MASK-RCNN %

今回は、手元の独自データセットを用いたモデル学習は行いません。
学習済みモデルを動かして、推論工程だけを行うことにします。

推論工程を行うときには、__mask_rcnn.py__を使います。

Termimal
electron@diynoMacBook-Pro MASK-RCNN % ls mask_rcnn.py
mask_rcnn.py
electron@diynoMacBook-Pro MASK-RCNN %

推論対象のデータファイルを取得します。

Python

wget http://download.tensorflow.org/models/object_detection/mask_rcnn_inception_v2_coco_2018_01_28.tar.gz tar zxvf mask_rcnn_inception_v2_coco_2018_01_28.tar.gz

Download and extract the needed model files.

Usage Examples :

Python

python3 mask_rcnn.py --image=cars.jpg python3 mask_rcnn.py --video=cars.mp4

It starts the webcam - if no argument provided.

Termimal
electron@diynoMacBook-Pro MASK-RCNN % wget http://download.tensorflow.org/models/object_detection/mask_rcnn_inception_v2_coco_2018_01_28.tar.gz tar zxvf mask_rcnn_inception_v2_coco_2018_01_28.tar.gz
--2021-08-07 14:02:16--  http://download.tensorflow.org/models/object_detection/mask_rcnn_inception_v2_coco_2018_01_28.tar.gz
download.tensorflow.org (download.tensorflow.org) をDNSに問いあわせています... 2404:6800:4004:80e::2010, 172.217.175.112
download.tensorflow.org (download.tensorflow.org)|2404:6800:4004:80e::2010|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 177817887 (170M) [application/x-tar]
`mask_rcnn_inception_v2_coco_2018_01_28.tar.gz' に保存中

mask_rcnn_inception_v2_coco_2018_01_28.tar 100%[======================================================================================>] 169.58M  35.0MB/s 時間 5.4s     

2021-08-07 14:02:22 (31.1 MB/s) - `mask_rcnn_inception_v2_coco_2018_01_28.tar.gz' へ保存完了 [177817887/177817887]

--2021-08-07 14:02:22--  http://tar/
tar (tar) をDNSに問いあわせています... 失敗しました: nodename nor servname provided, or not known.
wget: ホストアドレス `tar' を解決できませんでした。
--2021-08-07 14:02:23--  http://zxvf/
zxvf (zxvf) をDNSに問いあわせています... 失敗しました: nodename nor servname provided, or not known.
wget: ホストアドレス `zxvf' を解決できませんでした。
--2021-08-07 14:02:23--  http://mask_rcnn_inception_v2_coco_2018_01_28.tar.gz/
mask_rcnn_inception_v2_coco_2018_01_28.tar.gz (mask_rcnn_inception_v2_coco_2018_01_28.tar.gz) をDNSに問いあわせています... 失敗しました: nodename nor servname provided, or not known.
wget: ホストアドレス `mask_rcnn_inception_v2_coco_2018_01_28.tar.gz' を解決できませんでした。
終了しました --2021-08-07 14:02:23--
経過時間: 6.4s
ダウンロード完了: 1 ファイル、170M バイトを 5.4s で取得 (31.1 MB/s)
electron@diynoMacBook-Pro MASK-RCNN % 

tar.gzで固められた圧縮ファイルが取得できました。

Termimal
electron@diynoMacBook-Pro MASK-RCNN % ls
CMakeLists.txt					cars.mp4					mask_rcnn.py
LICENSE						colors.txt					mask_rcnn_inception_v2_coco_2018_01_28.pbtxt
README.md					mask_rcnn.cpp					mask_rcnn_inception_v2_coco_2018_01_28.tar.gz
cars.jpg					mask_rcnn.out					mscoco_labels.names
electron@diynoMacBook-Pro MASK-RCNN % 

tar コマンド(zxvfオプション)で解凍します。

Termimal
electron@diynoMacBook-Pro MASK-RCNN % tar zxvf mask_rcnn_inception_v2_coco_2018_01_28.tar.gz 
x mask_rcnn_inception_v2_coco_2018_01_28/
x mask_rcnn_inception_v2_coco_2018_01_28/model.ckpt.index
x mask_rcnn_inception_v2_coco_2018_01_28/checkpoint
x mask_rcnn_inception_v2_coco_2018_01_28/pipeline.config
x mask_rcnn_inception_v2_coco_2018_01_28/model.ckpt.data-00000-of-00001
x mask_rcnn_inception_v2_coco_2018_01_28/model.ckpt.meta
x mask_rcnn_inception_v2_coco_2018_01_28/saved_model/
x mask_rcnn_inception_v2_coco_2018_01_28/saved_model/saved_model.pb
x mask_rcnn_inception_v2_coco_2018_01_28/saved_model/variables/
x mask_rcnn_inception_v2_coco_2018_01_28/frozen_inference_graph.pb
electron@diynoMacBook-Pro MASK-RCNN % 

解凍できたので、__mask_rcnn_inception_v2_coco_2018_01_28__というディレクトリが出来上がっています。

Termimal
electron@diynoMacBook-Pro MASK-RCNN % ls
CMakeLists.txt					colors.txt					mask_rcnn_inception_v2_coco_2018_01_28.pbtxt
LICENSE						mask_rcnn.cpp					mask_rcnn_inception_v2_coco_2018_01_28.tar.gz
README.md					mask_rcnn.out					mscoco_labels.names
cars.jpg					mask_rcnn.py
cars.mp4					mask_rcnn_inception_v2_coco_2018_01_28
electron@diynoMacBook-Pro MASK-RCNN % 

解凍した結果、次のファイルを取り出せました。
中身を見てみます。

Termimal
electron@diynoMacBook-Pro MASK-RCNN % ls mask_rcnn_inception_v2_coco_2018_01_28
checkpoint			model.ckpt.data-00000-of-00001	model.ckpt.meta			saved_model
frozen_inference_graph.pb	model.ckpt.index		pipeline.config
electron@diynoMacBook-Pro MASK-RCNN % 

ようやくこれで、推論実行スクリプト・ファイル(mask_rcnn.py)を実行する準備が整いました。

__cars.jpgという静止画像ファイルと、cars.mp4__という動画ファイルがあります。

Termimal
electron@diynoMacBook-Pro MASK-RCNN % ls
CMakeLists.txt					cars_mask_rcnn_out_py.avi			mask_rcnn.py
LICENSE						cars_mask_rcnn_out_py.jpg			mask_rcnn_inception_v2_coco_2018_01_28
README.md					colors.txt					mask_rcnn_inception_v2_coco_2018_01_28.pbtxt
cars.jpg					mask_rcnn.cpp					mask_rcnn_inception_v2_coco_2018_01_28.tar.gz
cars.mp4					mask_rcnn.out					mscoco_labels.names
electron@diynoMacBook-Pro MASK-RCNN % 
  • cars.jpg

cars.jpg

  • cars.mp4

スクリーンショット 2021-08-07 15.12.05.png

__cars.jpg__という静止画像ファイルを与えて、推論を実行します。

Termimal
electron@diynoMacBook-Pro MASK-RCNN % python3 mask_rcnn.py --image=cars.jpg                                      
Using CPU device
Done processing !!!
Output file is stored as  cars_mask_rcnn_out_py.jpg
electron@diynoMacBook-Pro MASK-RCNN % 

cars_mask_rcnn_out_py.jpgファイルが出力されたみたいです。

>Output file is stored as cars_mask_rcnn_out_py.jpg

たしかにありました。

Termimal
electron@diynoMacBook-Pro MASK-RCNN % ls cars_mask_rcnn_out_py.jpg
cars_mask_rcnn_out_py.jpg

開いてみます。

Termimal
electron@diynoMacBook-Pro MASK-RCNN % open cars_mask_rcnn_out_py.jpg
electron@diynoMacBook-Pro MASK-RCNN % 

スクリーンショット 2021-08-07 14.32.50.png

次は動画MP4ファイルを与えてみます。

Termimal
electron@diynoMacBook-Pro MASK-RCNN % python3 mask_rcnn.py --video=cars.mp4
Using CPU device
^CTraceback (most recent call last):
  File "/Users/electron/Desktop/learnopencv/Mask-RCNN/mask_rcnn.py", line 166, in <module>
    blob = cv.dnn.blobFromImage(frame, swapRB=True, crop=False)
KeyboardInterrupt

electron@diynoMacBook-Pro MASK-RCNN % 

スクリーンショット 2021-08-07 15.12.47.png

####別の静止画と動画ファイルを取得

Termimal
electron@diynoMacBook-Pro MASK-RCNN % ls *.jpg                             
cars.jpg			cars_mask_rcnn_out_py.jpg	doraemon.jpg			ioc_conference.jpg
electron@diynoMacBook-Pro MASK-RCNN %
Termimal
electron@diynoMacBook-Pro MASK-RCNN % ls *.mp4
cars.mp4	doraemon.mp4	trump.mp4
electron@diynoMacBook-Pro MASK-RCNN % 

###Wifi接続を切ってオフライン環境にする

オフライン環境でも、オンライン環境とまったく変わらない同じ動作をしました。

( 入力画像 )

doraemon.jpg

Termimal
electron@diynoMacBook-Pro MASK-RCNN % python3 mask_rcnn.py --image=doraemon.jpg
Using CPU device
Done processing !!!
Output file is stored as  doraemon_mask_rcnn_out_py.jpg
electron@diynoMacBook-Pro MASK-RCNN %

( 出力画像 )

doraemon_mask_rcnn_out_py.jpg

Termimal
electron@diynoMacBook-Pro MASK-RCNN % ls *doraemon*
doraemon.jpg			doraemon_mask_rcnn_out_py.jpg
electron@diynoMacBook-Pro MASK-RCNN % open doraemon_mask_rcnn_out_py.jpg

####別の画像を試してみます。

( 入力画像 )

ioc_conference.jpg

Termimal
electron@diynoMacBook-Pro MASK-RCNN % python3 mask_rcnn.py --image=ioc_conference.jpg
Using CPU device
Done processing !!!
Output file is stored as  ioc_conference_mask_rcnn_out_py.jpg
electron@diynoMacBook-Pro MASK-RCNN %

( 出力画像 )

ioc_conference_mask_rcnn_out_py.jpg

Termimal
electron@diynoMacBook-Pro MASK-RCNN % ls *ioc*                                       
ioc_conference.jpg			ioc_conference_mask_rcnn_out_py.jpg
electron@diynoMacBook-Pro MASK-RCNN % 
electron@diynoMacBook-Pro MASK-RCNN % open ioc_conference_mask_rcnn_out_py.jpg

####今度はオフライン環境で、MP4ファイル(動画)を試してみます。

Termimal
electron@diynoMacBook-Pro MASK-RCNN % python3 mask_rcnn.py --video=trump.mp4
Using CPU device
^CTraceback (most recent call last):
  File "/Users/electron/Desktop/learnopencv/Mask-RCNN/mask_rcnn.py", line 188, in <module>
    cv.imshow(winName, frame)
KeyboardInterrupt

electron@diynoMacBook-Pro MASK-RCNN % 

スクリーンショット 2021-08-07 15.38.21.png

Termimal
electron@diynoMacBook-Pro MASK-RCNN % python3 mask_rcnn.py --video=doraemon.mp4
Using CPU device
^C^CTraceback (most recent call last):
  File "/Users/electron/Desktop/learnopencv/Mask-RCNN/mask_rcnn.py", line 172, in <module>
    boxes, masks = net.forward(['detection_out_final', 'detection_masks'])
KeyboardInterrupt

electron@diynoMacBook-Pro MASK-RCNN % 

スクリーンショット 2021-08-07 15.39.25.png

スクリーンショット 2021-08-07 15.42.14.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?