Onlangs bracht NVIDIA een innovatief model uit genaamd LLaMA-Mesh, dat in staat is 3D-meshes te genereren op basis van beschrijvingen in gewone taal.
Het werkt ook andersom: gegeven een 3D-mesh kan het model het object identificeren.
Dit is een belangrijke stap voorwaarts voor machine learning, omdat begrip van de 3D-ruimte cruciaal is op weg naar AGI. LLaMA-Mesh is bovendien een waardevol hulpmiddel voor professionals en hobbyisten die vaak met software als Blender werken, waardoor het genereren en gebruiken van 3D-meshes sneller gaat.
In deze korte gids leg ik de mogelijkheden van het model uit en laat ik een paar voorbeelden zien om je te helpen het potentieel en de beperkingen te begrijpen.
Wat is LLaMa-Mesh?
LLaMA-Mesh is een innovatief model van NVIDIA dat de mogelijkheden van large language models (LLM’s) uitbreidt naar het 3D-domein.
Anders dan eerdere modellen verenigt LLaMA-Mesh tekst- en 3D-modaliteiten, zodat je 3D-meshes kunt maken met simpele prompts in natuurlijke taal.
Onder de motorkap is het model een fijn-afgestelde LLaMa-3.1-8B-Instruct. Het model werkt door 3D-meshdata te encoderen in een tekstgebaseerd formaat, specifiek met de OBJ-bestandsstandaard, die vertices en faces in platte tekst beschrijft.
Hoe krijg je toegang tot LLaMa-Mesh
Er zijn drie manieren om het model te gebruiken:
Je kunt het model lokaal draaien via Hugging Face—de repository is hier beschikbaar.
Voor wie handig is met Blender en het model daar wil gebruiken, is het beschikbaar als een Blender-add-on.
De auteurs hebben ook een online demo opgezet op het Hugging Face-platform, die ik zal gebruiken om experimentele meshes voor de gids te genereren.
Zo ziet de demo-webapp eruit:
De online demo ondersteunt maximaal 4096 tokens, terwijl het volledige model 8K ondersteunt. Daarom moeten we het model lokaal draaien om de volledige mogelijkheden te ervaren.
Vervolgens genereer ik drie voorbeelden met oplopende moeilijkheidsgraad om de grenzen van het model te testen. Ik draai de voorbeelden zowel op de 4K- als de 8K-tokenversie van het model om te zien waarin ze verschillen.
LLaMa-Mesh instellen voor lokaal of cloudgebaseerd gebruik
Voor deze gids laat ik zien hoe je het model draait met de A100 GPU-runtime van Google Colab. Als je lokaal voldoende rekenkracht hebt, kun je dezelfde code aanpassen om op je eigen hardware te draaien. De Hugging Face-repository is hier te vinden.
Om te beginnen moeten we de benodigde libraries importeren en het model en de tokenizer downloaden:
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()
We moeten ook de pad_token instellen:
if tokenizer.pad_token_id is None:
tokenizer.pad_token_id = tokenizer.eos_token_id
Tot slot moeten we de prompt tokenizen en aan het model voeren voor inferentie (dit is allemaal standaard Hugging Face-werkwijze die met bijna elk ander model werkt):
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,
)
De auteurs specificeren de hyperparameters die ze in de webapp-demo gebruiken niet, dus om eerlijk te blijven gebruik ik de standaardinstellingen voor onze vergelijking.
LLaMa-Mesh-voorbeelden
Ik loop nu drie voorbeelden met oplopende moeilijkheidsgraad door en vergelijk de output van de demo-app met de output die ik kreeg door het model op Colab te draaien.
Voorbeeld 1: een stoel
We beginnen met iets eenvoudigs maar creatiefs—een designstoel. Dit is de prompt (ik voeg aan het eind een verzoek toe om de mesh in OBJ-formaat te genereren, omdat het model lokaal soms weigert iets te genereren als je dat niet doet):
Create a 3D model of an original designer chair in OBJ format.
Hier is het gegenereerde object in de online demo:
Het is zeker een coole en vreemde stoel, al lijkt hij meer op een regisseursstoel dan op een designstoel.
Laten we nu de prompt lokaal draaien en de uitkomst visualiseren. Dit is wat we krijgen:
3D-meshvisualisatie van een stoel
De mesh met een grotere context ziet er gedetailleerder uit. De stoel oogt echter meer als een bank, vind ik.
Voorbeeld 2: een torus
Laten we vervolgens een geometrisch object proberen: een torus (een 3D-donut). De prompt voor dit voorbeeld is:
Create a 3D model of a torus in OBJ format.
Zo ziet de mesh eruit die door een 4096-model is gegenereerd:
Torus gegenereerd door het model
Hier is daarentegen de visualisatie van de mesh die door het model op Colab is gegenereerd:
Torus gegenereerd door het model
Zoals je ziet heeft deze mesh veel meer polygonen. Toch ontbreekt er nog steeds een gat in het midden. Zo zou een torus eruit moeten zien:
Uit de bovenstaande tests blijkt duidelijk dat LLaMA-Mesh (zowel de online als de lokale versie) uitblinkt in creatieve en eenvoudige ontwerpen, maar beperkingen kent bij nauwkeurige geometrische en zeer complexe wiskundige vormen. Naarmate het model zich ontwikkelt, wordt het interessant om te zien hoe deze mogelijkheden uitbreiden.
Conclusie
In deze gids hebben we het nieuwe Nvidia LLaMa-Mesh-model verkend en enkele voorbeelden gedaan op hun demoplatform. Hoewel het model nog in een vroeg stadium is, toont het al veelbelovend potentieel voor professionals en enthousiastelingen die snelle en intuïtieve oplossingen nodig hebben om 3D-meshes te genereren.
Naarmate het framework zich ontwikkelt, kunnen toekomstige updates uitgebreidere mogelijkheden brengen, zoals het verwerken van complexere geometrieën of compatibiliteit met 3D-printers.
Author
Dimitri Didmanidze
Ik ben Dimitri Didmanidze, een data scientist die momenteel een master Wiskunde volgt met een focus op Machine Learning. Mijn academische traject omvat ook onderzoek naar de mogelijkheden van transformer-gebaseerde modellen en lesgeven op universitair niveau, wat mijn begrip van complexe theoretische concepten heeft verdiept. Daarnaast heb ik in de bankensector gewerkt, waar ik deze principes heb toegepast op datavraagstukken uit de praktijk.