Modelos y plataformas de IA

Cómo funciona la generación de 3D de AI de texto a 3D: Meta 3D Gen, OpenAI Shap-E y más

mm
Añade Unite.AI a tus fuentes preferidas en Google

La capacidad de generar activos digitales 3D a partir de descripciones de texto representa uno de los desarrollos más emocionantes recientes en IA y gráficos por computadora. A medida que el mercado de activos digitales 3D se espera que crezca de $28.3 mil millones en 2024 a $51.8 mil millones para 2029, los modelos de IA de texto a 3D están en condiciones de desempeñar un papel importante en la revolución de la creación de contenido en industrias como los juegos, el cine, el comercio electrónico y más. Pero, ¿cómo funcionan exactamente estos sistemas de IA? En este artículo, nos sumergiremos en los detalles técnicos detrás de la generación de 3D de texto.

El desafío de la generación 3D

Generar activos 3D a partir de texto es una tarea significativamente más compleja que la generación de imágenes 2D. Mientras que las imágenes 2D son esencialmente cuadrículas de píxeles, los activos 3D requieren representar geometría, texturas, materiales y, a menudo, animaciones en espacio tridimensional. Esta dimensionalidad y complejidad adicionales hacen que la tarea de generación sea mucho más desafiante.

Algunos desafíos clave en la generación de texto a 3D incluyen:

  • Representar la geometría y la estructura 3D
  • Generar texturas y materiales consistentes en toda la superficie 3D
  • Garantizar la coherencia y la plausibilidad física desde múltiples puntos de vista
  • Capturar detalles finos y estructura global simultáneamente
  • Generar activos que puedan ser renderizados o impresos en 3D fácilmente

Para abordar estos desafíos, los modelos de texto a 3D aprovechan varias tecnologías y técnicas clave.

Componentes clave de los sistemas de texto a 3D

La mayoría de los sistemas de generación de texto a 3D de vanguardia comparten algunos componentes básicos:

  1. Codificación de texto: Convertir la descripción de texto de entrada en una representación numérica
  2. Representación 3D: Un método para representar la geometría y la apariencia 3D
  3. Modelo generativo: El modelo de IA central para generar el activo 3D
  4. Renderizado: Convertir la representación 3D en imágenes 2D para visualización

Exploraremos cada uno de estos en más detalle.

Codificación de texto

El primer paso es convertir la descripción de texto de entrada en una representación numérica que el modelo de IA pueda procesar. Esto se hace típicamente utilizando modelos de lenguaje grande como BERT o GPT.

Representación 3D

Hay varias formas comunes de representar la geometría 3D en los modelos de IA:

  1. Rejillas de voxel: Matrices 3D de valores que representan la ocupación o las características
  2. Nubes de puntos: Conjuntos de puntos 3D
  3. Mallas: Vértices y caras que definen una superficie
  4. Funciones implícitas: Funciones continuas que definen una superficie (por ejemplo, funciones de distancia firmada)
  5. Campos de radiación neural (NeRFs): Redes neuronales que representan la densidad y el color en el espacio 3D

Cada una tiene compensaciones en términos de resolución, uso de memoria y facilidad de generación. Muchos modelos recientes utilizan funciones implícitas o NeRFs, ya que permiten resultados de alta calidad con requisitos computacionales razonables.

Por ejemplo, podemos representar una esfera simple como una función de distancia firmada:

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># Evaluar SDF en un punto 3D</p>
<p>point = [0.5, 0.5, 0.5]</p>
<p>distance = sphere_sdf(*point)</p>
<p>print(f"Distancia a la superficie de la esfera: {distance}")</p>

Modelo generativo

El núcleo de un sistema de texto a 3D es el modelo generativo que produce la representación 3D a partir de la incrustación de texto. La mayoría de los modelos de vanguardia utilizan alguna variante de un modelo de difusión, similar a los utilizados en la generación de imágenes 2D.

Los modelos de difusión funcionan agregando gradualmente ruido a los datos y luego aprendiendo a revertir este proceso. Para la generación 3D, este proceso ocurre en el espacio de la representación 3D elegida.

Un pseudocódigo simplificado para un paso de entrenamiento de un modelo de difusión podría parecerse a:

def diffusion_training_step(model, x_0, text_embedding):</p>
<p># Muestrear un tiempo de paso aleatorio</p>
<p>t = torch.randint(0, num_timesteps, (1,))</p>

<p># Agregar ruido a la entrada</p>
<p>noise = torch.randn_like(x_0)</p>
<p>x_t = add_noise(x_0, noise, t)</p>

<p># Predecir el ruido</p>
<p>predicted_noise = model(x_t, t, text_embedding)</p>

<p># Computar la pérdida</p>
<p>loss = F.mse_loss(noise, predicted_noise)</p>

<p>return loss</p>

<p># Bucle de entrenamiento</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>

Durante la generación, comenzamos desde ruido puro y denoisificamos iterativamente, condicionado por la incrustación de texto.

Renderizado

Para visualizar los resultados y computar pérdidas durante el entrenamiento, necesitamos renderizar nuestra representación 3D a imágenes 2D. Esto se hace típicamente utilizando técnicas de renderizado diferenciable que permiten que los gradientes fluyan hacia atrás a través del proceso de renderizado.

Para representaciones basadas en mallas, podríamos utilizar un renderizador basado en rasterización:

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

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

<p># Configurar cámara</p>
<p>cameras = pr.FoVPerspectiveCameras()</p>

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

<p>return images</p>

<p># Uso de ejemplo</p>
<p>vertices = torch.rand(1, 100, 3) # Vértices aleatorios</p>
<p>faces = torch.randint(0, 100, (1, 200, 3)) # Caras aleatorias</p>
<p>rendered_images = render_mesh(vertices, faces)</p>

Para representaciones implícitas como NeRFs, típicamente se utilizan técnicas de marcha de rayos para renderizar vistas.

Uniendo todo: La tubería de texto a 3D

Ahora que hemos cubierto los componentes clave, veamos cómo se unen en una tubería típica de generación de texto a 3D:

  1. Codificación de texto: La descripción de texto de entrada se codifica en una representación vectorial densa utilizando un modelo de lenguaje.
  2. Generación inicial: Un modelo de difusión, condicionado por la incrustación de texto, genera una representación 3D inicial (por ejemplo, un NeRF o una función implícita).
  3. Coherencia de varias vistas: El modelo renderiza múltiples vistas del activo 3D generado y garantiza la coherencia entre los puntos de vista.
  4. Afinamiento: Las redes adicionales pueden afinar la geometría, agregar texturas o mejorar los detalles.
  5. Salida final: La representación 3D se convierte en un formato deseado (por ejemplo, malla texturizada) para su uso en aplicaciones posteriores.

Aquí hay un ejemplo simplificado de cómo podría parecerse en código:

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># Codificar texto</p>
<p>text_embedding = self.text_encoder(text_prompt).last_hidden_state.mean(dim=1)</p>

<p># Generar representación 3D inicial</p>
<p>initial_3d = self.diffusion_model(text_embedding)</p>

<p># Renderizar múltiples vistas</p>
<p>views = self.renderer(initial_3d, num_views=4)</p>

<p># Afinar basado en la coherencia de varias vistas</p>
<p>refined_3d = self.refiner(initial_3d, views)</p>

<p>return refined_3d</p>

<p># Uso</p>
<p>model = TextTo3D()</p>
<p>text_prompt = "Un coche rojo deportivo"</p>
<p>generated_3d = model(text_prompt)</p>

Top Text to 3d Asset Models Avaliable

3DGen – Meta

3DGen está diseñado para abordar el problema de generar contenido 3D, como personajes, objetos y escenas, a partir de descripciones de texto.

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

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

3DGen admite renderizado basado en física (PBR), esencial para la iluminación realista de activos 3D en aplicaciones del mundo real. También permite la generación de texturas de activos 3D previamente generados o creados por artistas utilizando nuevas descripciones de texto. La tubería integra dos componentes principales: Meta 3D AssetGen y Meta 3D TextureGen, que manejan la generación de texto a 3D y la generación de texturas, respectivamente.

Meta 3D AssetGen

Meta 3D AssetGen (Siddiqui et al., 2024) es responsable de la generación inicial de activos 3D a partir de descripciones de texto. Este componente produce una malla 3D con texturas y mapas de materiales PBR en aproximadamente 30 segundos.

Meta 3D TextureGen

Meta 3D TextureGen (Bensadoun et al., 2024) afina las texturas generadas por AssetGen. También se puede utilizar para generar nuevas texturas para mallas 3D existentes basadas en descripciones de texto adicionales. Esta etapa tarda aproximadamente 20 segundos.

Point-E (OpenAI)

Point-E, desarrollado por OpenAI, es otro modelo notable de generación de texto a 3D. A diferencia de DreamFusion, que produce representaciones NeRF, Point-E genera nubes de puntos 3D.

Características clave de Point-E:

a) Tubería de dos etapas: Point-E primero genera una vista sintética 2D utilizando un modelo de difusión de texto a imagen, luego utiliza esta imagen para condicionar un segundo modelo de difusión que produce la nube de puntos 3D.

b) Eficiencia: Point-E está diseñado para ser computacionalmente eficiente, capaz de generar nubes de puntos 3D en segundos en una sola GPU.

c) Información de color: El modelo puede generar nubes de puntos coloreados, preservando tanto la geometría como la información de apariencia.

Limitaciones:

  • Fidelidad más baja en comparación con los enfoques basados en mallas o NeRF
  • Las nubes de puntos requieren procesamiento adicional para muchas aplicaciones posteriores

Shap-E (OpenAI):

Basándose en Point-E, OpenAI introdujo Shap-E, que genera mallas 3D en lugar de nubes de puntos. Esto aborda algunas de las limitaciones de Point-E mientras mantiene la eficiencia computacional.

Características clave de Shap-E:

a) Representación implícita: Shap-E aprende a generar representaciones implícitas (funciones de distancia firmada) de objetos 3D.

b) Extracción de malla: El modelo utiliza una implementación diferenciable del algoritmo de marching cubes para convertir la representación implícita en una malla poligonal.

c) Generación de texturas: Shap-E también puede generar texturas para las mallas 3D, lo que resulta en salidas visualmente más atractivas.

Ventajas:

  • Tiempo de generación rápido (segundos a minutos)
  • Salida de malla directa adecuada para renderizado y aplicaciones posteriores
  • Capacidad de generar geometría y textura

GET3D (NVIDIA):

GET3D, desarrollado por investigadores de NVIDIA (NVDA ), es otro modelo poderoso de generación de texto a 3D que se centra en producir mallas 3D texturizadas de alta calidad.

Características clave de GET3D:

a) Representación de superficie explícita: A diferencia de DreamFusion o Shap-E, GET3D genera representaciones de superficie explícitas (mallas) sin representaciones implícitas intermedias.

b) Generación de texturas: El modelo incluye una técnica de renderizado diferenciable para aprender y generar texturas de alta calidad para las mallas 3D.

c) Arquitectura basada en GAN: GET3D utiliza un enfoque de red generativa adversaria, lo que permite tiempos de generación rápidos una vez entrenado el modelo.

Ventajas:

  • Geometría y texturas de alta calidad
  • Tiempo de inferencia rápido
  • Integración directa con motores de renderizado 3D

Limitaciones:

  • Requiere datos de entrenamiento 3D, que pueden ser escasos para algunas categorías de objetos

Conclusión

La generación de 3D de texto a 3D representa un cambio fundamental en la forma en que creamos y interactuamos con contenido 3D. Al aprovechar técnicas de aprendizaje profundo avanzadas, estos modelos pueden producir activos 3D complejos y de alta calidad a partir de descripciones de texto simples. A medida que la tecnología continúa evolucionando, podemos esperar ver sistemas de texto a 3D cada vez más sofisticados y capaces que revolucionarán industrias desde los juegos y el cine hasta el diseño de productos y la arquitectura.

He dedicado los últimos cinco años sumergiéndome en el fascinante mundo de Machine Learning y Deep Learning. Mi pasión y experiencia me han llevado a contribuir a más de 50 proyectos de ingeniería de software diversos, con un enfoque particular en AI/ML. Mi curiosidad en curso también me ha llevado hacia el Procesamiento de Lenguaje Natural, un campo que estoy ansioso por explorar más a fondo.