Bluebabbler

Have fun. Be kind. RUN LIKE HELL!

Arte con l'intelligenza artificiale - lo Style Transfer

Arte con l'intelligenza artificiale - lo Style Transfer

Pubblicato da Stefano Castelvetri il 16/01/2023

Una delle meno recenti applicazioni dell'arte potenziata dalle IA, che mi affascina fin dalle prime apparizioni, è lo style transfer, o trasferimento di stile.

Ricordi l'app Prisma? Prima di finire soffocata nella calca delle IA aveva avuto un discreto successo perché permetteva di applicare dei filtri di style transfer alle foto del tuo smartphone.

Con molta fantasia, il 99% delle volte il risultato consisteva nella tua faccia in stile 'notte stellata di Van Gogh' oppure, per cambiare, la tua faccia in stile 'notte stellata di Van Gogh'.

Eppure, al di là dei risultati spesso banali, a me questa cosa ha sempre incuriosito moltissimo dando alle mie sinapsi tanto materiale da masticare. "Come è possibile" pensavo "separare il soggetto dallo stile utilizzato per rappresentarlo?".

Per "Trasferimento di stile" si intende infatti quella categoria di algoritmi che permette di applicare lo stile di una immagine al contenuto di un'altra. Il processo richiede due input: l'immagine del contenuto e l'immagine dello stile. L'algoritmo deve produrre un output il cui contenuto sia quello della prima immagine, e il cui stile sia quello della seconda.

E, davvero, contenuto e stile?

Come decido che l'immagine del gatto è contenuto e le pennellate e i colori di Van Gogh sono stile?

E, ancora, funziona solo con le immagini oppure anche, non so, con una canzone (Silent Night nello stile di Highway to Hell) o con un romanzo (A Christmas Carol nello stile di IT)?

Questi dubbi ancora mi arroventano il cervello, anche se in giro si trovano ormai molte spiegazioni dell'algoritmo. Purtroppo, se lo chiedi a un saccente esperto di machine learning (chiamiamolo Matthew), questi ti risponderà cose tipo: "facile, devi applicare una CNN per minimizzare la loss". Maledetti esperti di machine learning. Maledetto Matthew. Ti possa venire il cagotto.

Insomma, indagando meglio salta fuori che una CNN è una Rete Neurale Convoluzionale, e una loss function è una funzione matematica che calcola, su un set di dati, il costo rispetto a un riferimento (in questo caso tra un'immagine sorgente e un'immagine destinazione).

Quello che però Matthew non ci ha detto per fortuna ci arriva dagli articoli di Fritz e Derrick (grazie!): il modello di style transfer richiede due reti neurali: un estrattore di caratteristiche (pre-addestrato) e una rete di trasferimento. L'estrattore di caratteristiche serve proprio a riconoscere diverse caratteristiche delle immagini fornite in ingresso ed è spesso utilizzata negli algoritmi di riconoscimento di immagini. È una rete pre-addestrata, nel senso che qualcuno l'ha già preparata sulla base di un enorme archivio di immagini (es. la VGG19) e quindi non è necessario prendersi carico di questa impegnativa parte del lavoro.

Come funziona l'estrattore? Data una immagine in ingresso, vengono trovati tutti gli elementi riconoscibili e vengono ordinati per livello. Ci sono livelli che indicano il contenuto di un'immagine (un viso, un veicolo, la forma del gatto), mentre altri indicano le texture (es. le pennellate del pittore o i modelli ripetuti della corteccia di un tronco d'albero).

Forse hai già capito dove stiamo andando a parare.

Nella rete neurale pre-addestrata dobbiamo far passare entrambe le immagini di ingresso, il contenuto e lo stile. Di tutte e due verranno estratti tutti gli elementi, ma della prima ci interesseranno i livelli relativi al contenuto, mentre della seconda ci interesseremo ai livelli relativi alle texture/stile.

Questo primo passaggio è indispensabile ma non ci sta aiutando nel creare l'immagine di destinazione. Questo è il compito della seconda rete neurale, la rete di trasferimento. Questa rete neurale prende in ingresso un'immagine e ne produce un'altra secondo un'architettura di codifica-decodifica.

Questo passaggio è interessante ed è quello che ci porterà (in parte) a come i vari Stable Diffusion, DALL-E e compagnia bella assemblano i loro sofisticati collage.

Ricordi la loss function? Interpretiamola in questo modo: è una funzione che indica alla rete di trasferimento quanto ogni singolo elemento dell'immagine di ingresso si discosta dall'immagine desiderata.

A questo punto se prendo le immagini del contenuto e dello stile digerite dall'estrattore di caratteristiche e le inserisco nella rete di trasferimento insieme a una loss function che indica quanto si discosta ogni livello dal desiderato, avrò il mio splendido gatto con lo stile di Van Gogh.

Per farlo, devo immettere nella rete di trasferimento i livelli dell'immagine del contenuto (gatto) insieme a una loss che indica che i livelli del soggetto (la forma del gatto) sono più vicini all'immagine desiderata, e poi dovrò immettere nella stessa rete i livelli dell'immagine dello stile (Van Gogh) insieme a una loss che indica che i livelli delle texture (le pennellate) sono più vicini all'immagine desiderata.

A questo punto dovrei dire qualcosa tipo "Il gioco è fatto, era facile!".

Ma non voglio prenderti in giro. Ho iper-semplificato.

Mi basta aver fatto questo giretto insieme ed essermi avvicinato un po' a questo algoritmo che per me rimane davvero mindblowing, come dicono gli americani.

Ah, e comunque c'è davvero chi lo applica anche alle canzoni e ai testi.

Crediti e collegamenti: