YouTube Walk-Through par l'épiphanie de l'IA
Il s'agit d'un port rapide et minimal de Boris Dayma's Dall · e Mini (avec des méga poids). Il a été dépouillé pour l'inférence et converti en pytorch. Les seules dépendances tierces sont Numpy, les demandes, l'oreiller et la torche.
Pour générer une grille 3x3 de Dall · E Mega Images cela prend:
Voici une ventilation plus détaillée des performances sur un A100. Crédit à @ Technobird22 et son bot de Discord Neogen pour le graphique. 
Le modèle de lin et le code pour la convertir en torche peuvent être trouvés ici.
$ pip install min-dalleChargez les paramètres du modèle une fois et réutilisez le modèle pour générer plusieurs images.
from min_dalle import MinDalle
model = MinDalle (
models_root = './pretrained' ,
dtype = torch . float32 ,
device = 'cuda' ,
is_mega = True ,
is_reusable = True
) Les modèles requis seront téléchargés sur models_root s'ils ne sont pas déjà là. Définissez le dtype sur torch.float16 pour enregistrer la mémoire GPU. Si vous avez un GPU Architecture AMPERE, vous pouvez utiliser torch.bfloat16 . Définissez l' device sur "CUDA" ou "CPU". Une fois que tout a terminé son initialisation, appelez generate_image avec du texte autant de fois que vous le souhaitez. Utilisez une seed positive pour les résultats reproductibles. Des valeurs plus élevées pour supercondition_factor entraînent un meilleur accord avec le texte mais une variété plus étroite d'images générées. Chaque jeton d'image est échantillonné à partir des jetons les plus probables top_k . Le logit le plus important est soustrait des logits pour éviter les infs. Les logits sont ensuite divisés par la temperature . Si is_seamless est vrai, la grille d'image sera carrelée dans l'espace de jeton et non sur l'espace de pixel.
image = model . generate_image (
text = 'Nuclear explosion broccoli' ,
seed = - 1 ,
grid_size = 4 ,
is_seamless = False ,
temperature = 1 ,
top_k = 256 ,
supercondition_factor = 32 ,
is_verbose = False
)
display ( image )
Crédit à @hardmaru pour l'exemple
Les images peuvent également être générées en tant que FloatTensor au cas où vous voudriez les traiter manuellement.
images = model . generate_images (
text = 'Nuclear explosion broccoli' ,
seed = - 1 ,
grid_size = 3 ,
is_seamless = False ,
temperature = 1 ,
top_k = 256 ,
supercondition_factor = 16 ,
is_verbose = False
)Pour obtenir une image au format PIL, vous devrez d'abord déplacer les images vers le CPU et convertir le tenseur en un tableau Numpy.
images = images . to ( 'cpu' ). numpy () Puis image
image = Image . fromarray ( images [ i ])
image . save ( 'image_{}.png' . format ( i )) Si le modèle est utilisé de manière interactive (par exemple dans un ordinateur portable), generate_image_stream peut être utilisé pour générer un flux d'images lorsque le modèle est décodant. Le détokenzer ajoute un léger retard pour chaque image. Définissez progressive_outputs sur True pour activer cela. Un exemple est implémenté dans le colab.
image_stream = model . generate_image_stream (
text = 'Dali painting of WALL·E' ,
seed = - 1 ,
grid_size = 3 ,
progressive_outputs = True ,
is_seamless = False ,
temperature = 1 ,
top_k = 256 ,
supercondition_factor = 16 ,
is_verbose = False
)
for image in image_stream :
display ( image )
Utilisez image_from_text.py pour générer des images à partir de la ligne de commande.
$ python image_from_text.py --text= ' artificial intelligence ' --no-mega