Nebel über grünen Hügeln
zerbrochene Teller auf dem Gras
kosmische Liebe und Aufmerksamkeit
ein Zeitreisender in der Menge
Leben während der Pest
meditativer Frieden in einem sonnenbeschienenen Wald
ein Mann, der ein völlig rotes Bild malt
eine psychedelische Erfahrung auf LSD
Einfaches Befehlszeilentool für die Text-zu-Bild-Generierung mit CLIP und Siren von OpenAI. Der Dank geht an Ryan Murdock für die Entdeckung dieser Technik (und für die Erfindung des tollen Namens)!
Originales Notizbuch
Neues vereinfachtes Notizbuch
Dies erfordert, dass Sie über eine Nvidia-GPU oder AMD-GPU verfügen
$ pip install deep-daze
Vorausgesetzt, Python ist installiert:
pip install deep-daze
$ imagine " a house in the forest "
Für Windows:
imagine " a house in the forest "
Das ist es.
Wenn Sie über genügend Speicher verfügen, können Sie eine bessere Qualität erzielen, indem Sie das Flag --deeper
hinzufügen
$ imagine " shattered plates on the ground " --deeper
Im echten Deep-Learning-Stil führen mehr Ebenen zu besseren Ergebnissen. Der Standardwert liegt bei 16
, kann aber abhängig von Ihren Ressourcen auf 32
erhöht werden.
$ 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.
Die erstmals von Mario Klingemann entwickelte und geteilte Technik ermöglicht es Ihnen, das Generatornetzwerk mit einem Startbild zu präparieren, bevor es zum Text gesteuert wird.
Geben Sie einfach den Pfad zu dem Bild an, das Sie verwenden möchten, und optional die Anzahl der ersten Trainingsschritte.
$ imagine ' a clear night sky filled with stars ' --start_image_path ./cloudy-night-sky.jpg
Grundiertes Startbild
Anschließend mit der Aufforderung A pizza with green pepper.
Wir können auch ein Bild als Optimierungsziel einspeisen, anstatt nur das Generatornetzwerk zu grundieren. Deepdaze wird dann seine eigene Interpretation dieses Bildes wiedergeben:
$ imagine --img samples/Autumn_1875_Frederic_Edwin_Church.jpg
Originalbild:
Die Interpretation des Netzwerks:
Originalbild:
Die Interpretation des Netzwerks:
$ imagine " A psychedelic experience. " --img samples/hot-dog.jpg
Die Interpretation des Netzwerks:
Der reguläre Modus für Texte erlaubt nur 77 Token. Wenn Sie eine vollständige Geschichte/Absatz/Lied/Gedicht visualisieren möchten, setzen Sie create_story
auf True
.
Angesichts des Gedichts „Stopping by Woods On a Snowy Evening“ von Robert Frost – „Wessen Wälder das sind, glaube ich zu wissen. Sein Haus liegt jedoch im Dorf; Er wird mich nicht hier anhalten sehen, um zuzusehen, wie sich seine Wälder mit Schnee füllen.“ Mein kleines Pferd muss es seltsam finden, ohne ein Bauernhaus in der Nähe zwischen Wald und zugefrorenem See anzuhalten. Der dunkelste Abend des Jahres. Er schüttelt seine Geschirrglocken, um zu fragen, ob es einen Fehler gibt. Das einzige andere Geräusch ist das Rauschen des leichten Windes und flaumig Die Wälder sind wunderschön, dunkel und tief, aber ich muss Versprechen halten, und Meilen müssen zurückgelegt werden, bevor ich schlafe, und Meilen, die vor mir liegen, bevor ich schlafe.
Wir bekommen:
deep_daze.Imagine
in Python auf from deep_daze import Imagine
imagine = Imagine (
text = 'cosmic love and attention' ,
num_layers = 24 ,
)
imagine ()
Speichern Sie Bilder im Format insert_text_here.00001.png, insert_text_here.00002.png, ...bis zu (total_iterations % save_every)
imagine = Imagine (
text = text ,
save_every = 4 ,
save_progress = True
)
Erstellt Dateien mit Zeitstempel und Sequenznummer.
z. B. 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 ,
)
Wenn Sie über mindestens 16 GiB VRAM verfügen, sollten Sie diese Einstellungen mit etwas Spielraum ausführen können.
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
)
Wenn Sie dies unbedingt auf einer Karte mit weniger als 8 GiB VRAM ausführen möchten, können Sie die Bildbreite verringern.
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
)
Diese Experimente wurden mit einem 2060 Super RTX und einem 3700X Ryzen 5 durchgeführt. Wir erwähnen zunächst die Parameter (bs = Batch-Größe), dann die Speichernutzung und in einigen Fällen die Trainingsiterationen pro Sekunde:
Für eine Bildauflösung von 512:
Für eine Bildauflösung von 256:
@NotNANtoN empfiehlt eine Stapelgröße von 32 mit 44 Schichten und ein Training von 1–8 Epochen.
Dies ist nur ein Teaser. Wir werden in der Lage sein, Bilder, Töne und alles nach Belieben mit natürlicher Sprache zu erzeugen. Das Holodeck wird noch zu unseren Lebzeiten Wirklichkeit werden.
Bitte beteiligen Sie sich an den Replikationsbemühungen für DALL-E für Pytorch oder Mesh Tensorflow, wenn Sie daran interessiert sind, diese Technologie voranzutreiben.
Big Sleep - CLIP und der Generator von 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 }
}