[PYTHON] Überprüfung und Implementierung der Videorekonstruktionsmethode mit GRU und Autoencoder

Überblick

Wie geht es allen. Mit der Ausbreitung der Coronavirus-Infektion können viele Menschen zu Hause arbeiten oder forschen. In den letzten Monaten habe ich jeden Tag zu Hause auf meinen PC gestarrt. Ich bin wirklich müde lol

Dieses Mal möchte ich mich auf die Rekonstruktionsaufgabe konzentrieren, die das Generierungsmodell verwendet. Versuchen Sie insbesondere, das "Video" zu rekonstruieren. (Was Sie in diesem Artikel verstehen können, sind die experimentellen Ergebnisse und die Berücksichtigung der Rekonstruktionsmethode, die das auf Encoder-Decoder basierende Zeitreihenmodell beißt, das auf die Erkennung von Abnormalitäten von bewegten Bildern erweitert werden kann, sowie der theoretische Hintergrund wie mathematische Formeln. Ich werde nicht jagen.)

Es ist die Rekonstruktion von ** "Bild" **, die häufig im Feld "Anomalieerkennung" verwendet wird. Dies ist eine Methode zur Berechnung des Anomaliegrades durch Eingabe eines Bildes in ein Encoder-Decoder-Modell, Rekonstruktion und Ermittlung der Differenz zwischen Eingabe und Ausgabe. VAE ist besonders bekannt als Generationsmodell, das für die Bildrekonstruktion verwendet werden kann, und in jüngster Zeit sind auch Anomalieerkennungsmethoden (AnoGAN, EfficientGAN usw.) erschienen, die GAN verwenden. Das Folgende ist ein Beispiel für AnoGAN.

20190420005824.png

Das obige Bild stammt von hier

Aus irgendeinem Grund können jedoch bei der Rekonstruktion von "Videos" keine Forschungsfälle gefunden werden. (In einigen Fällen der "Generierung" von Videos gibt es einige Methoden, die GAN verwenden.)

(** Addendum (2020/05/26) **: Ein Beispiel für die Verwendung der 3D-Faltung wie in Erkennung abnormaler Ereignisse in Videos mit raumzeitlichem Autoencoder Es scheint, dass die Verwendung von Spatio Temporal Networks (STN) als Aufgabe zum Extrahieren raumzeitlicher Merkmale wie Filme gesucht wird. Deep Learning für die Erkennung von Anomalien: Eine Umfrage Von abs / 1901.03407). Ich sehe nicht viel Literatur auf Japanisch, aber lol. In Zukunft möchte ich als Artikel über den Forschungsstatus dieser Erkennung von Bewegtbildanomalien berichten. )

Ich denke, dass die Technologie zur Erkennung von Bildanomalien in der Welt für industrielle Anwendungen extrem weit verbreitet ist. Ich denke, es gibt eine gewisse Nachfrage nach bewegten Bildern, aber ist sie nicht sehr entwickelt?

Wenn Sie sich nicht für die Erkennung von Videoanomalien und die "Rekonstruktion" interessieren, gibt es natürlich verschiedene Dinge von vor langer Zeit. (Klassifizierung mit SVM basierend auf altmodischen ST-Patch-Funktionen usw.)

Es ist jedoch eine Welt, in der Deep Learning so populär geworden ist. Sie können das Video auch rekonstruieren! Dieses Mal werden wir ein Videorekonstruktionsmodell implementieren, indem wir das Zeitreihenmodell GRU und das Encoder-Decoder-Modell kombinieren. ** Der gesamte Code ist unter [hier] verfügbar (https://github.com/satolab12/GRU-Autoencoder). ** **.

Videorekonstruktionsmodell

Das diesmal zu implementierende Modell ist unten dargestellt.

図4.png

$ \ Boldsymbol {x_1, x_2, ..., x_T} $ bedeutet ein Video mit einer Länge von T, und $ \ boldsymbol {x_t} $ ist jedes Bild. Der Encoder empfängt das Bild jedes Frames und ordnet es $ \ boldsymbol {z} $ zu. Durch Wiederholen dieser T-Zeiten wird die latente Variable der Serienlänge entsprechend dem Eingangsvideo $ \ boldsymbol {Z_1, Z_2, ..., Z_T} $ erhalten. Diese latente Variable wird mit GRU modelliert. Die Ausgabe bei jedem t entspricht $ \ boldsymbol {\ hat {z_t}} $. Der Rest ist das Verfahren, mit dem dies mit dem Decoder auf den Beobachtungsraum abgebildet wird.

Ich bin mir nicht sicher, ob das obige Modell eine strikte mathematische Korrektheit garantieren kann, da ich mir bei der Eisenplatte der Bewegtbildrekonstruktionsaufgabe nicht sicher bin, aber ich bin mir nicht sicher, ob es besonders gut ist oder nicht. Kann rekonstruiert werden. ** **.

Hier ist eine Ergänzung, aber warum nicht das bewegte Bild an einem Punkt im latenten Raum codieren? In einem normalen Codierer-Decodierer-Modell wird das Eingabebild mit nur einer latenten Variablen codiert. Ich dachte, ich würde dem folgen, wenn ich mich zu einem bewegten Bild ausdehne, aber während ich eine Untersuchung von GAN-basierten Arbeiten in meiner Forschung durchführe, ** ist es zu viel, um einem Punkt im latenten Raum zu entsprechen * Ich fand, dass es eine Diskussion über * gab.

Ich stimme dem als Faustregel in der Vergangenheit zu. Zuvor habe ich versucht, ein bewegtes Bild mit Keras zu rekonstruieren, aber die obige Methode hat nicht zu den gewünschten Ergebnissen geführt.

Aus diesem Grund dachte ich diesmal über die latenten Variablen der Reihe nach und definierte das obige Modell.

Modelllernen / Verifikation

** Der Rekonstruktionsfluss ist wie folgt. ** **.

  1. Bereiten Sie einen menschlichen Aktionsdatensatz vor
  2. Lernen Sie mit GRU-AE
  3. Rekonstruieren Sie das Video mit dem trainierten Modell

1.human action dataset Diese Daten wurden zur Überprüfung in einem Video-Generierungsmodell namens MocoGAN verwendet. Wie der Name schon sagt (ich kenne das erste Erscheinungsbild nicht), werden Personen beim Gehen und Winken angezeigt. Es ist eine Sache geworden.

epoch_real_60.png epoch_real_30.png

Sie können es von [hier] herunterladen (http://www.wisdom.weizmann.ac.il/~vision/SpaceTimeActions.html). (Das obige Bild stammt auch aus den Daten in diesem Link.)

2. Lernen mit GRU-AE

Als nächstes werden wir das Modell unter Verwendung der obigen Daten trainieren. Die Verlustfunktion ist MSE, wodurch der Fehler zwischen Eingabe und Ausgabe natürlich minimiert wird. Einzelheiten zum Modell finden Sie im Implementierungscode (implementiert von PyTorch) von hier.

Das Lernen wurde 10.000 itr gedreht, und der Verlust änderte sich wie folgt. In der zweiten Hälfte wurde es fast 0, und ich sehe nicht viel Veränderung, aber es scheint, dass es sicher konvergiert hat.

ダウンロード.png

3. Rekonstruktion des Videos nach Modell

Machen Sie Schlussfolgerungen mit dem Modell. In der obigen Implementierung wird das Rekonstruktionsergebnis in generate_videos im Protokollordner für jeden durch das Argument angegebenen Prüfpunkt gespeichert. Wie wir gelernt haben, haben wir das folgende Verhalten gezeigt. Die obere Reihe jedes itr ist die Eingabe und die untere Reihe ist die Ausgabe.

--0 itr Augen Natürlich kann es überhaupt nicht rekonstruiert werden. real_itr0_no0.png recon_itr0_no0.png

9.000 itr Augen Das Beispiel ist subtil, aber der Eindruck ist, dass es möglich geworden ist, es in nahezu perfekter Form zu rekonstruieren. real_itr9000_no0.png recon_itr9000_no0.png

Zusammenfassung

Dieses Mal habe ich versucht, ein bewegtes Bild mit GRU-AE zu rekonstruieren. Es ist ein einfaches Modell, aber der Punkt ist, dass es latente Variablen in chronologischer Reihenfolge behandelt. Mit dieser Methode können wir eine Ausweitung auf die Erkennung von Anomalien erwarten. Aber um ehrlich zu sein, was machst du heutzutage als Neuheit im Vergleich zu GAN? Das ist der Ort. Darüber hinaus ist es nicht zu leugnen, dass es im Vergleich zu aus GAN rekonstruierten Bildern ehrlich minderwertig ist (einige Teile sind unscharf). (Zuvor wurde in meinem Artikel auch VAEGAN eingeführt.) Es ist jedoch eine einfache Methode und einfach zu bedienen, daher würde ich es begrüßen, wenn Sie es versuchen könnten.

Recommended Posts

Überprüfung und Implementierung der Videorekonstruktionsmethode mit GRU und Autoencoder
Implementierung und Experiment der konvexen Clustering-Methode
Rekonstruktion von bewegten Bildern mit dem Autoencoder unter Verwendung von 3D-CNN
Implementierung der Bedingung zur Beurteilung der Objektauthentizität unter Verwendung der __bool__- Methode
[Deep Learning von Grund auf neu] Implementierung der Momentum-Methode und der AdaGrad-Methode
Implementierung von TF-IDF mit Gensim
Untersuchung der Austauschprognosemethode mit Deep Learning und Wavelet-Konvertierung - Teil 2-
Erklärung und Implementierung von SocialFoceModel
Implementierung der ML-EM-Methode, Querschnittsrekonstruktionsalgorithmus für CT-Scan
Mathematische Erklärung der Dichotomie- und Trisektionssuch- und Implementierungsmethode ohne Fehler
Ausrichten gescannter Bilder von animiertem Videopapier mit OpenCV und Python
[Python] Implementierung der Nelder-Mead-Methode und Speichern von GIF-Bildern durch matplotlib
Implementierung der Datetime-Picker-Aktion mit line-bot-sdk-python und Beispielimplementierung von Image Carousel
[Empfehlung] Zusammenfassung der Vor- und Nachteile der inhaltsbasierten und kooperativen Filter- / Implementierungsmethode
Einführung und Implementierung von JoCoR-Loss (CVPR2020)
Erklärung und Implementierung des ESIM-Algorithmus
Einführung und Implementierung der Aktivierungsfunktion
Erklärung und Implementierung von einfachem Perzeptron
Implementierung von Desktop-Benachrichtigungen mit Python
Untersuchung der Austauschprognosemethode mittels Deep Learning und Wavelet-Konvertierung
Beispiel für die Verwendung von Klassenvariablen und Klassenmethoden
Implementierung eines Dialogsystems mit Chainer [seq2seq]
Implementierung und Beschreibung mit XGBoost für Anfänger
Erklärung und Implementierung des Decomposable Attention-Algorithmus
Implementierung von "verschwommenen" neuronalen Netzen mit Chainer