Vernetzen Sie sich mit uns

KĂĽnstliche Intelligenz

So funktioniert die Text-zu-3D-KI-Generierung: Meta 3D Gen, OpenAI Shap-E und mehr

mm
GroĂźe Sprach- und Text-zu-3D-Modelle

Die Möglichkeit, 3D-Digital-Assets aus Texteingabeaufforderungen zu generieren, stellt eine der spannendsten Entwicklungen in der KI und Computergrafik dar. Da der Markt für 3D-Digital-Assets voraussichtlich von 28.3 Mrd. USD in 2024 bis 51.8 Mrd. USD in 2029, Text-zu-3D-KI-Modelle werden voraussichtlich eine wichtige Rolle bei der Revolutionierung der Inhaltserstellung in Branchen wie Gaming, Film, E-Commerce und mehr spielen. Aber wie genau funktionieren diese KI-Systeme? In diesem Artikel tauchen wir tief in die technischen Details hinter der Text-zu-3D-Generierung ein.

Die Herausforderung der 3D-Generierung

Das Generieren von 3D-Assets aus Text ist eine wesentlich komplexere Aufgabe als das Generieren von 2D-Bildern. Während 2D-Bilder im Wesentlichen Pixelraster sind, müssen bei 3D-Assets Geometrie, Texturen, Materialien und häufig Animationen im dreidimensionalen Raum dargestellt werden. Diese zusätzliche Dimensionalität und Komplexität macht die Generierungsaufgabe viel anspruchsvoller.

Zu den wichtigsten Herausforderungen bei der Text-zu-3D-Generierung gehören:

  • Darstellung von 3D-Geometrie und Struktur
  • Erzeugen einheitlicher Texturen und Materialien auf der gesamten 3D-Oberfläche
  • Sicherstellung der physikalischen Plausibilität und Kohärenz aus mehreren Blickwinkeln
  • Gleichzeitige Erfassung feiner Details und globaler Strukturen
  • Erstellen von Assets, die einfach gerendert oder im 3D-Druckverfahren gedruckt werden können

Um diese Herausforderungen zu bewältigen, nutzen Text-zu-3D-Modelle mehrere wichtige Technologien und Techniken.

SchlĂĽsselkomponenten von Text-zu-3D-Systemen

Die meisten modernen Systeme zur Text-zu-3D-Generierung verfĂĽgen ĂĽber einige gemeinsame Kernkomponenten:

  1. TextentschlĂĽsselung: Umwandeln der Eingabeaufforderung in eine numerische Darstellung
  2. 3D-Darstellung: Eine Methode zur Darstellung von 3D-Geometrie und Erscheinungsbild
  3. Generatives Modell: Das zentrale KI-Modell zur Generierung des 3D-Assets
  4. Wiedergabe: Konvertieren der 3D-Darstellung in 2D-Bilder zur Visualisierung

Lassen Sie uns jeden einzelnen Punkt genauer untersuchen.

TextentschlĂĽsselung

Der erste Schritt besteht darin, die Eingabeaufforderung in eine numerische Darstellung umzuwandeln, mit der das KI-Modell arbeiten kann. Dies geschieht normalerweise mithilfe groĂźer Sprachmodelle wie BERT oder GPT.

3D Darstellung

Es gibt mehrere gängige Möglichkeiten, 3D-Geometrie in KI-Modellen darzustellen:

  1. Voxelgitter: 3D-Arrays von Werten, die Belegung oder Merkmale darstellen
  2. Punktwolken: Sätze von 3D-Punkten
  3. Meshes: Eckpunkte und Flächen, die eine Oberfläche definieren
  4. Implizite Funktionen: Kontinuierliche Funktionen, die eine Oberfläche definieren (z. B. vorzeichenbehaftete Distanzfunktionen)
  5. Neuronale Strahlungsfelder (NeRFs): Neuronale Netzwerke zur Darstellung von Dichte und Farbe im 3D-Raum

Bei jedem dieser Modelle gibt es Kompromisse in Bezug auf Auflösung, Speichernutzung und einfache Generierung. Viele neuere Modelle verwenden implizite Funktionen oder NeRFs, da sie qualitativ hochwertige Ergebnisse bei angemessenem Rechenaufwand ermöglichen.

Beispielsweise können wir eine einfache Kugel als vorzeichenbehaftete Distanzfunktion darstellen:

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}")

Generatives Modell

Der Kern eines Text-zu-3D-Systems ist das generative Modell, das die 3D-Darstellung aus dem Texteinbettung. Die meisten modernen Modelle verwenden eine Variante eines Diffusionsmodells, ähnlich denen, die bei der 2D-Bilderzeugung verwendet werden.

Diffusionsmodelle funktionieren, indem sie den Daten nach und nach Rauschen hinzufügen und dann lernen, diesen Prozess umzukehren. Bei der 3D-Generierung findet dieser Prozess im Raum der gewählten 3D-Darstellung statt.

Ein vereinfachter Pseudocode für einen Trainingsschritt eines Diffusionsmodells könnte wie folgt aussehen:

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

Bei der Generierung beginnen wir mit reinem Rauschen und führen eine iterative Rauschminderung durch, abhängig von der Texteinbettung.

Wiedergabe

Um Ergebnisse zu visualisieren und Verluste während des Trainings zu berechnen, müssen wir unsere 3D-Darstellung in 2D-Bilder umwandeln. Dies geschieht normalerweise mithilfe differenzierbarer Rendering-Techniken, die es ermöglichen, dass Gradienten durch den Rendering-Prozess zurückfließen.

Für meshbasierte Darstellungen könnten wir einen auf Rasterung basierenden Renderer verwenden:

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)

FĂĽr implizite Darstellungen wie NeRFs verwenden wir normalerweise Ray-Marching-Techniken zum Rendern von Ansichten.

Alles zusammenfĂĽgen: Die Text-zu-3D-Pipeline

Nachdem wir nun die wichtigsten Komponenten behandelt haben, gehen wir durch, wie sie in einer typischen Text-zu-3D-Generierungspipeline zusammenkommen:

  1. TextentschlĂĽsselung: Die Eingabeaufforderung wird mithilfe eines Sprachmodells in eine dichte Vektordarstellung kodiert.
  2. Erste Generation: Ein Diffusionsmodell, das von der Texteinbettung abhängig ist, generiert eine anfängliche 3D-Darstellung (z. B. eine NeRF oder implizite Funktion).
  3. Konsistenz mehrerer Ansichten: Das Modell rendert mehrere Ansichten des generierten 3D-Assets und stellt die Konsistenz ĂĽber alle Ansichtspunkte hinweg sicher.
  4. Raffinesse: Zusätzliche Netzwerke können die Geometrie verfeinern, Texturen hinzufügen oder Details verbessern.
  5. EndgĂĽltige Ausgabe: Die 3D-Darstellung wird zur Verwendung in nachgelagerten Anwendungen in ein gewĂĽnschtes Format (z. B. strukturiertes Netz) konvertiert.

Hier ist ein vereinfachtes Beispiel, wie dies im Code aussehen könnte:

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-zu-3D-Asset-Modelle verfĂĽgbar

3DGen – Meta

3DGen wurde entwickelt, um das Problem der Generierung von 3D-Inhalten – wie Charakteren, Requisiten und Szenen – aus Textbeschreibungen zu lösen.

GroĂźe Sprach- und Text-zu-3D-Modelle - 3d-gen

Große Sprach- und Text-zu-3D-Modelle – 3D-Generation

3DGen unterstützt physikalisch basiertes Rendering (PBR), das für eine realistische Neubeleuchtung von 3D-Assets in realen Anwendungen unerlässlich ist. Es ermöglicht außerdem die generative Neutexturierung zuvor generierter oder vom Künstler erstellter 3D-Formen mithilfe neuer Texteingaben. Die Pipeline integriert zwei Kernkomponenten: Meta 3D AssetGen und Meta 3D TextureGen, die jeweils die Text-zu-3D- und Text-zu-Textur-Generierung handhaben.

Meta 3D AssetGen

Meta 3D AssetGen (Siddiqui et al., 2024) ist für die anfängliche Generierung von 3D-Assets aus Textaufforderungen verantwortlich. Diese Komponente erstellt in etwa 3 Sekunden ein 30D-Netz mit Texturen und PBR-Materialkarten.

Meta 3D TextureGen

Meta 3D TextureGen (Bensadoun et al., 2024) verfeinert die von AssetGen generierten Texturen. Es kann auch verwendet werden, um basierend auf zusätzlichen Textbeschreibungen neue Texturen für vorhandene 3D-Netze zu generieren. Dieser Schritt dauert ungefähr 20 Sekunden.

Punkt-E (OpenAI)

Point-E, entwickelt von OpenAIist ein weiteres bemerkenswertes Modell zur Generierung von Text in 3D. Im Gegensatz zu DreamFusion, das NeRF-Darstellungen erstellt, generiert Point-E 3D-Punktwolken.

Hauptmerkmale von Point-E:

a) Zweistufige Pipeline: Point-E generiert zunächst eine synthetische 2D-Ansicht mithilfe eines Text-Bild-Diffusionsmodells und verwendet dieses Bild dann, um ein zweites Diffusionsmodell zu konditionieren, das die 3D-Punktwolke erzeugt.

b) Wirkungsgrad: Point-E ist auf rechnerische Effizienz ausgelegt und kann in Sekundenschnelle 3D-Punktwolken auf einer einzigen GPU generieren.

c) Farbinformationen: Das Modell kann farbige Punktwolken erzeugen, wobei sowohl geometrische als auch Erscheinungsinformationen erhalten bleiben.

Einschränkungen:

  • Geringere Wiedergabetreue im Vergleich zu Mesh-basierten oder NeRF-basierten Ansätzen
  • Punktwolken erfordern fĂĽr viele nachgelagerte Anwendungen eine zusätzliche Verarbeitung

Shap-E (OpenAI):

Aufbauend auf Point-E führte OpenAI Shap-E, das 3D-Netze anstelle von Punktwolken generiert. Dadurch werden einige der Einschränkungen von Point-E behoben, während die Rechenleistung erhalten bleibt.

Hauptmerkmale von Shap-E:

a) Implizite Darstellung: Shap-E lernt, implizite Darstellungen (vorzeichenbehaftete Distanzfunktionen) von 3D-Objekten zu generieren.

b) Netzextraktion: Das Modell verwendet eine differenzierbare Implementierung des Marching-Cubes-Algorithmus, um die implizite Darstellung in ein polygonales Netz umzuwandeln.

c) Texturgenerierung: Shap-E kann auch Texturen fĂĽr die 3D-Netze generieren, was zu optisch ansprechenderen Ergebnissen fĂĽhrt.

Vorteile:

  • Schnelle Generierungszeiten (Sekunden bis Minuten)
  • Direkte Mesh-Ausgabe, geeignet fĂĽr Rendering und nachgelagerte Anwendungen
  • Möglichkeit, sowohl Geometrie als auch Textur zu generieren

GET3D (NVIDIA):

GET3D, entwickelt von NVIDIA-Forschern, ist ein weiteres leistungsstarkes Modell zur Text-zu-3D-Generierung, das sich auf die Erstellung hochwertiger strukturierter 3D-Netze konzentriert.

Hauptmerkmale von GET3D:

a) Explizite Oberflächendarstellung: Im Gegensatz zu DreamFusion oder Shap-E generiert GET3D direkt explizite Oberflächendarstellungen (Netze) ohne implizite Zwischendarstellungen.

b) Texturgenerierung: Das Modell enthält eine differenzierbare Rendering-Technik zum Erlernen und Generieren hochwertiger Texturen für die 3D-Netze.

c) GAN-basierte Architektur: GET3D verwendet einen GAN-Ansatz (Generative Adversarial Network), der eine schnelle Generierung ermöglicht, sobald das Modell trainiert ist.

Vorteile:

  • Hochwertige Geometrie und Texturen
  • Schnelle Inferenzzeiten
  • Direkte Integration mit 3D-Rendering-Engines

Einschränkungen:

  • Erfordert 3D-Trainingsdaten, die fĂĽr einige Objektkategorien knapp sein können

Fazit

Die Text-to-3D-KI-Generierung stellt einen grundlegenden Wandel in der Art und Weise dar, wie wir 3D-Inhalte erstellen und mit ihnen interagieren. Durch den Einsatz fortschrittlicher Deep-Learning-Techniken können diese Modelle aus einfachen Textbeschreibungen komplexe, hochwertige 3D-Assets erstellen. Da sich die Technologie weiterentwickelt, können wir mit immer ausgefeilteren und leistungsfähigeren Text-to-3D-Systemen rechnen, die Branchen von Gaming und Film bis hin zu Produktdesign und Architektur revolutionieren werden.

Ich habe die letzten fünf Jahre damit verbracht, in die faszinierende Welt des maschinellen Lernens und des Deep Learning einzutauchen. Meine Leidenschaft und mein Fachwissen haben dazu geführt, dass ich an über 50 verschiedenen Software-Engineering-Projekten mitgewirkt habe, mit besonderem Schwerpunkt auf KI/ML. Meine anhaltende Neugier hat mich auch zur Verarbeitung natürlicher Sprache geführt, einem Bereich, den ich gerne weiter erforschen möchte.