[PYTHON] Informationen zur Lernmethode mit Originaldaten von CenterNet (Objekte als Punkte)

Was ist CenterNet?

CenterNet ist eine Objekterkennungsmethode, die im Artikel Objekte als Punkte vorgeschlagen wird.

Nachdem die Mitte des Objekts als Merkmalspunkt erkannt wurde, werden die Größen für Breite und Höhe vorhergesagt, sodass es Vorteile wie eine leichtere Berechnung als das herkömmliche Verfahren zu haben scheint.

Ich möchte dasselbe tun wie Ich habe versucht, die Position von Tennisspielern, Bällen und Plätzen mithilfe von CenterNet zu ermitteln, und ich mache dies und das mit CenterNet. ..

Obwohl es sich um CenterNet handelt, wird der Quellcode auf Github veröffentlicht, und Rückschlüsse mit dem trainierten Modell können anhand der Readme-Datei erfolgen. Es gab jedoch nicht viele Erklärungen und Informationen zum Erlernen der Originaldaten, so dass es etwas schwierig war, fortzufahren. Ich habe einen einfachen Artikel zum Teilen von Arbeitsnotizen geschrieben. Ich bin froh, wenn Sie es als Referenz verwenden können.

Umgebung

Ubuntu 18.04 PyTorch 0.4.1

Datensatzvorbereitung

Ich möchte den vorderen und den hinteren Spieler im Tennis-Match-Bild erkennen. ・ Der Player auf der Vorderseite ist "Player Front". ・ "Player Back" für den Spieler auf der Rückseite Ich habe die Anmerkungsdaten erstellt, indem ich sie als gekennzeichnet habe.

15129_0.png

Ich habe es mit einem Tool namens labelImg erstellt, das als XML-Datei im Pascal VOC-Format ausgegeben wird. CenterNet-Anmerkungsdaten können nur JSON-Dateien im COCO-Format lesen. Daher müssen Sie die XML-Datei in eine JSON-Datei konvertieren. Wenn Sie sich in der gleichen Situation befinden, lesen Sie bitte den Artikel, den ich geschrieben habe Konvertieren einer XML-Datei im POCal-VOC-Format in eine JSON-Datei im COCO-Format. Wenn.

Kategorie-ID ist ・ PlayerFront: 1 ・ PlayerBack: 2 Ich habe es als zugewiesen.

Erstellen Sie für Anmerkungsdaten die folgenden zwei Dateien: Trainingsdaten und Testdaten. Bitte beachten Sie, dass bei unterschiedlichen Dateinamen während des Lernens die Fehlermeldung "Datei nicht gefunden" ausgegeben wird. -Pascal_trainval0712.json: Datensatz im COCO-Format, in dem Trainingsdateninformationen gespeichert sind -Pascal_test2007.json: Datensatz im COCO-Format, in dem Testdateninformationen gespeichert sind

Die beiden Anmerkungsdatendateien werden so gespeichert, dass die Verzeichnisstruktur ↓ ist. CenterNet/data/voc/annotations/ |--pascal_trainval0712.json |--pascal_test2007.json

Legen Sie dann die Bilddaten in das Bildverzeichnis. CenterNet/data/voc/images/ |--**.jpg

Änderung des Quellcodes

Schreiben Sie self.class_name in der 30. Zeile von pascal.py entsprechend der zugewiesenen Kategorie-ID neu.

/src/lib/datasets/dataset/pascal.py


    # self.class_name = ['__background__', "playerup", "playerdown", "bird", "boat",
    #  "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", 
    #  "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", 
    #  "train", "tvmonitor"]
    self.class_name=['__background__', "playerFront", "playerBack"]

Lernen Sie mit dem vorbereiteten Datensatz

python main.py ctdet --exp_id pascal_dla_384 --dataset pascal --num_epochs 500 --lr_step 50,100,200,300,400

Über Argumente Lernen Sie mit ctdet Objekterkennung (CenterNet) --exp_id Geben Sie das Netzwerk pascal_dla_384, pascal_dla_512, pascal_resdcn18_384, pascal_resdcn18_512 usw. an. Die Korrespondenztabelle der empfohlenen Anzahl von GPUs für jedes Modell finden Sie unter MODEL ZOO Pascal VOC. --dataset pascal Lernen Sie mit der Pascal-VOC-Methode (20 Klassen) --num_epocks ** Lerne mit der Anzahl der Epochen ** --lr_step 50,100,200,300,400 ~~ Speichern Sie das Modell, wenn die Anzahl der Epochen 50,100,200,300,400 beträgt ~~ Die Lernrate wird zum angegebenen Epochenzeitpunkt auf 1/10 reduziert.

Wenn die Anzahl der Trainingsdaten gering ist, besteht eine hohe Wahrscheinlichkeit, dass ein Modell für unzureichendes Training erstellt werden kann, selbst wenn das Training mit der obigen Methode durchgeführt wird. In diesem Fall ist es besser, mit Feinabstimmung zu trainieren, die zusätzlich mit dem trainierten Modell trainiert.

--load_model Geben Sie das trainierte Modell mit dem Dateinamen als Argument an. Das trainierte Modell kann unter MODEL_ZOO.md heruntergeladen werden.

Zur Feinabstimmung habe ich auf Github-Probleme verwiesen, Lernen auf sehr kleinem Datensatz # 307 übertragen.

python main.py ctdet --exp_id pascal_dla_384 --dataset pascal --num_epochs 500 --lr_step 50,100,200,300,400 --load_model ../models/ctdet_pascal_dla_384.pth

Protokolldateien und Trainingsmodelle werden in / exp / ctdet / pascal_dla_384 / gespeichert.

Inferenz

Machen Sie Schlussfolgerungen mit dem trainierten Modell. Ändern Sie den Code in CenterNet / src / lib / utils / debugger.py, bevor Sie die Inferenz durchführen. Da in Zeile 439 eine Deklaration von pascal_class_name vorhanden ist, ändern Sie diese in "PlayerFront" und "PlayerBack".

Dann wird die Inferenz durch den folgenden Befehl ausgeführt.

python demo.py ctdet --demo ../data/voc/images/**.jpg --dataset pascal --load_model ../exp/ctdet/pascal_dla_384/model_last.pth --debug 2

--debug 2 Sie können nicht nur das Erkennungsergebnisbild, sondern auch das Heatmap-Bild überprüfen.

Recommended Posts

Informationen zur Lernmethode mit Originaldaten von CenterNet (Objekte als Punkte)
Python-Übungsdatenanalyse Zusammenfassung des Lernens, dass ich ungefähr 10 mit 100 Schlägen getroffen habe
Wichtige Punkte von "Maschinelles Lernen mit Azure ML Studio"
Informationen zur Datenvorverarbeitung von Systemen, die maschinelles Lernen verwenden
Implementierung der Clustering-K-Form-Methode für Zeitreihendaten [Unüberwachtes Lernen mit Python Kapitel 13]
Über das Lernen mit Google Colab
Über die Datenverwaltung von Amboss-App-Server
Über die Größe der Punkte in Matplotlib