Programma
Di recente, NVIDIA ha rilasciato un modello innovativo chiamato LLaMA-Mesh, in grado di generare mesh 3D a partire da semplici descrizioni testuali.
Funziona anche al contrario: dato un modello 3D, il modello è in grado di identificare l'oggetto.
Si tratta di un progresso significativo per il machine learning, perché comprendere lo spazio 3D è un passaggio cruciale verso l'AGI. LLaMA-Mesh è anche uno strumento prezioso per professionisti e appassionati che lavorano spesso con software come Blender, poiché rende più rapido il processo di generazione e utilizzo di mesh 3D.
In questa breve guida ti spiegherò le capacità del modello ed eseguirò alcuni esempi per aiutarti a comprenderne potenzialità e limiti.
Che cos'è LLaMa-Mesh?
LLaMA-Mesh è un modello innovativo sviluppato da NVIDIA che estende le capacità dei large language models (LLM) al dominio 3D.
A differenza di qualsiasi modello precedente, LLaMA-Mesh unifica le modalità testuale e 3D, permettendo di creare mesh 3D tramite semplici prompt in linguaggio naturale.
Sotto il cofano, il modello è un LLaMa-3.1-8B-Instruct ulteriormente addestrato. Funziona codificando i dati della mesh 3D in un formato testuale, utilizzando in particolare lo standard di file OBJ, che descrive vertici e facce come testo semplice.
Come accedere a LLaMa-Mesh
Ci sono tre modi per utilizzare il modello:
- Puoi eseguire il modello in locale tramite Hugging Face—il repository è disponibile qui.
- Se hai dimestichezza con Blender e vuoi usare il modello lì, è disponibile come addon per Blender.
- Gli autori hanno anche messo a disposizione una demo online sulla piattaforma Hugging Face, che userò per generare mesh sperimentali per la guida.
Ecco come si presenta la WebApp della demo:

La demo online supporta fino a 4096 token, mentre il modello completo supporta 8K. Perciò, per sfruttarne appieno le capacità è necessario eseguirlo in locale.
Successivamente, genererò tre esempi di forme di difficoltà crescente per testare i limiti del modello. Eseguirò gli esempi sia con la versione da 4K token sia con quella da 8K per vedere come differiscono.
Come configurare LLaMa-Mesh per l'uso locale o nel cloud
Per questa guida mostrerò come eseguire il modello usando il runtime con GPU A100 di Google Colab. Se disponi di sufficiente potenza di calcolo in locale, lo stesso codice può essere adattato per funzionare sul tuo hardware personale. Il repository su Hugging Face è disponibile qui.
Per iniziare, dobbiamo importare le librerie necessarie e scaricare il modello e il tokenizer:
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()
Dobbiamo anche impostare il pad_token:
if tokenizer.pad_token_id is None:
tokenizer.pad_token_id = tokenizer.eos_token_id
Infine, dobbiamo tokenizzare il prompt e passararlo al modello per l'inferenza (tutto questo è il flusso di lavoro standard di Hugging Face che funziona con quasi qualsiasi altro modello):
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,
)
Gli autori non specificano gli iperparametri usati nella demo web, quindi, per correttezza, userò i valori predefiniti per il nostro confronto.
Esempi di LLaMa-Mesh
Ora passerò attraverso tre esempi di difficoltà crescente e confronterò l'output dell'app demo con quello ottenuto eseguendo il modello su Colab.
Esempio 1: una sedia
Iniziamo con qualcosa di semplice ma creativo—una sedia di design. Ecco il prompt (aggiungo alla fine la richiesta di generare la mesh in formato OBJ perché il modello in locale a volte rifiuta altrimenti di generare qualcosa):
Create a 3D model of an original designer chair in OBJ format.
Ecco l'oggetto generato nella demo online:

È sicuramente una sedia interessante e insolita, anche se assomiglia più a una sedia da regista che a una sedia di design.
Ora proviamo a eseguire il prompt in locale e a visualizzare il risultato. Ecco cosa otteniamo:

Visualizzazione della mesh 3D di una sedia
La mesh con un contesto più ampio appare più dettagliata. Tuttavia, secondo me, la sedia assomiglia più a un divano.
Esempio 2: un toro
Passiamo a un oggetto geometrico: un toro (una ciambella 3D). Il prompt per questo esempio è:
Create a 3D model of a torus in OBJ format.
Ecco come appare la mesh generata da un modello con 4096 token:

Toro generato dal modello
D'altra parte, ecco la visualizzazione della mesh generata dal modello in esecuzione su Colab:

Toro generato dal modello
Come puoi vedere, questa mesh ha molti più poligoni. Tuttavia, non ha comunque un foro al centro. Ecco come dovrebbe apparire un toro:

Fonte: Wikipedia
Esempio 3: bottiglia di Klein
Infine, spingiamo i limiti con una bottiglia di Klein—una struttura 3D complessa. Il prompt sarà:
Create a 3D model of a Klein bottle in OBJ format.
Con questo input, il modello online continua a generare una mesh senza sosta finché non va in timeout e restituisce un errore.
Eseguire il prompt in locale con una finestra di contesto più ampia risolve il problema, tuttavia la mesh ottenuta non assomiglia affatto a una bottiglia di Klein:

Bottiglia di Klein generata dal modello
Ecco com'è fatta una bottiglia di Klein per chi fosse curioso:

Fonte: Wikipedia
Dai test sopra, è chiaro che mentre LLaMA-Mesh (sia la versione online che quella locale) eccelle in progetti creativi e semplici, incontra limiti con forme geometriche precise e strutture matematiche molto complesse. Man mano che il modello evolve, sarà interessante vedere come queste capacità si espanderanno.
Conclusioni
In questa guida abbiamo esplorato il nuovo modello LLaMa-Mesh di Nvidia ed eseguito alcuni esempi sulla loro piattaforma demo. Pur essendo nelle fasi iniziali, il modello mostra già un grande potenziale per professionisti e appassionati che hanno bisogno di soluzioni rapide e intuitive per generare mesh 3D.
Con l'evoluzione del framework, futuri aggiornamenti potrebbero introdurre funzionalità più ampie, come la gestione di geometrie più complesse o la compatibilità con stampanti 3D.


