MMDetection は、 OpenMMLabプロジェクトの一部である PyTorch に基づくオブジェクト検出用のオープンソース ツールボックスです。次の主な機能が含まれています。
- 3つのタスクをサポート
- オブジェクト検出とは、画像内のオブジェクトを分類して位置を特定するタスクを指します。
- インスタンス セグメンテーション (インスタンス セグメンテーション) は、画像オブジェクトを分類およびセグメント化するタスクを指します。
- パノプティック セグメンテーション (パノプティック セグメンテーション) は、セマンティック セグメンテーション (画像の各ピクセルの分類) とインスタンス セグメンテーション (オブジェクト インスタンスの検出とそれらのセグメント化) を統合する検出タスクです。
- 6 つのデータセット、57 の異なるアルゴリズム、豊富なデータ拡張を柔軟にサポートするモジュール設計により、450 以上の事前トレーニング済みモデルを提供
- 数十のアルゴリズム モデルの導入をサポート
インストール(物体検出)
次のコマンドを使用して、仮想環境を迅速に生成します。
$ python -m venv venv
# Windows 下进入虚拟环境
$ venv/Scripts/activate
MMDetection の PyTorch + MMDetection + MMCV のバージョン番号と MMCV バージョンの互換性を事前に確認してください。たとえば、現在表示されているバージョン要件は次のとおりです。
- PyTorch: 1.3+
- MM検出: 2.28.1
- MMCV: >=1.3.17、<1.8.0
MMDetection はPyTorchに基づく検出フレームワークです。まずtorch
ライブラリをインストールします。
$ pip install torch
$ pip install opencv-python
$ pip install torchvision
MMDetection には、MMDetection と MMCV が含まれています。この 2 つは統合されています。MMCV をインストールする必要があります。「MMCV のインストール- mim の使用」の手順に従って、 mim (OpenMMLab プロジェクトのパッケージ管理ツール) を使用してインストールします。
$ pip install openmim
$ mim install mmcv-full==1.7.1
次に、MMDetection をインストールします。(重要なことは 2 回言います) MMDetection と MMCV バージョンの互換性mim
で PyTorch + MMDetection + MMCV の一致するバージョン番号を事前に確認し、インストールする適切なバージョンを選択します。クイック インストールを直接使用することをお勧めします。
$ mim install mmdet==2.28.1
Windows システムでは、インストール プロセス中に次の例外が発生した場合:
$ error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
$ [end of output]
$
$ note: This error originates from a subprocess, and is likely not a problem with pip.
$ ERROR: Failed building wheel for pycocotools
$ Failed to build pycocotools
$ ERROR: Could not build wheels for pycocotools, which is required to install pyproject.toml-based projects
「Microsoft Visual C++ 14.0 以降が必要です。「Microsoft C++ Build Tools」ソリューションで入手してください」で提供されている解決策に従って解決できます。
インストールが完了したら、次の Python コード (demo.py) を実行して、MMDetection と必要な環境が正しくインストールされていることを確認します。
import mmcv
from mmdet.apis import init_detector, inference_detector
# 一、指定模型的配置文件和 checkpoint 文件路径
# 下载 https://github.com/open-mmlab/mmdetection 项目并解压
# 把 mmdetection-master/configs/_base_ 文件夹复制到当前项目 configs/ 目录下
# 把 mmdetection-master/configs/faster_rcnn 文件夹复制到当前项目 configs/ 目录下
config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
# 从 model zoo 下载 checkpoint 并放在 `checkpoints/faster_rcnn/` 文件下
# 网址为: http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
checkpoint_file = 'checkpoints/faster_rcnn/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'
# 二、根据配置文件和 checkpoint 文件构建模型
# 有 GPU 时使用 device = 'cuda:0'
device = 'cpu'
# 初始化检测器
model = init_detector(config_file, checkpoint_file, device=device)
# 三、测试单张图片并展示结果
# 图像地址: https://github.com/open-mmlab/mmdetection/blob/master/demo/demo.jpg
img = mmcv.imread('demo/demo.jpg')
# 推理演示图像, 结果是一个 `numpy.ndarray` 列表
result = inference_detector(model, img)
# 将结果可视化
model.show_result(img, result)
# 将可视化结果保存为图片
model.show_result(img, result, out_file='demo/demo_result.jpg')
この時点でのプロジェクトのディレクトリ構成は以下の通りです。
MMDetection が正常にインストールされている場合、上記のコードは完全に実行され、次のdemo/demo_result.jpg
ファイルが正常に生成されます。
インスタンスのセグメンテーション
インスタンス セグメンテーションは、画像オブジェクトを分類およびセグメント化するタスクを指します。MMDetection - モデル ライブラリ/MMDetectionを開き、Instance Segmentation
タスク タイプを選択します。
AP (平均精度) 値が高く、年が比較的新しいアルゴリズムを選択します。たとえば、現在表示されているアルゴリズム名はSCNet (アルゴリズム RF-Next を実行するには GPU が必要です) で、以前にダウンロードしたディレクトリでmmdetection-master/configs/
対応するscnet
フォルダーとその依存htc
フォルダーを見つけて、現在のプロジェクトconfigs/
ディレクトリにコピーします。アルゴリズム名をクリックして、アルゴリズムの詳細ページに移動します。
同様に、より高いAP (平均精度) 値を持つモデルを選択し、まずモデル名のテキストをここにコピーし、configs/scnet/metafile.yml
ファイル内でこのテキストを検索します。
検索が完了すると、2 つの構成とパラメーターを取得できます。
- Config: モデルの構成ファイルのパス (
config_file = 'xxx.py'
) - Weights: モデルのダウンロード URL。このアドレス (
checkpoint_file = 'xxx.pth'
)を通じてモデル ファイルをダウンロードします。
上記の準備が完了したら、次の Python コード (demo.py) を実行して、画像を分類し、オブジェクトをセグメント化できるかどうかを確認します。
import mmcv
from mmdet.apis import init_detector, inference_detector
print('指定模型的配置文件和checkpoint文件路径')
config_file = 'configs/scnet/scnet_r50_fpn_1x_coco.py'
checkpoint_file = 'checkpoints/scnet/scnet_r50_fpn_1x_coco-c3f09857.pth'
print('根据配置文件和checkpoint文件构建模型')
device = 'cpu'
model = init_detector(config_file, checkpoint_file, device=device)
print('测试单张图片并展示结果')
img = mmcv.imread('demo/demo.jpg')
result = inference_detector(model, img)
model.show_result(img, result)
model.show_result(img, result, out_file='demo/demo_result.jpg')
この時点でのプロジェクトのディレクトリ構成は以下の通りです。
上記のコードの MMDetection のインスタンス セグメンテーション タスクが完全に実行できれば、次のdemo/demo_result.jpg
ファイルがスムーズに生成されます。
パノラマセグメンテーション
パノプティック セグメンテーション (パノプティック セグメンテーション) は、セマンティック セグメンテーション (画像の各ピクセルの分類) とインスタンス セグメンテーション (オブジェクト インスタンスの検出とそれらのセグメント化) を統合する検出タスクです。前と同様に、MMDetection - モデル ライブラリ/MMDetectionを開き、Panoptic Segmentation
タスク タイプを選択します。
現在、ここにはアルゴリズムが 1 つだけあるため、PanopticFPNアルゴリズムを選択するか、以前にダウンロードしたディレクトリでmmdetection-master/configs/
対応するpanoptic_fpn
フォルダーを見つけて、それを現在のプロジェクトconfigs/
ディレクトリにコピーすることしかできません。アルゴリズム名をクリックして、アルゴリズムの詳細ページに移動します。
次に、モデルを選択し、モデル名のテキストをコピーして、configs/panoptic_fpn/metafile.yml
ファイル内を検索します。
検索が完了すると、Config ( config_file = 'xxx.py'
) および Weights ダウンロードされたファイル パス ( checkpoint_file = 'xxx.pth'
) 構成パラメーターを取得できます。次に、次の Python コード (demo.py) を実行して、オブジェクト インスタンスの検出とセグメンテーション タスクの実行中に画像をピクセルごとに分類できるかどうかを確認します。
import mmcv
from mmdet.apis import init_detector, inference_detector
# 上面代码没有变,就下面两个变量的值改一下
config_file = 'configs/panoptic_fpn/panoptic_fpn_r50_fpn_1x_coco.py'
checkpoint_file = 'checkpoints/panoptic_fpn/panoptic_fpn_r50_fpn_1x_coco_20210821_101153-9668fd13.pth'
# 下面代码也没有变
device = 'cpu'
model = init_detector(config_file, checkpoint_file, device=device)
img = mmcv.imread('demo/demo.jpg')
result = inference_detector(model, img)
model.show_result(img, result)
model.show_result(img, result, out_file='demo/demo_result.jpg')
このときのプロジェクトのディレクトリ構成は以下の通りです。
上記のコードのパノラマ セグメンテーション タスクがスムーズに実行できる場合、次のdemo/demo_result.jpg
ファイルが生成されます。
ここでの演習が完了すると、呼び出しコードは実際には同じであることがわかります。構成ファイルとモデル ファイルを変更するだけで、異なる機能を実現できます。
次に、「Python は MMDetection を呼び出して背景を削除する AI マット化を実現する」を読んで、実際のアプリケーションについて詳しく学ぶこともできます。