Train Tensorflow Object Detection auf eigenem Datensatz
Nachdem er ein paar Tage versucht zu erreichen diese Aufgabe, ich möchte meine Erfahrung mit Ihnen teilen, wie ich ging über die Beantwortung der Frage:
Wie verwende ich TS-Objekt-Erkennung zu trainieren, mit meinem eigenen dataset?
Kommentar zu dem Problem
du bist ein boss, danke!
InformationsquelleAutor der Frage eshirima | 2017-07-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies übernimmt das Modul bereits installiert ist. Bitte beziehen Sie sich auf Ihre Dokumentation wenn nicht.
Haftungsausschluss
Diese Antwort ist nicht dazu gedacht, den Recht oder nur Weise der Ausbildung der Objekt detection-Modul. Das ist einfach, ich Teile meine Erfahrung und das, was für mich gearbeitet hat. Ich bin offen für Vorschläge und das lernen mehr über, wie ich bin noch neu für ML im Allgemeinen.
TL;DR
Jeder Abschnitt dieser Antwort besteht aus einem entsprechend Bearbeiten (siehe unten). Nach der Lektüre jedes Abschnitts, lies bitte die Bearbeiten-als auch für die Klarstellungen. Korrekturen und Tipps wurden Hinzugefügt, die für jeden Abschnitt.
Tools verwendet
LabelImg: Ein tool für die Erstellung von PASCAL-VOC-format Anmerkungen.
1. Erstellen Sie Ihre eigenen PASCAL-VOC-dataset
PS: Für die Einfachheit, den Ordner Namenskonvention meine Antwort folgt, dass der Pascal VOC 2012
Einen Blick in die Mai 2012 dataset, Sie werden bemerken, dass der Ordner mit der folgenden Struktur
+VOCdevkit
+VOC2012
+Annotations
+ImageSets
+Action
+Layout
+Main
+Segmentation
+JPEGImages
+SegmentationClass
+SegmentationObject
Zur Zeit werden die änderungen wurden vorgenommen, um die folgenden Ordner:
Anmerkungen: hier werden alle Bilder, die entsprechenden XML-Dateien abgelegt werden. Verwenden Sie das empfohlene tool vor, um die Beschriftungen erstellen. Mach dir keine sorgen über
<truncated>
und<difficulty>
- tags, da Sie ignoriert werden, indem der Trainings-und eval-Binärdateien.JPEGImages: der Ort Ihrer tatsächlichen Bildern. Stellen Sie sicher, Sie sind vom Typ JPEG, weil das ist, was derzeit unterstützt wird, um TFRecords mit Ihren script.
ImageSets->Main: Diese besteht lediglich aus text-Dateien. Für jede Klasse gibt es eine entsprechende train.txt, trainval.txt und val.txt. Unten ist ein Beispiel der Inhalte der aeroplane_train.txt in der VOC 2012 Ordner
Die Struktur ist im Grunde Bild-name gefolgt von einem boolean zu sagen, ob das entsprechende Objekt in das Bild, oder nicht. Nehmen Sie zum Beispiel Bild 2008_000008 nicht aus einem Flugzeug daher markiert mit einem -1 aber Bild 2008_000033 tut.
Schrieb ich ein kleines Python-Skript zu generieren, diese text-Dateien. Einfach Durchlaufen und den Namen des Bildes und vergeben Sie einen 1 oder -1 neben Ihnen für die Objekt-Existenz. Ich habe einige Zufälligkeit unter meinen text-Dateien, die durch das mischen der Namen des Bildes.
Den {classname}_val.txt Dateien aus der
TestValidierung-datasets. Betrachten Sie dies als die test-Daten während des Trainings. Sie möchten, teilen Sie das dataset in Trainings-und Validierung. Mehr info finden Sie hier. Das format dieser Dateien ist ähnlich wie bei der Ausbildung.Zu diesem Zeitpunkt Ihre Ordner-Struktur sollte
+VOCdevkit
+VOC2012
+Annotations
--(for each image, generated annotation)
+ImageSets
+Main
--(for each class, generated *classname*_train.txt and *classname*_val.txt)
+JPEGImages
--(a bunch of JPEG images)
1.1 Erzeugung label anzeigen
Mit dem dataset bereit, die wir brauchen, um das entsprechende label-Karten.
Navigieren Sie zu Modelle/object_detection/Daten und öffnen pascal_label_map.pbtxt.
Diese Datei besteht aus einem JSON, vergibt eine ID und einen Namen für jedes Element. Änderungen an dieser Datei entsprechend Ihrer gewünschten Objekte.
2. Generieren TFRecords
Wenn Sie einen Blick in Ihren code vor allem diese Linie, Sie greifen explizit die aeroplane_train.txt nur. Für die neugierigen Köpfe, hier ist, warum. Ändern Sie diese Dateinamen, um alle Ihre Klasse-Zuges text-Datei.
Stellen Sie sicher VOCdevkit innerhalb Modelle/object_detection dann können Sie voran gehen und generieren die TFRecords.
Bitte gehen Sie durch Ihren code zuerst sollten Sie auf Probleme stoßen. Es ist selbsterklärend und gut dokumentiert.
3. Pipeline-Konfiguration
Den Anweisungen sollte selbsterklärend sein, zur Deckung dieses segment. Beispiel-Konfigurationen finden Sie in object_detection/samples/configs.
Für diejenigen, die den Zug von vorne, wie ich es Tat, so stellen Sie sicher, entfernen Sie die
fine_tune_checkpoint
undfrom_detection_checkpoint
Knoten. Hier was meine config Datei sah aus wie für Referenz.Von hier aus können Sie weiter mit der tutorial und führen die Ausbildung.
4. Visualisieren
Vergewissern Sie sich, dass die eval-parallel zur Ausbildung, um in der Lage sein zu visualisieren, die den Lernprozess. Zitat Jonathan Huang
EDIT ich (28 Juli '17):
Ich nie erwartet, dass meine Antwort so viel Aufmerksamkeit zu bekommen, so dass ich beschloss, wieder zu kommen und es zu überprüfen.
Tools
Für meine Kolleginnen und Apple-Benutzer, Sie könnten tatsächlich verwenden RectLabel für Anmerkungen.
Pascal VOC
Nach dem Graben um, ich erkannte schließlich, dass trainval.txt ist eigentlich die Vereinigung von Trainings-und Validierungs-Datensätze.
Bitte schauen Sie auf Ihre offizielle development kit zu verstehen, das format sogar noch besser.
Karte Beschriften Generation
In der Zeit meines Schreibens, ID 0 steht für
none_of_the_above
. Es wird empfohlen, dass Sie Ihre IDs starten ab 1.Visualisieren
Nach ausführen der Auswertung und gerichtet tensorboard, um Ihre Eval-Verzeichnis, es werde Ihnen zeigen, die Karte von jeder Kategorie zusammen mit jeder Kategorie Leistung. Das ist gut, aber ich sehen, wie meine Trainingsdaten als auch parallel mit Eval.
Um dies zu tun, führen Sie tensorboard auf einen anderen port und verweisen Sie auf Ihren Zug Verzeichnis
InformationsquelleAutor der Antwort eshirima
Schrieb ich eine blog-post auf Medium über meine Erfahrung, wie ich ausgebildet, ein Objekt-Detektor (insbesondere, es ist ein Waschbär-Detektor) mit Tensorflow auf meine eigenen Datensatz. Dies könnte auch nützlich sein für andere und ist kostenlos eshirima Antwort.
InformationsquelleAutor der Antwort Dat Tran