AI-mallit ja alustat

Kuinka Teksti-3D AI:n generointi toimii: Meta 3D Gen, OpenAI Shap-E ja lisää

mm
Lisää Unite.AI suosikkilähteisiisi Google-palvelussa

Tekstin generointi 3D-digitaalisista varastoista edustaa yhtä jännittävimmistä kehityksistä AI:ssa ja tietokonegrafiikassa. Koska 3D-digitaalisen varaston markkinan on arvioitu kasvavan 28,3 miljardista dollarista vuonna 2024 51,8 miljardiin dollarin vuoteen 2029 mennessä, teksti-3D AI-mallit ovat valmiina muuttamaan sisällön luomista useilla aloilla, kuten pelaamisessa, elokuvissa, e-commerceissa ja muissa. Mutta miten nämä AI-järjestelmät toimivat? Tässä artikkelissa syvennymme teknisiin yksityiskohtiin teksti-3D-generoinnin takana.

3D-generoinnin haaste

3D-varastojen generointi tekstistä on merkittävästi monimutkaisempi tehtävä kuin 2D-kuvien generointi. Koska 2D-kuvat ovat perustavasti pikselien ruutuja, 3D-varastot vaativat geometrian, tekstuurien, materiaalien ja usein animaatioiden edustamisen kolmiulotteisessa tilassa. Tämä lisää ulottuvuutta ja monimutkaisuutta tekee generointitehtävästä paljon haasteellisemman.

Jotkut avainhaasteet teksti-3D-generoinnissa ovat:

  • 3D-geometrian ja rakenteen edustaminen
  • Johdonmukkaisten tekstuurien ja materiaalien generointi 3D-pinnalla
  • Fyysisten mahdollisuuksien ja yhdenmukaisuuden varmistaminen useista näkökulmista
  • Hienojen yksityiskohtien ja globaalin rakenteen samanaikainen kaappaus
  • Varastojen generointi, jotka voidaan helposti renderöidä tai 3D-tulostaa

Näiden haasteiden ratkaisemiseksi teksti-3D-mallit hyödyntävät useita avainTeknologioita ja tekniikoita.

Teksti-3D-järjestelmien avainkomponentit

Useimmat nykytekniikan teksti-3D-generointijärjestelmät jakavat muutamia ydinkomponentteja:

  1. Tekstin koodaus: Syötetekstin muuntaminen numeeriseksi edustukseksi
  2. 3D-edustus: Menetelmä 3D-geometrian ja ulkonäön edustamiseksi
  3. Generatiivinen malli: Ydin-AI-malli 3D-varaston generoinniksi
  4. Renderöinti: 3D-edustuksen muuntaminen 2D-kuviksi visualisoinnin vuoksi

Tutustumme nyt näihin tarkemmin.

Tekstin koodaus

Ensimmäinen vaihe on muuttaa syöteteksti numeeriseksi edustukseksi, jota AI-malli voi käsitellä. Tämä tehdään tyypillisesti käyttäen suuria kielen malleja, kuten BERT tai GPT.

3D-edustus

On useita yleisiä tapoja edustaa 3D-geometriaa AI-malleissa:

  1. Vokseliruudut: 3D-matriisit, jotka edustavat tilaa tai ominaisuuksia
  2. Pilvipisteen joukot: Joukko 3D-pisteitä
  3. Verkkomallit: Pisteet ja kasvot, jotka määrittävät pinnan
  4. Implisiittiset funktiot: Jatkuva funktio, joka määrittää pinnan (esim. allekirjoitettu etäisyyden funktio)
  5. Neuraalinen säteilykenttä (NeRF): Neuraaliverkko, joka edustaa tiheyttä ja väriä 3D-tilassa

Kukin niistä on kompromisseja resoluution, muistin käytön ja generoinnin helppouden suhteen. Monet viimeaikaiset mallit käyttävät implisiittisiä funktioita tai NeRF:ejä, koska ne sallivat korkealaatuiset tulokset kohtuullisilla laskennallisisilla vaatimuksilla.

Esimerkiksi voimme edustaa yksinkertaisen pallon allekirjoitetun etäisyyden funktiolla:


import numpy as np

def sphere_sdf(x, y, z, radius=1.0):

return np.sqrt(x**2 + y**2 + z**2) - radius

# Arvioi SDF 3D-pisteessä
point = [0.5, 0.5, 0.5]
distance = sphere_sdf(*point)
print(f"Etäisyys pallon pinnalle: {distance}")

Generatiivinen malli

Teksti-3D-järjestelmän ydin on generatiivinen malli, joka tuottaa 3D-edustuksen tekstiupotuksesta. Useimmat nykytekniikan mallit käyttävät jollain tavoin diffuusiomallia, samanlaista kuin 2D-kuvien generoinnissa.

Diffuusiomallit toimivat lisäämällä hiljalleen melua dataan ja opettelemalla kääntämään tämän prosessin. 3D-generoinnissa tämä prosessi tapahtuu valitun 3D-edustuksen tilassa.

Yksinkertainen pseudokoodi diffuusiomallin koulutusvaiheesta saattaa näyttää tältä:


def diffusion_training_step(model, x_0, text_embedding):

# Valitse satunnainen aikaväli
t = torch.randint(0, num_timesteps, (1,))

# Lisää melua syötteeseen
noise = torch.randn_like(x_0)
x_t = add_noise(x_0, noise, t)

# Ennusta melu
predicted_noise = model(x_t, t, text_embedding)

# Laske tappio
loss = F.mse_loss(noise, predicted_noise)

return loss

# Koulutussilmukka
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()

Generoinnin aikana aloitamme puhtaasta melusta ja toistuvasti puhdistamme, ehdollistettuna tekstiupotukseen.

Renderöinti

Tuloksien visualisointiin ja tappioiden laskemiseen koulutuksen aikana tarvitaan 3D-edustuksen renderöinti 2D-kuviksi. Tämä tehdään tyypillisesti differentiaalisten renderöintitekniikoiden avulla, jotka sallivat gradienttien virtaamisen renderöintiprosessin läpi.

Verkkopohjaisiin edustuksiin voidaan käyttää rasterointipohjaista renderöijää:


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

def render_mesh(vertices, faces, image_size=256):

# Luo renderöijä
renderer = pr.MeshRenderer(
rasterizer=pr.MeshRasterizer(),
shader=pr.SoftPhongShader()
)

# Määritä kamera
cameras = pr.FoVPerspectiveCameras()

# Renderöi
images = renderer(vertices, faces, cameras=cameras)

return images

# Esimerkki
vertices = torch.rand(1, 100, 3) # Satunnaiset pisteet
faces = torch.randint(0, 100, (1, 200, 3)) # Satunnaiset kasvot
rendered_images = render_mesh(vertices, faces)

Implisiittisiin edustuksiin, kuten NeRF:ehen, käytetään tyypillisesti säteen seuraamistekniikoita renderöintiin.

Kaiken kokoaminen: Teksti-3D-pipeline

Nyt kun olemme kattaneet avainkomponentit, käydään läpi, miten ne yhdistyvät tyypillisessä teksti-3D-generointiputkessa:

  1. Tekstin koodaus: Syöteteksti koodataan tiivriksi vektoriedustukseksi käyttäen kielen mallia.
  2. Alkuperäinen generointi: Diffuusiomalli, joka on ehdollistettu tekstiupotukseen, generoi alkuperäisen 3D-edustuksen (esim. NeRF tai implisiittinen funktio).
  3. Moninäkökulmainen yhdenmukaisuus: Malli renderöi useita näkymiä generoidusta 3D-varastosta ja varmistaa yhdenmukaisuuden näkökulmien välillä.
  4. Hiominen: Lisäverkot voivat hiomi geometriaa, lisätä tekstuuria tai parantaa yksityiskohtia.
  5. Lopullinen tuloste: 3D-edustus muunnetaan haluttuun muotoon (esim. teksturoitu verkkomalli) alempien sovellusten käyttöä varten.

Tässä on yksinkertainen esimerkki siitä, miten tämä saattaa näyttää koodissa:


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):

# Koodaa teksti
text_embedding = self.text_encoder(text_prompt).last_hidden_state.mean(dim=1)

# Generoi alkuperäinen 3D-edustus
initial_3d = self.diffusion_model(text_embedding)

# Renderöi useita näkymiä
views = self.renderer(initial_3d, num_views=4)

# Hiomi perustuen moninäkökulmaiseen yhdenmukaisuuteen
refined_3d = self.refiner(initial_3d, views)

return refined_3d

# Käyttö
model = TextTo3D()
text_prompt = "Punainen urheiluauto"
generated_3d = model(text_prompt)

Parhaat teksti-3D-varastomallit

3DGen - Meta

3DGen on suunniteltu ratkaisemaan 3D-sisällön generointiongelmaa, kuten hahmoja, esineitä ja kohtauksia, tekstikuvausten perusteella.

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

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

3DGen tukee fyysistä renderöintiä (PBR), joka on välttämätöntä realistisen 3D-varaston uudelleenvalaisemiseksi käytännön sovelluksissa. Se mahdollistaa myös generatiivisen uudelleen tekstuuroinnin aiemmin generoituja tai taiteilijoiden luomia 3D-muotoja käyttäen uusia tekstikuvauksia. Putki koostuu kahdesta ydinkomponentista: Meta 3D AssetGen ja Meta 3D TextureGen, jotka vastaavat teksti-3D- ja teksti-tekstuuri-generointia.

Meta 3D AssetGen

Meta 3D AssetGen (Siddiqui et al., 2024) on vastuussa 3D-varastojen alkuperäisestä generoinnista tekstiprompteista. Tämä komponentti tuottaa 3D-verkkomallin tekstuurien ja PBR-materiaalikarttojen kanssa noin 30 sekunnissa.

Meta 3D TextureGen

Meta 3D TextureGen (Bensadoun et al., 2024) hiomaa tekstuuria, jonka AssetGen generoi. Se voidaan myös käyttää uusien tekstuurien generointiin olemassa oleville 3D-muotoille perustuen lisätekstikuvauksiin. Tämä vaihe kestää noin 20 sekuntia.

Point-E (OpenAI)

Point-E, jota on kehittänyt OpenAI, on toinen merkittävä teksti-3D-generointimalli. Toisin kuin DreamFusion, joka tuottaa NeRF-edustuksia, Point-E generoi 3D-pilvipisteitä.

Point-E:n avainominaisuudet:

a) Kahden vaiheen putki: Point-E generoi ensin synteettisen 2D-näkymän teksti-kuva-diffuusiomallilla, ja sitten käyttää tätä kuvaa ehdollistamaan toista diffuusiomallia, joka tuottaa 3D-pilvipisteen.

b) Tehtävän nopeus: Point-E on suunniteltu olemaan laskennallisesti tehokas, pystyen generoimaan 3D-pilvipisteitä sekunneissa yhdellä GPU:lla.

c) Väri-informaatio: Malli voi generoida väritettyjä pilvipisteitä, säilyttäen sekä geometrisen että ulkonäön tiedon.

Rajoitukset:

  • Alempi laatu verrattuna verkkopohjaisiin tai NeRF-pohjaisiin lähestymistapoihin
  • Pilvipisteet vaativat lisäkäsittelyä useissa alempien sovellusten käyttökohteissa

Shap-E (OpenAI):

Rakentamalla Point-E:n pohjalle OpenAI esitteli Shap-E:n, joka generoi 3D-verkkomalleja pilvipisteiden sijaan. Tämä osoittaa joitakin Point-E:n rajoituksia säilyttäen laskennallisen tehokkuuden.

Shap-E:n avainominaisuudet:

a) Implisiittinen edustus: Shap-E oppii generoimaan implisiittisiä edustuksia (allekirjoitettuja etäisyyden funktioita) 3D-olioista.

b) Verkkomallin extraktio: Malli käyttää differentiaalista toteutusta Marching Cubes -algoritmiin muuttaakseen implisiittisen edustuksen polygoniverkkomalliksi.

c) Tekstuurin generointi: Shap-E voi myös generoida tekstuurit 3D-verkkomalleille, johtaen visuaalisesti miellyttävämmistä tuloksista.

Edut:

  • Nopea generointi (sekunteja tai minuutteja)
  • Suora verkkomallin tuloste soveltuu renderöintiin ja alempien sovellusten käyttöön
  • Kyky generoida sekä geometriaa että tekstuuria

GET3D (NVIDIA):

GET3D, jonka kehittivät Nvidian tutkijat, on toinen voimakas teksti-3D-generointimalli, joka keskittyy korkealaatuisiin teksturoituun 3D-verkkomallien tuottamiseen.

GET3D:n avainominaisuudet:

a) Explisiittinen pinnan edustus: Toisin kuin DreamFusion tai Shap-E, GET3D generoi suoraan explisiittisiä pinnan edustuksia (verkkomalleja) ilman välimuotoisia implisiittisiä edustuksia.

b) Tekstuurin generointi: Malli sisältää differentiaalisen renderöintitekniikan oppiakseen ja generoidakseen korkealaatuiset tekstuurit 3D-verkkomalleille.

c) GAN-pohjainen arkkitehtuuri: GET3D käyttää generatiivista vastakkainmallia (GAN), joka mahdollistaa nopean generoinnin koulutuksen jälkeen.

Edut:

  • Korkealaatuinen geometria ja tekstuurit
  • Nopea inference-aika
  • Suora integrointi 3D-renderöintimoottoreihin

Rajoitukset:

  • Vaatii 3D-koulutusdataa, joka voi olla niukkaa joillekin esinekategorioille

Johtopäätös

Teksti-3D AI-generointi edustaa perustavaa muutosta siinä, miten luomme ja vuorovaikutamme 3D-sisällön kanssa. Hyödyntämällä edistyneitä syväoppimistekniikoita, nämä mallit voivat tuottaa monimutkaisia, korkealaatuisia 3D-varastoja yksinkertaisista tekstikuvauksista. Kun teknologia jatkaa kehittymistään, voimme odottaa yhä monimutkaisempia ja kykenevämpiä teksti-3D-järjestelmiä, jotka vallankumouksellisesti muuttavat aloja pelaamisesta ja elokuvista tuotesuunnitteluun ja arkkitehtuuriin.

Olen viettänyt viimeiset viisi vuotta uppoutumalla kiinnostavaan koneoppimisen ja syvän oppimisen maailmaan. Minun intohimoni ja asiantuntemukseni ovat johtaneet minun osallistumiseen yli 50:een monipuoliseen ohjelmistosuunnitteluhankkeeseen, joissa on erityisesti painottunut AI/ML. Minun jatkuva uteliaisuuteni on myös ohjannut minun luontaisen kielen prosessoinnin pariin, jota haluan tutkia tarkemmin.