LISA integrato in SamGIS
La segmentazione d'immagine è un compito cruciale nella visione artificiale, dove l'obiettivo di fare "instance segmentation" di un dato oggetto. Ho già lavorato ad un progetto, SamGIS, a riguardo. Un passo logico successivo sarebbe integrare la capacità di riconoscere gli oggetti attraverso prompt testuali. Quest'attività apparentemente semplice in effetti comporta però delle differenze rispetto a quanto fatto in SamGIS che utilizza Segment Anything (il backend di machine learning usato da SamGIS). Mentre infatti "SAM" non categorizza ciò che identifica, partire da un prompt scritto necessita della conoscenza di quali classi di oggetti esistano nell'immagine in analisi. Un modello di linguaggio visivo (o VLM) che funziona bene per questo compito è LISA. Gli autori di LISA hanno basato il loro lavoro su Segment Anything e Llava, un LLM con capacità multimodali (può elaborare sia istruzioni di testo che immagini). Sfruttando le capacità di "segmentazione ragionata" di LISA, SamGIS può eseguire analisi di tipo "zero-shot", ovvero senza addestramento pregresso specifico e specialistico in ambito geologico, geomorfologico o fotogrammetrico.
Prompts testuali d'input e relativi geojson di output
Input prompt:
waiting for data...
Ho esportato l'immagine in overlay usando come sorgente il provider di tiles Esri.WorldImagery.
Si noti che ho aggiunto alcuni prompt testuali complessi come "devi individuare le case vicino alle strade". In alcuni casi i risultati sono migliori di altri e questo può cambiare grazie a LLM più avanzati o con un numero maggiore di parametri.
Clicca qui per mostrare un esempio di payload usato come request
{
"bbox": {
"ne": {
"lat": 46.173968917056655,
"lng": 10.082219839096071
},
"sw": {
"lat": 46.16651671595163,
"lng": 10.066105127334597
}
},
"string_prompt": "You are a skilled gis analyst with a lot of expertise in photogrammetry, remote sensing and geomorphology field. You need to identify...",
"zoom": 17,
"source_type": "Esri.WorldImagery"
}
Si noti in particolare il tag "source_type", valorizzabile come uno dei tile providers elencati in leaflet-extras/leaflet-providers. Gli usi più ovvi (con i migliori risultati, probabilmente) sono legati all'utilizzo di un tile providers di fotogrammetria satellitare come
Si tenga presente che alcuni dei tile providers di cui sopra sono servizi commerciali e/o prevedono restrizioni all'utilizzo (ad esempio registrazione, accettazione delle condizioni di utilizzo, ecc.).
Durata dei task di segmentazione
Al momento, un prompt che richieda anche la spiegazione di quanto identificato nell'immagine rallenta notevolmente l'analisi. Lo stesso prompt d'analisi eseguito sulla stessa immagine però senza richieste di spiegazione viene elaborato molto più velocemente. I test contenenti richieste di spiegazioni vengono eseguiti in più di 60 secondi mentre senza la durata è intorno o inferiore a 4 secondi, utilizzando il profilo hardware HuggingFace "Nvidia T4 Small" con 4 vCPU, 15 GB RAM e 16 GB VRAM.
Architettura software
Dal punto di vista tecnico e architetturale, la demo consiste di un frontend simile a quello sulla demo di SamGIS. Niente barra degli strumenti per disegnare, sostituita dalla casella di testo per le richieste in linguaggio naturale. Il backend utilizza un'API basata su FastAPI e che invoca una funzione ad hoc basata su LISA.
Ho dovuto mettere in pausa la demo a causa del costo della GPU, ma sto richiedendo l'uso di una GPU gratuita da HuggingFace. Non esitate a contattarmi su LinkedIn per una dimostrazione dal vivo, chiedere maggiori informazioni o ulteriori chiarimenti.
Al momento è disponibile anche una demo basata su hardware ZeroGPU: è un po' lenta rispetto alla demo cuda classica, ma è gratuita (nel caso io continui a pagare la quota per l'abbonamento PRO HuggingFace). Si noti che lo spazio ZeroGPU potrebbe essere in pausa per inattività e, nel caso, servirà attendere per il suo completo caricamento.