Super SloMo : NVIDIA veut passer n'importe quelle vidéo à 240 images par seconde

Super SloMo : NVIDIA veut passer n’importe quelle vidéo à 240 images par seconde

Super SloMo : NVIDIA veut passer n'importe quelle vidéo à 240 images par seconde

À l'occasion de la conférence Computer Vision and Pattern Recognition (CVPR) de Salt Lake City, le constructeur va dévoiler de nouvelles avancées en matière de traitement vidéo grâce à ses GPU.

Mais pas question de rapidité de compression/décompression ou même d'intégration d'un nouveau moteur améliorant la qualité. Plutôt de recherches concernant le slow motion.

La société se dit ainsi capable de reconstruire cet effet depuis une prise de vue à seulement 30 images par secondes. Une présentation détaillée se tiendra le 21 juin prochain.

Pour parvenir à ce résultat, les équipes de NVIDIA ont utilisé la bibliothèque CUDA Deep Neural Network (cuDNN) et PyTorch pour entraîner un réseau neuronal avec des Tesla V100 en analysant onze vidéos prises à 240 ips.

Le constructeur ne dit pas quelle puissance est nécessaire à la reconstruction d'une vidéo. Mais un tel dispositif pourrait intéresser certains acteurs dans le domaine professionnel, ou des services de stockage de vidéos en ligne qui voudraient le proposer à leurs clients, même s'ils n'ont pas un smartphone avec gestion du slow motion.

Commentaires (5)


Mon appareil photo est capable de filmer à 120 fps et les mouvement son environ 4 fois plus lent que sur les vidéo de nvidia à 480 fps, publicité mensongère…


La techno est impressionnante, pas d’artefact qui sautent vraiment aux yeux.

Bon je pensais en lisant l’article qu’il s’agissait d’un outil permettant de calculer un replay de jeu en slow motion, je suis un peu déception du coup <img data-src=" />


En soit, la compression MPEG permet déjà d’interpoler des frame intermédiaire. En effet, une partie des frames sont “enregistrées” comme intermédiaire d’une transformation entre 2 frames. Il suffit de juste créer plus d’intermédiaire.



Bon, là, ça semble bien différent. Il utilise ici des réseaux de neurones. Pour faire simple, une réseau de neurone peut être vu comme une grosse boites noires qui a une (ou plusieurs) entrée et une (ou plusieurs) sortie et plein de bouton pour la régler. Lors de la phase d’apprentissage, on fait passer par batch dans cette boites des exemples qui sont des entrées dont on connait la sortie attendue. à chaque batch d’exemple on règle la boite avec les bouton à disposition pour faire en sorte que la sortie obtenu ressemble un peu plus à la sortie attendue. Ainsi, au fur et à mesure, on arrive à avoir quelque chose qui “apprend” des exemples.

Ici, ça va permettre de mieux interpoler des images intermédiaires car le système “sait” qu’il a affaire par exemple à une main et “sait” comment on peut l’animer.





De manière un peu plus compliqué, lorsque l’on ouvre la boites, on voit qu’un réseau de neurone a (comme un ogre) des couches. Une entrée, c’est un ensemble de valeur numérique, on va considérer qu’elle est de taille fini. On peut voir qu’une entrée, c’est un point dans l’espace à n dimension, n étant le nombre de valeur qui décrit cette entrée (on le voit aussi comme un vecteur qui a pour origine le 0). Finalement, l’ensemble des valeur d’entrée évolue dans cette espace à n dimension

Chaque couche permet de faire une transformation géométrique de cette espace (voyez ça comme si on tordait l’espace comme si c’était de la patte à modeler) à n dimension à un espace à m dimension, m pouvant être plus petit ou plus grand. Et chaque couche permet ainsi de plier déplier, retourner, écraser… jusqu’à arriver que les éléments ayant des sorties similaires se retrouvent proches. Imaginez vous que l’espace d’origine est une boulette de papier que l’on a écrasé, un réseau de neurone va déplier cette boulette de papier, parfois en passant dans un univers à 4 dimensions (c’est pratique les univers à 4 dimensions, ça permet de défaire les nœuds des cordes, tes écouteurs sont emmêlés, hop, un petit tour dans une univers à 4 dimension, et les voici démêlés) pour au final arriver à une feuille de papier toutes plate (2 dimensions)





Ici, il utilise une telles boites noire pour extrapoler des frames intermédiaire. Mais pour ce faire, il passe par ce que l’on appelle un auto-encodeur. Un autoencoder est composé de 2 partie, un encodeur et un décodeur. Généralement on lui demande au moins de recréer en sortie ce qu’on lui a donné en entrée. Mais on fait en sorte qu’entre l’encoder et le décoder, l’information doit être encoder, et pour ce faire, généralement on réduit le nombre de dimension. Moins de dimension dit moins d’information, il faut donc trouver une solution pour compresser l’information. Chose qui a été remarqué, c’est que dans un autoencoder, cette compression comprend une forme de sémantique (dans certain auto-encoder, à qui on a donner plein de photo de visage, on sait qu’il faut juste ajouter à l’information compressée des valeurs précises pour mettre des lunettes à n’importe quels visages. On peut aussi vieillir, féminiser…).

Bon, pour éviter de trop perdre en information, Nvidia a utiliser une petite astuce, ils ont quand même relier directement chaque couche du décodeur à son symétrique dans l’encoder.



A ceci, Nvidia utilise cette auto-encoder avec un réseau neuronal convolutif (CNN pour les intimes). Derrière ce nom barbare, il faut voir ça comme une système qui fait des filtres instagram (et pas forcément plus compliqué). En effet, une image couleur peut être considéré comme une image avec 3 calques, un calque rouge, un vert et un bleu. Chaque couche d’un CNN est un set de filtre (la manière de faire est très similaire aufiltre de Sobelpour la détection des contours) qui passe d’une image à n calque à une autre image à m calque. Les calques des premières couches d’un CNN vont vraiment être basique, d’abord mettre en évidence des contours, en étant sensible au sens du contour, puis à des formes simple, des motif et enfin à des objets plus complexe. Ca permet ainsi d’avoir un système qui reconnait des objets.



Couplé un CNN à un auto encoder, on voit qu’il y a une forte présence de la sémantique de la scène qui est prise en compte. et permet ainsi de mieux extrapoler des informations intermédiaires. Ainsi, entre 2 frames, on peu voir une main qui passe de fermé à ouvert, le réseau de neurone va chercher à créer des frames contenant les étapes intermédiaire de l’ouverture d’une main.



Personnellement, avec une vidéo, il y a un fortes notion de “suite” de frame. Il existe dans les réseaux de neurone un ensemble de réseau de neurone qui sont très adapté à manipuler des données pour lequel l’ordre est important en permettant un certaine forme de mémoire. On utilise ainsi les réseau de neurones récurrents (et des variants comme le “Long short-term memory ” ou le “Gated Recurrent Unit”). Je suis assez surpris qu’il n’en utilise pas. Ca pourrait permettre de prédire des événement “attention, ce ballon vient de passer derrière la voiture, tu ne le vois certes plus, mais tu risque de le revoir dans 15frames à tel endroit si tout se passe bien”.





Pour ceux qui sont intéressé par le sujet, je vous conseille la lecture de “Deep Learning with Python” par François Chollet, c’est un super bouquin sur le deep learning qui explique simplement le sujet sans s’attarder sur des math compliquée (l’algèbre linéaire et les proba, c’est vite velu pour les non initiés)


Évidemment ils comparent juste avec la version stupide de base qui consiste à répéter les frames et pas l’état de l’art. Mais bon y’a écrit réseau de neurone alors “waw” diront certains 😅


Il faut les comparaison avec d’autres algo dans l’article.



L’avantage du réseau de neurone ici, c’est que contrairement à un algo purement mathématique, le réseau de neurone va d’abord interpréter l’image, va “voir” les objets qui la composent (elle va voir une main, un bras, un visage, une voiture…) et de là, elle va pouvoir mieux interpoler les images intermédiaires en adaptant cette interpolation en fonction de l’objet et ses connaissances de la physique de cet objet. Par exemple, une main qui passe de fermée à ouverte entre 2 trame, là où un algo “simple” (c’est loin d’être simple) va créer des déformation successive de l’image de la main fermé pour arriver à une main ouverte, un réseau de neurone va pouvoir lui, comprendre que c’est une main, que celle-ci s’est ouverte, il va donc créer une animation d’une main qui s’ouvre.


Fermer