[PYTHON] Ich habe versucht, PredNet zu lernen

caltech_montage_1.gif (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.)

Bis du lernst

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.

Über die Umwelt

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.

Datenaufbereitung

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.

Lernen

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.

Lernzeit

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.

Stand des Lernens

Unten ist die Lernkurve: image.png 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.

Vorhersageergebnis

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. image.png ** (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: image.png 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): plot_000.png plot_001.png plot_005.png plot_011.png plot_041.png plot_043.png plot_081.png

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

Ich habe versucht, PredNet zu lernen
Ich habe versucht zu debuggen.
Ich habe versucht, mit TF Learn die logische Operation zu lernen
Ich habe versucht, VAE Bewegungsgrafiken lernen zu lassen
Ich habe versucht, SVM zu organisieren.
Ich habe versucht, PCANet zu implementieren
Ich habe versucht, Linux wieder einzuführen
Ich habe versucht, Pylint vorzustellen
Ich habe versucht, SparseMatrix zusammenzufassen
jupyter ich habe es berührt
Ich habe versucht, StarGAN (1) zu implementieren.
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe versucht, eine Quip-API zu erstellen
Ich habe versucht, Python zu berühren (Installation)
Ich habe versucht, eine kontroverse Validierung zu implementieren
Ich habe versucht, Pytorchs Datensatz zu erklären
Ich habe Watson Voice Authentication (Speech to Text) ausprobiert.
Ich habe Teslas API berührt
Ich möchte Bilder kratzen und trainieren
Ich habe versucht, mich über MCMC zu organisieren.
Ich habe versucht, Realness GAN zu implementieren
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, einen Linebot zu erstellen (Implementierung)
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Azure Speech to Text zu verwenden.
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe versucht, den Befehl umask zusammenzufassen
Ich habe versucht, Permutation in Python zu implementieren
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich habe versucht zu kratzen
Ich versuchte das Weckwort zu erkennen
Ich habe versucht, mit Hy anzufangen
Ich habe PyQ ausprobiert
Ich habe versucht, PLSA in Python 2 zu implementieren
Python3-Standardeingabe habe ich versucht zusammenzufassen
Ich habe versucht, Text mit TensorFlow zu klassifizieren
Ich habe AutoKeras ausprobiert
Ich habe versucht, die grafische Modellierung zusammenzufassen.
Ich habe versucht, der CPython-Implementierung ein Post-Inkrement hinzuzufügen
Ich habe versucht, ADALINE in Python zu implementieren
Ich habe versucht, Optuna die Nummer lösen zu lassen
Ich habe versucht, das Umfangsverhältnis π probabilistisch abzuschätzen
Ich habe versucht, die COTOHA-API zu berühren
Ich habe versucht, PPO in Python zu implementieren
Ich habe es mit Papiermühle versucht
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich ließ RNN Sin Wave lernen und versuchte vorherzusagen
Ich habe eine Web-API erstellt
Ich habe versucht, TSP mit QAOA zu lösen
[Python] Ich habe versucht, TF-IDF stetig zu berechnen
Ich habe versucht, Python zu berühren (grundlegende Syntax)
Ich habe versucht, Django-Slack
Ich habe es mit Django versucht
Ich habe es mit Spleeter versucht
Ich habe es mit cgo versucht
Ich versuchte mein Bestes, um zu Lasso zurückzukehren