Visão para projetos pessoais sem comprar um cluster de GPUs
Toda vez que você precisa adicionar reconhecimento de imagem ou perguntas e respostas baseadas em fotos a um projeto, suas mãos reaches for cloud APIs. Mas pagar por cada chamada OpenAI ou rotear requisições através de serviços de terceiros nem sempre é desejável. Executar um modelo multimodal pesado localmente também não é fácil: a maioria das soluções open source requer GPUs com 24 GB de memória ou mais.
O repositório moondream resolve exatamente esse problema. Desenvolvedores do m87-labs montaram um modelo multimodal compacto que analisa imagens com confiança, pesando apenas alguns gigabytes e rodando suavemente até mesmo em hardware modesto.
O que o moondream pode fazer
O modelo recebe uma imagem junto com uma consulta em texto como entrada e retorna uma resposta significativa em linguagem natural. O repositório contém duas versões:
- moondream 2B com dois bilhões de parâmetros para tarefas padrão, incluindo geração de legendas, resposta a perguntas visuais e detecção de objetos
- moondream 0.5B com 500 milhões de parâmetros, comprimido via destilação para rodar em smartphones, computadores de placa única e microsserviços com consumo mínimo de RAM
Aqui estão alguns exemplos do repositório:

Se você perguntar ao modelo o que a pessoa na foto está fazendo, ele responderá: "A garota está sentada em uma mesa comendo um hambúrguer grande". Quando perguntado sobre a cor do cabelo, ele especifica claramente que são brancos.
O segundo exemplo mostra uma análise mais detalhada do ambiente:

Quando perguntado "O que é isso?", o moondream produz um parágrafo detalhado: reconhece o rack de servidores, observa os cabos de energia conectados, o carpete no chão e um sofá próximo, bem como a parede de tijolos ao fundo.
Como executar localmente
O modelo é escrito em Python e se integra a projetos em apenas algumas dezenas de linhas de código. A inferência básica requer apenas as bibliotecas padrão do 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)
A versão 0.5B roda até mesmo em CPU pura sem atrasos críticos. Se recursos locais não estiverem disponíveis, os autores prepararam exemplos de deploy via plataforma serverless Modal.
Onde isso é útil na prática
O tamanho pequeno abre cenários onde modelos grandes simplesmente não cabem no orçamento ou nos requisitos de latência:
- Marcação automática e legendagem em arquivos de mídia locais.
- Moderação de conteúdo em bots e formulários web diretamente no servidor da aplicação.
- Robótica e dispositivos DIY baseados em Raspberry Pi, onde não há acesso à internet estável.
- Filtragem rápida de imagens antes de enviar para pós-processamento mais pesado.
Claro, você não deve esperar que um modelo de meio bilhão de parâmetros entenda infográficos complexos ou leia texto manuscrito. Mas para navegação básica de imagens e descrição de cenas, o moondream se sai excelente.
Se você precisa de um módulo VLM rápido e leve que não vai estourar o orçamento em servidores e vai rodar até mesmo em um laptop, o moondream definitivamente merece ser testado em um sandbox. Você pode experimentar o modelo no navegador no site oficial do projeto na seção Playground.
Projetos relacionados