Visión para proyectos personales sin comprar un clúster de GPU
Cada vez que necesitas agregar reconocimiento de imágenes o preguntas y respuestas basadas en fotos a un proyecto, tus manos recurren a las API de la nube. Pero pagar por cada llamada a OpenAI o enrutar solicitudes a través de servicios de terceros no siempre es deseable. Ejecutar un modelo multimodal pesado localmente tampoco es fácil: la mayoría de las soluciones de código abierto requieren GPU con 24 GB de memoria o más.
El repositorio moondream resuelve exactamente este problema. Los desarrolladores de m87-labs ensamblaron un modelo multimodal compacto que analiza imágenes con confianza mientras pesa solo unos pocos gigabytes y se ejecuta sin problemas incluso en hardware modesto.
Qué puede hacer moondream
El modelo toma una imagen junto con una consulta de texto como entrada y devuelve una respuesta significativa en lenguaje natural. El repositorio contiene dos versiones:
- moondream 2B con dos mil millones de parámetros para tareas estándar, incluyendo generación de subtítulos, respuesta a preguntas visuales y detección de objetos
- moondream 0.5B con 500 millones de parámetros, comprimida mediante destilación para ejecutarse en smartphones, computadoras de placa única y microservicios con consumo mínimo de RAM
Aquí hay un par de ejemplos del repositorio:

Si le preguntas al modelo qué está haciendo la persona en la foto, responderá: "La niña está sentada en una mesa y comiendo una hamburguesa grande". Cuando se le pregunta sobre el color del cabello, especifica claramente que son blancos.
El segundo ejemplo muestra un desglose más detallado del entorno:

Cuando se le pregunta "¿Qué es esto?", moondream produce un párrafo detallado: reconoce el rack de servidores, nota los cables de alimentación conectados, la alfombra en el piso y un sofá cercano, así como la pared de ladrillos en el fondo.
Cómo ejecutar localmente
El modelo está escrito en Python y se integra en proyectos en solo una docena de líneas de código. La inferencia básica solo requiere las bibliotecas estándar de 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 versión 0.5B se ejecuta incluso en CPU sin demoras críticas. Si los recursos locales no están disponibles en absoluto, los autores han preparado ejemplos de implementación a través de la plataforma sin servidor Modal.
Dónde resulta útil en la práctica
El pequeño tamaño abre escenarios donde los modelos grandes simplemente no se ajustan al presupuesto o los requisitos de latencia:
- Etiquetado automático y generación de subtítulos en archivos multimedia locales.
- Moderación de contenido en bots y formularios web directamente en el servidor de aplicaciones.
- Robótica y dispositivos DIY basados en Raspberry Pi, donde no hay acceso a internet estable.
- Filtrado rápido de imágenes antes de enviar a un procesamiento posterior más pesado.
Por supuesto, no deberías esperar que un modelo de medio billón de parámetros entienda infografías complejas o lea texto manuscrito. Pero para la navegación básica de imágenes y descripción de escenas, moondream funciona excelentemente.
Si necesitas un módulo VLM rápido y ligero que no te cueste una fortuna en servidores y que se ejecute incluso en una laptop, moondream definitivamente merece ser probado en un sandbox. Puedes probar el modelo en el navegador en el sitio web oficial del proyecto en la sección Playground.
Proyectos relacionados