Modelli e piattaforme di IA

Come funziona la generazione di 3D tramite AI: Meta 3D Gen, OpenAI Shap-E e altro

mm
Aggiungi Unite.AI alle tue fonti preferite su Google
div]:bg-bg-300 [&_pre]:-mr-4 md:[&_pre]:-mr-9″>

La capacità di generare asset digitali 3D da prompt di testo rappresenta uno degli sviluppi più emozionanti recenti nell’ambito dell’intelligenza artificiale e della grafica computerizzata. Poiché il mercato degli asset digitali 3D è previsto crescere da 28,3 miliardi di dollari nel 2024 a 51,8 miliardi di dollari entro il 2029, i modelli di AI text-to-3D sono pronti a svolgere un ruolo importante nella rivoluzione della creazione di contenuti in settori come il gaming, il cinema, l’e-commerce e altro. Ma come funzionano esattamente questi sistemi di AI? In questo articolo, esploreremo nel dettaglio i dettagli tecnici dietro la generazione di 3D tramite testo.

La sfida della generazione di 3D

Generare asset 3D da testo è un compito significativamente più complesso rispetto alla generazione di immagini 2D. Mentre le immagini 2D sono essenzialmente griglie di pixel, gli asset 3D richiedono la rappresentazione di geometria, texture, materiali e spesso animazioni nello spazio tridimensionale. Questa maggiore dimensionalità e complessità rende il compito di generazione molto più impegnativo.

Alcune delle sfide chiave nella generazione di 3D tramite testo includono:

  • Rappresentare la geometria e la struttura 3D
  • Generare texture e materiali coerenti sulla superficie 3D
  • Garantire la plausibilità fisica e la coerenza da più punti di vista
  • Catturare dettagli fini e struttura globale contemporaneamente
  • Generare asset che possano essere facilmente rappresentati o stampati in 3D

Per affrontare queste sfide, i modelli di text-to-3D sfruttano diverse tecnologie e tecniche chiave.

Componenti chiave dei sistemi di text-to-3D

La maggior parte dei sistemi di generazione di 3D tramite testo condivide alcuni componenti fondamentali:

  1. Codifica del testo: conversione del prompt di testo di input in una rappresentazione numerica
  2. Rappresentazione 3D: un metodo per rappresentare la geometria e l’aspetto 3D
  3. Modello generativo: il modello di AI principale per la generazione dell’asset 3D
  4. Rendering: conversione della rappresentazione 3D in immagini 2D per la visualizzazione

Esaminiamo ogni uno di questi nel dettaglio.

Codifica del testo

Il primo passo consiste nel convertire il prompt di testo di input in una rappresentazione numerica che il modello di AI possa utilizzare. Ciò viene solitamente fatto utilizzando grandi modelli linguistici come BERT o GPT.

Rappresentazione 3D

Esistono diversi metodi comuni per rappresentare la geometria 3D nei modelli di AI:

  1. Griglie di voxel: array 3D di valori che rappresentano l’occupazione o le caratteristiche
  2. Nuvole di punti: insiemi di punti 3D
  3. Mesh: vertici e facce che definiscono una superficie
  4. Funzioni implicite: funzioni continue che definiscono una superficie (ad esempio, funzioni di distanza firmate)
  5. Campi di radiazione neurali (NeRF): reti neurali che rappresentano la densità e il colore nello spazio 3D

Ognuno di questi ha compromessi in termini di risoluzione, utilizzo della memoria e facilità di generazione. Molti modelli recenti utilizzano funzioni implicite o NeRF in quanto consentono risultati di alta qualità con requisiti computazionali ragionevoli.

Ad esempio, possiamo rappresentare una sfera semplice come una funzione di distanza firmata:

import numpy as np

<p>def sphere_sdf(x, y, z, radius=1.0):
return np.sqrt(x**2 + y**2 + z**2) - radius</p>

<p># Valuta SDF in un punto 3D
point = [0.5, 0.5, 0.5]
distance = sphere_sdf(*point)
print(f&quot;Distanza dalla superficie della sfera: {distance}&quot;)

Modello generativo

Il nucleo di un sistema di text-to-3D è il modello generativo che produce la rappresentazione 3D dal prompt di testo. La maggior parte dei modelli attuali utilizza una variazione di un modello di diffusione, simile a quelli utilizzati nella generazione di immagini 2D.

I modelli di diffusione funzionano aggiungendo gradualmente rumore ai dati, poi imparando a invertire questo processo. Per la generazione di 3D, questo processo avviene nello spazio della rappresentazione 3D scelta.

Un pseudocodice semplificato per un passo di addestramento del modello di diffusione potrebbe avere questo aspetto:

def diffusion_training_step(model, x_0, text_embedding):
# Campiona un passo temporale casuale
t = torch.randint(0, num_timesteps, (1,))

<p># Aggiungi rumore all'input
noise = torch.randn_like(x_0)
x_t = add_noise(x_0, noise, t)</p>

<p># Prevedi il rumore
predicted_noise = model(x_t, t, text_embedding)</p>

<p># Calcola la perdita
loss = F.mse_loss(noise, predicted_noise)</p>

return loss

<p># Ciclo di addestramento
for batch in dataloader:
x_0, text = batch
text_embedding = encode_text(text)
loss = diffusion_training_step(model, x_0, text_embedding)
loss.backward()
optimizer.step()

Durante la generazione, iniziamo da rumore puro e denoisiamo iterativamente, condizionati sull’incorporazione del testo.

Rendering

Per visualizzare i risultati e calcolare le perdite durante l’addestramento, dobbiamo rappresentare la nostra rappresentazione 3D in immagini 2D. Ciò viene solitamente fatto utilizzando tecniche di rendering differenziabili che consentono ai gradienti di fluire attraverso il processo di rendering.

Per le rappresentazioni basate su mesh, potremmo utilizzare un renderer basato sulla rasterizzazione:

import torch
import torch.nn.functional as F
import pytorch3d.renderer as pr

<p>def render_mesh(vertices, faces, image_size=256):
# Crea un renderer
renderer = pr.MeshRenderer(
rasterizer=pr.MeshRasterizer(),
shader=pr.SoftPhongShader()
)</p>

<p># Imposta la camera
cameras = pr.FoVPerspectiveCameras()</p>

<p># Render
images = renderer(vertices, faces, cameras=cameras)</p>

return images

<p># Esempio di utilizzo
vertices = torch.rand(1, 100, 3) # Vertici casuali
faces = torch.randint(0, 100, (1, 200, 3)) # Facce casuali
rendered_images = render_mesh(vertices, faces)

Per le rappresentazioni implicite come NeRF, utilizziamo solitamente tecniche di ray marching per il rendering.

Unendo tutto: la pipeline di text-to-3D

Ora che abbiamo coperto i componenti chiave, esaminiamo come si uniscono in una tipica pipeline di generazione di 3D tramite testo:

  1. Codifica del testo: il prompt di input viene codificato in una rappresentazione vettoriale densa utilizzando un modello linguistico.
  2. Generazione iniziale: un modello di diffusione, condizionato sull’incorporazione del testo, genera una rappresentazione 3D iniziale (ad esempio, un NeRF o una funzione implicita).
  3. Coerenza multi-vista: il modello rappresenta più viste dell’asset 3D generato e garantisce la coerenza tra i punti di vista.
  4. Rifinizione: reti aggiuntive possono raffinare la geometria, aggiungere texture o migliorare i dettagli.
  5. Output finale: la rappresentazione 3D viene convertita in un formato desiderato (ad esempio, mesh testurizzata) per l’uso in applicazioni a valle.

Ecco un esempio semplificato di come ciò potrebbe apparire nel codice:

class TextTo3D(nn.Module):
def __init__(self):
super().__init__()
self.text_encoder = BertModel.from_pretrained(&#039;bert-base-uncased&#039;)
self.diffusion_model = DiffusionModel()
self.refiner = RefinerNetwork()
self.renderer = DifferentiableRenderer()

<p>def forward(self, text_prompt):
# Codifica del testo
text_embedding = self.text_encoder(text_prompt).last_hidden_state.mean(dim=1)</p>

<p># Genera rappresentazione 3D iniziale
initial_3d = self.diffusion_model(text_embedding)</p>

<p># Renderizza più viste
views = self.renderer(initial_3d, num_views=4)</p>

<p># Raffina in base alla coerenza multi-vista
refined_3d = self.refiner(initial_3d, views)</p>

return refined_3d

<p># Utilizzo
model = TextTo3D()
text_prompt = &quot;Una macchina sportiva rossa&quot;
generated_3d = model(text_prompt)

Top modelli di asset 3D disponibili

3DGen – Meta

3DGen è progettato per affrontare il problema della generazione di contenuti 3D, come personaggi, oggetti e scene, da descrizioni testuali.

Large Language and Text-to-3D Models - 3d-gen

Large Language and Text-to-3D Models – 3d-gen

3DGen supporta il rendering basato sulla fisica (PBR), essenziale per la ri-illuminazione realistica degli asset 3D in applicazioni reali. Consente anche la generazione di texture per forme 3D generate in precedenza o create dall’artista utilizzando nuovi input testuali. La pipeline integra due componenti principali: Meta 3D AssetGen e Meta 3D TextureGen, che gestiscono la generazione di testo-3D e testo-texture, rispettivamente.

Meta 3D AssetGen

Meta 3D AssetGen (Siddiqui et al., 2024) è responsabile della generazione iniziale degli asset 3D dai prompt di testo. Questo componente produce una mesh 3D con texture e mappe di materiali PBR in circa 30 secondi.

Meta 3D TextureGen

Meta 3D TextureGen (Bensadoun et al., 2024) raffina le texture generate da AssetGen. Può anche essere utilizzato per generare nuove texture per mesh 3D esistenti in base a descrizioni testuali aggiuntive. Questa fase richiede circa 20 secondi.

Point-E (OpenAI)

Point-E, sviluppato da OpenAI, è un altro modello di generazione di 3D tramite testo degno di nota. A differenza di DreamFusion, che produce rappresentazioni NeRF, Point-E genera nuvole di punti 3D.

Caratteristiche chiave di Point-E:

a) Pipeline a due fasi: Point-E genera prima una vista sintetica 2D utilizzando un modello di diffusione testo-immagine, poi utilizza questa immagine per condizionare un secondo modello di diffusione che produce la nuvola di punti 3D.

b) Efficienza: Point-E è progettato per essere efficiente dal punto di vista computazionale, in grado di generare nuvole di punti 3D in pochi secondi su una sola GPU.

c) Informazioni sul colore: il modello può generare nuvole di punti colorati, preservando sia le informazioni geometriche che quelle di aspetto.

Limitazioni:

  • Fedeltà inferiore rispetto agli approcci basati su mesh o NeRF
  • Le nuvole di punti richiedono un’elaborazione aggiuntiva per molte applicazioni a valle

Shap-E (OpenAI):

Basandosi su Point-E, OpenAI ha introdotto Shap-E, che genera mesh 3D invece di nuvole di punti. Ciò risolve alcune delle limitazioni di Point-E, mantenendo al tempo stesso l’efficienza computazionale.

Caratteristiche chiave di Shap-E:

a) Rappresentazione implicita: Shap-E apprende a generare rappresentazioni implicite (funzioni di distanza firmate) di oggetti 3D.

b) Estrazione della mesh: il modello utilizza un’implementazione differenziabile dell’algoritmo marching cubes per convertire la rappresentazione implicita in una mesh poligonale.

c) Generazione di texture: Shap-E può anche generare texture per le mesh 3D, risultando in output più attraenti.

Vantaggi:

  • Tempi di generazione rapidi (secondi o minuti)
  • Output di mesh diretto adatto per il rendering e le applicazioni a valle
  • Capacità di generare sia la geometria che la texture

GET3D (NVIDIA):

GET3D, sviluppato da ricercatori NVIDIA (NVDA ), è un altro potente modello di generazione di 3D tramite testo che si concentra sulla produzione di mesh 3D testurizzate di alta qualità.

Caratteristiche chiave di GET3D:

a) Rappresentazione di superficie esplicita: a differenza di DreamFusion o Shap-E, GET3D genera direttamente rappresentazioni di superficie esplicite (mesh) senza rappresentazioni implicite intermedie.

b) Generazione di texture: il modello include una tecnica di rendering differenziabile per apprendere e generare texture di alta qualità per le mesh 3D.

c) Architettura basata su GAN: GET3D utilizza un approccio di rete generativa antagonista (GAN), che consente tempi di generazione rapidi una volta addestrato il modello.

Vantaggi:

  • Geometria e texture di alta qualità
  • Tempi di inferenza rapidi
  • Integrazione diretta con i motori di rendering 3D

Limitazioni:

  • Richiede dati di addestramento 3D, che possono essere scarsi per alcune categorie di oggetti

Conclusione

La generazione di 3D tramite AI rappresenta un cambiamento fondamentale nel modo in cui creiamo e interagiamo con i contenuti 3D. Sfruttando tecniche di apprendimento avanzate, questi modelli possono produrre asset 3D complessi e di alta qualità da semplici descrizioni testuali. Man mano che la tecnologia continua a evolversi, possiamo aspettarci di vedere sistemi di generazione di 3D tramite testo sempre più sofisticati e capaci, che rivoluzioneranno settori come il gaming, il cinema, la progettazione di prodotti e l’architettura.

Ho trascorso gli ultimi cinque anni immergendomi nel mondo affascinante del Machine Learning e del Deep Learning. La mia passione e la mia esperienza mi hanno portato a contribuire a oltre 50 progetti di ingegneria del software diversi, con un focus particolare su AI/ML. La mia curiosità in corso mi ha anche portato verso l'elaborazione del linguaggio naturale, un campo che sono ansioso di esplorare ulteriormente.