Yapay Zekâ

Metin-3D AI Oluşturma Nasıl Çalışır: Meta 3D Gen, OpenAI Shap-E ve daha fazlası

mm
Large Language and Text-to-3D Models

Metin girdileri üzerinden 3D dijital varlıklar oluşturabilme yetisi, AI ve bilgisayar grafikleri alanındaki en heyecan verici son gelişmelerden birini temsil etmektedir. 3D dijital varlık pazarının 2024’te 28.3 milyar dolardan 2029’a kadar 51.8 milyar dolara çıkması öngörülürken, metin-3D AI modelleri, oyun, film, e-ticaret ve daha birçok endüstriyi devrimleştirme konusunda önemli bir rol oynamaya hazırlanıyor. Ancak bu AI sistemleri tam olarak nasıl çalışıyor? Bu makalede, metin-3D oluşturma arkasındaki teknik ayrıntılara derinlemesine bir bakış atacağız.

3D Oluşturma Zorluğu

Metinlerden 3D varlıklar oluşturmak, 2D görüntü oluşturmaktan çok daha karmaşık bir görevdir. 2D görüntüler temel olarak piksel grafiklerken, 3D varlıklar geometri, dokular, malzemeler ve genellikle animasyonları üç boyutlu uzayda temsil etmeyi gerektirir. Bu ek boyut ve karmaşıklık, oluşturma görevini çok daha zor hale getirir.

Metin-3D oluşturma中的 bazı ana zorluklar şunlardır:

  • 3D geometri ve yapının temsil edilmesi
  • 3D yüzey boyunca tutarlı dokular ve malzemelerin oluşturulması
  • Fiziksel tutarlılık ve çoklu görüş açısı tutarlılığının sağlanması
  • İnce detayların ve küresel yapının aynı anda yakalanması
  • Renderlenebilecek veya 3D yazdırılabilir varlıkların oluşturulması

Bu zorlukları aşmak için, metin-3D modelleri birkaç ana teknoloji ve tekniği kullanır.

Metin-3D Sistemlerinin Ana Bileşenleri

Çoğu güncel metin-3D oluşturma sistemi birkaç temel bileşenden oluşur:

  1. Metin kodlama: Girdi metin girdisinin sayısal bir temsiline dönüştürülmesi
  2. 3D temsil: 3D geometri ve görünümün temsil edilmesi için bir yöntem
  3. Oluşturucu model: 3D varlık oluşturan temel AI modeli
  4. Renderleme: 3D temsilin 2D görüntülere dönüştürülmesi

Her birini daha ayrıntılı olarak inceleyelim.

Metin Kodlama

İlk adım, girdi metin girdisini AI modelinin çalışabileceği bir sayısal temsil’e dönüştürmektir. Bu genellikle büyük dil modelleri gibi BERT veya GPT kullanılarak yapılır.

3D Temsil

AI modellerinde 3D geometriyi temsil etmek için beberapa ortak yöntem vardır:

  1. Voxel ızgaraları: 3D diziler olarak işgal veya özelliklerin temsil edilmesi
  2. Nokta bulutları: 3D noktaların kümesi
  3. Meshler: Yüzey tanımlayan köşeler ve yüzler
  4. İmplicit fonksiyonlar: Sürekli fonksiyonlar olarak yüzey tanımlama (örneğin, imzalı mesafe fonksiyonları)
  5. Nöral radyans alanları (NeRF’ler): 3D uzayda yoğunluk ve renk temsil eden nöral ağlar

Her birinin çözünürlük, bellek kullanımı ve oluşturma kolaylığı açısından trade-off’ları vardır. Çoğu güncel model, yüksek kaliteli sonuçlar için makul hesaplamalı gereksinimlere izin veren implicit fonksiyonları veya NeRF’leri kullanır.

Örneğin, basit bir küreyi imzalı bir mesafe fonksiyonu olarak temsil edebiliriz:

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># 3D noktada SDF değerini hesapla
point = [0.5, 0.5, 0.5]
distance = sphere_sdf(*point)
print(f&quot;Küreye olan mesafe: {distance}&quot;)

Oluşturucu Model

Metin-3D sisteminin çekirdeği, metin girdisinden 3D temsil oluşturan AI modelidir. Çoğu güncel model, 2D görüntü oluşturmada kullanılanlara benzer bir difüzyon modeli varyasyonunu kullanır.

Difüzyon modelleri, verilere yavaş yavaş gürültü ekleyerek ve sonra bu işlemi tersine çevirmeyi öğrenerek çalışır. 3D oluşturma için bu işlem, seçilen 3D temsil uzayında gerçekleşir.

Basitleştirilmiş bir difüzyon modeli eğitim adımının pseudokodu şöyle olabilir:

def diffusion_training_step(model, x_0, text_embedding):
# Rastgele bir zaman adımını örnekleyin
t = torch.randint(0, num_timesteps, (1,))

<p># Girdiye gürültü ekleyin
noise = torch.randn_like(x_0)
x_t = add_noise(x_0, noise, t)</p>

<p># Gürültüyü tahmin edin
predicted_noise = model(x_t, t, text_embedding)</p>

<p># Kayıp hesaplayın
loss = F.mse_loss(noise, predicted_noise)</p>

return loss

<p># Eğitim döngüsü
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()

Oluşturma sırasında, saf gürültüden başlayarak, metin girdisine bağlı olarak iteratif olarak gürültüyü temizleriz.

Renderleme

Sonuçları görselleştirmek ve eğitim sırasında kayıpları hesaplamak için, 3D temsilimizi 2D görüntülere dönüştürmeliyiz. Bu genellikle, renderleme过程ine geri geri aktarılan gradientlere izin veren diferansiyellenebilir renderleme teknikleri kullanılarak yapılır.

Mesh tabanlı temsil için, bir rasterization tabanlı renderleyici kullanabiliriz:

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

<p>def render_mesh(vertices, faces, image_size=256):
# Bir renderleyici oluşturun
renderer = pr.MeshRenderer(
rasterizer=pr.MeshRasterizer(),
shader=pr.SoftPhongShader()
)</p>

<p># Kamera ayarlarını yapın
cameras = pr.FoVPerspectiveCameras()</p>

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

return images

<p># Örnek kullanım
vertices = torch.rand(1, 100, 3) # Rastgele köşeler
faces = torch.randint(0, 100, (1, 200, 3)) # Rastgele yüzler
rendered_images = render_mesh(vertices, faces)

İmplicit temsil gibi NeRF’ler için genellikle ışın yürüyüşü teknikleri kullanılır.

Her Şeyi Bir Araya Getirme: Metin-3D Pipeline

Şimdi, ana bileşenleri kapsamlı bir şekilde ele aldığımıza göre, tipik bir metin-3D oluşturma pipeline’nin nasıl çalıştığını yürüyelim:

  1. Metin kodlama: Girdi metni, bir dil modeli kullanılarak yoğun bir vektör temsiline dönüştürülür.
  2. İlk oluşturma: Bir difüzyon modeli, metin girdisine bağlı olarak, bir 3D temsil (örneğin, bir NeRF veya implicit fonksiyon) oluşturur.
  3. Çoklu görüş tutarlılığı: Model, oluşturulan 3D varlığın birden fazla görüşünü renderler ve çeşitli görüş açısı tutarlılığını sağlar.
  4. İyileştirme: Ek ağlar, geometriyi, dokuları veya detayları iyileştirebilir.
  5. Sonuç: 3D temsil, istenen formata (örneğin, tekstürlü mesh) dönüştürülür ve aşağı akış uygulamalarında kullanılır.

Burada basitleştirilmiş bir örnek:

class TextTo3D(nn.Module):
def __init__(self):
super().__init__()
self.text_encoder = BertModel.from_pretrained(&#039;bert-base-uncased&#039;)
self.diffusion_model = DiffusionModel()
self.refiner = RefinerNetwork()
self.renderer = DifferentiableRenderer()

<p>def forward(self, text_prompt):
# Metni kodlayın
text_embedding = self.text_encoder(text_prompt).last_hidden_state.mean(dim=1)</p>

<p># İlk 3D temsilini oluşturun
initial_3d = self.diffusion_model(text_embedding)</p>

<p># Birden fazla görüşü renderleyin
views = self.renderer(initial_3d, num_views=4)</p>

<p># Çoğu görüş tutarlılığına göre iyileştirin
refined_3d = self.refiner(initial_3d, views)</p>

return refined_3d

<p># Kullanım
model = TextTo3D()
text_prompt = &quot;Kırmızı bir spor araba&quot;
generated_3d = model(text_prompt)

En İyi Metin-3D Varlık Modelleri

3DGen – Meta

3DGen, karakterler, nesneler ve sahneler gibi 3D içeriğini metin girdilerinden oluşturmak için tasarlanmıştır.

Büyük Dil ve Metin-3D Modelleri - 3d-gen

Büyük Dil ve Metin-3D Modelleri – 3d-gen

3DGen, gerçekçi 3D varlık yeniden aydınlatması için gerekli olan fiziksel tabanlı renderleme (PBR) desteğini sağlar. Ayrıca, önceden oluşturulan veya sanatçı tarafından oluşturulan 3D şekillerin yeni metin girdileri kullanılarak yeniden dokulandırılmasını sağlar. Pipeline, metin-3D ve metin-doku oluşturma işlemlerini sırasıyla gerçekleştiren iki temel bileşenden oluşur: Meta 3D AssetGen ve Meta 3D TextureGen.

Meta 3D AssetGen

Meta 3D AssetGen (Siddiqui et al., 2024), metin girdilerinden 3D varlıkların ilk oluşturulmasından sorumludur. Bu bileşen, yaklaşık 30 saniyede, tekstürlü bir 3D mesh ve PBR malzeme haritaları üretir.

Meta 3D TextureGen

Meta 3D TextureGen (Bensadoun et al., 2024), AssetGen tarafından oluşturulan dokuları iyileştirir. Ayrıca, önceden oluşturulan 3D meshlerin yeni metin girdilerine dayalı olarak yeni dokular oluşturulmasını sağlar. Bu aşama yaklaşık 20 saniye sürer.

Point-E (OpenAI)

Point-E, OpenAI tarafından geliştirilmiştir ve başka bir önemli metin-3D oluşturma modelidir. DreamFusion’un NeRF temsilini üretirken, Point-E 3D nokta bulutları üretir.

Point-E’nin ana özellikleri:

a) İki aşamalı pipeline: Point-E önce, bir metin-görüntü difüzyon modeli kullanarak sentetik bir 2D görünümü üretir, ardından bu görüntüyü, 3D nokta bulutunu üretecek ikinci bir difüzyon modeli için koşullandırır.

b) Verimlilik: Point-E, tek bir GPU’da saniyeler içinde 3D nokta bulutları üretebilecek şekilde tasarlanmıştır.

c) Renk bilgisi: Model, geometrik ve görünüm bilgilerini koruyarak renklendirilmiş nokta bulutları üretebilir.

Sınırlamalar:

  • Mesh tabanlı veya NeRF tabanlı yaklaşımlara kıyasla daha düşük bir doğruluk
  • Nokta bulutları, çoğu aşağı akış uygulaması için ek işleme gerektirir

Shap-E (OpenAI):

Point-E’yi temel alarak, OpenAI Shap-Eyi tanıttı, bu da 3D meshler üretir. Bu, Point-E’nin bazı sınırlamalarını giderir ve hesaplama verimliliğini korur.

Shap-E’nin ana özellikleri:

a) İmplicit temsil: Shap-E, 3D nesnelerin implicit temsilini (imzalı mesafe fonksiyonları) öğrenir.

b) Mesh çıkarma: Model, marching cubes algoritmasının diferansiyellenebilir bir uygulamasını kullanarak implicit temsili bir poligonal mesh’e dönüştürür.

c) Doku oluşturma: Shap-E, 3D meshler için dokular da üretebilir, böylece daha görsel olarak hoş sonuçlar elde edilir.

Avantajlar:

  • Hızlı oluşturma süreleri (saniyeler veya dakikalar)
  • Renderleme ve aşağı akış uygulamaları için uygun doğrudan mesh çıkışı
  • Hem geometri hem de doku oluşturma yeteneği

GET3D (NVIDIA):

GET3D, NVIDIA araştırmacıları tarafından geliştirilmiştir ve yüksek kaliteli tekstürlü 3D meshler üretebilen başka bir güçlü metin-3D oluşturma modelidir.

GET3D’nin ana özellikleri:

a) Explicit yüzey temsili: DreamFusion veya Shap-E’nin aksine, GET3D doğrudan explicit yüzey temsilini (meshleri) oluşturur, aradaki implicit temsil kullanmaz.

b) Doku oluşturma: Model, yüksek kaliteli dokular öğrenmek ve oluşturmak için diferansiyellenebilir bir renderleme tekniğini içerir.

c) GAN tabanlı mimari: GET3D, hızlı oluşturma için eğitilen bir generatif karşıt ağ (GAN) yaklaşımını kullanır.

Avantajlar:

  • Yüksek kaliteli geometri ve dokular
  • Hızlı çıkarım süreleri
  • 3D renderleme motorlarına doğrudan entegrasyon

Sınırlamalar:

  • Bazı nesne kategorileri için 3D eğitim verilerinin kıtlığı

Sonuç

Metin-3D AI oluşturma, 3D içeriği oluşturma ve etkileşim şeklimizi temel olarak değiştiren bir teknolojidir. Gelişmiş derin öğrenme tekniklerini kullanarak, bu modeller, basit metin girdilerinden karmaşık, yüksek kaliteli 3D varlıklar üretebilir. Teknoloji devam ettikçe, giderek daha sofistike ve yetenekli metin-3D sistemlerine tanık olacağız ve bunlar, oyun, film, ürün tasarımı ve mimari gibi endüstrileri devrimleştirerek değiştirecektir.

Son beş yıldır Makine Öğrenimi ve Derin Öğrenme dünyasına kendimi adamış bulunuyorum. Tutkum ve uzmanlığım, özellikle AI/ML'ye odaklanarak 50'den fazla çeşitli yazılım mühendisliği projesine katkıda bulunmama yol açtı. Süregelen meraklılığım da beni Doğal Dil İşleme alanına yöneltti, bu alana daha da derinlemesine girmeye hevesliyim.