>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Python

Une vision pour les projets personnels sans investir dans un cluster GPU

Chaque fois que vous devez ajouter de la reconnaissance d'images ou des Q&R basées sur des photos à un projet, vos mains se tournent vers les API cloud. Mais payer chaque appel OpenAI ou router les requêtes via des services tiers n'est pas toujours souhaitable. Exécuter un modèle multimodal lourd en local n'est pas facile non plus : la plupart des solutions open source nécessitent des GPU avec 24 Go de mémoire ou plus.

Le dépôt moondream résout exactement ce problème. Les développeurs de m87-labs ont assemblé un modèle multimodal compact qui analyse les images avec assurance tout en ne pesant que quelques gigaoctets et fonctionne sans accroc même sur du matériel modeste.

Ce que moondream peut accomplir

Le modèle prend une image accompagnée d'une requête textuelle en entrée et renvoie une réponse pertinente en langage naturel. Le dépôt contient deux versions :

  • moondream 2B avec deux milliards de paramètres pour les tâches standard, incluant la génération de légendes, les réponses aux questions visuelles et la détection d'objets
  • moondream 0.5B avec 500 millions de paramètres, compressé via distillation pour fonctionner sur les smartphones, les ordinateurs monocartes et les microservices avec une consommation RAM minimale

Voici quelques exemples du dépôt :

A girl eating a hamburger

Si vous demandez au modèle ce que fait la personne sur la photo, il répondra : « La jeune fille est assise à une table et mange un gros hamburger ». Lorsqu'on lui demande la couleur de ses cheveux, il précise clairement qu'ils sont blancs.

Le deuxième exemple montre une analyse plus détaillée de l'environnement :

Server rack

Lorsqu'on lui demande « Qu'est-ce que c'est ? », moondream produit un paragraphe détaillé : il reconnaît la baie de serveurs, note les câbles d'alimentation branchés, la moquette au sol et un canapé à proximité, ainsi que le mur de briques en arrière-plan.

Comment exécuter en local

Le modèle est écrit en Python et s'intègre dans les projets en une douzaine de lignes de code. L'inférence basique ne nécessite que les bibliothèques standard 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 version 0.5B fonctionne même sur CPU nu sans délais critiques. Si les ressources locales ne sont pas disponibles du tout, les auteurs ont préparé des exemples de déploiement via la plateforme serverless Modal.

Où cela s'avère utile en pratique

La petite taille ouvre des scénarios où les grands modèles ne correspondent tout simplement pas aux exigences de budget ou de latence :

  1. Taggage automatique et génération de légendes dans les archives médias locales.
  2. Modération de contenu dans les bots et les formulaires web directement sur le serveur d'application.
  3. Robotique et appareils DIY basés sur Raspberry Pi, où il n'y a pas d'accès à un internet stable.
  4. Filtrage rapide des images avant l'envoi vers un post-traitement plus lourd.

Bien sûr, il ne faut pas s'attendre à ce qu'un modèle de cinq cents millions de paramètres comprenne des infographies complexes ou lise du texte manuscrit. Mais pour la navigation d'images basique et la description de scènes, moondream excelle.

Si vous avez besoin d'un module VLM rapide et léger qui ne ruinera pas les serveurs et fonctionnera même sur un ordinateur portable, moondream mérite définitivement d'être testé dans un bac à sable. Vous pouvez essayer le modèle dans le navigateur sur le site officiel du projet dans la section Playground.

Projets similaires