Implementación de MeshGPT, generación de SOTA Mesh usando Attention, en Pytorch
También agregará acondicionamiento de texto, para un eventual recurso de texto a 3D.
Únase si está interesado en colaborar con otros para replicar este trabajo.
Actualización: Marcus ha entrenado y subido un modelo funcional a ? ¡Cara de abrazo!
StabilityAI, Programa de subvenciones de IA de código abierto A16Z y ? Huggingface por los generosos patrocinios, así como a mis otros patrocinadores, por brindarme la independencia para abrir la investigación actual sobre inteligencia artificial.
Einops por hacerme la vida más fácil
Marcus por la revisión inicial del código (señalando algunas características derivadas faltantes), así como por ejecutar los primeros experimentos exitosos de un extremo a otro.
Marcus por el primer entrenamiento exitoso de una colección de formas condicionadas a etiquetas
Quexi Ma por encontrar numerosos errores con el manejo automático de eos
Yingtian por encontrar un error con el desenfoque gaussiano de las posiciones para el suavizado espacial de etiquetas
Marcus una vez más por realizar los experimentos para validar que es posible extender el sistema de triángulos a quads.
Marcus por identificar un problema con el condicionamiento del texto y por realizar todos los experimentos que llevaron a su resolución.
$ pip install meshgpt-pytorch
import torch
from meshgpt_pytorch import (
MeshAutoencoder ,
MeshTransformer
)
# autoencoder
autoencoder = MeshAutoencoder (
num_discrete_coors = 128
)
# mock inputs
vertices = torch . randn (( 2 , 121 , 3 )) # (batch, num vertices, coor (3))
faces = torch . randint ( 0 , 121 , ( 2 , 64 , 3 )) # (batch, num faces, vertices (3))
# make sure faces are padded with `-1` for variable lengthed meshes
# forward in the faces
loss = autoencoder (
vertices = vertices ,
faces = faces
)
loss . backward ()
# after much training...
# you can pass in the raw face data above to train a transformer to model this sequence of face vertices
transformer = MeshTransformer (
autoencoder ,
dim = 512 ,
max_seq_len = 768
)
loss = transformer (
vertices = vertices ,
faces = faces
)
loss . backward ()
# after much training of transformer, you can now sample novel 3d assets
faces_coordinates , face_mask = transformer . generate ()
# (batch, num faces, vertices (3), coordinates (3)), (batch, num faces)
# now post process for the generated 3d asset
Para la síntesis de formas 3D condicionadas por texto, simplemente establezca condition_on_text = True
en su MeshTransformer
y luego pase su lista de descripciones como argumento de palabra clave texts
ex.
transformer = MeshTransformer (
autoencoder ,
dim = 512 ,
max_seq_len = 768 ,
condition_on_text = True
)
loss = transformer (
vertices = vertices ,
faces = faces ,
texts = [ 'a high chair' , 'a small teapot' ],
)
loss . backward ()
# after much training of transformer, you can now sample novel 3d assets conditioned on text
faces_coordinates , face_mask = transformer . generate (
texts = [ 'a long table' ],
cond_scale = 8. , # a cond_scale > 1. will enable classifier free guidance - can be placed anywhere from 3. - 10.
remove_parallel_component = True # from https://arxiv.org/abs/2410.02416
)
Si desea tokenizar mallas, para usarlas en su transformador multimodal, simplemente invoque .tokenize
en su codificador automático (o el mismo método en la instancia del entrenador de codificador automático para el modelo suavizado exponencialmente)
mesh_token_ids = autoencoder . tokenize (
vertices = vertices ,
faces = faces
)
# (batch, num face vertices, residual quantized layer)
En la raíz del proyecto, ejecute
$ cp .env.sample .env
codificador automático
face_edges
directamente de caras y vértices transformador
envoltura de entrenador con aceleración hf
Acondicionamiento de texto usando su propia biblioteca CFG.
transformadores jerárquicos (usando el transformador RQ)
arreglar el almacenamiento en caché en una capa de bucle de puerta simple en otro repositorio
atención local
corrige el almacenamiento en caché de kv para un transformador jerárquico de dos etapas: 7 veces más rápido ahora y más rápido que el transformador no jerárquico original
arreglar el almacenamiento en caché para las capas de gateloop
permitir la personalización de las dimensiones del modelo de la red de atención fina versus gruesa
averigüe si el codificador automático es realmente necesario; es necesario, las ablaciones están en el periódico
hacer que el transformador sea eficiente
opción de decodificación especulativa
pasar un día en documentación
@inproceedings { Siddiqui2023MeshGPTGT ,
title = { MeshGPT: Generating Triangle Meshes with Decoder-Only Transformers } ,
author = { Yawar Siddiqui and Antonio Alliegro and Alexey Artemov and Tatiana Tommasi and Daniele Sirigatti and Vladislav Rosov and Angela Dai and Matthias Nie{ss}ner } ,
year = { 2023 } ,
url = { https://api.semanticscholar.org/CorpusID:265457242 }
}
@inproceedings { dao2022flashattention ,
title = { Flash{A}ttention: Fast and Memory-Efficient Exact Attention with {IO}-Awareness } ,
author = { Dao, Tri and Fu, Daniel Y. and Ermon, Stefano and Rudra, Atri and R{'e}, Christopher } ,
booktitle = { Advances in Neural Information Processing Systems } ,
year = { 2022 }
}
@inproceedings { Leviathan2022FastIF ,
title = { Fast Inference from Transformers via Speculative Decoding } ,
author = { Yaniv Leviathan and Matan Kalman and Y. Matias } ,
booktitle = { International Conference on Machine Learning } ,
year = { 2022 } ,
url = { https://api.semanticscholar.org/CorpusID:254096365 }
}
@misc { yu2023language ,
title = { Language Model Beats Diffusion -- Tokenizer is Key to Visual Generation } ,
author = { Lijun Yu and José Lezama and Nitesh B. Gundavarapu and Luca Versari and Kihyuk Sohn and David Minnen and Yong Cheng and Agrim Gupta and Xiuye Gu and Alexander G. Hauptmann and Boqing Gong and Ming-Hsuan Yang and Irfan Essa and David A. Ross and Lu Jiang } ,
year = { 2023 } ,
eprint = { 2310.05737 } ,
archivePrefix = { arXiv } ,
primaryClass = { cs.CV }
}
@article { Lee2022AutoregressiveIG ,
title = { Autoregressive Image Generation using Residual Quantization } ,
author = { Doyup Lee and Chiheon Kim and Saehoon Kim and Minsu Cho and Wook-Shin Han } ,
journal = { 2022 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR) } ,
year = { 2022 } ,
pages = { 11513-11522 } ,
url = { https://api.semanticscholar.org/CorpusID:247244535 }
}
@inproceedings { Katsch2023GateLoopFD ,
title = { GateLoop: Fully Data-Controlled Linear Recurrence for Sequence Modeling } ,
author = { Tobias Katsch } ,
year = { 2023 } ,
url = { https://api.semanticscholar.org/CorpusID:265018962 }
}