Objekterkennung, Instanz- und panoptische Segmentierung mit MMDetection

MMDetection ist eine Open-Source-Toolbox zur Objekterkennung auf Basis von PyTorch, die Teil des OpenMMLab- Projekts ist. Enthält die folgenden Hauptfunktionen:

  • Unterstützt drei Aufgaben
    • Unter Objekterkennung versteht man die Aufgabe, Objekte in Bildern zu klassifizieren und zu lokalisieren
    • Instanzsegmentierung (Instanzsegmentierung) bezieht sich auf die Aufgabe, Bildobjekte zu klassifizieren und zu segmentieren
    • Panoptische Segmentierung (panoptische Segmentierung) ist eine Erkennungsaufgabe, die semantische Segmentierung (Klassifizierung jedes Pixels eines Bildes) und Instanzsegmentierung (Erkennung von Objektinstanzen und deren Segmentierung) vereint.
  • Modulares Design zur flexiblen Unterstützung von 6 Datensätzen, 57 verschiedenen Algorithmen und umfangreicher Datenerweiterung, wodurch mehr als 450 vorab trainierte Modelle bereitgestellt werden
  • Unterstützen Sie die Bereitstellung Dutzender Algorithmusmodelle

Installieren (Objekterkennung)

Verwenden Sie den folgenden Befehl, um schnell eine virtuelle Umgebung zu erstellen:

$ python -m venv venv
# Windows 下进入虚拟环境
$ venv/Scripts/activate

Überprüfen Sie im Voraus die übereinstimmenden Versionsnummern von PyTorch + MMDetection + MMCV in MMDetection und MMCV-Versionskompatibilität . Die Versionsanforderungen, die ich jetzt sehe, sind beispielsweise:

  • PyTorch: 1.3+
  • MMDetection: 2.28.1
  • MMCV: >=1,3,17, <1,8,0

MMDetection ist ein auf PyTorch basierendes Erkennungsframework . Installieren Sie zunächst torchdie Bibliothek:

$ pip install torch
$ pip install opencv-python
$ pip install torchvision

MMDetection umfasst MMDetection und MMCV. Die beiden sind integriert. MMCV muss installiert werden. Befolgen Sie die Anweisungen unter MMCV installieren – Mit mim installieren, um mit mim (dem Paketverwaltungstool des OpenMMLab-Projekts) zu installieren:

$ pip install openmim
$ mim install mmcv-full==1.7.1

Installieren Sie dann MMDetection (das Wichtige wird zweimal gesagt). Überprüfen Sie im Voraus die übereinstimmende Versionsnummer von PyTorch + MMDetection + MMCV in MMDetection und die MMCV-Versionskompatibilitätmim . Wählen Sie die entsprechende Version für die Installation aus. Es wird empfohlen, die Schnellinstallation direkt zu verwenden :

$ mim install mmdet==2.28.1

Wenn unter dem Windows-System während des Installationsvorgangs die folgenden Ausnahmen auftreten:

$       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

Das Problem kann gemäß der unter „Microsoft Visual C++ 14.0 oder höher ist erforderlich. Holen Sie es sich mit der Lösung „Microsoft C++ Build Tools““ bereitgestellten Lösung gelöst werden.

Führen Sie nach Abschluss der Installation den folgenden Python-Code (demo.py) aus, um zu überprüfen, ob MMDetection und die erforderliche Umgebung korrekt installiert sind:

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')

Die Struktur des Projektverzeichnisses ist derzeit wie folgt:

Fügen Sie hier eine Bildbeschreibung ein

demo/demo_result.jpgWenn MMDetection erfolgreich installiert wurde, kann der obige Code vollständig ausgeführt werden und die folgenden Dateien erfolgreich generieren :

Fügen Sie hier eine Bildbeschreibung ein

Instanzsegmentierung

Unter Instanzsegmentierung versteht man die Aufgabe, Bildobjekte zu klassifizieren und zu segmentieren. Öffnen Sie MMDetection – Model Library/MMDetection und wählen Sie Instance SegmentationAufgabentyp:

Fügen Sie hier eine Bildbeschreibung ein

Wählen Sie einen Algorithmus mit einem hohen AP-Wert (durchschnittliche Präzision) und einem relativ neuen Jahr. Der Algorithmusname, den Sie jetzt sehen, ist beispielsweise SCNet (der Algorithmus RF-Next erfordert zur Ausführung eine GPU), mmdetection-master/configs/suchen Sie den entsprechenden scnetOrdner und seine abhängigen htcOrdner im zuvor heruntergeladenen Verzeichnis und kopieren Sie sie in das aktuelle Projektverzeichnis configs/. Klicken Sie auf den Namen des Algorithmus , um die Seite mit den Algorithmusdetails aufzurufen:

Fügen Sie hier eine Bildbeschreibung ein

Wählen Sie in ähnlicher Weise ein Modell mit einem höheren AP-Wert (durchschnittliche Präzision) aus, kopieren Sie zuerst den Text des Modellnamens hierher und configs/scnet/metafile.ymlsuchen Sie dann in der Datei nach diesem Text:

Fügen Sie hier eine Bildbeschreibung ein

Nach Abschluss der Suche können zwei Konfigurationen und Parameter abgerufen werden:

  • Config: der Konfigurationsdateipfad des Modells ( config_file = 'xxx.py')
  • Gewichte: Die Download-URL des Modells. Laden Sie die Modelldatei über diese Adresse herunter ( checkpoint_file = 'xxx.pth').

Führen Sie nach Abschluss der oben genannten Vorbereitungen den folgenden Python-Code (demo.py) aus, um zu überprüfen, ob es möglich ist, Bilder zu klassifizieren und Objekte zu segmentieren:

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')

Die Struktur des Projektverzeichnisses ist derzeit wie folgt:

Fügen Sie hier eine Bildbeschreibung ein

Wenn die Instanzsegmentierungsaufgabe von MMDetection im obigen Code vollständig ausgeführt werden kann, demo/demo_result.jpgwerden die folgenden Dateien reibungslos generiert:

Fügen Sie hier eine Bildbeschreibung ein

Panorama-Segmentierung

Panoptische Segmentierung (panoptische Segmentierung) ist eine Erkennungsaufgabe, die semantische Segmentierung (Klassifizierung jedes Pixels eines Bildes) und Instanzsegmentierung (Erkennung von Objektinstanzen und deren Segmentierung) vereint. Öffnen Sie wie zuvor MMDetection – Model Library/MMDetection und wählen Sie Panoptic SegmentationAufgabentyp:

Fügen Sie hier eine Bildbeschreibung ein

Derzeit gibt es hier nur einen Algorithmus, daher können Sie nur den PanopticFPN-mmdetection-master/configs/ Algorithmus auswählen oder den entsprechenden panoptic_fpnOrdner im zuvor heruntergeladenen Verzeichnis suchen und ihn in das aktuelle Projektverzeichnis kopieren configs/. Klicken Sie auf den Namen des Algorithmus , um die Seite mit den Algorithmusdetails aufzurufen:

Fügen Sie hier eine Bildbeschreibung ein

Wählen Sie dann ein Modell aus, kopieren Sie den Text des Modellnamens und configs/panoptic_fpn/metafile.ymlsuchen Sie in der Datei:

Fügen Sie hier eine Bildbeschreibung ein

Nachdem die Suche abgeschlossen ist, können Sie die Konfigurationsparameter Config ( config_file = 'xxx.py') und Weights Download File Path ( ) abrufen. checkpoint_file = 'xxx.pth'Führen Sie dann den folgenden Python-Code (demo.py) aus, um zu überprüfen, ob das Bild für jedes Pixel klassifiziert werden kann, während Objektinstanzen erkannt und Segmentierungsaufgaben ausgeführt werden:

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')

Zu diesem Zeitpunkt ist die Verzeichnisstruktur des Projekts wie folgt:

Fügen Sie hier eine Bildbeschreibung ein

Wenn die Panorama-Segmentierungsaufgabe im obigen Code reibungslos ausgeführt werden kann, demo/demo_result.jpgwerden die folgenden Dateien generiert:

Fügen Sie hier eine Bildbeschreibung ein

Nachdem Sie die Übung hier abgeschlossen haben, werden Sie feststellen, dass der aufrufende Code tatsächlich derselbe ist. Ändern Sie einfach die Konfigurationsdatei und die Modelldatei, um unterschiedliche Funktionen zu erreichen!

Als nächstes können Sie auch „Python ruft MMDetection auf, um KI-Mattierung zum Entfernen des Hintergrunds zu realisieren“ lesen , um mehr über die praktische Anwendung zu erfahren.

Supongo que te gusta

Origin blog.csdn.net/hekaiyou/article/details/129082633
Recomendado
Clasificación