Dieses Repository enthält trainierte Modelle, die in der Arbeit "Quo Vadis, Actionerkennung? Ein neues Modell und den Kinetik -Datensatz" von Joao Carreira und Andrew Zisserman gemeldet wurden. Das Papier wurde im Mai 2017 auf Arxiv veröffentlicht und wird als CVPR 2017 -Konferenzpapier veröffentlicht.
"Quo Vadis" stellte eine neue Architektur für die Videoklassifizierung vor, die aufgeblähte 3D Convnet oder i3d. Hier veröffentlichen wir Inception-V1 i3D-Modelle, die auf dem Kinetics Dataset Training Split ausgebildet sind.
In unserem Artikel berichteten wir über hochmoderne Ergebnisse in den Datensätzen UCF101 und HMDB51, indem wir diese Modelle Feinabstimmung befinden. I3D-Modelle, die in der Kinetik vorgeschrieben sind, wurde ebenfalls an erster Stelle in der CVPR 2017 Charades Challenge.
Das Repository enthält jetzt auch einen vorgeborenen Checkpoint unter Verwendung von RGB-Eingängen und von Grund auf Kinetics-600.
NEU : Die von uns verwendete Videovorverarbeitung wurde jetzt von Google Open-Sourcing. Um es einzurichten, überprüfen Sie diese Anweisungen in Googles MediaPipe Repo.
Haftungsausschluss: Dies ist kein offizielles Google -Produkt.
Folgen Sie zuerst den Anweisungen zur Installation von Sonett.
Dann klonen Sie dieses Repository mithilfe
$ git clone https://github.com/deepmind/kinetics-i3d
Führen Sie den Beispielcode mit verwenden
$ python evaluate_sample.py
Mit Standardflags erstellt dies das i3d-Zwei-Stream-Modell, lädt vorgeborene i3d-Kontrollpunkte in die TensorFlow-Sitzung und übergibt dann ein Beispielvideo über das Modell. Das Beispielvideo wurde vorverarbeitet, wobei RGB- und Flow Numpy -Arrays bereitgestellt wurden (siehe weitere Details unten).
Das Skript gibt die Norm des Logits -Tensors sowie die Top -20 -Kinetikklassen aus, die vom Modell mit ihren Wahrscheinlichkeits- und Logit -Werten vorhergesagt werden. Unter Verwendung der Standardflags sollte der Ausgang den folgenden Unterschieden in der numerischen Genauigkeit ähneln:
Norm of logits: 138.468643
Top classes and probabilities
1.0 41.8137 playing cricket
1.49716e-09 21.494 hurling (sport)
3.84312e-10 20.1341 catching or throwing baseball
1.54923e-10 19.2256 catching or throwing softball
1.13602e-10 18.9154 hitting baseball
8.80112e-11 18.6601 playing tennis
2.44157e-11 17.3779 playing kickball
1.15319e-11 16.6278 playing squash or racquetball
6.13194e-12 15.9962 shooting goal (soccer)
4.39177e-12 15.6624 hammer throw
2.21341e-12 14.9772 golf putting
1.63072e-12 14.6717 throwing discus
1.54564e-12 14.6181 javelin throw
7.66915e-13 13.9173 pumping fist
5.19298e-13 13.5274 shot put
4.26817e-13 13.3313 celebrating
2.72057e-13 12.8809 applauding
1.8357e-13 12.4875 throwing ball
1.61348e-13 12.3585 dodgeball
1.13884e-13 12.0101 tap dancing
Die Testdatei kann verwendet werden
$ python i3d_test.py
Dies prüft, ob das Modell korrekt erstellt werden kann und korrekte Formen erzeugt.
Das Standardmodell wurde auf ImageNet und anschließend Kinetik vorgebracht. Andere Flags ermöglichen das Laden eines Modells, das nur in der Kinetik vorgebreitet ist, und für die Auswahl der RGB- oder Flow-Stream. Das Skript multi_evaluate.sh
zeigt, wie Sie alle diese Kombinationen ausführen und die Beispielausgabe im out/
Verzeichnis generieren.
Die Verzeichnisdaten data/checkpoints
enthält die vier Trainingspunkte, die geschult wurden. Diejenigen, die gerade in Kinetik trainiert sind, werden unter Verwendung der Standard-Sonnet / Tensorflow-Initialisierer initialisiert, während diejenigen, die auf ImageNet vorgebracht sind, durch Bootstrappern der Filter aus einem 2D-Inception-V1-Modell in 3D initialisiert werden, wie in der Arbeit beschrieben. Wichtig ist, dass die RGB- und Flow -Ströme separat geschult werden, jeweils ein Softmax -Klassifizierungsverlust. Während der Testzeit kombinieren wir die beiden Streams, indem wir die Logits mit gleicher Gewichtung hinzufügen, wie im Code evalute_sample.py
gezeigt.
Wir trainieren mit synchronem SGD unter Verwendung von tf.train.SyncReplicasOptimizer
. Für jede der RGB- und Flow -Ströme aggregieren wir über 64 Repliken mit 4 Backup -Replikaten. Während des Trainings verwenden wir 0,5 Tropfen und verwenden Batchnorm mit einer Minibatch-Größe von 6. Der verwendete Optimierer ist SGD mit einem Impulswert von 0,9, und wir verwenden 1E-7-Gewichtsverfall. Die RGB- und Flow -Modelle werden für 115.000 bzw. 155.000 Schritte mit den folgenden Lernrate -Zeitplänen geschult.
RGB:
Fließen:
Dies liegt daran, dass die Flussmodelle festgestellt wurden, dass sie nach einem ersten Lauf von 115.000 Schritten mehr Training benötigen.
Die Modelle werden unter Verwendung der Trainingsaufteilung der Kinetik geschult. Beim Kinetik-Testsatz erhalten wir die folgende Top-1 / Top-5-Genauigkeit:
Modell | ImageNet + Kinetik | Kinetik |
---|---|---|
RGB-I3D | 71.1 / 89.3 | 68.4 / 88.0 |
Flow-i3d | 63.4 / 84.9 | 61.5 / 83.4 |
Zwei-Stream i3d | 74.2 / 91.3 | 71.6 / 90.0 |
Die Veröffentlichung des DeepMind Kinetics -Datensatzes enthielt nur die YouTube -IDs sowie die Start- und Endzeiten der Clips. Für die Beispieldaten hier verwenden wir ein Video aus dem UCF101 -Datensatz, für das alle Videos vollständig bereitgestellt werden. Das verwendete Video ist v_CricketShot_g04_c01.mp4
, der von der UCF101 -Website heruntergeladen werden kann.
Unsere Vorverarbeitung verwendet interne Bibliotheken, die jetzt Open-Sourced-Check-Überprüfungen von Googles MediaPipe-Repo wurden. Es macht Folgendes: Für beide Streams probieren wir Frames mit 25 Bildern pro Sekunde. Für die Kinetik kleben wir die Videos zu Beginn und Endzeit zusätzlich zur Verfügung.
Für RGB sind die Videos vergrößerte Konservierungs Seitenverhältnis, so dass die kleinste Dimension 256 Pixel mit bilinearer Interpolation beträgt. Pixelwerte werden dann zwischen -1 und 1. Während des Trainings neu skaliert, wählen wir zufällig eine 224x224 -Bildernte aus, während wir während des Tests die Mitte 224x224 Bildernte aus dem Video auswählen. Die bereitgestellte .npy
-Datei hat somit Form (1, num_frames, 224, 224, 3)
für RGB, was einer Stapelgröße von 1 entspricht.
Für den Flow -Stream konvertieren wir nach der Probenahme der Videos mit 25 Bildern pro Sekunde die Videos in Graustufen. Wir wenden einen optischen TV-L1-Flussalgorithmus an, ähnlich wie dieser Code von OpenCV. Pixelwerte werden in den Bereich [-20, 20] abgeschnitten, dann zwischen -1 und 1 neu skaliert. Wir verwenden nur die ersten beiden Ausgangsabmessungen und wenden die gleiche Anbaus an wie bei RGB. Die bereitgestellte .npy
-Datei hat somit Form (1, num_frames, 224, 224, 2)
für den Durchfluss, der einer Stapelgröße von 1 entspricht.
Hier sind GIFs, die die bereitgestellten .npy
-Dateien zeigen. Aus den RGB -Daten haben wir 1 hinzugefügt und dann durch 2 in die Umschließung zwischen 0 und 1. für die Durchflussdaten geteilt, haben wir dem gesamten Array einen dritten Kanal von allen 0 hinzugefügt, so dass auch zwischen 0 und zwischen 0 und die Ergebnisse liegen. 1.
Weitere Informationen zur Vorverarbeitung finden Sie in diesem Bereich, finden Sie in unserem Papier oder wenden Sie sich an die Autoren.
Brian Zhang, Joao Carreira, Viorica Patraucean, Diego de Las Casas, Chloe Hillier und Andrew Zisserman halfen, diese erste Veröffentlichung vorzubereiten. Wir möchten uns auch bei den Teams hinter dem Kinetik -Datensatz und dem ursprünglichen Inception -Papier, auf dem diese Architektur und dieser Code basieren, danken.
Um zu diesem Repository beizutragen, müssen Sie zunächst die Google Contributor Lizenzvereinbarung (CLA) unterschreiben, die in der Datei beitragen.md bereitgestellt wird. Wir werden dann in der Lage sein, Pull -Anfragen zu akzeptieren, zielen jedoch nicht darauf ab, auf andere geschulte Modelle zu expandieren.
Bei Fragen können Sie sich an die Autoren des "Quo Vadis" -Papiers wenden, dessen E -Mails im Papier aufgeführt sind.