Schopnosť generovať 3D digitálne aktíva z textových výziev predstavuje jeden z najzaujímavejších najnovších vývojov v oblasti AI a počítačovej grafiky. Očakáva sa, že trh s 3D digitálnymi aktívami bude rásť 28,3 miliardy USD v roku 2024 na 51,8 miliardy USD v roku 2029, modely umelej inteligencie s prevodom textu na 3D sú pripravené zohrať hlavnú úlohu pri revolúcii tvorby obsahu v odvetviach, ako sú hry, film, elektronický obchod a ďalšie. Ale ako presne tieto systémy AI fungujú? V tomto článku sa hlboko ponoríme do technických detailov generovania textu do 3D.
Výzva 3D generácie
Generovanie 3D prvkov z textu je podstatne zložitejšia úloha ako generovanie 2D obrázkov. Zatiaľ čo 2D obrázky sú v podstate mriežky pixelov, 3D prvky vyžadujú reprezentáciu geometrie, textúr, materiálov a často animácií v trojrozmernom priestore. Táto pridaná rozmernosť a zložitosť robí úlohu generovania oveľa náročnejšou.
Niektoré kľúčové výzvy pri generovaní textu na 3D zahŕňajú:
- Predstavuje 3D geometriu a štruktúru
- Generovanie konzistentných textúr a materiálov na 3D povrchu
- Zabezpečenie fyzickej hodnovernosti a koherencie z viacerých hľadísk
- Zachytenie jemných detailov a globálnej štruktúry súčasne
- Generovanie aktív, ktoré možno ľahko vykresliť alebo 3D vytlačiť
Na zvládnutie týchto výziev využívajú modely prevodu textu do 3D niekoľko kľúčových technológií a techník.
Kľúčové komponenty systémov prevodu textu na 3D
Väčšina najmodernejších systémov na generovanie textu do 3D zdieľa niekoľko základných komponentov:
- Kódovanie textu: Konverzia vstupnej textovej výzvy na číselnú reprezentáciu
- 3D znázornenie: Metóda na reprezentáciu 3D geometrie a vzhľadu
- Generatívny model: Základný model AI na generovanie 3D aktíva
- Vykresľovanie: Prevod 3D reprezentácie na 2D obrázky na vizualizáciu
Preskúmajme každý z nich podrobnejšie.
Kódovanie textu
Prvým krokom je previesť vstupnú textovú výzvu na numerickú reprezentáciu, s ktorou môže model AI pracovať. To sa zvyčajne vykonáva pomocou veľkých jazykových modelov, ako je napr BERT alebo GPT.
3D zobrazenie
Existuje niekoľko bežných spôsobov, ako reprezentovať 3D geometriu v modeloch AI:
- Voxelové mriežky: 3D polia hodnôt predstavujúce obsadenosť alebo funkcie
- Mraky bodov: Súbory 3D bodov
- Siete: Vrcholy a plochy definujúce povrch
- Implicitné funkcie: Spojité funkcie definujúce povrch (napr. funkcie vzdialenosti so znamienkom)
- Neurónové vyžarovacie polia (NeRF): Neurónové siete reprezentujúce hustotu a farbu v 3D priestore
Každý z nich má kompromisy, pokiaľ ide o rozlíšenie, využitie pamäte a jednoduchosť generovania. Mnoho najnovších modelov používa implicitné funkcie alebo NeRF, pretože umožňujú vysokokvalitné výsledky s primeranými výpočtovými požiadavkami.
Napríklad môžeme reprezentovať jednoduchú guľu ako funkciu vzdialenosti so znamienkom:
import numpy as np def sphere_sdf(x, y, z, radius=1.0): return np.sqrt(x**2 + y**2 + z**2) - radius # Evaluate SDF at a 3D point point = (0.5, 0.5, 0.5) distance = sphere_sdf(*point) print(f"Distance to sphere surface: {distance}")
Generatívny model
Jadrom systému prevodu textu do 3D je generatívny model, ktorý vytvára 3D reprezentáciu z vkladanie textu. Väčšina najmodernejších modelov využíva určitú variáciu modelu difúzie, podobnej tým, ktoré sa používajú pri vytváraní 2D obrazu.
Difúzne modely fungujú tak, že k údajom postupne pridávajú šum a potom sa učia tento proces zvrátiť. Pre 3D generovanie sa tento proces deje v priestore zvolenej 3D reprezentácie.
Zjednodušený pseudokód pre krok tréningu modelu difúzie môže vyzerať takto:
def diffusion_training_step(model, x_0, text_embedding): # Sample a random timestep t = torch.randint(0, num_timesteps, (1,)) # Add noise to the input noise = torch.randn_like(x_0) x_t = add_noise(x_0, noise, t) # Predict the noise predicted_noise = model(x_t, t, text_embedding) # Compute loss loss = F.mse_loss(noise, predicted_noise) return loss # 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()
Pri generovaní vychádzame z čistého šumu a iteratívneho odšumovania, podmieneného vložením textu.
Vykresľovanie
Aby sme mohli vizualizovať výsledky a vypočítať straty počas tréningu, musíme vykresliť našu 3D reprezentáciu na 2D obrázky. Zvyčajne sa to robí pomocou diferencovateľných techník vykresľovania, ktoré umožňujú prechod prechodov späť cez proces vykresľovania.
Pre reprezentácie založené na sieti môžeme použiť renderer založený na rasterizácii:
import torch import torch.nn.functional as F import pytorch3d.renderer as pr def render_mesh(vertices, faces, image_size=256): # Create a renderer renderer = pr.MeshRenderer( rasterizer=pr.MeshRasterizer(), shader=pr.SoftPhongShader() ) # Set up camera cameras = pr.FoVPerspectiveCameras() # Render images = renderer(vertices, faces, cameras=cameras) return images # 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)
Pre implicitné reprezentácie, ako sú NeRF, zvyčajne používame techniky lúčového pochodu na vykreslenie pohľadov.
Dáme to všetko dohromady: Potrubie prevodu textu na 3D
Teraz, keď sme pokryli kľúčové komponenty, poďme si prejsť, ako sa spájajú v typickom procese generovania textu do 3D:
- Kódovanie textu: Vstupná výzva je zakódovaná do hustej vektorovej reprezentácie pomocou jazykového modelu.
- Počiatočná generácia: Difúzny model, podmienený vložením textu, generuje počiatočnú 3D reprezentáciu (napr. NeRF alebo implicitnú funkciu).
- Konzistencia viacerých pohľadov: Model vykresľuje viaceré pohľady na vygenerovaný 3D prvok a zabezpečuje konzistentnosť medzi jednotlivými uhlami pohľadu.
- Spresnenie: Ďalšie siete môžu vylepšiť geometriu, pridať textúry alebo vylepšiť detaily.
- Konečný výstup: 3D reprezentácia sa prevedie do požadovaného formátu (napr. textúrovaná sieť) na použitie v nadväzujúcich aplikáciách.
Tu je zjednodušený príklad toho, ako to môže vyzerať v kóde:
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() def forward(self, text_prompt): # Encode text text_embedding = self.text_encoder(text_prompt).last_hidden_state.mean(dim=1) # Generate initial 3D representation initial_3d = self.diffusion_model(text_embedding) # Render multiple views views = self.renderer(initial_3d, num_views=4) # Refine based on multi-view consistency refined_3d = self.refiner(initial_3d, views) return refined_3d # Usage model = TextTo3D() text_prompt = "A red sports car" generated_3d = model(text_prompt)
Top Text to 3D Asset Models available
3DGen – Meta
3DGen je navrhnutý tak, aby riešil problém generovania 3D obsahu – ako sú postavy, rekvizity a scény – z textových popisov.
3DGen podporuje fyzicky založené vykresľovanie (PBR), ktoré je nevyhnutné pre realistické presvetlenie 3D prvkov v aplikáciách v reálnom svete. Umožňuje tiež generatívnu retextúru predtým vygenerovaných alebo umelcom vytvorených 3D tvarov pomocou nových textových vstupov. Potrubie integruje dve základné komponenty: Meta 3D AssetGen a Meta 3D TextureGen, ktoré spracovávajú generovanie textu do 3D a textu na textúru.
Meta 3D AssetGen
Meta 3D AssetGen (Siddiqui et al., 2024) je zodpovedný za počiatočné generovanie 3D aktív z textových výziev. Tento komponent vytvorí 3D sieť s textúrami a mapami materiálu PBR za približne 30 sekúnd.
Meta 3D TextureGen
Meta 3D TextureGen (Bensadoun a kol., 2024) vylepšuje textúry generované AssetGen. Môže sa tiež použiť na generovanie nových textúr pre existujúce 3D siete na základe dodatočných textových popisov. Táto fáza trvá približne 20 sekúnd.
Point-E (OpenAI)
Point-E, vyvinutý spoločnosťou OpenAI, je ďalší pozoruhodný model generovania textu na 3D. Na rozdiel od DreamFusion, ktorý vytvára reprezentácie NeRF, Point-E generuje 3D mračná bodov.
Kľúčové vlastnosti Point-E:
a) Dvojstupňové potrubie: Point-E najskôr vygeneruje syntetický 2D pohľad pomocou modelu difúzie textu na obrázok, potom použije tento obrázok na úpravu druhého difúzneho modelu, ktorý vytvorí 3D mračno bodov.
b) Efektívnosť: Point-E je navrhnutý tak, aby bol výpočtovo efektívny, schopný generovať 3D mračná bodov v priebehu niekoľkých sekúnd na jednom GPU.
c) Informácie o farbe: Model dokáže generovať farebné mračná bodov so zachovaním geometrických informácií aj informácií o vzhľade.
Obmedzenia:
- Nižšia vernosť v porovnaní s prístupmi založenými na mesh alebo NeRF
- Mraky bodov vyžadujú dodatočné spracovanie pre mnohé následné aplikácie
Shap-E (OpenAI):
Na základe Point-E bol predstavený OpenAI Tvar-E, ktorý generuje 3D siete namiesto mračien bodov. To rieši niektoré obmedzenia Point-E pri zachovaní výpočtovej efektivity.
Kľúčové vlastnosti Shap-E:
a) Implicitná reprezentácia: Shap-E sa učí generovať implicitné reprezentácie (funkcie vzdialenosti so znamienkom) 3D objektov.
b) Extrakcia sieťoviny: Model používa diferencovateľnú implementáciu algoritmu pochodových kociek na konverziu implicitnej reprezentácie na polygonálnu sieť.
c) Generovanie textúry: Shap-E dokáže generovať aj textúry pre 3D siete, výsledkom čoho sú vizuálne príťažlivejšie výstupy.
Výhody:
- Rýchle časy generovania (sekundy až minúty)
- Priamy sieťový výstup vhodný pre rendering a následné aplikácie
- Schopnosť vytvárať geometriu aj textúru
GET3D (NVIDIA):
GET3Dvyvinutý výskumníkmi NVIDIA, je ďalším výkonným modelom generácie textu na 3D, ktorý sa zameriava na vytváranie vysokokvalitných štruktúrovaných 3D sietí.
Kľúčové vlastnosti GET3D:
a) Explicitné zobrazenie povrchu: Na rozdiel od DreamFusion alebo Shap-E, GET3D priamo generuje explicitné povrchové reprezentácie (siete) bez prechodných implicitných reprezentácií.
b) Generovanie textúry: Model obsahuje diferencovateľnú techniku vykresľovania na učenie a generovanie vysokokvalitných textúr pre 3D siete.
c) Architektúra založená na GAN: GET3D používa prístup generatívnej adversariálnej siete (GAN), ktorý umožňuje rýchle generovanie po natrénovaní modelu.
Výhody:
- Vysoko kvalitná geometria a textúry
- Rýchle vyvodzovacie časy
- Priama integrácia s 3D renderovacími motormi
Obmedzenia:
- Vyžaduje 3D tréningové údaje, ktorých môže byť pri niektorých kategóriách objektov málo
Záver
Generovanie umelej inteligencie typu text-to-3D predstavuje zásadný posun v tom, ako tvoríme 3D obsah a ako s ním komunikujeme. Využitím pokročilých techník hlbokého učenia môžu tieto modely vytvárať zložité, vysokokvalitné 3D prvky z jednoduchých textových popisov. Ako sa technológia neustále vyvíja, môžeme očakávať, že uvidíme čoraz sofistikovanejšie a schopnejšie systémy prevodu textu do 3D, ktoré prinesú revolúciu v odvetviach od hier a filmu až po dizajn produktov a architektúru.