HAH




🇬🇧English version

Video et intelligence artificielle



Harccore Anal Hydrogen est un groupe de musique à tendance métal, électronique, electro acoustique, trash, pop... Au sein de ce projet, nous essayons toujours d'expérimenter de nouvelles choses tant musicalement que visuellement.

Février 2017 : nous avons l'idée de nous amuser avec le Google Deep Dream. Nous avions déjà vu ailleurs les résultats hallucinants des rêves générés par cette intelligence artificielle et l'idée de faire un clip sur ce principe nous a plu.

Nous avons installé sur un Macbook toutes les librairies nécessaires à générer des images (sur un CPU). Les quelques frames que nous avions réussi à rendre ont pris plusieurs minutes. La définition était basse, mais le rendu totalement dingue.



Note : Ces vidéos peuvent commencer à dater, ce sont celles qui, sur le moment, nous ont donné envie d'approfondir.



Deep Dream

Le fonctionnement de l'IA (Intelligence Artificielle) dans notre cas de figure parait sorcier mais c'est tout simple. Il est composé de 2 étapes : entrainement, puis exploitation. C'est comme si on apprenait à un individu la forme d'un objet, par exemple une chaise. On lui montre des photos sous plusieurs angles et de tous les types de chaises possibles. Après l'apprentissage, à la vue de cet objet l'individu répondra "c'est une chaise", même si il s'agit d'une photo qu'il découvre.

Avec le DeepDream, on donne une image à l'IA et elle va "rêver" par dessus en dessinnant des formes qu'elle connait, parce qu'elle les a apprise. Deux tâches noires rapprochées, et l'IA dessinera 2 yeux, quelques poils au menton deviendront une fourrure etc...






+     DeepDream     =


Ce qui est génial c'est que des modèles sont déjà entrainés, pas la peine d'apprendre des centaines de milliers d'objets à l'IA , tout et déjà à disposition : https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet

Il est possible de jouer sur quelques paramètres :



Neural Style Transfert

L'IA permet également d'appliquer un style à une image. Elle utilise les données de l'image de style afin de reconstruire l'image originale. Pour cela il faut 2 images : une image à traiter et une image de style.





+



=



Le résultat est bluffant et les possibilités sont très larges. Nous avons mis du temps et beaucoup d'essais avant de produire nous même une image séduisante. L'application "Prisma" a rencontré beaucoup de succès, elle est basée sur cette technologie.

De nombreuses librairies sont disponibles sur Github :

Chaque librairie vient avec ses propres paramètres mais les plus courants sont :



OpticalFlow (DeepFlow)

Faire des images stylisées, ok √ Mais des vidéos ? On éclate la vidéo en frames et on traite chaque image ?
En pratique, ça ne fonctionne pas.

La vidéo scintille, chaque image est traitée différemment et l'IA ne tient pas compte de la précédente image. Pas très joli à regarder.

Le DeepFlow/Deepmatching résoud ce problème : l'image est comparée à la précédente cela donne à l'IA l'information du mouvement qui nous manquait. L'animation est beaucoup plus fluide et la vidéo ne scintille plus.


Sans DeepFlow
Avec DeepFlow


Petit rappel, nous étions parti pur faire un clip de métal. Probablement, nous allions bouger beaucoup et faire des mouvements rapides. A 25 images/seconde, le deepflow commence à avoir du mal à identifier un bras qui traverse l'écran ou une tête qui headbang. Il fallait doubler le nombre d'images/seconde pour corriger le problème.

Tout les plans doivent être tournés en 50 images/seconde.



Matériel / GPU

Pour faire autant de rendus d'images, il faut oublier le CPU et il est indispensable d'avoir un GPU Nvidia. Le backend le plus performant permettant de faire fonctionner l'IA (à l'heure où ces lignes sont écrites) est CUDA, créé par nvidia. Il faut aussi beaucoupd de RAM, un bon CPU, un système de refroidissement performant et une alimentation conséquente. Sur system76 nous avons pu configurer une machine adaptée à ces prérequis.



Tournage


Sur l'exemple ci-dessus, on aperçoit que les mouvements des personnages créent des perturbation dans le fond de l'image, comme si le personnage était englué dans une texture.

Nous avons donc essayé de détourer une vidéo stylisée afin de faire ressortir les personnages.
(ex : JCVD →)

Nous avons tourné les images chez Hello Production afin d'avoir un fond vert facile à détourer.



Montage

Artistic transfert

Une séquence vidéo est exportée de notre logiciel de montage au format HD (1280x720). On choisit un style à lui appliquer.
La librairie manuelruder/artistic-videos fait un très bon job :

CPU et GPU, tout le monde bosse en même temps.

...
Temps de calcul pour 1 image ±= 3 minutes
X 50 images/secondes
X 5m20 de vidéo
= 33 jours de calcul


Zoom infini - DeepDream

Avec la librairie DeepDream nous ajoutons des rêves à une image puis nous la zoomons lègèrement. Avec l'image obtenu on fait la même chose, et cela autant de fois que nécessaire.

Cela génère un zoom inifini.

Pour certaines séquences (l'intro), nous avons simplement retourné le sens de lecture du zoom afin d'obtenir un dézoom.


Il est possible d'utiliser différents calques afin de générer des hallucinations différentes (chiens, lézards, machines industrielles, formes abstraites...).



Agrandissement QHD

Les images stylisées sont ensuites agrandies à l'aide de Waifu2x. On obtient une résolution de 2560x1440 sans dégradation jpeg. Vous pouvez comparer l'agrandissement waifu et Photoshop ci-dessous en cliquant sur les images


Image originale
Agrandie 2x avec Waifu2x
Agrandie 2x avec Photoshop

Toutes les images sont ensuites converties en vidéo à 50 images/seconde puis ré-intégrées dans le logiciel de montage.
Et voilà !



Améliorations

Interface utilisateur
La piste d'amélioration la plus importante est l'interface utilisateur. Aujourd'hui, ce sont des lignes de commande à lancer depuis un terminal, il faut y être initié pour s'en servir.
En cas d'échèc, il est difficile d'en connaitre la cause. Plusieurs jours de rendu ont échoué sans raison.

Nous allons développer avec le Studio Phebe's une interface permettant à un utilisateur lambda de prendre en main les outils que nous avons développé pour ce clip. Il sera développé en python et django, probablement open sourcé si nous sentons que cela pourra être ré-utilisable.


Deepflow et frames grises
Dans certains cas, des parties stylisées de l'image apparaissent en gris dans le bas de l'image, cela provient de la gestion du flux optique. Nous ne connaissons pas bien les raisons. Avec une interface utilisateur plus simple à maitriser, il sera plus facile d'effectuer des tests. Si l'erreur ne peut pas être solutionnée, il faut en tenir compte lors du tournage et recadrer les plans qui posent problème.


Workflow
Ces 3 étapes devaient être lancées indépendemment à chaque séquence :
1. Neural style transfert 2. Waifu 3. Conversion en vidéo
Il est envisageable de créer une commande qui exécute ces 3 étapes automatiquement sans avoir à intervenir. Le développement d'une interface utilisateur permettra également d'autres avancées.


Discussions