DALL-E 2 è la nuova versione di DALL-E by OpenAI, un potente algoritmo di intelligenza artificiale in grado di generare immagini a partire da semplici testi. La prima versione, DALL-E è uscita il 5 gennaio 2021. A gennaio 2022 è uscita la seconda versione di DALL-E, con un significativo miglioramento nel fotorealismo delle immagini autogenerate e una risoluzione maggiore di queste. Ad oggi è possibile per tutti accedere direttamente alla versione di DALL-E 2 registrandosi presso OpenAI
Contents
- DALL-E 2
- Come è stato allenato DALL-E 2
- Creazione del modello generativo
- Cosa si può fare con DALL-E 2?
- Che differenze ci sono tra DALL-E e DALL-E 2?
- A cosa serve DALL-E 2?
- Un esempio di codice per DALL-E 2
- Utilizzi di DALL-E 2
- Limiti di DALL-E 2
- Norme di sicurezza e policy di DALL-E 2
- Note e ulteriori approfondimenti
DALL-E 2
Innanzi tutto, cos’è DALL-E 2? É un algoritmo di intelligenza artificiale che sfrutta GPT-3 non tanto per produrre testo, ma per tradurre un testo inserito dall’utente e crearne una immagine. L’algoritmo è uscito in beta a gennaio 2022 e nel giugno del 2022 è stata aperta la waitlist per consentire agli utenti di provare la nuova versione di DALL-E.
Aggiornamento! Da settembre 2022 è possibile per tutti iscriversi a DALL-E 2 e sperimentarlo senza più limitazioni o waitlist.
Attraverso DALL-E 2 è letteralmente possibile creare qualsiasi tipo di immagine (purchè si rispettino le norme di sicurezza imposte da OpenAI) semplicemente descrivendone le caratteristiche..

Un esempio preso da OpenAI creata con questo input “An astronaut riding a horse in space in a photorealistic style”
Come è stato allenato DALL-E 2
Per allenare DALL-E i programmatori di OpenAI hanno utilizzato il modello CLIP (Computational Linguistics for Information Processing), un modello di intelligenza artificiale che si è dimostrato particolarmente efficace nell’apprendimento di immagini (Shen et al., 2021).
I programmatori hanno quindi inizialmente preso un dataset (x,y). Per ogni x (una immagine) era associata una y (un testo descrittivo).
Il primo step è stato creare a partire dalle due variabili x e y, attraverso il modello CLIP, le rispettive immagine CLIP embeddata (zi) e il testo CLIP embeddato (zt). L’embedding di fatto crea uno spazio rappresentazionale in cui testi e immagini sono collegati tra loro.
Creazione del modello generativo
Una volta ottenuti i valori embeddati di zi e zt per generare nuove immagini per DALL-E è stato necessario costruire un modello generativo che crei nuove immagini. Per fare questo i programmatori hanno utilizzato due componenti:
- Una prior definita da P(zi|y): cioè viene creata una immagine CLIP zi condizionata dal valore di y, cioè da un testo.
- Un decoder definito da P(x|zi, y) che produce immagini condizionate dall’immagine CLIP zi (prodotta dalla prior nel passaggio precedente), e condizionata anche dall’eventuale valore di y (ossia il testo descrittivo dell’immagine)
Quindi detto in parole più semplici il decoder produce delle immagini a partire da immagini CLIP embeddate. Il prior produce immagini CLIP embeddate a partire da un testo.
Unendo queste due componenti si riesce quindi a creare un’immagine x a partire da una frase y. Una volta che il modello è quindi allenato è possibile fare in modo che un utente inserisca un testo descrittivo di una immagine (che verrà salvata nella variabile y) e che da questo testo venga prodotta una immagine x.
Espresso più formalmente: P(x|y)

Sopra alla linea tratteggiata è descritto il processo di CLIP training in cui viene creato uno spazio rappresentazionale tra testo e immagine.
Sotto la linea tratteggiata è descritto il processo di generazione dell’immagine. Il testo CLIP embeddato viene passato al prior che produce un’immagine una immagine embeddata, questa viene utilizzata come condizione nel decoder che produce l’immagine finale.
Immagine presa da Ramesh et al., 2022, https://arxiv.org/abs/2204.06125
Cosa si può fare con DALL-E 2?
DAL-E 2 è quindi un sistema AI avanzato che consente di:
- creare immagini completamente originali (cioè mai esistite prima) a partire da semplici stringhe di testo.
- editare immagini già esistenti aggiungendo, togliendo o modificando degli elementi dell’immagine (funzione chiamata inpainting).
- ottenere variazioni di una immagine creata dall’utente.
Qui sotto potete vedere un esempio di come funziona DALL-E 2 e la sua interfaccia (a dire il vero ad oggi ancora molto scarna di possibilità di personalizzazione del modello)
Che differenze ci sono tra DALL-E e DALL-E 2?
DALL-E 2 rappresenta la versione evoluta di DALL-E. Il secondo è stato pubblicato a gennaio del 2021, mentre DALL-E 2 nel gennaio del 2022. L’AI è ancora in fase di beta e per accedervi è necessario iscriversi ad una waiting list. Il progetto è quindi attivo e in fase di sviluppo e nuove feature verranno pian pian integrate oltre a migliorare gli outcome finali. In generale le principali differenze tra DALL-E e DALL-E 2 sono:
- DALL-E consentiva solo di creare immagini a partire da testo. DALL-E 2 consente anche di modificare parti dell’immagine, sempre usando il linguaggio naturale.
- DALL-E 2 è migliore nella comprensione del testo richiesto e fornisce risultati più coerenti con la prompt dell’utente.
- La risoluzione delle immagini prodotte da DALL-E 2 è aumentata rispetto alla versione precedente.
- Con DALL-E 2 è possibile caricare immagini proprie e modificarle, oppure ottenere versioni differenti.
A cosa serve DALL-E 2?
In generale è difficile stabilire ora a cosa possa realmente servire DALL-E-2. Sicuramente avere la possibilità di generare immagini completamente originali può essere molto utile per blogger, per artisti di vario genere alla ricerca di una ispirazione, per un photo-editing veloce oppure semplicemente per stupire e giocare. Se ci basiamo su quello che dichiara OpenAI i principali scopi di DALL-E 2 sono:
- consentire alle persone di esprimere se stesse “visivamente” in modi in cui prima non potevano esprimersi.
- una immagine generata da una AI può dirci molte cose, ad esempio se e come un sistema artificiale ci “capisca” o se semplicemente ripeta ciò che ha imparato.
- DALL-E consente a noi umani di capire come un sistema di AI avanzato veda e comprenda il nostro mondo.
Un esempio di codice per DALL-E 2
Per poter utilizzare DALL-E 2 potete utilizzare comodamente lo strumento online che già mette a disposizione OpenAI. Se però volete runnare il vostro codice, una volta settata la variabile d’ambiente con la vostra API Key potete utilizzare il seguente codice in Python.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | import os import openai import requests import shutil openai.api_key = os.getenv("OPENAI_API_KEY") def download_image(url, path): r = requests.get(url, stream=True) if r.status_code == 200: with open(path, 'wb') as f: r.raw.decode_content = True shutil.copyfileobj(r.raw, f) size_of_image = {'a': '256x256', 'b': '512x512', 'c': '1024x1024'} prompt = input("Enter your prompt for DALL-E 2: ") number_of_images = int(input("Enter the number of images you want: ")) size = input("Enter the size of the image: \n type 'a' for 256x256\n type 'b' for 512x512\n type 'c' for 1024x1024 \n type 'off' to quit: ") if size in size_of_image and number_of_images < 10 and number_of_images > 0: image = openai.Image.create(prompt=prompt, n=number_of_images, size=size_of_image[size]) url_list = [n['url'] for n in image['data']] folder = str(image['created']) if os.path.exists(folder): shutil.rmtree(folder) os.mkdir(folder) a = 0 for url in url_list: a += 1 download_image(url, f"{folder}/image{a}.jpg") else: print("Something went wrong. Please try again.") |
In questo modo avrete la possibilità di modificare la qualità dell’immagine e anche il numero di immagini prodotte. Il numero massimo è fissato a 10.
Utilizzi di DALL-E 2
Il generatore di immagini di Bing è un servizio che permette agli utenti di creare immagini originali a partire da una descrizione testuale. Il generatore di immagini di Bing utilizza DALL-E 2, il modello multimodale di OpenAI che è in grado di generare immagini realistiche e creative a partire da un input testuale.
Per usare il generatore di immagini di Bing, basta scrivere una descrizione testuale di ciò che si vuole creare, come “crea l’immagine di un gatto che suona il pianoforte”. Il generatore di immagini di Bing invia la descrizione a DALL-E 2, che produce diverse immagini corrispondenti alla descrizione. Attraverso GPT-4 vengono inoltre proposte alcune modifiche che l’utente può utilizzare per modificare l’immagine.
In alternativa è possibile modificare la descrizione e chiedere di generare una nuova immagine originale e gratuita.
Limiti di DALL-E 2
Ci sono ancora una serie di limiti che riguardano da una parte la capacità del modello di comprendere esattamente quello che desideriamo (o la nostra incapacità ad esprimerlo chiaramente al modello), dall’altra dai numerosi errori che derivano necessariamente da un progetto in fase di ricerca e sviluppo.
Ad esempio DALL-E 2 è paradossalmente molto scarso nello scrivere del testo quando espressamente glielo chiediamo (es. “una casa gialla con un lenziolo appeso bianco con la scritta “ti vogliamo bene””.
Questo difetto specifico probabilmente è legato a come viene costruità l’immagine, per cui a livello computazionale il testo specifico “ti vogliamo bene” assume, come il resto della prompt, una forma probabilistica e non deterministica. Inoltre nella definizione della decodifica (quindi quando è attivo il decoder) un peso maggiore è dato all’immagine CLIP piuttosto che al testo inserito dall’utente (che è la nostra variabile y).
Norme di sicurezza e policy di DALL-E 2
Se volete diventare utenti di DALL-E 2 ci sono una serie di condizioni molto rigide che vanno rispettate, pena il ban e la fuoriuscita dal beta testing. Le norme sono legate ovviamente alle possibilità, praticamente infinite, di creare immagini che sembrino reali. Quindi non è consentito inserire immagini di uomini pubblici, per evitare deep fake, o in generale non è concesso caricare il proprio viso o quello di qualcun altro.
Altre norme riguardano eventuali contenuti a sfondo sessuale, di odio, razzismo. Per una più estesa trattazione delle norme potete semplicemente navigare nella pagina policy del sito di OpenAI.
Note e ulteriori approfondimenti
Shen, S., Harold Li, L., Tan, H., Bansal, M., Rohrbach, A., Chang, K.-W., … Keutzer, K. (2021). How Much Can CLIP Benefit Vision-and-Language Tasks? Retrieved from https://github.com/facebookresearch/grid-feats-vqa
Saharia, C., Chan, W., Saxena, S., Li, L., Whang, J., Denton, E., … Norouzi, M. (2022). Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding. Retrieved from http://arxiv.org/abs/2205.11487
Singh, G., Deng, F., & Ahn, S. (2021). Illiterate DALL-E Learns to Compose. Retrieved from http://arxiv.org/abs/2110.11405
Marcus, G., Davis, E., & Aaronson, S. (2022). A very preliminary analysis of DALL-E 2. Retrieved from http://arxiv.org/abs/2204.13807
Ge, Y., Xu, J., Zhao, B. N., Itti, L., & Vineet, V. (2022). DALL-E for Detection: Language-driven Context Image Synthesis for Object Detection. Retrieved from http://arxiv.org/abs/2206.09592
Conwell, C., & Ullman, T. (2022). Testing Relational Understanding in Text-Guided Image Generation. Retrieved from http://arxiv.org/abs/2208.00005