chip grafico NVIDIA con circuito stampato

NVIDIA Presenta SpatialClaw: Il Ragionamento Spaziale senza Training per i VLM

NVIDIA Research ha rilasciato SpatialClaw, un framework per il ragionamento spaziale che non richiede training. Il progetto affronta un punto debole persistente dei modelli vision-language (VLM): la difficoltà a giudicare dove sono gli oggetti, come si relazionano e come si muovono in 3D.

SpatialClaw non riaddestra il modello, ma cambia l’interfaccia che l’agente usa per chiamare gli strumenti di percezione. Il team di ricerca sostiene che l’interfaccia sia il collo di bottiglia. La soluzione è trattare il codice come interfaccia.

Come funziona SpatialClaw

SpatialClaw è un agente a ciclo continuo (agent loop) basato su un kernel Python stateful. Il kernel è precaricato con frame di input e un set di primitive. Gli strumenti di percezione sono semplici funzioni Python; i loro output (maschere, mappe di profondità, geometria della camera, traiettorie) sono variabili Python ordinarie. Il kernel espone sei punti di ingresso pubblici:

  • InputImages: contiene i frame campionati.
  • Metadata: porta frame rate, durata e indici dei frame.
  • tools: espone le primitive di percezione e geometria.
  • show(): incorpora un’immagine nel contesto successivo dell’agente.
  • vlm: invia query a una sessione VLM separata.
  • ReturnAnswer(): invia la risposta finale.

Due strumenti di percezione sono centrali. tools.Reconstruct usa Depth Anything 3 e restituisce profondità per frame, parametri intrinseci ed estrinseci della camera, e mappe di punti dense. tools.SAM3 usa SAM 3 e produce maschere da immagini o video partendo da prompt testuali, puntuali o rettangolari. Altri strumenti leggeri completano il set: tools.Geometry, tools.Mask, tools.Time, tools.Graph e tools.Draw. L’architettura è senza training: lo stesso system prompt, tool set e iperparametri funzionano su ogni benchmark e backbone.

Perché l’interfaccia è cruciale

Il team ha confrontato tre interfacce sulla stessa domanda: misurare la distanza minima tra un termosifone e una porta.

  • Single-pass code: scrive un programma completo e lo esegue una volta. Si impegna in una strategia completa prima di vedere qualsiasi maschera intermedia. Un’ipotesi sbagliata si propaga fino alla risposta.
  • Structured tool-call: invoca strumenti tramite uno schema JSON fisso. Non può combinare output con NumPy o SciPy; mancando uno strumento pre-registrato per l’operazione di punto più vicino, la risposta è sbagliata.
  • SpatialClaw: compone gli strumenti in codice, ispeziona i risultati e poi rivede. Prima calcola una distanza tra centroidi, poi nota che il centroide usa una mediana, quindi passa a scipy.spatial.KDTree per trovare il vero punto più vicino. Il risultato è 0.9439 metri contro un ground truth di 0.9 metri.

Prestazioni sui benchmark

SpatialClaw è stato testato su 20 benchmark in cinque categorie: singola immagine, multi-vista, video/4D, comprensione video generale e generica. Aumenta il punteggio su tutti e sei i backbone testati, da 26B a 397B parametri (famiglie Qwen3.5/3.6 e Gemma4). In un confronto controllato, a parità di strumenti e prompt, l’interfaccia fa la differenza:

  • No-tool baseline: 53.4%
  • Single-pass code: 55.2% (+1.8)
  • Structured tool-call: 56.7% (+3.3)
  • SpatialClaw (code as action): 59.9% (+6.5)

Rispetto ad altri agenti spaziali la forbice si allarga. SpazioTools-Toolshed arriva al 48.7% (−11.2), pySpatial al 47.8% (−12.1), VADAR al 40.5% (−19.4). I guadagni più alti si registrano su compiti dinamici: DSI-Bench sale di +17.6 punti, MindCube di +15.3 punti. In queste categorie servono calcoli geometrici concatenati tra frame e punti di vista.

«L’attribuzione ‘LLM-as-judge’ spiega le vittorie rispetto allo structured tool-call: la composizione in codice conta per il 52.2%, il controllo di flusso per il 19.5%, il restante 28.3% è neutrale rispetto all’interfaccia».

Il ciclo in cinque fasi

Ogni campione segue un ciclo di cinque fasi: pianificazione, generazione del codice, esecuzione, assemblaggio del feedback e invio della risposta. Un planner abbozza una strategia senza vedere le immagini. L’agente principale scrive poi una cella Python per passo. Un checker AST statico rifiuta codice non sicuro prima dell’esecuzione. Il ciclo si ripete fino a quando ReturnAnswer() viene chiamata o si raggiungono 30 passi. Il repository ufficiale gira su un workflow LangGraph e su un kernel Jupyter persistente. I backbone sono serviti tramite vLLM. La percezione gira su un servizio GPU FastAPI.

Casi d’uso

SpatialClaw è pensato per problemi che richiedono un ragionamento geometrico passo-passo. Esempi concreti:

  • Robotica e agenti incarnati: misurare distanze metriche tra oggetti prima di agire.
  • Ispezione multi-vista: recuperare la direzione di un oggetto da diverse angolazioni della camera.
  • Analisi video e 4D: tracciare il movimento di oggetti o telecamere tra i frame.
  • Domande su scene indoor: rispondere a quesiti come «dov’è la porta rispetto al lavandino?».

Poiché è senza training, i team possono estendere un VLM già in produzione senza nuovi dati o fine-tuning.

Articoli simili