brume sur les collines verdoyantes
assiettes brisées sur l'herbe
amour et attention cosmiques
un voyageur temporel dans la foule
la vie pendant la peste
paix méditative dans une forêt ensoleillée
un homme peignant une image complètement rouge
une expérience psychédélique sous LSD
Outil de ligne de commande simple pour la génération de texte en image à l'aide du CLIP et de Siren d'OpenAI. Le mérite revient à Ryan Murdock pour la découverte de cette technique (et pour avoir trouvé ce grand nom) !
Carnet original
Nouveau cahier simplifié
Cela nécessitera que vous disposiez d'un GPU Nvidia ou d'un GPU AMD
$ pip install deep-daze
En supposant que Python soit installé :
pip install deep-daze
$ imagine " a house in the forest "
Pour Windows :
imagine " a house in the forest "
C'est ça.
Si vous disposez de suffisamment de mémoire, vous pouvez obtenir une meilleure qualité en ajoutant un indicateur --deeper
$ imagine " shattered plates on the ground " --deeper
Dans le véritable esprit d’apprentissage profond, davantage de couches produiront de meilleurs résultats. La valeur par défaut est de 16
, mais peut être augmentée à 32
en fonction de vos ressources.
$ imagine " stranger in strange lands " --num-layers 32
NAME
imagine
SYNOPSIS
imagine TEXT < flags >
POSITIONAL ARGUMENTS
TEXT
(required) A phrase less than 77 tokens which you would like to visualize.
FLAGS
--img=IMAGE_PATH
Default: None
Path to png/jpg image or PIL image to optimize on
--encoding=ENCODING
Default: None
User-created custom CLIP encoding. If used, replaces any text or image that was used.
--create_story=CREATE_STORY
Default: False
Creates a story by optimizing each epoch on a new sliding-window of the input words. If this is enabled, much longer texts than 77 tokens can be used. Requires save_progress to visualize the transitions of the story.
--story_start_words=STORY_START_WORDS
Default: 5
Only used if create_story is True. How many words to optimize on for the first epoch.
--story_words_per_epoch=STORY_WORDS_PER_EPOCH
Default: 5
Only used if create_story is True. How many words to add to the optimization goal per epoch after the first one.
--story_separator:
Default: None
Only used if create_story is True. Defines a separator like ' . ' that splits the text into groups for each epoch. Separator needs to be in the text otherwise it will be ignored
--lower_bound_cutout=LOWER_BOUND_CUTOUT
Default: 0.1
Lower bound of the sampling of the size of the random cut-out of the SIREN image per batch. Should be smaller than 0.8.
--upper_bound_cutout=UPPER_BOUND_CUTOUT
Default: 1.0
Upper bound of the sampling of the size of the random cut-out of the SIREN image per batch. Should probably stay at 1.0.
--saturate_bound=SATURATE_BOUND
Default: False
If True, the LOWER_BOUND_CUTOUT is linearly increased to 0.75 during training.
--learning_rate=LEARNING_RATE
Default: 1e-05
The learning rate of the neural net.
--num_layers=NUM_LAYERS
Default: 16
The number of hidden layers to use in the Siren neural net.
--batch_size=BATCH_SIZE
Default: 4
The number of generated images to pass into Siren before calculating loss. Decreasing this can lower memory and accuracy.
--gradient_accumulate_every=GRADIENT_ACCUMULATE_EVERY
Default: 4
Calculate a weighted loss of n samples for each iteration. Increasing this can help increase accuracy with lower batch sizes.
--epochs=EPOCHS
Default: 20
The number of epochs to run.
--iterations=ITERATIONS
Default: 1050
The number of times to calculate and backpropagate loss in a given epoch.
--save_every=SAVE_EVERY
Default: 100
Generate an image every time iterations is a multiple of this number.
--image_width=IMAGE_WIDTH
Default: 512
The desired resolution of the image.
--deeper=DEEPER
Default: False
Uses a Siren neural net with 32 hidden layers.
--overwrite=OVERWRITE
Default: False
Whether or not to overwrite existing generated images of the same name.
--save_progress=SAVE_PROGRESS
Default: False
Whether or not to save images generated before training Siren is complete.
--seed=SEED
Type: Optional[]
Default: None
A seed to be used for deterministic runs.
--open_folder=OPEN_FOLDER
Default: True
Whether or not to open a folder showing your generated images.
--save_date_time=SAVE_DATE_TIME
Default: False
Save files with a timestamp prepended e.g. ` %y%m%d-%H%M%S-my_phrase_here `
--start_image_path=START_IMAGE_PATH
Default: None
The generator is trained first on a starting image before steered towards the textual input
--start_image_train_iters=START_IMAGE_TRAIN_ITERS
Default: 50
The number of steps for the initial training on the starting image
--theta_initial=THETA_INITIAL
Default: 30.0
Hyperparameter describing the frequency of the color space. Only applies to the first layer of the network.
--theta_hidden=THETA_INITIAL
Default: 30.0
Hyperparameter describing the frequency of the color space. Only applies to the hidden layers of the network.
--save_gif=SAVE_GIF
Default: False
Whether or not to save a GIF animation of the generation procedure. Only works if save_progress is set to True.
Technique imaginée et partagée pour la première fois par Mario Klingemann, elle permet d'amorcer le réseau générateur avec une image de départ, avant de l'orienter vers le texte.
Spécifiez simplement le chemin d'accès à l'image que vous souhaitez utiliser, et éventuellement le nombre d'étapes de formation initiale.
$ imagine ' a clear night sky filled with stars ' --start_image_path ./cloudy-night-sky.jpg
Image de départ préparée
Puis formé avec l'invite A pizza with green pepper.
Nous pouvons également introduire une image comme objectif d’optimisation, au lieu de simplement amorcer le réseau de générateurs. Deepdaze rendra alors sa propre interprétation de cette image :
$ imagine --img samples/Autumn_1875_Frederic_Edwin_Church.jpg
Image originale :
L'interprétation du réseau :
Image originale :
L'interprétation du réseau :
$ imagine " A psychedelic experience. " --img samples/hot-dog.jpg
L'interprétation du réseau :
Le mode normal pour les textes n'autorise que 77 jetons. Si vous souhaitez visualiser une histoire/un paragraphe/une chanson/un poème complet, définissez create_story
sur True
.
Compte tenu du poème « S'arrêter près des bois lors d'une soirée enneigée » de Robert Frost - « Je pense savoir à qui appartiennent ces bois. Sa maison est dans le village cependant ; il ne me verra pas m'arrêter ici pour regarder ses bois se remplir de neige. Mon petit cheval doit trouver ça bizarre De s'arrêter sans ferme à proximité Entre les bois et le lac gelé Le soir le plus sombre de l'année Il secoue les cloches de son harnais Pour demander s'il y a une erreur Le seul autre son est le souffle du vent facile. et flocon duveteux. Les bois sont beaux, sombres et profonds, Mais j'ai des promesses à tenir, Et des kilomètres à parcourir avant de dormir, Et des kilomètres à parcourir avant de dormir.".
On obtient :
deep_daze.Imagine
en Python from deep_daze import Imagine
imagine = Imagine (
text = 'cosmic love and attention' ,
num_layers = 24 ,
)
imagine ()
Enregistrez les images au format insert_text_here.00001.png, insert_text_here.00002.png, ... jusqu'à (total_iterations % save_every)
imagine = Imagine (
text = text ,
save_every = 4 ,
save_progress = True
)
Crée des fichiers avec à la fois l'horodatage et le numéro de séquence.
par exemple 210129-043928_328751_insert_text_here.00001.png, 210129-043928_512351_insert_text_here.00002.png, ...
imagine = Imagine (
text = text ,
save_every = 4 ,
save_progress = True ,
save_date_time = True ,
)
Si vous disposez d'au moins 16 Gio de VRAM disponible, vous devriez pouvoir exécuter ces paramètres avec une certaine marge de manœuvre.
imagine = Imagine (
text = text ,
num_layers = 42 ,
batch_size = 64 ,
gradient_accumulate_every = 1 ,
)
imagine = Imagine (
text = text ,
num_layers = 24 ,
batch_size = 16 ,
gradient_accumulate_every = 2
)
Si vous souhaitez désespérément l'exécuter sur une carte avec moins de 8 Gio de VRAM, vous pouvez réduire la largeur_image.
imagine = Imagine (
text = text ,
image_width = 256 ,
num_layers = 16 ,
batch_size = 1 ,
gradient_accumulate_every = 16 # Increase gradient_accumulate_every to correct for loss in low batch sizes
)
Ces expérimentations ont été réalisées avec un 2060 Super RTX et un 3700X Ryzen 5. Nous mentionnons d'abord les paramètres (bs = batch size), puis l'utilisation mémoire et dans certains cas les itérations d'entraînement par seconde :
Pour une résolution d'image de 512 :
Pour une résolution d'image de 256 :
@NotNANtoN recommande une taille de lot de 32 avec 44 couches et une formation de 1 à 8 époques.
Ceci est juste un teaser. Nous pourrons générer des images, du son, n'importe quoi à volonté, avec le langage naturel. Le holodeck est sur le point de devenir réel de notre vivant.
Veuillez vous joindre aux efforts de réplication pour DALL-E pour Pytorch ou Mesh Tensorflow si vous souhaitez développer cette technologie.
Big Sleep - CLIP et le générateur de Big GAN
@misc { unpublished2021clip ,
title = { CLIP: Connecting Text and Images } ,
author = { Alec Radford, Ilya Sutskever, Jong Wook Kim, Gretchen Krueger, Sandhini Agarwal } ,
year = { 2021 }
}
@misc { sitzmann2020implicit ,
title = { Implicit Neural Representations with Periodic Activation Functions } ,
author = { Vincent Sitzmann and Julien N. P. Martel and Alexander W. Bergman and David B. Lindell and Gordon Wetzstein } ,
year = { 2020 } ,
eprint = { 2006.09661 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CV }
}