Ich versuche, ein Gestenerkennungssystem zum Klassifizieren von ASL- Gesten (American Sign Language) zu erstellen. Daher soll meine Eingabe eine Folge von Bildern entweder von einer Kamera oder einer Videodatei sein, dann erkennt es die Folge und ordnet sie der entsprechenden zu Klasse (schlafen, helfen, essen, rennen usw.)
Die Sache ist, dass ich bereits ein ähnliches System gebaut habe, aber für statische Bilder (keine Bewegung eingeschlossen) war es nützlich, um Alphabete nur zu übersetzen, bei denen das Erstellen eines CNN eine einfache Aufgabe war, da sich die Hand nicht so viel bewegt und die Die Datensatzstruktur war auch überschaubar, da ich Keras verwendete und dies möglicherweise noch vorhatte (jeder Ordner enthielt eine Reihe von Bildern für ein bestimmtes Zeichen, und der Name des Ordners ist der Klassenname dieses Zeichens, z. B.: A, B, C. , ..)
Meine Frage hier, wie ich meinen Datensatz organisieren kann, um ihn in Keras in eine RNN eingeben zu können, und welche bestimmten Funktionen ich verwenden sollte, um mein Modell und alle erforderlichen Parameter effektiv zu trainieren. Einige Leute schlugen vor, die TimeDistributed- Klasse zu verwenden, aber ich nicht Haben Sie eine klare Vorstellung davon, wie Sie es zu meinen Gunsten verwenden können, und berücksichtigen Sie die Eingabeform jeder Schicht im Netzwerk.
auch bedenken , dass meine Daten Satz von Bildern bestehen würde, werde ich wahrscheinlich eine Faltungsschicht benötigen, wie wäre es möglich, das kombinieren konv Schicht in die LSTM ein (ich meine in Form von Code).
Zum Beispiel stelle ich mir meinen Datensatz so vor
Der Ordner 'Run' enthält 3 Ordner 1, 2 und 3, wobei jeder Ordner seinem Frame in der Sequenz entspricht
So RUN_1 einige Reihe von Bildern für den ersten Frame enthält, RUN_2 für den zweiten Rahmen und Run_3 ist für die dritten, Ziel meines Modells mit dieser Sequenz zur Ausgabe des Wort trainiert wird Run .
quelle
Antworten:
Nach meinem Verständnis scheint sich dies auf ein Klassifizierungsproblem mit mehreren Klassen zu beschränken (jeder Satz / jede Folge von Handgesten entspricht schließlich einem Wort / Symbol). Eine RNN / LSTM / GRU-Architektur ist ein guter Ausgangspunkt, ist jedoch rechenintensiv und nur langsam zu trainieren. Ob Sie eines oder mehrere davon unbedingt benötigen, hängt jedoch davon ab, wie Ihre Daten strukturiert sind und ob Sie Ihre Bilder nicht als Sequenz, sondern als Satz behandeln können.
Hier sind einige mögliche Ideen:
Richten Sie zunächst eine CNN-Ebene für jeden Ordner "RUN_ *" zusammen mit
dropout
und / oderflattening
zwischen den einzelnen Ebenen ein .Beginnen Sie mit dem Einrichten eines einzelnen langen Vektors, der alle Stufen der Sequenz darstellt, und fügen Sie dann einige Schichten von CNNs hinzu, auch mit
dropout
und / oderflattening
.Dies erfordert einige Erkundungen und Optimierungen, um herauszufinden, was am besten funktioniert, und Sie müssen mit Bewertungsmetriken auswählen, für die Sie optimieren möchten (z. B. Präzision / Rückruf).
Der Grund, warum ich ein CNN vorschlage, ist, dass CNNs in bestimmten Fällen eine ähnliche Leistung wie ein wiederkehrendes Modell bieten können, jedoch zu einem Bruchteil der Kosten. Leider ist es schwierig, mit wenig bis gar keinen Informationen über Ihre Daten zu sagen.
quelle