概要
まだまだ日本語情報が少ない物体検出フレームワーク"MMDetection"について、学んだことを記録していこうと思います。間違い等ありましたらぜひコメントで教えてください。よろしくお願いします。
前回:環境構築&インストール編
学習済モデルについて
ありがたいことに、MMDetectionは多くの学習済物体検出・セグメンテーションモデルを用意してくれています。これらの学習済モデルを用いることで、私たちは簡単にモデルを動かして遊ぶことができます。
学習済モデルの一覧はこちら。
学習済モデルのダウンロード
今回は物体検出モデルのFaster R-CNNとインスタンスセグメンテーションモデルのMask R-CNNを使って遊びます。
1. checkpoints
ディレクトリの作成
まずはmmdetection
の直下にcheckpoints
ディレクトリを作成します。
cd mmdetection
mkdir checkpoints
2. ダウンロード
checkpoints
ディレクトリにFaster-RCNNとMask-RCNNの学習済モデルをダウンロードします。
# Faster R-CNN
wget -P ./checkpoints http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
# Mask R-CNN
wget -P ./checkpoints http://download.openmmlab.com/mmdetection/v2.0/mask_rcnn/mask_rcnn_r50_fpn_1x_coco/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth
Faster R-CNNで物体検出
デモ用の画像がmmdetection/demo/demo.jpg
に用意されているのでこの画像で物体検出してみます。
今回は試しに動かすことを目的にしているので詳細は触れませんが、MMDetectionは非常に便利なAPIが用意されているので、それを使って驚くほど簡単にモデルを使ってテストが行えます。
1. テスト用コードの作成
以下の内容のmmdetection/demo/my_test.py
というファイルを作成します。
from mmdet.apis import init_detector, inference_detector
import mmcv
# モデルの設定ファイルと学習済モデルへのパスを指定する
config_file = '../configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
checkpoint_file = '../checkpoints/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth'
# モデルの初期化
model = init_detector(config_file, checkpoint_file, device='cuda:0')
# テストする画像を指定
img = 'demo.jpg'
# テスト
result = inference_detector(model, img)
# 結果の保存
model.show_result(img, result, out_file='result_faster_rcnn.jpg')
2. 実行
※ 仮想環境の起動conda activate open-mmlab
を忘れがちなので気をつけましょう。
python my_test.py
3. 結果の確認
実行がうまくいくと(多分UserWarningは出てきます)、mmdetection/demo
直下にresult_faster_rcnn.jpg
というファイルが生成されているはずです。
ファイルを開くと、、、
ご覧のように、正しく物体検出が行われていることがわかります。
Mask R-CNNでインスタンスセグメンテーション
基本的にはテスト用コードのconfig_file
とcheckpoint_file
を変更するだけで動きます。
1. テスト用コードの作成
mmdetection/demo/my_test.py
の内容を修正します。
from mmdet.apis import init_detector, inference_detector
import mmcv
# モデルの設定ファイルと学習済モデルへのパスを指定する
config_file = '../configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py'
checkpoint_file = '../checkpoints/mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth'
# モデルの初期化
model = init_detector(config_file, checkpoint_file, device='cuda:0')
# テストする画像を指定
img = 'demo.jpg'
# テスト
result = inference_detector(model, img)
# 結果の保存
model.show_result(img, result, out_file='result_mask_rcnn.jpg')
2. 実行
python my_test.py
3. 結果の確認
とても簡単に実行できていることがわかります。
おまけ
僕が大好きなあいみょんのライブ映像にセグメンテーションをかけてみました。
でもよく考えたら著作権的にあげられませんね、、笑
次は既存モデルの学習についてまとめようと思います。