AI-modeller og platforme

Sådan fungerer Text-to-3D AI-generering: Meta 3D Gen, OpenAI Shap-E og mere

mm
Føj Unite.AI til dine foretrukne kilder på Google

Evnen til at generere 3D-digitale aktiver fra tekstprompts repræsenterer en af de mest spændende nyere udviklinger i AI og computergrafik. Da markedet for 3D-digitale aktiver forventes at vokse fra 28,3 milliarder dollars i 2024 til 51,8 milliarder dollars i 2029, er tekst-til-3D AI-modeller klar til at spille en stor rolle i at revolutionere indholdsskabelse på tværs af brancher som gaming, film, e-commerce og mere. Men hvordan fungerer disse AI-systemer nøjagtig? I denne artikel dykker vi dybt ned i de tekniske detaljer bag tekst-til-3D-generering.

Udfordringen ved 3D-generering

At generere 3D-aktiver fra tekst er en betydeligt mere kompleks opgave end 2D-billedegenerering. Mens 2D-billeder i virkeligheden er gitter af pixel, kræver 3D-aktiver repræsentation af geometri, teksturer, materialer og ofte animationer i tre dimensioner. Denne tilføjede dimension og kompleksitet gør genereringsopgaven meget mere udfordrende.

Nogle af de vigtigste udfordringer ved tekst-til-3D-generering inkluderer:

  • Repræsentation af 3D-geometri og struktur
  • Generering af konsistente teksturer og materialer på tværs af 3D-overfladen
  • Sikring af fysisk plausibilitet og konsistens fra multiple synsvinkler
  • Fanget af fine detaljer og global struktur samtidig
  • Generering af aktiver, der kan let renderes eller 3D-printes

For at tackle disse udfordringer udnytter tekst-til-3D-modeller flere nøgleteknologier og -teknikker.

Nøglekomponenter af tekst-til-3D-systemer

De fleste avancerede tekst-til-3D-genereringssystemer deler nogle fælles kernekomponenter:

  1. Tekstencoding: Konvertering af input-tekstprompt til en numerisk repræsentation
  2. 3D-repræsentation: En metode til at repræsentere 3D-geometri og udseende
  3. Generativ model: Den centrale AI-model til generering af 3D-aktiver
  4. Rendering: Konvertering af 3D-repræsentation til 2D-billeder til visualisering

Lad os udforske hver af disse i mere detalje.

Tekstencoding

Det første trin er at konvertere input-tekstprompt til en numerisk repræsentation, som AI-modellen kan arbejde med. Dette gøres typisk ved hjælp af store sprogmodeller som BERT eller GPT.

3D-repræsentation

Der er flere almindelige måder at repræsentere 3D-geometri i AI-modeller:

  1. Voxelgitter: 3D-arrays af værdier, der repræsenterer besættelse eller funktioner
  2. Punktskyer: Sæt af 3D-punkter
  3. Net: Vertices og flader, der definerer en overflade
  4. Implicitte funktioner: Kontinuerte funktioner, der definerer en overflade (f.eks. signed distance-funktioner)
  5. Neurale radiancefelter (NeRFs): Neurale netværk, der repræsenterer densitet og farve i 3D-rum

Hver har kompromiser i forhold til opløsning, hukommelse og genereringshastighed. Mange nyere modeller bruger implicitte funktioner eller NeRFs, da de tillader højkvalitetsresultater med rimelige beregningskrav.

For eksempel kan vi repræsentere en simpel kugle som en signed distance-funktion:

import numpy as np

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

<p># Evaluér SDF i et 3D-punkt</p>
<p>point = [0.5, 0.5, 0.5]</p>
<p>distance = sphere_sdf(*point)</p>
<p>print(f"Distance til kugleoverfladen: {distance}")</p>

Generativ model

Kernen i et tekst-til-3D-system er den generative model, der producerer 3D-repræsentationen fra tekstembedding. De fleste avancerede modeller bruger en variation af en diffusionsmodel, lignende dem, der bruges til 2D-billedegenerering.

Diffusionsmodeller fungerer ved at tilføje støj til data og derefter lære at omvende denne proces. For 3D-generering sker denne proces i rummet af den valgte 3D-repræsentation.

En forenklet pseudokode for en diffusionsmodeltræningsstep kunne se således ud:

def diffusion_training_step(model, x_0, text_embedding):</p>
<p># Eksempel på et tilfældigt tidssteg</p>
<p>t = torch.randint(0, num_timesteps, (1,))</p>

<p># Tilføj støj til input</p>
<p>noise = torch.randn_like(x_0)</p>
<p>x_t = add_noise(x_0, noise, t)</p>

<p># Forudsiger støjen</p>
<p>predicted_noise = model(x_t, t, text_embedding)</p>

<p># Beregn tab</p>
<p>loss = F.mse_loss(noise, predicted_noise)</p>

<p>return loss</p>

<p># Træningsløkke</p>
<p>for batch in dataloader:</p>
<p>x_0, text = batch</p>
<p>text_embedding = encode_text(text)</p>
<p>loss = diffusion_training_step(model, x_0, text_embedding)</p>
<p>loss.backward()</p>
<p>optimizer.step()</p>

Under generering starter vi fra ren støj og itererer derefter omvendt, betinget af tekstembedding.

Rendering

For at visualisere resultater og beregne tab under træning har vi brug for at rendre vores 3D-repræsentation til 2D-billeder. Dette gøres typisk ved hjælp af differentiable rendering-teknikker, der tillader, at grader flyder tilbage gennem renderingsprocessen.

For mesh-baserede repræsentationer kan vi bruge en rasterization-baseret renderer:

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

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

<p># Konfigurer kamera</p>
<p>cameras = pr.FoVPerspectiveCameras()</p>

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

<p>return images</p>

<p># Eksempelbrug</p>
<p>vertices = torch.rand(1, 100, 3) # Tilfældige vertices</p>
<p>faces = torch.randint(0, 100, (1, 200, 3)) # Tilfældige flader</p>
<p>rendered_images = render_mesh(vertices, faces)</p>

For implicitte repræsentationer som NeRFs bruger vi typisk ray marching-teknikker til at rendre visninger.

Sammenføjning af det hele: Tekst-til-3D-pipeline

Nu hvor vi har dækket de nøglekomponenter, lad os gå igennem, hvordan de kommer sammen i en typisk tekst-til-3D-genereringspipeline:

  1. Tekstencoding: Inputprompten encodes til en tæt vektorrepræsentation ved hjælp af en sprogmodel.
  2. Initial generering: En diffusionsmodel, betinget af tekstembedding, genererer en initial 3D-repræsentation (f.eks. en NeRF eller implicit funktion).
  3. Multi-view konsistens: Modellen render multiple visninger af den genererede 3D-aktiver og sikrer konsistens på tværs af synsvinkler.
  4. Forbedring: Yderligere netværk kan forbedre geometri, tilføje teksturer eller forbedre detaljer.
  5. Endelig output: 3D-repræsentationen konverteres til en ønsket format (f.eks. tekstureret mesh) til brug i efterfølgende applikationer.

Her er et forenklet eksempel på, hvordan dette kunne se ud i kode:

class TextTo3D(nn.Module):</p>
<p>def __init__(self):</p>
<p>super().__init__()</p>
<p>self.text_encoder = BertModel.from_pretrained('bert-base-uncased')</p>
<p>self.diffusion_model = DiffusionModel()</p>
<p>self.refiner = RefinerNetwork()</p>
<p>self.renderer = DifferentiableRenderer()</p>

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

<p># Generer initial 3D-repræsentation</p>
<p>initial_3d = self.diffusion_model(text_embedding)</p>

<p># Render multiple visninger</p>
<p>views = self.renderer(initial_3d, num_views=4)</p>

<p># Forbedr baseret på multi-view konsistens</p>
<p>refined_3d = self.refiner(initial_3d, views)</p>

<p>return refined_3d</p>

<p># Brug</p>
<p>model = TextTo3D()</p>
<p>text_prompt = "En rød sportsvogn"</p>
<p>generated_3d = model(text_prompt)</p>

Top tekst til 3D-aktiver-modeller til rådighed

3DGen – Meta

3DGen er designet til at tackle problemet med at generere 3D-indhold – såsom karakterer, rekvisitter og scener – fra tekstbeskrivelser.

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

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

3DGen understøtter fysisk-baseret rendering (PBR), der er essentiel for realistisk 3D-aktiver-relighting i virkelige applikationer. Det tillader også generativ retexturering af tidligere genererede eller kunstnerisk skabte 3D-former ved hjælp af nye tekstbeskrivelser. Pipeline-integrationen består af to kernekomponenter: Meta 3D AssetGen og Meta 3D TextureGen, der håndterer tekst-til-3D og tekst-til-tekstur-generering, henholdsvis.

Meta 3D AssetGen

Meta 3D AssetGen (Siddiqui et al., 2024) er ansvarlig for den initielle generering af 3D-aktiver fra tekstprompts. Denne komponent producerer en 3D-mesh med teksturer og PBR-materialekort på omkring 30 sekunder.

Meta 3D TextureGen

Meta 3D TextureGen (Bensadoun et al., 2024) forbedrer teksturerne genereret af AssetGen. Den kan også bruges til at generere nye teksturer for eksisterende 3D-mesh’er baseret på yderligere tekstbeskrivelser. Dette trin tager omkring 20 sekunder.

Point-E (OpenAI)

Point-E, udviklet af OpenAI, er endnu en bemærkelsesværdig tekst-til-3D-genereringsmodel. I modsætning til DreamFusion, der producerer NeRF-repræsentationer, genererer Point-E 3D-punktskyer.

Nøglefunktioner i Point-E:

a) To-trins-pipeline: Point-E genererer først en syntetisk 2D-visning ved hjælp af en tekst-til-billede-diffusionsmodel, derefter bruger den denne visning til at betinge en anden diffusionsmodel, der producerer 3D-punktskyen.

b) Effektivitet: Point-E er designet til at være beregningsmæssigt effektiv, i stand til at generere 3D-punktskyer på sekunder på en enkelt GPU.

c) Farveinformation: Modellen kan generere farvede punktskyer, der bevare både geometrisk og udseendemæssig information.

Begrænsninger:

  • Lavere fidelitet i forhold til mesh-baserede eller NeRF-baserede tilgange
  • Punktskyer kræver yderligere behandling til mange efterfølgende applikationer

Shap-E (OpenAI):

Bygget på Point-E introducerede OpenAI Shap-E, der genererer 3D-mesh’er i stedet for punktskyer. Dette adresserer nogle af begrænsningerne i Point-E, mens det fastholder beregningsmæssig effektivitet.

Nøglefunktioner i Shap-E:

a) Implicit repræsentation: Shap-E lærer at generere implicitte repræsentationer (signed distance-funktioner) af 3D-objekter.

b) Mesh-ekstraktion: Modellen bruger en differentiable implementering af marching cubes-algoritmen til at konvertere den implicitte repræsentation til en polygonal mesh.

c) Teksturgenerering: Shap-E kan også generere teksturer for 3D-mesh’er, resulterende i mere visuelt tillokkende output.

Fordele:

  • Hurtige genereringstider (sekunder til minutter)
  • Direkte mesh-output egnet til rendering og efterfølgende applikationer
  • Evne til at generere både geometri og tekstur

GET3D (NVIDIA):

GET3D, udviklet af NVIDIA (NVDA ) -forskere, er endnu en kraftfuld tekst-til-3D-genereringsmodel, der fokuserer på at producere højkvalitets-teksturerede 3D-mesh’er.

Nøglefunktioner i GET3D:

a) Eksplicit overfladerepræsentation: I modsætning til DreamFusion eller Shap-E genererer GET3D direkte eksplicit overfladerepræsentationer (mesh’er) uden intermediate implicitte repræsentationer.

b) Teksturgenerering: Modellen inkluderer en differentiable rendering-teknik til at lære og generere højkvalitets-teksturer for 3D-mesh’er.

c) GAN-baseret arkitektur: GET3D bruger en generative adversarial network (GAN)-tilgang, der tillader hurtig generering, når modellen er trænet.

Fordele:

  • Højkvalitets-geometri og teksturer
  • Hurtige inferenstider
  • Direkte integration med 3D-renderingsmotorer

Begrænsninger:

  • Kræver 3D-træningsdata, der kan være sjældne for nogle objekt-kategorier

Konklusion

Tekst-til-3D AI-generering repræsenterer en grundlæggende ændring i, hvordan vi skaber og interagerer med 3D-indhold. Ved at udnytte avancerede dybe lærings-teknikker kan disse modeller producere komplekse, højkvalitets-3D-aktiver fra simple tekstbeskrivelser. Da teknologien fortsætter med at udvikle sig, kan vi forvente at se stadig mere avancerede og kapable tekst-til-3D-systemer, der vil revolutionere brancher fra gaming og film til produkt-design og arkitektur.

Jeg har brugt de sidste fem år på at dykke ned i den fascinerende verden af Machine Learning og Deep Learning. Min passion og ekspertise har ført mig til at bidrage til over 50 forskellige software-ingeniørprojekter, med en særlig fokus på AI/ML. Min fortsatte nysgerrighed har også ført mig mod Natural Language Processing, et felt jeg er ivrig efter at udforske yderligere.