Programa
Recentemente, a NVIDIA lançou um modelo inovador chamado LLaMA-Meshque é capaz de gerar malhas 3D a partir de descrições de texto simples.
Também funciona de forma inversa: com uma malha 3D, o modelo pode identificar o objeto.
Esse é um avanço significativo para o aprendizado de máquina, já que a compreensão do espaço 3D é uma etapa crucial para a AGI. O LLaMA-Mesh também é uma ferramenta valiosa para profissionais e entusiastas que trabalham frequentemente com softwares como o Blender, tornando mais rápido o processo de geração e uso de malhas 3D.
Neste breve guia, explicarei os recursos do modelo e apresentarei alguns exemplos para ajudar você a entender seu potencial e suas limitações.
O que é o LLaMa-Mesh?
O LLaMA-Mesh é um modelo inovador desenvolvido pela NVIDIA que amplia os recursos de modelos de linguagem grandes (LLMs) para o domínio 3D.
Diferentemente de qualquer outro modelo anterior, o LLaMA-Mesh unifica as modalidades de texto e 3D, permitindo que os usuários criem malhas 3D por meio de simples comandos de linguagem natural.
Por baixo do capô, o modelo é um ajuste fino de LLaMa-3.1-8B-Instruct. O modelo funciona codificando dados de malha 3D em um formato baseado em texto, especificamente usando o padrão de arquivo OBJ, que descreve vértices e faces como texto simples.
Como acessar o LLaMa-Mesh
Há três maneiras de você usar o modelo:
- Você pode executar o modelo localmente por meio do Hugging Face - o repositório está disponível aqui.
- Para você que domina o Blender e deseja usar o modelo nele, ele está disponível como um complemento do Blender.
- Os autores também criaram uma demonstração on-line na plataforma Hugging Face que eu usarei para gerar malhas experimentais para o guia.
Esta é a aparência do WebApp de demonstração:
A demonstração on-line suporta até 4096 tokens, enquanto o modelo completo suporta 8K. Portanto, precisamos executar o modelo localmente para experimentar todos os seus recursos.
Em seguida, vou gerar três exemplos de formas de dificuldade crescente para testar as limitações do modelo. Executarei os exemplos nas versões de token 4K e 8K do modelo para ver como eles diferem.
Como configurar o LLaMa-Mesh para uso local ou na nuvem
Neste guia, demonstrarei como executar o modelo usando o tempo de execução da GPU A100 do Google Colab. Se você tiver poder computacional suficiente localmente, o mesmo código poderá ser adaptado para ser executado em seu hardware pessoal. O repositório do Hugging Face está disponível aqui.
Para começar, precisamos importar as bibliotecas necessárias e baixar o modelo e o tokenizador:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path = "Zhengyi/LLaMA-Mesh"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto").cuda()
Também precisamos definir o endereço pad_token
:
if tokenizer.pad_token_id is None:
tokenizer.pad_token_id = tokenizer.eos_token_id
Por fim, precisamos tokenizar o prompt e alimentá-lo em um modelo para inferência (tudo isso é um fluxo de trabalho padrão do Huggingface que funciona com praticamente qualquer outro modelo):
prompt = "Create a 3D model of an original designer chair."
inputs = tokenizer(prompt, return_tensors="pt", padding=True)
input_ids = inputs.input_ids.cuda()
output = model.generate(
input_ids,
attention_mask=inputs['attention_mask'], # Provide the attention_mask
max_length=8000,
)
Os autores não especificam os hiperparâmetros que usam na demonstração do aplicativo Web, portanto, para ser justo, usarei os padrões para nossa comparação.
Exemplos de LLaMa-Mesh
Agora, analisarei três exemplos de dificuldade crescente e compararei o resultado do aplicativo de demonstração com o resultado que obtive ao executar o modelo no Colab.
Exemplo 1: Uma cadeira
Começaremos com algo simples, mas criativo: uma cadeira de design. Aqui está o prompt (estou adicionando uma solicitação para que a malha seja gerada no formato OBJ no final, porque o modelo em execução local às vezes se recusa a gerar algo diferente):
Create a 3D model of an original designer chair in OBJ format.
Aqui está o objeto gerado na demonstração on-line:
Sem dúvida, é uma cadeira legal e estranha, embora se pareça mais com a cadeira de um diretor de cinema do que com a de um designer.
Agora, vamos tentar executar o prompt localmente e visualizar o resultado. É isso que você recebe:
Visualização de malha 3D de uma cadeira
A malha com um contexto maior parece mais detalhada. No entanto, na minha opinião, a cadeira se parece mais com um sofá.
Exemplo 2: Um toro
Em seguida, vamos tentar um objeto geométrico: um toro (um donut 3D). O prompt para este exemplo é:
Create a 3D model of a torus in OBJ format.
Esta é a aparência da malha gerada por um modelo 4096:
Toro gerado pelo modelo
Por outro lado, aqui está a visualização da malha gerada pelo modelo em execução no Colab:
Toro gerado pelo modelo
Como você pode ver, essa malha tem muito mais polígonos. No entanto, ele ainda não tem um furo no meio. É assim que um toro deve se parecer:
Fonte: Wikipédia
Exemplo 3: Frasco de Klein
Por fim, vamos ultrapassar os limites com uma garrafa de Klein, uma estrutura 3D complexa. O prompt para isso será:
Create a 3D model of a Klein bottle in OBJ format.
O modelo on-line continua gerando uma malha infinitamente com essa entrada, até que finalmente se esgota e apresenta um erro.
Executar o prompt localmente com uma janela de contexto maior corrige o problema, mas a malha que você obtém não se parece em nada com uma garrafa de Klein:
Garrafa de Klein gerada pelo modelo
Para quem estiver interessado, o frasco de Klein é assim:
Fonte: Wikipédia
Com base nos testes acima, fica claro que, embora o LLaMA-Mesh (versões on-line e local) seja excelente em designs criativos e simples, ele enfrenta limitações com formas geométricas precisas e matemáticas altamente complexas. À medida que o modelo evolui, será interessante ver como esses recursos se expandem.
Conclusão
Neste guia, exploramos o novo modelo LLaMa-Mesh da Nvidia e fizemos alguns exemplos em sua plataforma de demonstração. Embora o modelo esteja em seus estágios iniciais, ele ainda é muito promissor para profissionais e entusiastas que precisam de soluções rápidas e intuitivas para gerar malhas 3D.
À medida que a estrutura evolui, futuras atualizações podem trazer recursos expandidos, como o manuseio de geometrias mais complexas ou a compatibilidade com impressoras 3D.