spmallickさんがGitHUbに上げている実コードを動かしてみました。
Macbook(mac Catalina OS)のCPU環境で、問題なく動くことを確認しました。
また、Wifi接続をオフにた後のオフライン環境でも、問題なく動きました。
###実行結果
####( 静止画像ファイル )
####( 動画ファイル )
###git cloneした実装コード
今回、使うのは、以下のGitHubリポジトリにある実装コードです。
- [(GitHub) spmallick/learnopencv/tree/master/Mask-RCNN] (https://github.com/spmallick/learnopencv/tree/master/Mask-RCNN)
electron@diynoMacBook-Pro Desktop % git clone https://github.com/spmallick/learnopencv.git
electron@diynoMacBook-Pro Desktop %
electron@diynoMacBook-Pro Desktop % cd learnopencv
このリポジトリには、様々な用途で利用可能な多くの資源が同梱されている。
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__を使います。
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__を使います。
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.
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で固められた圧縮ファイルが取得できました。
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オプション)で解凍します。
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__というディレクトリが出来上がっています。
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 %
解凍した結果、次のファイルを取り出せました。
中身を見てみます。
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__という動画ファイルがあります。
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.mp4 )
__cars.jpg__という静止画像ファイルを与えて、推論を実行します。
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
たしかにありました。
electron@diynoMacBook-Pro MASK-RCNN % ls cars_mask_rcnn_out_py.jpg
cars_mask_rcnn_out_py.jpg
開いてみます。
electron@diynoMacBook-Pro MASK-RCNN % open cars_mask_rcnn_out_py.jpg
electron@diynoMacBook-Pro MASK-RCNN %
次は動画MP4ファイルを与えてみます。
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 %
####別の静止画と動画ファイルを取得
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 %
electron@diynoMacBook-Pro MASK-RCNN % ls *.mp4
cars.mp4 doraemon.mp4 trump.mp4
electron@diynoMacBook-Pro MASK-RCNN %
###Wifi接続を切ってオフライン環境にする
オフライン環境でも、オンライン環境とまったく変わらない同じ動作をしました。
( 入力画像 )
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 %
( 出力画像 )
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
####別の画像を試してみます。
( 入力画像 )
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 %
( 出力画像 )
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ファイル(動画)を試してみます。
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 %
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 %