Deep Art sur Windows

Regardant une vidéo qui parlait d’intelligence artificielle, j’ai découvert le deep art, en gros une composition artistique créée à partir d’algorithmes de deep learning, l’apprentissage profond en français. Vous pourrez en savoir plus en cherchant un peu sur Google, mais c’est une science qui semble déjà utilisée dans de nombreux domaines qui ont besoin de traiter de nombreuses données à partir d’images, sons, etc….

On trouve sur Internet des sites, et sur smartphones, tablettes, des applications, qui permettent d’utiliser les algorithmes de deep art.
L’inconvénient est que le nombre de modèles proposés à transférer sur l’image que l’on fournit est limité. Ainsi, on ne peut pas fournir soi même l’image dite de style. De plus, l’algorithme peut aussi permettre d’utiliser plusieurs images de styles à transférer sur l’image fournit (en anglais plus tard c’est l’image content)
Quelque part, on doit pouvoir refaire ces images avec une bonne dose de temps et d’huile de coude en utilisant des logiciels de retouche d’image, tel que The Gimp, et encore, je pense être loin de ce que propose l’algorithme. Pour cela, il faudrait lire la publication http://www.cv-foundation.org/openaccess/content_cvpr_2016/papers/Gatys_Image_Style_Transfer_CVPR_2016_paper.pdf afin d’en comprendre le fonctionnement.

Mais les résultats que l’on peut observer sont très sympas et donnent envie de générer des images grâce à cet algorithme.

Du coup, je me suis dit que ça serait pas mal de pouvoir le faire moi même, soit en passant par mon serveur, soit directement depuis mon ordinateur portable qui possède une carte graphique récente.
Et effectivement, il y a une implémentation de l’algorithme en python qui permet de faire cela.

J’ai donc décidé de faire cela sur mon ordinateur, qui tourne sous Windows 10 (plus de jeux sur Steam sont sur Windows 10, et la gestion de certains périphériques est native… sinon je serais sous Linux), le fait d’avoir une bonne CG est un argument favorable!

J’ai utilisé le guide suivant qui permet à date d’aujourd’hui de faire tourner l’algorithme.

install instructions

J’ai cependant essayé de mettre à jour au mieux les différents softs/libraries soit:
– Python 3.6.4
– CUDA 9.0 (la version 9.1 pose problème)
– CuDNN v7.04 pour CUDA 9.0 (nécéssite enregistrement NVIDIA DEV, et la 7.11 posait problème

  • Les premiers runs qui semblaient tourner ont donné:

C:\Users\luc_j\Documents\NeuralPainting>neural_style.py --content_img id.jpg --style_imgs many.jpg --img_name out.jpg—- RENDERING SINGLE IMAGE —-

2018-03-22 18:33:20.092999: I C:\tf_jenkins\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\core\platform\cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2018-03-22 18:33:20.514497: I C:\tf_jenkins\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\core\common_runtime\gpu\gpu_device.cc:1212] Found device 0 with properties:
name: GeForce GTX 1070 major: 6 minor: 1 memoryClockRate(GHz): 1.695
pciBusID: 0000:01:00.0
totalMemory: 8.00GiB freeMemory: 6.62GiB
2018-03-22 18:33:20.525588: I C:\tf_jenkins\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\core\common_runtime\gpu\gpu_device.cc:1312] Adding visible gpu devices: 0
2018-03-22 18:33:21.312383: I C:\tf_jenkins\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\core\common_runtime\gpu\gpu_device.cc:993] Creating TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 6401 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1070, pci bus id: 0000:01:00.0, compute capability: 6.1)
2018-03-22 18:33:28.434573: E C:\tf_jenkins\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\stream_executor\cuda\cuda_dnn.cc:385] could not create cudnn handle: CUDNN_STATUS_ALLOC_FAILED
2018-03-22 18:33:28.440337: E C:\tf_jenkins\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\stream_executor\cuda\cuda_dnn.cc:352] could not destroy cudnn handle: CUDNN_STATUS_BAD_PARAM
2018-03-22 18:33:28.445257: F C:\tf_jenkins\workspace\rel-win\M\windows-gpu\PY\36\tensorflow\core\kernels\conv_ops.cc:717] Check failed: stream->parent()->GetConvolveAlgorithms( conv_parameters.ShouldIncludeWinogradNonfusedAlgo(), &algorithms)Pour corriger cette erreur, j’ai modifié ce passage dans le script:

def stylize(content_img, style_imgs, init_img, frame=None):
config = tf.ConfigProto()

config.gpu_options.allow_growth = True

with tf.device(args.device), tf.Session(config=config) as sess:Et ensuite ça a fonctionné comme par magie!

J’ai effectué le Hello World du deep Art, soit l’image suivante obtenue (a partir d’une photo d’identité ou on a pas le droit de sourire et de l’auto-portait de van gogh comme style):

Le Hello World du Deep Art

A suivre, les paramètres pour obtenir une image de meilleure résolution!