Ricostruzione in 3D di immagini 2D mediante l’intelligenza artificiale

La ricostruzione 3D a partire da immagini 2D è un’area di ricerca che esiste da molto tempo prima dell’avvento delle moderne tecniche di intelligenza artificiale (AI).
Esistono metodi Tradizionali (senza AI) come la stereoscopia che si basa sull’uso di due immagini (o più) catturate da diverse angolazioni. Confrontando le differenze tra le immagini, è possibile calcolare la profondità di ogni punto nella scena. Questo metodo è simile al modo in cui gli esseri umani percepiscono la profondità con due occhi.

La fotogrammetria utilizza molteplici immagini di un oggetto o di una scena prese da diverse angolazioni. Utilizzando punti corrispondenti tra le diverse immagini, è possibile ricostruire la geometria 3D dell’oggetto o della scena.
Lo Shape from Shading è un approccio che deduce la forma 3D di un oggetto basandosi su come la luce si riflette sulla sua superficie. Le variazioni di luminosità e ombra nell’immagine 2D possono fornire indizi sulla forma tridimensionale dell’oggetto.
ll campo dell’intelligenza artificiale offre mezzi ancora più sofisticati.
Le Reti Neurali Convoluzionali (CNN) sono addestrate su grandi set di dati per riconoscere pattern e caratteristiche nelle immagini 2D, che possono poi essere utilizzate per dedurre informazioni sulla profondità e la struttura 3D.
Per sapere di più sulle reti convoluzionali puoi leggere l’articolo
Le reti neurali convoluzionali, un modo per vedere bene al minimo costo
Le GAN (Generative Adversarial Networks) possono essere utilizzate per generare rappresentazioni 3D a partire da immagini 2D, con un generatore che cerca di produrre rappresentazioni 3D e un discriminatore che valuta la qualità di queste rappresentazioni.
Per saperne di più sulle reti GAN leggi l’articolo
I modelli GAN: reti neurali che collaborano
Utilizzando reti neurali profonde, è possibile stimare la profondità di ogni pixel in un’immagine 2D, anche se l’immagine proviene da una singola telecamera (monoculare).
Metodi tradizionali e intelligenza artificiale a confronto
i metodi tradizionali si basano su principi geometrici e fisici, i metodi basati sull’AI utilizzano l’apprendimento da grandi set di dati per dedurre la struttura 3D.
Mentre i metodi tradizionali possono fornire risultati accurati in condizioni controllate, i metodi basati sull’AI tendono ad essere più robusti in una varietà di scenari, grazie alla loro capacità di apprendere da grandi quantità di dati. Questi metodi possono adattarsi a diverse condizioni e tipi di immagini, mentre i metodi tradizionali potrebbero richiedere condizioni specifiche (ad esempio, una certa disposizione delle telecamere per la stereoscopia).
Se i metodi tradizionali possono essere più veloci per singole immagini o in condizioni specifiche, i metodi basati sull’AI, una volta addestrati, possono processare rapidamente grandi quantità di immagini.
Inoltre, i metodi tradizionali spesso si basano su principi geometrici e fisici ben compresi, mentre I metodi basati sull’IA, possono essere considerati “scatole nere” in cui è difficile comprendere esattamente come vengono prese le decisioni. Questa differenza riguarda quasi tutti gli algoritmi di intelligenza artificiale.
Se da una parte si accresce la capacità previsionale, dall’altra si perde la comprensione delle leggi o delle relazioni di causa ed effetto che stanno alla base dei fenomeni.
Creazione di modelli 3D di persone: La ricerca PIFu (Multi-Level Pixel-Aligned Implicit Function for High-Resolution 3D Human Digitization)
Il documento della ricerca PIFu lo puoi trovare qui
È possibile provarlo mediante Colab di Google qui.
La ricerca PIFu (Pixel-Aligned Implicit Function) è un approccio innovativo per la ricostruzione tridimensionale ad alta fedeltà di oggetti o strutture senza la necessità di memorizzare un volume di output discretizzato nell’intera memoria.
Questo metodo si basa sull’idea di utilizzare una funzione implicita allineata ai pixel per determinare l’occupazione di una determinata posizione tridimensionale.
Prima…

Tradizionalmente, la ricostruzione tridimensionale avviene discretizzando lo spazio di output, rappresentando la geometria come una griglia di voxel (elementi volumetrici elementari). Nella ricostruzione tridimensionale, una delle metodologie comuni è discretizzare lo spazio di output rappresentando la geometria come una griglia di voxel. Un voxel è l’equivalente tridimensionale di un pixel in un’immagine bidimensionale.
La griglia di voxel suddivide lo spazio tridimensionale in cubi di uguali dimensioni. Ogni voxel nella griglia rappresenta una porzione di volume nello spazio tridimensionale e contiene informazioni sulla presenza o l’assenza di materia in quella posizione. Questo metodo è chiamato rappresentazione volumetrica.

Attraverso la discretizzazione dello spazio di output in voxel, è possibile rappresentare in modo efficace e dettagliato la geometria di un oggetto tridimensionale. Ogni voxel può contenere informazioni sulla forma, la struttura interna o altri attributi dell’oggetto. Quando la ricostruzione viene completata, la griglia di voxel rappresenta una rappresentazione tridimensionale completa dell’oggetto
La rappresentazione volumetrica può essere utilizzata in diversi contesti, ad esempio nella ricostruzione di oggetti da immagini o nell’elaborazione di dati ottenuti da scanner 3D. È anche utilizzata in applicazioni come la realtà virtuale, la simulazione fisica e la progettazione di modelli tridimensionali.
Tuttavia, la rappresentazione volumetrica può richiedere importanti risorse di calcolo e memoria. Poiché la dimensionalità della griglia di voxel aumenta proporzionalmente alla dimensione dell’oggetto e alla sua risoluzione desiderata, volumi di grandi dimensioni o risoluzioni ad alta densità possono richiedere notevoli quantità di memoria per memorizzarli e risorse di calcolo per elaborarli.
Il metodo PIFu
Invece di memorizzare un volume discretizzato, PIFu utilizza una funzione che può determinare se un punto nello spazio tridimensionale è “dentro” o “fuori” dall’oggetto. Questa funzione viene appresa attraverso una rete neurale convoluzionale che prende in input un’immagine bidimensionale e le sue coordinate tridimensionali corrispondenti. L’output della rete è una stima di probabilità che il punto sia occupato dall’oggetto.
Nell’addestramento di PIFu, si utilizza solo l’immagine bidimensionale come input, non l’immagine tridimensionale. Durante la fase di addestramento, l’immagine bidimensionale viene fornita alla rete neurale PIFu insieme alle coordinate tridimensionali corrispondenti ai punti della superficie dell’oggetto rappresentato nell’immagine.
Le coordinate tridimensionali associate ai punti della superficie dell’oggetto provengono da una fonte esterna o da un processo di generazione specifico.
Ci sono diverse modalità per ottenere le coordinate tridimensionali associate ai punti nella superficie dell’oggetto:
- Scansione 3D: Una delle possibili fonti di coordinate tridimensionali è una scansione 3D dell’oggetto reale utilizzando dispositivi come scanner laser o fotocamere strutturate. Questi metodi creano una rappresentazione tridimensionale dell’oggetto con informazioni precise sulle coordinate di ogni punto sulla superficie.
- Dati CAD: Se l’oggetto è un modello 3D creato in software di progettazione CAD (Computer-Aided Design), le coordinate tridimensionali possono essere ottenute direttamente dal modello CAD.
- Generazione sintetica: In alcuni casi, le coordinate tridimensionali possono essere generate sinteticamente utilizzando metodi matematici o procedurali. Ad esempio, possono essere utilizzati algoritmi di generazione di forme o modelli geometrici per generare una superficie tridimensionale con le coordinate appropriate.
Le coordinate tridimensionali devono corrispondere in modo accurato ai punti sulla superficie dell’oggetto, in modo che la rete neurale PIFu possa imparare ad associare correttamente le caratteristiche dell’immagine bidimensionale con la geometria tridimensionale.
Le coordinate tridimensionali vengono quindi utilizzate insieme all’immagine 2D nell’addestramento di PIFu per consentire alla rete neurale di apprendere a stimare correttamente l’occupazione dei punti sulla superficie dell’oggetto rappresentato nell’immagine.

La funzione PIFu garantisce che la sua occupazione stimata corrisponda effettivamente all’occupazione sulla superficie dell’oggetto, garantendo una ricostruzione ad alta fedeltà. L’obiettivo è far sì che la funzione implicita appresa dalla rete produca una corrispondenza precisa tra la sua stima di occupazione e la reale occupazione sulla superficie dell’oggetto.
Questa allineamento ai pixel implica che la rete neurale tenga conto delle informazioni specifiche di ogni pixel dell’immagine di input durante la fase di addestramento. Ciò permette a PIFu di preservare i dettagli locali presenti nell’immagine, consentendo una ricostruzione ad alta fedeltà della geometria tridimensionale.
Grazie a questa caratteristica, PIFu può catturare con maggiore precisione i contorni e la forma degli oggetti, producendo risultati più accurati rispetto ad altri metodi di ricostruzione tridimensionale. Poiché la funzione PIFu è allineata ai pixel, è in grado di preservare dettagli sottili presenti nell’immagine di input, come texture, punti di luce o ombre.
L’utilizzo di una funzione implicita allineata ai pixel offre diversi vantaggi. Innanzitutto, elimina la necessità di memorizzare un volume discretizzato, riducendo notevolmente l’utilizzo di memoria. Inoltre, questa rappresentazione permette di mantenere dettagli locali presenti nell’immagine bidimensionale, preservando quindi le caratteristiche della superficie dell’oggetto. Infine, la rappresentazione PIFu consente di ricostruire oggetti con geometrie complesse, come quelli con molteplici livelli di dettaglio o con cavità interne.
Tuttavia, come ogni approccio, PIFu presenta alcune limitazioni. Ad esempio, la rappresentazione PIFu potrebbe essere meno adatta per oggetti altamente riflettenti o con texture complesse, in quanto potrebbe avere difficoltà nel determinare accuratamente l’occupazione. Inoltre, la correttezza della ricostruzione PIFu dipende dalla qualità, dalla risoluzione e dall’illuminazione dell’immagine di input.
Il problema di ricostruire il lato B: le mappe normali

Immagina di avere delle foto di persone e vuoi ricostruire il loro aspetto tridimensionale. Questo è un problema difficile perché non hai informazioni dirette sulla forma del retro delle persone nelle immagini. Quindi, devi fare delle supposizioni basate su previsioni fatte da una rete neurale.
La rete neurale che usi per predire la forma 3D tende a produrre risultati lisci e privi di dettagli, a causa della complessità e della natura ambigua del problema. Per migliorare la qualità della ricostruzione, puoi cercare di spostare parte delle supposizioni fatte dalla rete in una fase precedente, in cui vengono estratte le caratteristiche dai dati. In pratica, puoi predire delle mappe normali che approssimano la forma 3D delle persone nelle immagini e usarle come informazioni aggiuntive per guidare la ricostruzione 3D. Questo rende più facile per la rete neurale produrre dettagli più precisi.
Ad esempio, puoi addestrare una rete neurale per predire le mappe normali a partire dalle foto. Questa rete impara ad associare i colori delle immagini alle informazioni sulle forme tridimensionali delle persone. Poi, queste mappe normali vengono utilizzate come input per un’altra rete neurale, chiamata MLP, che produce la ricostruzione finale dei dettagli tridimensionali.
Per valutare quanto bene la ricostruzione si avvicina alla realtà, puoi utilizzare una funzione chiamata Binary Cross Entropy (BCE) estesa. Questa funzione calcola la differenza tra la tua ricostruzione e la forma reale delle persone in alcuni punti campionati dalle immagini.
Ecco come le mappe normali possono aiutare a indovinare l’aspetto del retro di un oggetto basandosi sulla sua parte frontale:
Informazioni sulla Superficie: Una mappa normale fornisce informazioni dettagliate sulla geometria della superficie di un oggetto. Ad esempio, può rivelare dettagli come pieghe, rughe e altre caratteristiche della superficie.
Simmetria Assunta: Gli esseri umani sono generalmente simmetrici. Se conosciamo la normale (direzione) della superficie di una parte visibile del corpo, possiamo fare ipotesi ragionevoli sulla normale della parte opposta, non visibile.
Estensione alla Geometria 3D: Una volta che abbiamo una stima delle normali della superficie, possiamo utilizzarle come guida per ricostruire la geometria 3D dell’oggetto. Ad esempio, se sappiamo che la parte frontale di una maglietta ha una certa piega o ruga, possiamo ipotizzare che ci sia una caratteristica simmetrica corrispondente sul retro.
Integrazione con Altre Informazioni: Le mappe normali possono essere combinate con altre informazioni, come mappe di profondità o informazioni semantiche, per migliorare ulteriormente la precisione della ricostruzione 3D.
Miglioramento dell’Illuminazione e del Rendering: Oltre alla ricostruzione 3D, le mappe normali sono fondamentali per il rendering realistico degli oggetti. Esse permettono di calcolare come la luce si riflette sulla superficie, producendo ombre e riflessi realistici.
Esempio
Immagina di avere una foto di una persona vestita con una maglietta che ha un distintivo logo o disegno sul petto, proprio al centro. La maglietta è aderente e segue la forma del corpo. Osservando la foto frontale, noti che il logo è leggermente distorto verso l’alto e l’esterno, suggerendo che la persona ha una postura eretta e forse una leggera espansione del petto.
Utilizzando le mappe normali, puoi dedurre le seguenti informazioni sulla parte frontale:
Forma del Torace: La distorsione del logo indica che il torace è leggermente espanso. Questo suggerisce che la parte posteriore (la schiena) potrebbe avere una leggera curvatura verso l’interno, tipica di una postura eretta.
Pieghe e Rughe: Se ci sono pieghe visibili sulla parte frontale della maglietta, specialmente ai lati, potresti dedurre che ci sono pieghe simmetriche sulla parte posteriore. Ad esempio, se la maglietta ha pieghe ai lati sotto le braccia, potrebbe indicare che la maglietta è leggermente stretta attorno alla vita, suggerendo una forma simmetrica anche sul retro.
Altezza delle Spalle: Se una spalla è leggermente più alta dell’altra nella vista frontale, è probabile che la stessa asimmetria si rifletta sul retro.
Utilizzando queste informazioni e combinandole con ciò che sappiamo sulla simmetria del corpo umano e sulla fisica dei tessuti, possiamo “indovinare” molte caratteristiche della parte posteriore della persona:
La curvatura della colonna vertebrale potrebbe riflettersi nella forma in cui la maglietta si adatta alla parte bassa della schiena. La posizione e la forma delle scapole potrebbero influenzare come la maglietta si adatta nella zona superiore della schiena. Se la persona ha muscoli dorsali ben sviluppati, potrebbero creare leggere protuberanze o tensioni nella maglietta.
In sintesi, osservando attentamente i dettagli e le distorsioni sulla parte frontale di una persona e utilizzando le mappe normali, possiamo fare ipotesi informate sulla sua anatomia e sulla forma del retro, anche se non possiamo vederlo direttamente.
Il seguente esempio deriva da un test sul metodo PIFu condotto da noi usando Colab (il file obj generato dal modello PIFu è stato importato nel visualizzatore 3D di Windows)


Approfondimento
Durante l’addestramento, PIFu non salva un volume tridimensionale esplicito in memoria. Questo rende l’approccio molto efficiente in termini di memoria. Piuttosto, la funzione f estrae una rappresentazione delle caratteristiche dell’immagine dalla posizione 2D proiettata sulla superficie dell’immagine. Queste caratteristiche dell’immagine vengono quindi utilizzate insieme alla profondità del punto per stimare l’occupazione del punto tridimensionale.
Per estrarre le caratteristiche dell’immagine, viene utilizzata un’architettura Convolutional Neural Network (CNN). La CNN è stata ampiamente utilizzata nel campo della visione artificiale per l’estrazione automatica delle caratteristiche da immagini. Nel caso di PIFu, la CNN estrae le caratteristiche 2D dall’immagine proiettata nella posizione 2D.
La parte di predizione dell’occupazione del punto tridimensionale viene effettuata utilizzando un Multilayer Perceptron (MLP). L’MLP è un tipo di rete neurale artificiale che può essere addestrata per apprendere relazioni complesse tra input e output. In questo caso, l’MLP prende in input le caratteristiche 2D estratte dalla CNN e la profondità del punto e stima l’occupazione binaria del punto tridimensionale.
L’addestramento della rete neurale viene fatto in modo end-to-end, il che significa che viene addestrata congiuntamente la parte della CNN per l’estrazione delle caratteristiche e la parte dell’MLP per la predizione dell’occupazione. Questo permette di ottenere una rete neurale ottimizzata che può predire l’occupazione di un punto tridimensionale in base alle caratteristiche dell’immagine e alla sua profondità.
Attualmente, queste tecniche possono elaborare immagini con una risoluzione massima di 512×512 e 128×128 per le caratteristiche dell’immagine. Importante è che la rete neurale sia progettata in modo da coprire l’intera immagine attraverso il suo campo ricettivo, in modo da poter ragionare in modo olistico per inferire la profondità in modo coerente. Pertanto, un’architettura ripetuta di bottom-up e top-down con supervisione intermedia è essenziale per ottenere una robusta ricostruzione 3D con capacità di generalizzazione.
Tuttavia, questa caratteristica impedisce a queste tecniche di elaborare immagini ad alta risoluzione come input e di mantenere questa risoluzione nelle caratteristiche dell’immagine, anche se ciò permetterebbe alla rete neurale di sfruttare dettagli presenti solo nella risoluzione più alta. In pratica, si è scoperto che, sebbene nella teoria la rappresentazione continua di PIFu possa rappresentare la geometria 3D a una risoluzione arbitraria, l’espressività della rappresentazione è limitata dalla risoluzione delle caratteristiche dell’immagine. Pertanto, è necessario trovare un modo efficace per bilanciare la robustezza derivante da un ragionamento olistico a lungo raggio e l’espressività tramite risoluzioni più elevate nell’embedding delle caratteristiche.
Questo metodo è composto da due livelli principali di predittori, che producono ricostruzioni 3D ad alta risoluzione. Il livello “coarse” cattura la struttura globale 3D utilizzando immagini con risoluzione inferiore, mentre il livello “fine” aggiunge dettagli più sottili utilizzando immagini ad alta risoluzione.
Il livello “coarse” cattura la struttura globale 3D utilizzando immagini con risoluzione inferiore, mentre il livello “fine” aggiunge dettagli più sottili utilizzando immagini ad alta risoluzione.
Il modulo di livello “coarse” integra informazioni geometriche globali prendendo immagini campionate a risoluzione inferiore come input e producendo caratteristiche di immagine di base a risoluzione più bassa. Il modulo di livello “fine” si concentra invece su aggiungere dettagli più sottili utilizzando immagini ad alta risoluzione, e prende le caratteristiche di immagine di base a risoluzione più alta estratte dal modulo di livello “coarse”. Questo modulo non utilizza direttamente i valori di profondità assoluti, ma incorpora informazioni di embedding 3D.