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.
Ubuntu 18.04 PyTorch 0.4.1
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.
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
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"]
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.
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