Modele și platforme AI
Cum funcționează generarea 3D AI din text: Meta 3D Gen, OpenAI Shap-E și multe altele

De
Aayush Mittal Mittal
Capacitatea de a genera active digitale 3D din prompturi de text reprezintă una dintre cele mai interesante dezvoltări recente în domeniul inteligenței artificiale și al graficii computerizate. Pe măsură ce piața activelor digitale 3D este prognozată să crească de la 28,3 miliarde de dolari în 2024 la 51,8 miliarde de dolari până în 2029, modelele de generare 3D din text sunt pregătite să joace un rol major în revoluționarea creării de conținut în industrii precum jocurile, filmul, comerțul electronic și multe altele. Dar cum funcționează exact aceste sisteme AI? În acest articol, vom face o analiză detaliată a aspectelor tehnice din spatele generării 3D din text.
Provocarea generării 3D
Generarea de active 3D din text este o sarcină mult mai complexă decât generarea de imagini 2D. În timp ce imaginile 2D sunt esențialmente grile de pixeli, activele 3D necesită reprezentarea geometriei, texturilor, materialelor și adesea a animațiilor în spațiu tridimensional. Această dimensiune adăugată și complexitate face ca sarcina de generare să fie mult mai dificilă.
Unele dintre provocările cheie în generarea 3D din text includ:
- Reprezentarea geometriei 3D și a structurii
- Generarea de texturi și materiale consistente pe suprafața 3D
- Asigurarea plauzibilității fizice și a coerenței din multiple puncte de vedere
- Capturarea detaliilor fine și a structurii globale în același timp
- Generarea de active care pot fi ușor renderizate sau imprimate 3D
Pentru a aborda aceste provocări, modelele de generare 3D din text folosesc mai multe tehnologii și tehnici cheie.
Componentele cheie ale sistemelor de generare 3D din text
Majoritatea sistemelor de generare 3D din text de ultimă generație au câteva componente cheie:
- Encodarea textului: Conversia promptului de text într-o reprezentare numerică
- Reprezentarea 3D: O metodă pentru reprezentarea geometriei și a aspectului 3D
- Modelul generativ: Modelul AI de bază pentru generarea activului 3D
- Renderizarea: Conversia reprezentării 3D în imagini 2D pentru vizualizare
Să explorăm fiecare dintre acestea în detaliu.
Encodarea textului
Primul pas este conversia promptului de text într-o reprezentare numerică cu care modelul AI poate lucra. Acest lucru se realizează de obicei folosind modele de limbaj mari precum BERT sau GPT.
Reprezentarea 3D
Există mai multe moduri comune de a reprezenta geometria 3D în modelele AI:
- Grile de voxel: Matrice 3D de valori care reprezintă ocuparea sau caracteristicile
- Noruri de puncte: Seturi de puncte 3D
- Rețele: Vârfuri și fețe care definesc o suprafață
- Functii implicite: Funcții continue care definesc o suprafață (de exemplu, funcții de distanță semnată)
- Câmpuri de radianță neurală (NeRFs): Rețele neuronale care reprezintă densitatea și culoarea în spațiu 3D
Fiecare are compromisuri în ceea ce privește rezoluția, utilizarea memoriei și ușurința generării. Multe modele recente folosesc funcții implicite sau NeRFs, deoarece permit rezultate de înaltă calitate cu cerințe computaționale rezonabile.
De exemplu, putem reprezenta o sferă simplă ca o funcție de distanță semnată:
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># Evaluate SDF at a 3D point
point = [0.5, 0.5, 0.5]
distance = sphere_sdf(*point)
print(f"Distance to sphere surface: {distance}")
Modelul generativ
Nucleul unui sistem de generare 3D din text este modelul generativ care produce reprezentarea 3D din încorporarea textului. Majoritatea modelelor de ultimă generație folosesc o variație a unui model de difuzie, similar cu cele utilizate în generarea de imagini 2D.
Modelele de difuzie funcționează prin adăugarea treptată de zgomot la date, apoi prin învățarea inversării acestui proces. Pentru generarea 3D, acest proces are loc în spațiul reprezentării 3D alese.
Un pseudocod simplificat pentru o etapă de antrenare a unui model de difuzie ar putea arăta astfel:
def diffusion_training_step(model, x_0, text_embedding): # Sample a random timestep t = torch.randint(0, num_timesteps, (1,)) <p># Add noise to the input noise = torch.randn_like(x_0) x_t = add_noise(x_0, noise, t)</p> <p># Predict the noise predicted_noise = model(x_t, t, text_embedding)</p> <p># Compute loss loss = F.mse_loss(noise, predicted_noise)</p> return loss <p># Training loop 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()
În timpul generării, începem de la zgomot pur și iterăm denoisingul, condiționat de încorporarea textului.
Renderizarea
Pentru a vizualiza rezultatele și a calcula pierderile în timpul antrenamentului, avem nevoie să renderizăm reprezentarea noastră 3D în imagini 2D. Acest lucru se realizează de obicei folosind tehnici de renderizare diferențiale care permit gradientelor să curgă înapoi prin procesul de renderizare.
Pentru reprezentări bazate pe rețele, am putea folosi un renderer bazat pe rasterizare:
import torch import torch.nn.functional as F import pytorch3d.renderer as pr <p>def render_mesh(vertices, faces, image_size=256): # Create a renderer renderer = pr.MeshRenderer( rasterizer=pr.MeshRasterizer(), shader=pr.SoftPhongShader() )</p> <p># Set up camera cameras = pr.FoVPerspectiveCameras()</p> <p># Render images = renderer(vertices, faces, cameras=cameras)</p> return images <p># Example usage vertices = torch.rand(1, 100, 3) # Random vertices faces = torch.randint(0, 100, (1, 200, 3)) # Random faces rendered_images = render_mesh(vertices, faces)
Pentru reprezentări implicite, cum ar fi NeRFs, de obicei se folosesc tehnici de marșare a razelor pentru a renderiza vederi.
Punerea tuturor laolaltă: Pipeline-ul de generare 3D din text
Acum că am acoperit componentele cheie, să trecem prin modul în care acestea se reunesc într-un pipeline tipic de generare 3D din text:
- Encodarea textului: Promptul de intrare este încodat într-o reprezentare vectorială densă folosind un model de limbaj.
- Generarea inițială: Un model de difuzie, condiționat de încorporarea textului, generează o reprezentare 3D inițială (de exemplu, un NeRF sau o funcție implicită).
- Consistența multi-vizuală: Modelul renderizează multiple vederi ale activului 3D generat și asigură coerența dintre puncte de vedere.
- Refinarea: Rețele suplimentare pot refina geometria, adăuga texturi sau îmbunătăți detalii.
- Ieșirea finală: Reprezentarea 3D este convertită într-un format dorit (de exemplu, o rețea texturată) pentru utilizare în aplicații ulterioare.
Iată un exemplu simplificat de cum ar putea arăta acest lucru în cod:
class TextTo3D(nn.Module): def __init__(self): super().__init__() self.text_encoder = BertModel.from_pretrained('bert-base-uncased') self.diffusion_model = DiffusionModel() self.refiner = RefinerNetwork() self.renderer = DifferentiableRenderer() <p>def forward(self, text_prompt): # Encode text text_embedding = self.text_encoder(text_prompt).last_hidden_state.mean(dim=1)</p> <p># Generate initial 3D representation initial_3d = self.diffusion_model(text_embedding)</p> <p># Render multiple views views = self.renderer(initial_3d, num_views=4)</p> <p># Refine based on multi-view consistency refined_3d = self.refiner(initial_3d, views)</p> return refined_3d <p># Usage model = TextTo3D() text_prompt = "A red sports car" generated_3d = model(text_prompt)
Top Modele de active 3D disponibile
3DGen – Meta
3DGen este proiectat pentru a aborda problema generării de conținut 3D – cum ar fi personaje, obiecte și scene – din descrieri textuale.

Modele de limbaj mari și text-to-3D – 3d-gen
3DGen suportă renderizarea bazată pe fizică (PBR), esențială pentru realistul realității 3D în aplicații din lumea reală. De asemenea, permite generarea de texturi pentru forme 3D generate anterior sau create de artiști, folosind noi intrări textuale. Pipeline-ul integrează două componente cheie: Meta 3D AssetGen și Meta 3D TextureGen, care gestionează generarea de active 3D din text și generarea de texturi, respectiv.
Meta 3D AssetGen
Meta 3D AssetGen (Siddiqui et al., 2024) este responsabil pentru generarea inițială a activelor 3D din prompturi de text. Acest component produce o rețea 3D cu texturi și hărți de material PBR în aproximativ 30 de secunde.
Meta 3D TextureGen
Meta 3D TextureGen (Bensadoun et al., 2024) rafinează texturile generate de AssetGen. De asemenea, poate fi utilizat pentru a genera noi texturi pentru rețele 3D existente, pe baza unor descrieri textuale suplimentare. Această etapă durează aproximativ 20 de secunde.
Point-E (OpenAI)
Point-E, dezvoltat de OpenAI, este un alt model notabil de generare 3D din text. În contrast cu DreamFusion, care produce reprezentări NeRF, Point-E generează nori de puncte 3D.
Caracteristici cheie ale Point-E:
a) Pipeline în două etape: Point-E generează mai întâi o vedere sintetică 2D folosind un model de difuzie text-Imagine, apoi utilizează această imagine pentru a condiționa un al doilea model de difuzie care produce norul de puncte 3D.
b) Eficiență: Point-E este proiectat pentru a fi eficient din punct de vedere computațional, capabil să genereze nori de puncte 3D în secunde pe o singură GPU.
c) Informații de culoare: Modelul poate genera nori de puncte colorate, păstrând atât informații geometrice, cât și de aspect.
Limitări:
- Fidelitate mai scăzută în comparație cu abordările bazate pe rețele sau NeRF
- Nori de puncte necesită procesare suplimentară pentru multe aplicații ulterioare
Shap-E (OpenAI):
Pe baza Point-E, OpenAI a introdus Shap-E, care generează rețele 3D în loc de nori de puncte. Acest lucru abordează unele dintre limitările Point-E, menținând în același timp eficiența computațională.
Caracteristici cheie ale Shap-E:
a) Reprezentare implicită: Shap-E învață să genereze reprezentări implicite (funcții de distanță semnată) ale obiectelor 3D.
b) Extracția rețelei: Modelul utilizează o implementare diferențială a algoritmului de cuburi marche pentru a converti reprezentarea implicită într-o rețea poligonală.
c) Generarea texturilor: Shap-E poate genera, de asemenea, texturi pentru rețelele 3D, rezultând în ieșiri mai atractive din punct de vedere vizual.
Avantaje:
- Timp de generare rapid (secunde până la minute)
- Ieșire directă sub formă de rețea, potrivită pentru renderizare și aplicații ulterioare
- Capacitatea de a genera atât geometrie, cât și textură
GET3D (NVIDIA):
GET3D, dezvoltat de cercetători NVIDIA (NVDA ), este un alt model puternic de generare 3D din text, care se concentrează pe producerea de rețele 3D texturate de înaltă calitate.
Caracteristici cheie ale GET3D:
a) Reprezentare explicită a suprafeței: GET3D generează direct reprezentări explicite ale suprafeței (rețele), fără reprezentări implicite intermediare.
b) Generarea texturilor: Modelul include o tehnică de renderizare diferențială pentru a învăța și genera texturi de înaltă calitate pentru rețelele 3D.
c) Arhitectură bazată pe GAN: GET3D utilizează o abordare de rețea adversarială generativă (GAN), care permite generarea rapidă odată ce modelul este antrenat.
Avantaje:
- Geometrie și texturi de înaltă calitate
- Timp de inferență rapid
- Integrare directă cu motoarele de renderizare 3D
Limitări:
- Necesită date de antrenament 3D, care pot fi rare pentru anumite categorii de obiecte
Concluzie
Generarea 3D din text reprezintă o schimbare fundamentală în modul în care creăm și interacționăm cu conținutul 3D. Prin utilizarea tehnicilor avansate de învățare profundă, aceste modele pot produce active 3D complexe și de înaltă calitate din descrieri textuale simple. Pe măsură ce tehnologia continuă să evolueze, ne putem aștepta să vedem sisteme de generare 3D din text din ce în ce mai sofisticate și capabile, care vor revoluționa industrii de la jocuri și film la design de produs și arhitectură.
Am petrecut ultimii cinci ani scufundându-mă în lumea fascinantă a Machine Learning și Deep Learning. Pasinea și expertiza mea m-au condus să contribui la peste 50 de proiecte diverse de inginerie software, cu un focus deosebit pe AI/ML. Curiozitatea mea în continuare m-a atras și spre Natural Language Processing, un domeniu pe care sunt dornic să îl explorez mai departe.
Descoperă mai multe


Instalarea pachetelor Python ca indice al adoptării locale a inteligenței artificiale


Cel mai bun model OpenAI a fost lansat în spatele unei porți guvernamentale


Cursele de armă AI se intensifică: parteneriatul strategic AMD cu OpenAI


OpenAI a încheiat un parteneriat de 7 ani, în valoare de 38 de miliarde de dolari, cu AWS pentru servicii de cloud


Optimizarea Câmpurilor de Radianță Neuronale (NeRF) pentru Renderizarea 3D în Timp Real în Platformele de Comerț Electronic


Protocolul de Context al Modelului Claude: Un Ghid pentru Dezvoltatori
