Ce dépôt contient une implémentation PyTorch de l'algorithme Deep Dream (:link : blog de Mordvintstev et al.).
Il dispose d'un support complet pour l'utilisation de la ligne de commande et d'un Jupyter Notebook !
Et cela vous donnera le pouvoir de créer ces images étranges et psychédéliques :
Pas mal, hein ?
Je vous suggère fortement de commencer par le notebook Jupyter que j'ai créé !
Remarque : il est assez volumineux, environ 10 Mo, donc plusieurs tentatives peuvent être nécessaires pour le charger dans le navigateur ici sur GitHub.
En un mot, l'algorithme maximise les activations des couches de réseau choisies en effectuant une montée de gradient .
Ainsi, à partir d'une image d'entrée comme celle de gauche après "rêver", nous obtenons l'image de droite :
Qui aurait dit que les réseaux de neurones contenaient cette créativité cachée ? ?
La plupart des dépôts originaux de Deep Dream ont été écrits en Caffe et ceux écrits en PyTorch sont généralement très difficiles à lire et à comprendre. Ce dépôt est une tentative de créer le dépôt DeepDream le plus propre que je connaisse + il est écrit en PyTorch ! ❤️
Voici quelques exemples que vous pouvez créer en utilisant ce code !
En utilisant des couches moins profondes de réseaux de neurones, vous obtiendrez des motifs de niveau inférieur (bords, cercles, couleurs, etc.) en sortie :
Ici, les 2 premières images provenaient de ResNet50 et la dernière de GoogLeNet (toutes deux pré-entraînées sur ImageNet).
En utilisant des couches de réseau plus profondes, vous obtiendrez des modèles de niveau supérieur (yeux, museaux, têtes d'animaux) :
Le 1er et le 3ème ont été créés à l'aide de VGG 16 (ImageNet) et celui du milieu à l'aide de ResNet50 pré-entraîné sur Places 365.
Si nous gardons tous les autres paramètres identiques mais que nous échangeons les poids pré-entraînés, nous obtenons ceci :
Gauche : ResNet50-ImageNet (nous pouvons voir plus de caractéristiques animales) Droite : ResNet50-Places365 (trucs construits par l'homme, etc.).
Le rêve s'effectue sur plusieurs résolutions d'images empilées « verticalement » (nous appelons cela une pyramide d'images ).
De gauche à droite, le seul paramètre qui changeait était la taille de la pyramide (de gauche à droite : 3, 7, 9 niveaux).
Jouer avec le rapport pyramidal a un effet similaire/lié - l'idée de base est que la zone relative de l'image que les neurones les plus profonds peuvent modifier et "voir" (le soi-disant champ récepteur du réseau) augmente et nous devenons de plus en plus grands. des caractéristiques telles que des yeux qui sortent (de gauche à droite : 1.1, 1.5, 1.8) :
Remarque : vous pouvez voir les paramètres exacts utilisés pour créer ces images encodés dans le nom de fichier !
Assurez-vous de consulter le notebook Jupyter !, je l'ai expliqué en détail.
Voici quelques autres exemples que vous pouvez créer en utilisant ce code !
L'idée ici est que, quels que soient les rêves du réseau, il suffit de le renvoyer à son entrée et d'appliquer une transformation géométrique.
Si nous appliquons uniquement le zoom central, nous obtenons ceci :
Appliquer un zoom central et en même temps appliquer une rotation de 3 degrés par image donne ceci :
Enfin si on fait une traduction simple (5 px par image dans le sens haut gauche vers bas droit) :
Espérons que cela ne vous a pas brisé le cerveau - cela ressemble au Web 1.0 du début des années 2000. Supportez-moi.
Au lieu de renvoyer la sortie à l'entrée, nous appliquons simplement l'algorithme par image et appliquons un mélange linéaire :
Le mélange linéaire combine simplement l'image actuelle avec la dernière afin de réduire le scintillement (ici j'ai utilisé 0,85)
Remarque : toutes les images/GIF deepdream ont été produits par moi, les crédits pour les artistes d'images originales sont indiqués ci-dessous.
git clone https://github.com/gordicaleksa/pytorch-deepdream
cd path_to_repo
conda env create
à partir du répertoire du projet (cela créera un tout nouvel environnement conda).activate pytorch-deepdream
(pour exécuter des scripts depuis votre console ou configurer l'interpréteur dans votre IDE)C'est ça! Cela devrait fonctionner immédiatement en exécutant le fichier Environment.yml qui traite des dépendances.
Remarque : si vous souhaitez utiliser les fonctions vidéo dont je dispose, vous aurez besoin de ffmpeg dans votre chemin système.
Le package PyTorch pip sera fourni avec une version de CUDA/cuDNN, mais il est fortement recommandé d'installer au préalable un CUDA à l'échelle du système, principalement à cause des pilotes GPU. Je recommande également d'utiliser le programme d'installation de Miniconda comme moyen d'obtenir conda sur votre système. Suivez les points 1 et 2 de cette configuration et utilisez les versions les plus récentes de Miniconda et CUDA/cuDNN pour votre système.
Exécutez simplement jupyter notebook
depuis votre console Anaconda et il ouvrira une session dans votre navigateur par défaut.
Ouvrez The Annotated DeepDream.ipynb
et vous êtes prêt à jouer !
Remarque : si DLL load failed while importing win32api: The specified module could not be found
Faites simplement pip uninstall pywin32
, puis pip install pywin32
ou conda install pywin32
devrait le réparer !
Il vous suffit de lier l'environnement Python que vous avez créé dans la section de configuration.
Accédez à/activez votre environnement si vous utilisez Anaconda (et j'espère que vous le faites) et vous pouvez utiliser les commandes que j'ai liées ci-dessous.
Astuce : placez vos images/vidéos dans le répertoire data/input/
et vous pourrez alors simplement référencer vos fichiers (images/vidéos) par leur nom au lieu d'utiliser des chemins absolus/relatifs.
Pour créer des images Deep Dream statiques, exécutez la commande suivante :
python deepdream.py --input <img_name> --img_width 600
Cela utilisera les paramètres par défaut, mais vous obtiendrez immédiatement un résultat significatif enregistré dans :
data/out-images/VGG16_EXPERIMENTAL_IMAGENET/
Remarque : le répertoire de sortie changera en fonction du modèle et des poids pré-entraînés que vous utilisez.
Pour obtenir la vidéo Ouroboros de 30 images prête à l'emploi, procédez comme suit :
python deepdream.py --input <img_name> --create_ouroboros --ouroboros_length 30
Il videra les images intermédiaires dans data/out-videos/VGG16_EXPERIMENTAL_IMAGENET/
et enregistrera la vidéo finale dans data/out-videos
.
Pour créer une vidéo Deep Dream, exécutez cette commande :
python deepdream.py --input <mp4 video name>
Il videra les images intermédiaires dans data/out-videos/tmp_out
et enregistrera la vidéo finale dans data/out-videos
.
Eh bien, amusez-vous avec ce projet ! Voici quelques résultats supplémentaires et magnifiques :
Un GPU avec plus de 2 Go sera largement suffisant.
Vous pourrez créer des images DeepDream, des vidéos Ouroboros et DeepDream.
Si vous n'avez pas de GPU, le code s'exécutera automatiquement sur le CPU mais un peu plus lentement (surtout pour les vidéos).
Si vous rencontrez des difficultés pour comprendre DeepDream, j'ai fait un aperçu de l'algorithme dans cette vidéo :
Et le Jupyter Notebook que j’ai créé est également le meilleur point de départ !
J'ai trouvé ces dépôts utiles (lors du développement de celui-ci) :
J'ai trouvé les images que j'utilisais ici :
D’autres images sont désormais déjà des classiques dans les mondes NST et DeepDream.
Places 365 modèles pré-entraînés proviennent de ce superbe dépôt.
Si vous trouvez ce code utile pour votre recherche, veuillez citer ce qui suit :
@misc{Gordić2020DeepDream,
author = {Gordić, Aleksa},
title = {pytorch-deepdream},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/gordicaleksa/pytorch-deepdream}},
}
Si vous aimeriez avoir plus de contenu lié à l'IA dans votre vie ?, pensez à :