Visione per progetti personali senza acquistare un cluster GPU
Ogni volta che hai bisogno di aggiungere il riconoscimento di immagini o domande e risposte basate su foto a un progetto, la tua mano corre verso le API cloud. Ma pagare per ogni chiamata OpenAI o instradare le richieste attraverso servizi di terze parti non è sempre desiderabile. Eseguire un modello multimodale pesante localmente non è nemmeno facile: la maggior parte delle soluzioni open source richiede GPU con 24 GB di memoria o più.
Il repository moondream risolve esattamente questo problema. Gli sviluppatori di m87-labs hanno assemblato un modello multimodale compatto che analizza le immagini con sicurezza, pesando solo pochi gigabyte e funzionando senza problemi anche su hardware modesto.
Cosa può fare moondream
Il modello prende un'immagine insieme a una query di testo come input e restituisce una risposta significativa in linguaggio naturale. Il repository contiene due versioni:
- moondream 2B con due miliardi di parametri per attività standard, tra cui generazione di didascalie, risposta a domande visive e rilevamento di oggetti
- moondream 0.5B con 500 milioni di parametri, compresso tramite distillazione per l'esecuzione su smartphone, computer a scheda singola e microservizi con consumo minimo di RAM
Ecco un paio di esempi dal repository:

Se chiedi al modello cosa sta facendo la persona nella foto, risponderà: "La ragazza è seduta a un tavolo e sta mangiando un grande hamburger". Quando le chiedi del colore dei capelli, specifica chiaramente che sono bianchi.
Il secondo esempio mostra una scomposizione più dettagliata dell'ambiente:

Quando viene chiesto "Cos'è questo?", moondream produce un paragrafo dettagliato: riconosce il rack del server, nota i cavi di alimentazione collegati, il tappeto sul pavimento e un divano nelle vicinanze, oltre al muro di mattoni sullo sfondo.
Come eseguire localmente
Il modello è scritto in Python e si integra nei progetti in poche decine di righe di codice. L'inferenza di base richiede solo le librerie standard di Hugging Face.
from PIL import Image
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "vikhyatk/moondream2"
revision = "2024-08-26"
model = AutoModelForCausalLM.from_pretrained(
model_id,
trust_remote_code=True,
revision=revision
)
tokenizer = AutoTokenizer.from_pretrained(model_id, revision=revision)
image = Image.open("photo.jpg")
enc_image = model.encode_image(image)
answer = model.answer_question(enc_image, "Describe this image in detail.", tokenizer)
print(answer)
La versione 0.5B funziona anche su CPU pura senza ritardi critici. Se le risorse locali non sono disponibili affatto, gli autori hanno preparato esempi di deployment tramite la piattaforma serverless Modal.
Dove può essere utile in pratica
Le dimensioni ridotte aprono scenari in cui i modelli grandi semplicemente non si adattano ai requisiti di budget o latenza:
- Taggatura automatica e generazione di didascalie in archivi multimediali locali.
- Moderazione dei contenuti in bot e moduli web direttamente sul server dell'applicazione.
- Robotica e dispositivi fai-da-te basati su Raspberry Pi, dove non c'è accesso a internet stabile.
- Filtrazione rapida delle immagini prima dell'invio a post-elaborazioni più pesanti.
Naturalmente, non bisogna aspettarsi che un modello con mezzo miliardo di parametri comprenda infografiche complesse o legga testo scritto a mano. Ma per la navigazione di base nelle immagini e la descrizione di scene, moondream eccelle.
Se hai bisogno di un modulo VLM veloce e leggero che non costi una fortuna sui server e che funzioni anche su un laptop, moondream merita sicuramente di essere testato in una sandbox. Puoi provare il modello nel browser sul sito ufficiale del progetto nella sezione Playground.
Progetti correlati