[PYTHON] Kommentieren Sie Ihre eigenen Daten, um Mask R-CNN zu trainieren

** Instanzsegmentierung ** (Objekterkennung + Segmentierung)

Die Erklärung zu Maske R-CNN entfällt. Bitte beachten Sie Folgendes. [Einführung in die Objekterkennung mit der neuesten Region CNN (R-CNN) ~ Was ist Objekterkennung? R-CNN, Schnelles R-CNN, Schnelleres R-CNN, Maske R-CNN ~](https://qiita.com / arutema47 / items / 8ff629a1516f7fd485f9)

Die Mask R-CNN-Implementierung verwendet das folgende Repository. https://github.com/facebookresearch/maskrcnn-benchmark

Datenerstellung mit Labelme

https://github.com/wkentaro/labelme Es ist im Grunde das gleiche wie "README.md" oben Ich werde unten zusammenfassen

Installation

Sie können es auch mit "$ pip install label me" eingeben. Da Sie jedoch später ein Skript für die Datenkonvertierung verwenden, führen Sie "git clone" aus

.sh


$ git clone https://github.com/wkentaro/labelme.git
$ cd labelme
$ pip install -e .

Anlaufen

Erstellen Sie "class.txt" mit den Klassennamen, die mit Zeilenumbrüchen aufgeführt sind. Fügen Sie in der ersten Zeile __ignore__ hinzu, da beim Konvertieren der Daten möglicherweise ein Fehler auftritt. Beispiel:

classes.txt


__ignore__
person
bicycle
car
...

Beschriften Sie mich mit dem folgenden Befehl

.sh


$ labelme <Datenordnerpfad> --labels <classes.txt Pfad> --nodata

Anmerkung

Die folgende Seite wird hilfreich sein. Es ist sehr einfach zu kommentieren. Label für semantische Segmentierungsanmerkungen

Datenformatkonvertierung

Konvertiert die erstellten Anmerkungsdaten und das Originalbild für Mask R-CNN.

.sh


$ cd labelme/examplts/instance_segmentation
$ ./labelme2coco.py <Datenordnerpfad> <Zu erstellender Verzeichnisname> --labels <classes.txt>

dadurch <Name des zu erstellenden Verzeichnisses> / JPEGImages ・ ・ ・ Verzeichnis mit Bildern <Name des zu erstellenden Verzeichnisses> / annotations.json ・ ・ son json-Datei mit Anmerkungsinformationen wird erstellt

Zug maskrcnn

Installation

https://github.com/facebookresearch/maskrcnn-benchmark Installieren Sie oben gemäß "README.md"

Die folgenden Artikel sind hilfreich. [Eigenes Datentraining mit Pytorch1.1 + MaskRCNN (1)](https://qiita.com/kuroyagi/items/e66ca85f8d118c07eb95#7-%E8%A8%93%E7%B7%B4%E3%81%97% E3% 81% 9F% E7% B5% 90% E6% 9E% 9C% E3% 82% 92% E4% BD% BF% E3% 81% A3% E3% 81% A6% E8% 87% AA% E5% 88% 86% E3% 81% A7% E6% 8E% A8% E8% AB% 96)

Datenplatzierung

Platzieren Sie die Daten an einer Stelle, an der maskrcnn sie lesen kann

Oben erstellt JPEGImages, annotations.json Zu maskrcnn_benchmark / datasets / <neuer Verzeichnisname> / eingestellt auf

Datenregistrierung

Fügen Sie Folgendes zu DATASETS in maskrcnn_benchmark / config / path_catalog.py hinzu

Bitte geben Sie ** COCO ** in ** "neuer Datenname" ** an, um zu lesen, dass es im COCO-Format vorliegt.

.json


"Neuer Datenname" : {
    "img_dir" : "<Neuer Verzeichnisname>"
    "ann_file" : "<Neuer Verzeichnisname>/annotations.json"
} 

Ausführung lernen

Registrieren Sie mit dem obigen Vorgang die Daten für ** Lernen ** und ** Test **.

Sie sollten in der Lage sein zu lernen bei:

.sh


$ python tools/train_net.py --config-file configs/e2e_mask_rcnn_R_50_FPN_1x.yaml DATASETS.TRAIN "(\"<Neuer Datenname(Zum Lernen)>\",)" DATASETS.TEST "(\"<Neuer Datenname(zum Test)>\",)"

Durch Angabe von "--config-file" aus "configs /" können Sie eine Konfiguration wie die Netzwerkstruktur angeben. Wenn Sie die ** Lernrate ** oder ** Stapelgröße ** ändern möchten, können Sie sie ändern, indem Sie sie zur Laufzeit schreiben.

Beispiel:

$ python tools/train_net.py --config-file configs/e2e_mask_rcnn_R_50_FPN_1x.yaml DATASETS.TRAIN "(\"<Neuer Datenname(Zum Lernen)>\",)" DATASETS.TEST "(\"<Neuer Datenname(zum Test)>\",)" SOLVER.BASE_LR 0.0025 SOLVER.IMS_PER_BATCH 2 TEST.IMS_PER_BATCH 1

SOLVER.BASE_LR: Lernrate zu Beginn des Lernens (abnehmend) SOLVER.IMS_PER_BATCH: Stapelgröße während des Trainings TEST.IMS_PER_BATCH: Stapelgröße zur Testzeit

Alle Parameter maskrcnn_benchmark/config/defaults.py Es ist geschrieben in.

wichtiger Punkt

Ein anderes Objekt mit derselben Bezeichnung wird als ein Objekt erkannt

Beim Konvertieren der Daten von labelme werden diese standardmäßig als ein Objekt erkannt. Wenn Sie möchten, dass sie separat erkannt werden, ändern Sie "labelme2coco.py" wie folgt. https://github.com/wkentaro/labelme/issues/419#issuecomment-511853597

Die Segmentierung erfolgt nur für ein Objekt

Es scheint, dass die Version von "Pytorch" während des Trainings alle Beschriftungen für ein Objekt erstellt.

maskrcnn_benchmark/data/datasets/coco.py#L94 Weil das Verhalten von manchmal unerwartet ist target = target.clip_to_image (remove_empty = True) target = target.clip_to_image(remove_empty=False) Bitte wechseln Sie zu.

Das ist es. Vielen Dank!

Recommended Posts

Kommentieren Sie Ihre eigenen Daten, um Mask R-CNN zu trainieren
Wenn Sie dasselbe wie zuvor verwenden, können Sie dies visualisieren, indem Sie Japan, China und Südkorea ausschließen, in denen viele Menschen infiziert sind. In diesem Fall lauten die Daten für "2020/02/21" wie folgt. Besonders auffällig sind Südostasien, Europa und Nordamerika. Ich hoffe es konvergiert so schnell wie möglich. .. .. Migrieren Sie Python, Pandas, Python3, Zeitreihendaten und eigene CMS-Daten nach WordPress
Trainieren Sie Stanford NER Tagger mit Ihren eigenen Daten
Überbrücken Sie ROS mit Ihrem eigenen Protokoll
Trainiere UGATIT mit deinem eigenen Datensatz
Fügen Sie mitmproxy Ihre eigene Inhaltsansicht hinzu
So importieren Sie Ihr eigenes Modul mit jupyter
So installieren Sie Ihre eigene (Root-) Zertifizierungsstelle
[Zur Aufnahme] Keras-Bildsystem Teil 1: Wie erstelle ich einen eigenen Datensatz?
Versuchen Sie, Ihr eigenes AWS-SDK mit bash zu erstellen
So definieren Sie Ihr eigenes Ziel in Sage
Schritte zum Installieren Ihrer eigenen Bibliothek mit pip
Memo zum Erstellen einer eigenen Box mit Peppers Python
Erstellen Sie Ihre eigenen Big Data in Python zur Validierung
[Einführung in die Udemy Python3 + -Anwendung] 66. Erstellen einer eigenen Ausnahme
Versuchen Sie, Ihr eigenes Intro-Quiz mit Python zu verbessern
Versuchen Sie, die LED in Ihren eigenen PC einzubauen (leicht)
[Road to Intermediate Python] Definieren Sie in Ihrer eigenen Klasse
Ich habe versucht, Mask R-CNN mit Optical Flow zu interpolieren