Se non le hai, inventale: le immagini sintetiche per l'Intelligenza Artificiale

Chi si occupa di Intelligenza Artificiale (AI) vi dirà che la parte più delicata di tutto il processo di creazione di un modello di AI è la definizione del dataset per l'addestramento. Non sarebbe bello poter generare i dati necessari con un software, senza uscire dall'ufficio?

Se non le hai, inventale: le immagini sintetiche per l'Intelligenza Artificiale
Keanu Reeves e il suo gemello digitale presente nel videogame Matrix Awakens: riuscite a distinguerli?

Chi si occupa di Intelligenza Artificiale (AI) – e in particolare di Machine Learning – vi dirà che la parte più delicata di tutto il processo di creazione di un modello di AI è la definizione del set di dati (dataset) per l'addestramento. Infatti, una delle tecniche per insegnare a una AI a risolvere un problema è presentarle un gran numero di esempi etichettati (esempi positivi e negativi) e far sì che, da questi, lei impari a decidere anche per dati diversi dagli esempi proposti (generalizzazione). Scegliere bene questi esempi è chiaramente un elemento chiave di questo processo dato che le AI sono notoriamente sensibili al garbage in – garbage out. Quantità, qualità e costo di creazione dei dataset sono, quindi, un tema molto importante per chi opera nel settore dell'AI o per chi vuole applicare l'AI nella propria azienda.

Il dataset perfetto?

Ovviamente la forma e il contenuto di un dataset dipendono dal problema che si deve risolvere. Se volessimo creare un generatore di brani musicali usando la AI, il dataset sarà composto da brani musicali, se invece fossimo interessati alla creazione automatica di post per i social, il dataset conterrà del testo. In questo articolo, noi ci concentreremo solo sul tema della creazione di dataset di immagini e video. Lo faremo esplorando l'utilizzo di software per la generazione di immagini 3D come quelli usati nei film e nei videogiochi. In Kiwifarm abbiamo esplorato anche strade alternative che utilizzassero tecniche 2D (anche tramite altre AI generative specializzate) ma dedicheremo al tema un articolo in altra occasione.

I dataset di immagini sono utili per risolvere problemi di identificazione, classificazione e tracking di oggetti presenti in immagini fotografiche. Per fare qualche esempio, queste AI sono correntemente usate per il riconoscimento facciale nei nostri cellulari, per la classificazione di prodotti difettosi in impianti di produzione o in sistemi di monitoraggio automatico dello stato di grandi strutture tramite immagini acquisite da droni.

Se vi trovate nel bisogno di un dataset, fate vostre le parole di Henry Royce:

Prendi il meglio che esiste e miglioralo. Se non esiste, crealo.

Ovvero:

  • prova a comprare un dataset;
  • se non ti basta, prova ad arricchirlo e integrarlo;
  • se non esiste, crealo da zero

Sia che compriate, che arricchiate o che creiate un dataset, l'operazione ha costi non trascurabili. Se non siete tra i fortunati che possono usare i dataset gratuiti di Kaggle, va considerato che il costo di creazione di asset per un dataset può essere molto alto. Immaginate di voler creare una AI in grado di identificare e classificare la gravità di crepe strutturali sui muri. Il dataset dovrebbe essere fatto di centinaia o migliaia di foto di crepe diverse createsi su differenti tipi di superfici e materiali in diverse condizioni di luce. Una campagna di questo tipo potrebbe necessitare di mesi di lavoro. Inoltre potreste riscontrare, alla fine, che alcune tipologie di danni sono talmente rare che non avete abbastanza esempi di quel tipo per addestrare in modo completo il vostro modello.

Non sarebbe bello poter generare tutte le immagini necessarie direttamente con un software dedicato, senza uscire dall'ufficio? Esiste una tecnologia per fare ciò? Le immagini sintetiche così generate sarebbero adatte ad addestrare una AI che poi funzioni con foto vere? Quanto costerebbe tutto il processo?

Cerchiamo di rispondere a queste domande.

È possibile generare immagini fotorealistiche?

Un'immagine generata con Unreal Engine 5: realismo estremo in real-time.

La risposta sembra piuttosto semplice: basta andare al cinema per convincersi che oggi diventa piuttosto difficile distinguere il vero dal falso.

Tuttavia, se pensiamo a un film, sappiamo che dietro ci sono investimenti milionari e centinaia di persone che ci lavorano per alcuni anni, cosa che non rende l'operazione particolarmente utile in un contesto di sviluppo AI che, invece, avrebbe bisogno di generare (e rigenerare) quantità enormi di immagini sperimentando variazioni su decine di parametri in un processo di ottimizzazione try-and-error. In soldoni, bisogna capire se è possibile creare immagini di qualità sufficiente in un processo che sia più tecnico che artistico, ovvero bisognerebbe avere un modello deterministico e parametrico di generazione delle immagini fotorealistiche.

Fortunatamente siamo in un ottimo momento per la computer grafica e le evoluzioni tecnologiche che arrivano dal mondo dei videogiochi stanno spingendo proprio nella direzione della parametricità e la riproducibilità in tempi bassi di immagini fotorealistiche. Se ci pensate, lo scopo di un motore di gioco è proprio quello di gestire un modello parametrico complesso (i parametri sono gli input dell'utente) in grado di generare in tempo reale decine di immagini al secondo (fotogrammi).

I player tecnologici principali al momento sono Unity e Unreal Engine. Il primo, per la curva di apprendimento morbida, viene usato anche nella ricerca universitaria, tanto che lo troverete citato in diversi articoli sul tema. Il secondo è il leader per il fotorealismo in tempo reale: con l'ultima versione ha raggiunto performance tali da essere stato adottato da grandi Studios cinematografici rivoluzionando i processi di produzione per il cinema e le serie.

Soluzioni real-time come queste, però, si portano dietro dei limiti dal punto di vista della "certezza del risultato". Per fare un esempio, per garantire risposte in tempo reale, questi sistemi sono disposti a sacrificare dei fotogrammi ogni tanto: può capitare, ad esempio, che vengano saltati del tutto o che vengano creati fotogrammi che sono la fusione di due fotogrammi consecutivi. Eventi di questo tipo potrebbero essere un problema per i nostri dataset se non gestiti opportunamente perché potrebbero introdurre delle immagini errate a nostra insaputa (ricordate? garbage in, garbage out). Inoltre, siccome la decisione di "sacrificare" un fotogramma dipende da fattori del tutto esterni al software (richieste del sistema operativo, risorse hardware disponibili...), le sequenze generate potrebbero non essere perfettamente uguali a ogni esecuzione, creando incertezza sulla composizione degli esperimenti di addestramento: anche questo può essere un problema. Quindi è importante conoscere bene le limitazioni e le caratteristiche del motore grafico scelto così da compensare opportunamente queste caratteristiche intrinseche alla tecnologia stressa.

In casi in cui queste limitazioni siano un problema non superabile, si può ricorrere a soluzioni non real-time. Una panoramica (molto parziale) di soluzioni per la generazione di immagini realistiche la si può trovare in questo video:

I software da tenere sott'occhio in questo caso sono Autodesk Maya, il software di grafica procedurale Houdini e i software provenienti dal mondo cinematografico come Renderman della Pixar. Nel mondo open source spicca per capacità e flessibilità Blender.

Il sopracitato Houdini è un software nato specificatamente per gestire modelli procedurali, ovvero modelli che creano geometrie in base a parametri numerici, cosa molto utile per arricchire il dataset di variazioni che vadano oltre la semplice rototraslazione degli oggetti. Un esempio di modello procedurale potete vederlo in azione qui:

Merita sottolineare che, sia i software real-time che quelli non real-time, consentono simulazioni di fenomeni fisici anche piuttosto accurate: meccanica classica dei corpi rigidi, cinematica inversa, meccanica dei fluidi, simulazioni di erosione, esplosione, distruzione, fenomeni particellari. La ricchezza di questi motori di simulazione offre moltissime possibilità a chi deve ricreare immagini di fenomeni fisici in modo parametrico garantendo che esse rappresentino eventi che possano fisicamente avvenire in natura.

È possibile ingannare le AI con immagini sintetiche?

Una schermata del software Houdini con un dettaglio degli script visuali per il controllo delle caratteristiche parametriche dei modelli 3D

Ora che sappiamo di poter generare immagini fotorealistiche, fisicamente accurate e in quantità e qualità sufficienti, dovremmo capire se queste immagini siano effettivamente utili per addestrare una AI. La letteratura scientifica ha risposto affermativamente a questa domanda ma è necessario prestare attenzione a due elementi:

  • la natura intrinseca delle immagini sintetiche;
  • la quantità di immagini sintetiche nel dataset.

Per natura intrinseca dell'immagine qui ci riferiamo al fatto che le immagini sintetiche tendono ad avere una loro "firma" dovuta agli algoritmi con cui vengono creati per cui non è difficile, osservando la distribuzione dei pixel, capire se siamo davanti a un'immagine ripresa da una telecamera o meno.

Nella figura qui sotto potete vedere uno zoom 13x su due immagini generate con Unreal Engine a differente risoluzione (FullHD a sinistra, 4K a destra). Pixel molto definiti, "scalettature" e "spigolosità" sono artefatti che indicano senza dubbio che siamo di fronte a un'immagine generata e non acquisita da telecamera.

Uno zoom 13x su due immagini generate con Unreal Engine a differente risoluzione (FullHD a sinistra, 4K a destra)

Sicuramente, se non avessimo zoommato così tanto, queste caratteristiche non sarebbero state così evidenti, ma il punto è proprio questo: le AI accedono alle immagini pixel per pixel e non "nel loro insieme" come facciamo noi.

"Migliorare l’immagine per renderla più simile a quelle reali", in questo contesto, significa quindi modificare un'immagine in modo da trasformare gli artefatti tipici di un'immagine sintetica con quelli tipici di immagini acquisite da telecamera. In pratica significa degradare la definizione dei colori dei pixel (ovvero ridurre il contenuto informativo dell'immagine) e introdurre del rumore che abbia una distribuzione simile a quello introdotto dai firmware e dagli hardware delle telecamere. Un Refiner è un modello matematico (spesso una rete neurale essa stessa) che ha lo scopo di modificare in questa direzione le immagini prima di passarle alla rete neurale finale. Sul tema della definizione dei Refiner l’articolo "Improving the Realism of Synthetic Images" del blog di Apple, oltre a spiegare il loro approccio, presenta una panoramica chiara del problema.

Oltre alla creazione di Refiner, un altro approccio che si può seguire – e che noi in Kiwifarm stiamo approfondendo –, è sottoporre le immagini create a una fase di post processing seguendo le stesse pratiche e attività che si usano nei film. Utilizzando software come Nuke o Fusion è possibile sottoporre le immagini a una serie di manipolazioni per aggiungere:

  • distorsioni dovute alle lenti (blur, defocus,...);
  • degradazione delle informazioni dovute alla dimensione del sensore di una telecamera (resampling)
  • correttivi software applicati alle immagini dai firmware delle telecamere (color grading, compressione con perdita)

Qui di seguito potete vedere, sulla sinistra, uno zoom 10x su un'immagine FullHD ricorretta con questo metodo e, a destra, uno zoom 10x di un'immagine senza questa azione di post-processing.

Sulla sinistra, uno zoom 10x su un'immagine FullHD ricorretta usando il software Nuke e, a destra, uno zoom 10x di un'immagine senza correzioni.

Come dicevamo all'inizio, l'altro punto su cui soffermarci dopo aver capito quali accortezze usare per rendere le nostre immagini più realistiche agli occhi della AI, è decidere come usarle all'interno del nostro dataset. Sul tema, le scelte possibili sono due: arricchire il dataset inserendo immagini sintetiche (data augmentation) o creare un dataset di sole immagini sintetiche.

La letteratura scientifica ci mostra che, se correttamente gestite, sia nel primo caso che nel secondo le AI ne possono beneficiare. Senza escludere la possibilità di usare immagini sintetiche solo in un punto specifico dell'architettura del nostro sistema, scomponendo il problema in più sottomodelli addestrati a risolvere problemi più semplici. Per la nostra esperienza non esiste una ricetta unica per decisioni di questo tipo: sarà da valutare nello specifico il problema che si sta tentando di risolvere e sarà necessario fare dei test ad hoc.

Quanto costa? Ha senso tutto questo?

Le competenze di dominio sono da recuperare attraverso risorse che operano nel campo della produzione cinematografiche e videoludiche. Nell'immagine una troupe che gestisce un set virtuale durante una produzione cinematografica.

Tempi, competenze tecniche e licenze software sono i tre driver che possono guidare la decisione sull'utilizzo di immagini sintetiche nella creazione della vostra AI.

Le licenze software sono un costo molto variabile (da centinaia di dollari al mese fino al gratuito) ma, con la grande spinta che sta arrivando dal gaming, si stanno abbassando drasticamente. Ad esempio, Unreal Engine e Unity sono utilizzabili gratuitamente in moltissimi casi. Anche i costi legati agli asset 3D che vengono usati all'interno di questi software hanno costi in caduta libera. Sempre Unreal Engine offre gratuitamente decine di oggetti a qualità cinematografica.

Il costo legato alla componente umana e alle competenze, sono tipicamente costi orari, quindi legati ai tempi di realizzazione. Infatti il mercato dei servizi dei professionisti della grafica 3D e dintorni, predilige un modello a consuntivo. Grazie, ancora una volta, agli strumenti di gaming e grazie all'aumento della disponibilità di strumenti e asset pronti, i tempi di realizzazione di immagini fotorealistiche si sta abbassando molto. Diversi professionisti del settore con cui collaboriamo, ci hanno spiegato come alcuni risultati che solo due anni fa richiedevano giorni uomo, oggi si possono ottenere in poche ore.

Infine, il fattore tempo – inteso come tempo necessario ad avere il numero di immagini con la qualità voluta – è un trade-off tra qualità finale dell'immagine e complessità del modello parametrico 3D. Come dicevamo, a oggi ottenere una buona qualità in tempi brevi è alla portata, ma la qualità minima necessaria è molto legata al tipo di problema che volete risolvere.

Una componente di costo che non va sottovalutata è il costo di project management. Chiaramente, la scelta di utilizzare immagini sintetiche introduce la necessità di gestire un team multidisciplinare. Non basterà considerare il grafico 3D come un fornitore esterno a scatola chiusa, perché il professionista dovrà capire non solo il dominio di applicazione ma anche il processo in modo da poter gestire in modo adeguato le caratteristiche tecniche che dovranno avere le immagini generate. Inoltre le figure tecniche dovranno imparare a tradurre necessità artistiche in software e aiutarli a entrare in logiche nuove per amalgamarsi con il nuovo contesto.

La sfida del PM in un progetto di questo tipo è assolutamente non banale. Dovrà avere conoscenze approfondite della teoria e pratica dell'AI ma anche essere in grado di tradurre idee e concetti tra il mondo tecnico e quello artistico. Se poi l'obiettivo è mettere il modello realizzato su un hardware dedicato, si aggiunge tutto il dominio dell'IoT, con tutti i vincoli che si porta dietro.

In Kiwifarm, grazie ai progetti portati avanti negli ultimi anni e grazie ai profili accademici e professionali dei nostri soci, abbiamo potuto affinare le nostre capacità di gestione di progetti con queste caratteristiche di multidisciplinarietà creando anche una rete di fornitori terzi che sono cresciuti su questi temi con noi.

Concludendo

Possiamo dire che l'utilizzo di immagini sintetiche è una strada percorribile soprattutto oggi, grazie all'evoluzione delle tecnologie disponibili e grazie all'abbassamento dei costi ad esse connesse.

Il loro uso permette di avere dataset di immagini in tempi e costi ridotti e/o ottenere dataset relativi a fenomeni rari o ad oggetti non ancora esistenti.

Resta inteso che il tema è complesso e per il buon successo di un progetto di questo tipo sarebbe bene avere persone con esperienza non solo tecnica ma anche di gestione di progetti multidominio.

Se volete approfondire il tema facendo una chiacchierata su un vostro progetto, contattateci!

Privacy Policy Cookie Policy