1.はじめに
今回ご紹介するのは、物体検出フレームワーク MMDetectionを使った、インスタンスセグメンテーション(画像から物体を検出し、形を推定するタスク)です。
2.MMDetectionとは?
MMDetectionは、あらかじめ用意されたモジュールを組み合わせることで様々な物体検出のモデルを設計できるフレームワークです。設計内容はconfigファイルに記述し、今回の設計内容は以下の様です。
config = ‘configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco.py'
- モデルタイプ:mask_rcnn
- バックボーン:r50_caffe(ResNet-50_caffe)
- ネックモジュール:fpn(Feature Pyramid Networks)
- その他の設定:mstrain_poly
- 学習エポック数:3x(36エポック)
- データセット名:coco
早速、コードを動かしてみましょう。
3.コード
コードはGoogle Colabで動かす形にしてGithubに上げてありますので、それに沿って説明して行きます。自分で動かしてみたい方は、この「リンク」をクリックし表示されたノートブックの先頭にある「Colab on Web」ボタンをクリックすると動かせます。
まず、セットアップを行います。mmcv-fullのインストールに時間が掛かるため、セットアップ全体では20〜30分位です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# チェックnvcc, gccバージョン !nvcc -V !gcc --version # 7.5.0 # pytorchバージョン変更 !pip install -U torch==1.5.1+cu101 torchvision==0.6.1+cu101 -f https://download.pytorch.org/whl/torch_stable.html # mmcv-fullインストール !pip install mmcv-full==1.3.8 # githubからコードを取得 !rm -rf mmdetection !git clone https://github.com/cedro3/mmdetection.git %cd mmdetection # ライブラリーインストール !pip install -e . # Pillowバージョン変更 !pip install Pillow==7.0.0 # 学習済みパラメータのダウンロード !mkdir checkpoints !wget -c https://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth \ -O checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth # 初期設定 from mmdet.apis import inference_detector, init_detector, show_result_pyplot config = 'configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco.py' checkpoint = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth' model = init_detector(config, checkpoint, device='cuda:0') # チェック MMDetectionバージョン import mmdet print(mmdet.__version__) # 2.17.0 # チェック mmcvバージョン from mmcv.ops import get_compiling_cuda_version, get_compiler_version print(get_compiling_cuda_version()) # 11.1 print(get_compiler_version()) # GCC 7.5 |
サンプル画像のインスタンスセグメンテーションをやってみましょう。自分の画像でやってみたい場合は、demoフォルダーへその画像をアップロードし、img: でその画像を指定して下さい。
1 2 3 |
#@title 画像の物体検出 img = 'demo/demo2.jpg'#@param {type:"string"} result = inference_detector(model, img) |
下記で、検出した画像を表示します。
1 2 |
#@title 検出画像表示 show_result_pyplot(model, img, result, score_thr=0.3) |
それでは、サンプル動画でインスタンスセグメンテーションをやってみましょう。自分の動画でやってみたい場合は、demoフォルダーへその動画をアップロードし、! python demo/video_demo.py demo/demo2.mp4 の demo2.mp4を自分の動画名に置き換えて下さい。
1 2 3 4 5 |
#@title 動画の物体検出 ! python demo/video_demo.py demo/demo2.mp4\ configs/mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco.py\ checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth\ --out result.mp4 |
動画は result.mp4 に保存されます。こんな感じ。
ダンスする人々のインスタンスセグメンテーションが的確に行われていますね。
では、また。
(オリジナルgithub)https://github.com/open-mmlab/mmdetection
コメントを残す