Ich versuche, ein neuronales Netzwerk darin zu schulen, wie man Pappkartons zusammen mit mehreren Klassen von Personen (Personen) erkennt.
Obwohl es einfach ist, Personen zu erkennen und korrekt zu klassifizieren, ist es unglaublich schwierig, Pappkartons zu erkennen.
Die Boxen sehen folgendermaßen aus:
Mein Verdacht ist, dass die Box eines Objekts zu einfach ist und das neuronale Netzwerk es schwer hat, es zu erkennen, da es zu wenig Merkmale gibt, um sie aus dem Objekt zu extrahieren.
Die Aufteilung des Datensatzes sieht folgendermaßen aus:
personA: 1160
personB: 1651
personC: 2136
person: 1959
box: 2798
Personen tragen unterschiedliche Sicherheitsartikel, basierend auf den klassifizierten Artikeln, während sie als ganze Person erkannt werden, nicht nur als Artikel.
Ich habe versucht zu verwenden:
ssd300_incetpionv2
ssd512_inceptionv2
faster_rcnn_inceptionv2
All dies erkennt und klassifiziert Personen viel besser als Kisten. Ich kann nicht genau angeben mAP
(habe es nicht).
Irgendwelche Ideen?
Vielen Dank.
quelle
Antworten:
Wie du gesagt hast:
... und genau das ist das Problem bei dieser Aufgabe. Ich empfehle Ihnen, Ihr Netzwerk mit einer ganzen Menge Bildverbesserung zu trainieren. Wenn Sie Keras / TensorFlow 2.0 verwenden, verfügen diese über integrierte Funktionen, die dies tun.
Ich empfehle Ihnen auch, ein erstes Modell zu trainieren und dann die Bilder genau zu studieren, die Ihr Netzwerk für Boxen hält, aber nicht (die falsch positiven). Zu diesem Zeitpunkt wählen Sie die "richtigen" Fälle zusammen mit den falsch positiven Fällen aus und erstellen eine Teilmenge des Datensatzes, über den Sie verfügen. Dieser Unterdatensatz kann nützlich sein, um das Netzwerk darin zu schulen, zwischen tatsächlichen Feldern und Objekten zu unterscheiden, die wie Felder aussehen.
Noch einmal: Verwenden Sie eine enorme Menge an Bildvergrößerung. Das ist mein Hauptpunkt und das würde ich tun.
quelle
Ich schlage vor, ein vorab trainiertes Modell zu verwenden.
Hier ist der vollständige Code einer vorab trainierten Klassifizierung von Bildern mit mehreren Klassen, die ich kürzlich durchgeführt habe: https://datascience.stackexchange.com/a/52772/71442
Es gibt verschiedene vorab trainierte Modelle, die Sie ausprobieren können: https://keras.io/applications/
Mit vorgefertigten Modellen können Sie die Faltungsschichten großer Modelle „wiederverwenden“ und Ihre Klassen darüber trainieren. Dies kann hilfreich sein, um die spezifischen Funktionen zu finden, die den Boxen zugeordnet sind.
Boxen sollten aufgrund ihrer unterschiedlichen und einheitlichen Form und Farbe leicht zu erkennen sein. Daher denke ich, dass es hilfreich sein kann, ein vorab trainiertes Modell auszuprobieren, das in ähnlichen (kastenartigen) Klassen trainiert wird.
Wenn alle Felder braun sind (wie im Beispielbild), können Sie möglicherweise sogar Felder anhand der Farbmuster erkennen. NN kann das.
Insgesamt ist es schwer zu sagen, was schief gelaufen ist, ohne Ihr Modell zu sehen. Die Modellarchitektur kann hier relevant sein.
quelle
Sie können versuchen, vorhandene Tensorflow-Modelle zu verwenden, die für große Datensätze wie MS-COCO, Kitti und Open Images usw. vorab trainiert wurden. Anschließend können Sie ein bestimmtes Modell, das Sie für Ihren Datensatz wünschen, fein abstimmen.
Eine Liste aller verfügbaren Modelle finden Sie hier: https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md
Eine gute Quelle zum Einrichten eines Objektdetektors: https://www.youtube.com/watch?v=Rgpfk6eYxJA (Keine Sorge, wenn Sie Linux-Benutzer sind, kann dasselbe Tutorial auch in Linux-Systemen angepasst werden.)
Sie können ein Tool wie labellmg verwenden, um Ihre Bilder für das Training zu kennzeichnen ( https://github.com/tzutalin/labelImg ).
Hoffe das hilft.
quelle