- Le GAN (Generative Adversarial Networks) consistono in due reti neurali che competono in un gioco a somma zero: una genera immagini verosimili (generatore), l’altra cerca di distinguere queste immagini da quelle reali (discriminatore). L’obiettivo è produrre immagini indistinguibili da quelle reali, utili per la data augmentation nel deep learning, per evitare l’overfitting.
- Le GAN sono utilizzate per vari scopi, tra cui la produzione di nuove immagini per dataset, la traduzione tra immagini e testo, la modifica e la generazione di fotografie realistiche, il ripristino di immagini danneggiate, l’invecchiamento dei volti, la previsione dei fotogrammi video e la generazione di oggetti 3D.
- Esistono diversi modelli di GAN, ognuno con specifiche caratteristiche e applicazioni e ognuno di questi modelli introduce variazioni nel modo in cui i generatori e i discriminatori operano e interagiscono.
Una vince, l’altra perde: le due reti neurali che compongono una GAN si sfidano in un gioco a somma zero. Una genera immagini verosimili, l’altra deve individuarle in mezzo alle immagini reali, prese dal set di addestramento. Le due reti si allenano insieme e si ottimizzano a vicenda: i risultati sono immagini di volti, animali, oggetti “più veri del vero”.
Indice degli argomenti:
Per cosa viene usata una GAN
La GAN è stata descritta per la prima volta nel 2014, nel paper “Generative Adversarial Nets” che Ian J. Goodfellow, ora a Deepmind, scrisse insieme ad altri colleghi durante il dottorato all’università di Montréal. In questo primo paper, la GAN è stata applicata per produrre nuove immagini di esempio per il database di cifre scritte a mano MNIST, per il dataset di fotografie di piccoli oggetti CIFAR-10 e per il Toronto Face Database.
Da allora, lo sviluppo della ricerca nel settore ha portato a utilizzarla per:
- Produrre immagini di esempio per i dataset
- Tradurre da immagine a immagine, da testo a immagine, da immagine a foto, da foto a emoji
- Modificare fotografie
- Generare personaggi di cartoni animati
- Produrre fotografie realistiche, dipingerle, mixarle
- Produrre nuove immagini artistiche
- Ripristinare immagini danneggiate e a bassa risoluzione
- Invecchiare i volti nelle fotografie
- Prevedere i fotogrammi video
- Produrre oggetti 3D
- Generare fotografie di volti umani
Qual è l’obiettivo della GAN?
L’obiettivo di una GAN è generare immagini indistinguibili da quelle reali: immagini utili per la data augmentation, l’ampliamento dei dati a disposizione per l’apprendimento automatico senza raccogliere nuovi elementi ma modificando sinteticamente quelli già presenti.
A propria volta, la data augmentation serve a ridurre l’overfitting, il sovradattamento del modello di apprendimento automatico al campione statistico di dati utilizzato durante il training. La GAN serve quindi a ottimizzare il deep learning ed evitare errori superficiali di generalizzazione dovuti alla scarsità dei dati.
Come funziona una GAN
La GAN è composta da due reti neurali artificiali: il network generatore e quello discriminatore. Entrambe sono reti neurali convoluzionali, ispirate alla corteccia visiva animale. Come in tutte le reti neurali artificiali, anche in ciascuno dei due network che compongono la GAN l’elaborazione procede a livelli di astrazione progressiva, dai più semplici ai più complessi: l’output del livello precedente diventa l’input di quello successivo. Le reti neurali convoluzionali sono inoltre feed-forward: il flusso di elaborazione è a senso unico, in avanti, dall’ingresso all’uscita.
Il network discriminatore è una rete convoluzionale standard: un classificatore binomiale che, data un’immagine in ingresso, analizza i pixel, estrae i pattern, li confronta con i modelli appresi e assegna una etichetta all’intera rappresentazione. In particolare, il discriminatore restituisce una probabilità tra 0 e 1 che l’immagine analizzata sia falsa o vera.
Il network generatore agisce in modo inverso: a partire da un insieme di pattern appresi, genera immagini artificiali che abbiano quelle determinate caratteristiche, quindi immagini false ma verosimili.
Queste immagini arrivano al discriminatore insieme alle immagini reali, provenienti dal dataset di apprendimento: riusciranno a passare per vere?
I due network vengono messi in competizione tra loro, in un gioco a somma zero: l’obiettivo del generatore è ingannare il discriminatore, che a propria volta è programmato per controllare e scoprire le immagini false. Le loro funzioni-obiettivo sono opposte: una vince, l’altra perde. Ma i feedback sono ovviamente collegati tra loro: il generatore migliora la produzione di immagini sulla base dei riscontri del discriminatore, che a propria volta raffinerà i propri mezzi di detection.
A un certo punto, il discriminatore non riuscirà più a distinguere le immagini vere da quelle false. È importante quindi accorgersi del punto di squilibrio e non continuare l’addestramento.
Video : What are GANS? – Edureka (Inglese)
Quali sono le differenze tra CNN (Convolutional Neural Network) e GAN
Una GAN può usare le CNN, le reti neurali convoluzionali, ma una CNN non è una GAN. Infatti, come esplicitato nel paragrafo precedente, solo se due CNN vengono poste in competizione in un gioco a somma zero, con funzioni-obiettivo opposte, si ha una GAN.
Tipi differenti di Generative Adversarial Network
- Fully-Connected GAN o FCGAN
È il modello di GAN del primo articolo del 2014. Si tratta di due CNN completamente connesse, ovvero operative a tutte e cinque i livelli di astrazione.
- GAN Semi-supervisionata o SGAN
In questo modello, vengono fornite etichette per un piccolo sottoinsieme di esempi su cui allenare il Generatore e il Discriminatore.
- GAN bi-direzionale o BiGAN
Il modello BiGAN prevede, oltre il Generatore, un’altra fonte di produzione di immagini: l’Encoder. Se il Generatore produce a partire da vettori casuali di rumore, l’Encoder li estrae a partire dalle immagini reali di addestramento. Il Discriminatore quindi si trova a dover controllare sia il vettore che l’immagine prodotta: si tratta di un vettore reale e di una immagine fake, o viceversa?
- GAN Condizionale o CGAN
La GAN Condizionale sostituisce i vettori casuali con un’etichetta di classe: il Generatore produce a partire da una etichetta precisa, così come il Discriminatore la inserisce tra i criteri di valutazione. L’etichetta è la “condizione” che rende più raffinato l’apprendimento anche su immagini di secondo grado, ovvero le immagini di un’immagine.
- InfoGAN
Nel modello InfoGAN si aggiunge in parallelo al Discriminatore un altro classificatore, Q, che condivide con D tutti gli strati convoluzionali tranne l’ultimo. Solo D distinguerà le immagini vere dalle false, ma potrà contare sul supporto di Q nell’analisi e nella classificazione.
- GAN con il Classificatore Ausiliario o AC-GAN
AC-GAN contiene un classificatore ausiliario Q, come in InfoGAN, e un’informazione condizionante sull’etichetta di classe, come in CGAN.
- GAN con piramide Laplaciana o LAPGAN
Il modello LAPGAN è composto da una cascata di CNN all’interno di una struttura a piramide: è questa piramide che viene utilizzata per campionare l’immagine, attraverso tanti mini-generatori per ogni livello. LAPGAN favorisce generazioni ad alta risoluzione.
- GAN progressiva o PROGAN
Il modello PROGAN utilizza reti neurali progressive, che si espandono per connessioni (strati) laterali in relazione ai compiti richiesti durante l’apprendimento. Sono immuni all’oblio, ovvero ricordano le conoscenze pregresse. Sia il Generatore che il Discriminatore crescono quindi con l’avanzare dell’addestramento, insieme a tutte le loro variabili.
- Self-attention GAN o SAGAN
Il modello SAGAN si basa su meccanismi di autoattenzione che consentono alla GAN di apprendere in modo globale, evitando che componenti chiave delle immagini generate possano spostarsi rispetto alla posizione corretta (es. la bocca in un volto).

Fonte immagine : https://arxiv.org/pdf/1906.01529.pdf
- Generative Facial Prior GAN o GFP-GAN
GFP-GAN è usato per migliorare immagini a bassa risoluzione. Nato dai ricercatori di Tencent, mette insieme il modello GAN dell’azienda cinese con il modello StyleGAN-2 pre-addestrato di Nvidia, evoluzione di GauGAN.