Neural Style
on March 13, 2016
L'intelligence artificielle, la robotique, ou les réseaux de neurones seront des technologies de demain.
Demain
Concrètement, on l'a bien vu cette semaine, AlphaGo a battu Lee Sedol, l'un des champions mondiaux du jeu de go. On a franchi une barrière comparé au match entre Kasparov et DeepBlue qui déduisait son meilleur coup à jouer parmi toutes les combinaisons possibles. Le jeu de Go amène tellement de possibilités qu'il n'est pas possible de toutes les énumérer. Ainsi on combine la reflexion de l'ordinateur avec des réseaux de neurones qui « apprennent les meilleurs coups à jouer ».
L'intelligence artificielle est aujourd'hui utilisée dans de nombreux domaines : génération de contenu textuels, génération de musique, mix d'images.
Installation et utilisation de Neural Style
Et aujourd'hui, je voulais présenter concrètement, comment avec votre ordi combiner deux images et observer le résultat. En effet, cet algorithme utilise les réseaux de neurones pour « apprendre » le style artistique qui se dégage d’une image. Et on utilise une autre image (la source), afin d’appliquer ce style sur celle ci. Vous trouverez le projet sur Github https://github.com/jcjohnson/neural-style.
Grâce à Docker, nous allons virtualiser le projet sur notre ordinateur.
Dans un premier temps, il faut cloner le projet dans un dossier, et télécharger la base de test neurale
$ git clone https://github.com/jcjohnson/neural-style.git
$ cd neural-style
$ bash models/download_models.sh
Ensuite, créer un nouvelle machine docker sous virtualbox, ici on s'assure d'avoir assez de mémoire, car l'appli est gourmande en ressources (4Go de mémoire recommandé) !
$ docker-machine create -d virtualbox --virtualbox-memory "8192" neural-style
$ eval $(docker-machine env neural-style)
Puis on lance le conteneur Docker, ici on utilise l'image de docker Hub kwzr/neural-style et on lie 3 dossiers entre la VM et notre disque physique : les modèles que l'on vient de télécharger, les images sources que l'on veux process, ainsi que l'output (on veut voir le résultat!) :
$ docker run -i -v $PWD/models:/root/torch/neural-style/models -v $PWD/images:/root/torch/neural-style/images -v $PWD/outputs:/root/torch/neural-style/outputs -t kwzr/neural-style /bin/bash
Donc là, nous sommes dans le shell du conteneur docker. Et on peut lancer la commande :
$ th neural_style.lua -gpu -1 -style_image examples/inputs/starry_night.jpg -content_image examples/inputs/hoovertowernight.jpg -output_image outputs/test.png -image_size 256 -optimizer adam
Les options en résumé :
- L'option -gpu -1 est mise, car nous utilisons le CPU du conteneur à la place de la carte graphique.
- Ensuite -style_image et -content_image sont les options des images que l'on souhaite mixer, respectivement le style à appliquer ainsi que l'image que l'on veux traiter.
- L'option -output_image est le chemin d'enregistrement, on précise bien sûr dans le dossier outputs, car c'est le dossier que l'on a partagé entre la VM et notre disque physique.
- Les options -image_size et -optimizer sont facultative, mais permettent au programme de s'executer plus ou moins rapidement mais avec une qualité variable.
Voici un exemple de rendu :