(Die obige Abbildung stammt aus der Quelle für Forschung und Entwicklung.)
PredNet? https://coxlab.github.io/prednet/ Bill Lotter, Gabriel Kreiman, and David Cox (2016)
Ein Modell für tiefes Lernen, das zukünftige Videobilder vorhersagt. Es gibt verschiedene Demos in CoxLab (Link oben), der Quelle für Forschung und Entwicklung. Wenn Sie also einen Blick darauf werfen, erhalten Sie ein Bild.
Es ist eine Geschichte, die Mitte 2016 aufgeregt wurde, also mag es jetzt einige Gefühle geben, aber Ich werde zusammenfassen, was ich gelernt habe, indem ich tatsächlich gelernt habe. (Anstatt Algorithmen und Konzepte zu erklären, werden wir hauptsächlich über Lernen und die Umwelt sprechen.)
Da der Code öffentlich verfügbar ist (https://github.com/coxlab/prednet), ist es möglich, das Modell zu trainieren, ohne das Papier zu lesen.
Um den ursprünglichen Code so auszuführen, wie er ist, muss die Umgebung von Python2 + Keras1 vorbereitet werden. Bitte beachten Sie, dass die neueste Version Python3 + Keras2 ist und daher etwas alt ist. Ich habe versucht, es auf Keras2 zu portieren, aber das Lernen ist fehlgeschlagen. Deshalb habe ich mich für Keras1 entschieden. Ich habe es nicht getan, aber ich denke, es ist möglich, es auf Python3 zu portieren.
Die Hauptreferenz in diesem Artikel ist Fahrzeugkamerabild von KITTI [^ 1].
Es gibt process_kitti.py
in dem Skript, dasgit clone
war. Wenn Sie es also ausführen,
--Daten herunterladen
Wird es automatisch tun. Aber das ist ** sehr ** langsam. In der von mir verwendeten Umgebung habe ich drei volle Tage gebraucht, um die Daten herunterzuladen. Es kann insgesamt fast 100 GB groß sein oder auch nicht, aber ich denke immer noch, dass es zu spät ist.
Sobald die Daten fertig sind, führen Sie kitti_train.py
aus, um mit dem Lernen zu beginnen.
Auch hier gibt es einige Einschränkungen.
Es ist schwer zu sagen, da es von der Umgebung abhängt, aber in der von mir verwendeten Umgebung (GeForce GTX TITAN 6082MiB) dauerte es ungefähr 5 Minuten pro Epoche. Die Standardeinstellung ist das Trainieren von 150 Epochen, sodass es insgesamt etwas mehr als 12 Stunden dauert. Ich denke, es ist eine ziemlich vernünftige Lernzeit für ein Modell, das LSTM enthält.
Unten ist die Lernkurve: Man kann sagen, dass die Parameter stabil genug sind. Wenn nichts manipuliert wird, wird die Lernrate auf 1/10 reduziert, wenn Epoche = 75 ist, aber zu diesem Zeitpunkt wird der Verlust stark abfallen. Der Trainingsverlust (blaue Linie) ist gesunken, aber der Validierungsverlust (orange Linie) sinkt immer noch, sodass Sie möglicherweise etwas mehr lernen möchten.
Eine andere zu beachtende Sache ist, dass der während des Lernens gemessene Verlust (MAE) ** anders ** gemessen wird als der in der Arbeit angegebene MAE. In der Veröffentlichung wird berichtet, dass die MAE schließlich 3,13e-3 (= 0,00313) erreichte, aber diese MAE misst den "Pixelfehler zwischen dem vorhergesagten Rahmen und dem tatsächlichen Rahmen". Andererseits ist der von Keras während des Trainings gemeldete Verlust im Sinne von MAE der gleiche, dies ist jedoch eine Messung des "Fehlers zwischen der Ausgabe der Fehlereinheit E und der Nullmatrix" [^ 2]. Tatsächlich betrug der endgültige Fehler des diesmal trainierten Modells (vertikale Achse in der obigen Grafik) 1,780e-2 (= 0,01780) für das Training und 2,36e-2 (= 0,0236) für die Validierung. Die Reihenfolge ist anders.
Als das Modell tatsächlich auf die Testdaten angewendet wurde, betrug die MAE im Rahmen (die gleiche wie bei der Messmethode im Papier) 3,927e-3, was etwas niedriger war, aber nahe an der im Papier angegebenen Genauigkeit zu liegen schien. ist.
Das resultierende Bild wird unten gezeigt, aber zuerst werde ich erklären, wie das Ergebnisbild gelesen wird. Dieses Video ist 10 Hz (10 fps, dh 1 Sekunde enthält 10 Bildbilder), und die Vorhersage beträgt 10 Bilder, dh 1 Sekunde. Obwohl es sich um eine Vorhersage von 10 Frames handelt, kann gesagt werden, dass es sich tatsächlich um eine Vorhersage mit einem Frame voraus handelt, da die Vorhersage nach dem Empfang des vorherigen Frames als Eingabe erfolgt. Wenn Sie ein Diagramm zeichnen, welches Bild Sie aus welchem Bild vorhersagen, sieht es wie folgt aus. ** (Beachten Sie, dass die RNN-Struktur im Modell vorhanden ist, sodass sie sich die bisherige Eingabe tatsächlich "merkt" und diese Informationen ebenfalls verwendet.) **
In dem Papier (das auch im Code enthalten ist) wird auch erwähnt, dass es tatsächlich einige Frames voraus Vorhersagen macht (Extrapolation genannt). In diesem Fall die folgende Abbildung Wird sein: Die ersten Frames erwärmen das Modell mit dem vorherigen Bild, um den Status in das RNN einzubetten. Denken Sie danach, ohne ein korrektes Bild zu übergeben, dass Ihre Ausgabe korrekt ist, und starten Sie die Extrapolation. Bitte beachten Sie, dass alle unten aufgeführten Vorhersageergebnisse nicht extrapoliert werden.
Die Vorhersageergebnisse sind wie folgt (Auszug):
Wie in der Veröffentlichung berichtet, können wir weiße Linien und Schatten auf Straßen korrekt vorhersagen. Seltsame Bewegungen über das Auto (Ich kann es nicht lernen, weil es nicht viele Daten gibt, die sich seitwärts zu mir bewegen können. Im fünften Bild kreuzt das Auto beispielsweise vor mir und die Vorhersage ist seltsam.) Wenn es nicht so ist, ist es ziemlich vorhersehbar. Das Drehen des Griffs (6. Bild) scheint gut gehandhabt zu werden.
[^ 1]: Karlsruhe Institute of Technology (KIT) und Toyota Technological Institute in Chicago (TTI-C) zusammen mit KITTI. TOYOTA veröffentlicht auch den Videodatensatz der Fahrzeugkamera. [^ 2]: Die Fehlereinheit E unterteilt die Differenz zwischen dem vorhergesagten Rahmen und dem realen Rahmen in den "positiven Teil" und den "negativen Teil" und wendet ReLU an, dh die "Pixel des vorhergesagten Rahmens und des realen Rahmens". Es unterscheidet sich von "Fehler".
Recommended Posts