NVIDIA Research sta rinnovando l’applicazione dell’arte artificiale con SpatialClaw, un nuovo framework per il ragionamento spaziale ad alte prestazioni. L'obiettivo di SpatialClaw è risolvere un limite persistente nei modelli visione-lingua (VLM), che spesso falliscono nel giudicare la posizione, la relazione e il movimento degli oggetti in 3D.
Che cos'è SpatialClaw?
SpatialClaw funziona senza richiedere nuovo addestramento. La sua invenzione si basa sull’approccio all’interfaccia d’azione utilizzata dagli agenti per richiamare strumenti di percezione. Il team di ricerca sostiene che l'interfaccia stessa sia il problema principale. La proposta? Trattare il codice come interfaccia d'azione.
SpatialClaw si presenta come un ciclo di agente avvolto intorno a un kernel Python permanente. Il kernel pre-carica i frame di input e un insieme di primitiva. Gli strumenti di percezione sono semplici callable Python. I loro output, tra cui maschere, mappatura profondità, geometria della camera e traiettorie, sono variabili classiche Python.
Il kernel espone sei punti d'entrata:
- InputImages: immagazzina i frame campionati.
- Metadati: include informazioni come frame rate, durata e indice dei frame.
- Tools: esposte le primitive di percezione e geometria.
- show(): incorpora un'immagine nel contesto del prossimo agente.
- vlm: invia query ad una sessione VLM separata.
- ReturnAnswer(): invia la risposta finale.
Percettivi Chiave
Gli strumenti di percezione centrali sono:
- tools.Reconstruct, che include Depth Anything 3, restituisce per frame profondità, parametri di inquadratura e mappatura densa.
- tools.SAM3, avvolge SAM 3 per produrre maschere da prompt testuale, punto o box.
Il framework aggiunge utilità leggere come: tools.Geometry, tools.Mask, tools.Time, tools.Graph e tools.Draw.
Perché L’Interfaccia D’Azione Importa
Il team ha analizzato tre interfaccie d’azione sullo stesso quesito. Immaginiamo di calcolare la distanza più vicina tra un termosifone e una porta.
Con il codice single-pass, un programma completo viene eseguito una volta. Se l'assunzione iniziale è errata, l’errore si propaga direttamente alla risposta.
Con il tool-call strutturato, gli strumenti vengono chiamati in JSON, limitando l’unione di output con operazioni di computazione su dati.
SpatialClaw invece combina gli strumenti in codice con feedback e correzioni, raggiungendo il risultato corretto grazie ad operazioni avanzate come scipy.spatial.KDTree.
Test sui Benchmark
SpatialClaw è stato testato su 20 benchmark in 5 categorie: singolo immagine, multi-vista, video e 4D generalizzato, video comprensione. Migliora in media del +6.5% rispetto alla baseline.
Confronto tra interfaccie:
- Nessuno strumento di base: 53.4%
- Single-pass code: 55.2 (+1.8)
- L’appello strutturato: 56.7 (+3.3)
- L'agente Codice Spaziale: 59.9 (+6.5)
Con la stessa architettura backbone (Gemma4-31B), i risultati sono estremamente significativi quando vengono confrontati con strumenti spaziali esistenti.
Interni di Ciclo a Cinque Stadi
Ogni esemplare passa attraverso un ciclo a cinque stadi: pianificazione, generazione codice, esecuzione codice, assemblaggio feedback e risposta. Il piano del tutto viene scritto senza immagini. L’agente esegue un passo per cella Python. Un parser AST rifiuta codice non sicuro prima dell'esecuzione.
Avvio Rapido
Il repository ufficiale funziona su un workflow LangGraph e kernel Jupyter. Si avvia rapidamente con un comando:
Un esempio mostra come gli agenti compongono la percezione con la geometria:
# Ricostruisci la scena, quindi segmenta entrambi gli oggetti in un passo video
recon = tools.Reconstruct.Reconstruct(InputImages)
seg = tools.SAM3.segmentvideoby_text(["radiator heater", "door"])
show(seg.visualize(1)) # ispeziona le maschere prima
Distanza del punto più vicino via KD-tree, non centroidi
ptsh = seg.getmasked_points(recon, frame=1, object=0) # oggetto 0 = termosifone
ptsd = seg.getmasked_points(recon, frame=2, object=1) # oggetto 1 = porta
dists, = scipy.spatial.KDTree(ptsh).query(pts_d, k=1)
ReturnAnswer(float(dists.min()))
L'agente seleziona le primitive dalla domanda stessa. Le domande su distanza invocano la ricerca KD-trees e norme vettoriali. Le domande direzionali si basano su prodotti scalari.
Applicazioni
Il design di SpatialClaw si adatta perfettamente ai problemi che richiedono un ragionamento geometrico passo per passo.
- Robotica ed agenti che misurano distanze metriche prima di agire.
- Ispezione multi-vista, dove la direzione di un oggetto viene recuperata da diverse angolazioni fotografiche.
- Analisi video 4D tracciano la movimento tra oggetti e camera su frame multipli.
- Domande di risposta alle scene interne, come "dove è la porta rispetto al lavandino?"
Il fatto che SpatialClaw non richieda addestramento permette ai team di estendere i VLM senza nuovi dati o fine-tuning.
Risultati Principali
Il codice come interfaccia d’azione: SpatialClaw permette ad un VLM di generare una cella Python per step.
Stato dell’arte senza addestramento: 59.9% in 20 benchmark, superando l’agente SpaceTools del 11.2% senza personalizzazione.
Interfaccia come leva: passando da interfaccia strutturata a interfaccia codice su Gemma4-31B, l’accuratezza cresce.
Maggiore guadagno nella composizione geometrica: i task dinamici come DSI-Bench e MindCube vedono miglioramenti significativi.
La percezione come tetto: il guadagno si mantiene su sei backbones ma il collo di bottiglia rimane la qualità della percezione strument