API vision-langage
LibreVLM charge un modèle vision-langage génératif et l'utilise comme détecteur d'objets. La liste de classes sert de prompt plutôt que de tête fixe, et le modèle renvoie les mêmes Results que toute autre famille.
Installer
Ce niveau nécessite l'extra vlm.
pip install 'libreyolo[vlm]'La fabrique
LibreVLM(model: str = "qwen3-vl-4b", **kwargs) -> LibreVLMModelmodel est un alias, et non un chemin. **kwargs atteint le constructeur de
la famille, qui accepte device, names (le vocabulaire initial, équivalent
à un appel à set_classes après le chargement), prompt (pour remplacer le
prompt de détection) et max_new_tokens. Un alias inconnu lève ValueError
en énumérant tous les alias.
from libreyolo import LibreVLM, SAMPLE_IMAGE model = LibreVLM("lfm2-vl-450m")model.set_classes(["person", "skateboard"]) result = model.predict(SAMPLE_IMAGE)for box, cls in zip(result.boxes.xyxy, result.boxes.cls): print(result.names[int(cls)], box.tolist())from libreyolo import LibreVLM, SAMPLE_IMAGE model = LibreVLM("lfm2-vl-450m")print(model.chat(SAMPLE_IMAGE, "How many people are in this image?"))Alias
| Famille | Alias | Tailles | Poids |
|---|---|---|---|
| Qwen3-VL | qwen3-vl, qwen3-vl-2b, qwen3-vl-4b, qwen3-vl-8b | 2b, 4b, 8b | Qwen/Qwen3-VL-2B-Instruct, -4B-, -8B- |
| LFM2-VL | lfm2-vl, lfm2-vl-450m, lfm2-vl-1.6b | 450m, 1.6b | LiquidAI/LFM2.5-VL-450M, -1.6B |
| InternVL3 | internvl3, internvl3-1b, internvl3-2b, internvl3-8b | 1b, 2b, 8b | OpenGVLab/InternVL3-1B-hf, -2B-hf, -8B-hf |
| SmolVLM2 | smolvlm2, smolvlm2-2.2b, smolvlm2-500m | 2.2b, 500m | HuggingFaceTB/SmolVLM2-2.2B-Instruct, SmolVLM2-500M-Video-Instruct |
| Florence-2 | florence-2, florence2, florence-2-base, florence-2-large | base, large | florence-community/Florence-2-base, -large |
| Kosmos-2 | kosmos-2, kosmos2 | 224 | microsoft/kosmos-2-patch14-224 |
| LocateAnything | locate-anything, locateanything, locate-anything-3b, locateanything-3b | 3b | nvidia/LocateAnything-3B |
| SenseNova-Vision | sensenova-vision, sensenova-vision-7b, sensenovavision | 7b | LibreYOLO/SenseNovaVision7b |
| WeVisOne-VL | wevisone-vl, wevisone, wevisonevl, wevisone-vl-2b, wevisone-vl-4b | 2b, 4b | tencent/WeVisOne-VL-2B, -4B |
| LibreMODUS | libremodus, libremodus-14b-a7b, modus, modus-14b-a7b | 14b-a7b | Snapshot upstream épinglé |
L'alias par défaut est qwen3-vl-4b. Les tailles des alias par défaut de
chaque famille sont celles qui apparaissent en premier : qwen3-vl se résout
en 4b, lfm2-vl en 450m, internvl3 en 2b, smolvlm2 en 2.2b, florence-2 en base et wevisone-vl en 2b.
LibreVLM, LibreLFM2VL, LibreQwen3VL, LibreSmolVLM2, LibreInternVL3,
LibreFlorence2, LibreKosmos2, LibreLocateAnything, LibreWeVisOneVL
et LibreMODUS (également orthographié LibreModus) sont exportés au niveau du package.
La détection comprend aussi north-micro-vision, gemma-4-e2b, gemma-4-e4b, moondream-2, moondream-3 et lfm2-vl-3b. L'alias nu gemma-4 sélectionne E4B. Les alias Molmo2 sont molmo2-4b, molmo2-8b et molmo2-o-7b ; la valeur par défaut est 4B. Les alias définissent le routage, sans garantir que chaque snapshot distant a été téléchargé et testé. moondream-3 ne se charge pas en 1.6.0 : il manque des shards de poids sur son miroir.
Tâches
Les tâches prises en charge dépendent de la famille. Ces adaptateurs prennent en charge plusieurs tâches :
| Famille | Tâches prises en charge |
|---|---|
| LocateAnything | detect, point |
| SenseNova-Vision | detect, segment, panoptic, pose, point, depth, ocr |
| WeVisOne-VL | detect, point, segment, matte, ocr |
Comme la tâche est déterminée par le prompt et non intégrée à un checkpoint, elle peut être modifiée sur un modèle déjà chargé :
model.set_task(task: str) -> LibreVLMModelLa tâche est validée par rapport à la liste prise en charge par la famille,
reste appliquée aux appels predict() et track() ultérieurs, et le modèle
est renvoyé afin de pouvoir chaîner les appels.
Molmo2 renvoie des points et exige {label} dans les templates de pointage personnalisés. referring=True de WeVisOne-VL fait envoyer à detect une génération par expression, et ses tâches segment, matte et la détection référentielle lèvent ValueError sans vocabulaire. Moondream prend en charge la détection, les points et le chat natif. Utilisez LibreGround pour les requêtes transformant une instruction en clic.
set_classes
model.set_classes(classes: list[str]) -> LibreVLMModelDéfinit le vocabulaire ouvert. Tous les mots fonctionnent, car ils sont
transmis au modèle sous forme de prompt au lieu d'être limités à une tête fixe.
La liste ne doit pas être vide et ses entrées doivent être uniques sans tenir
compte de la casse. Une chaîne seule lève TypeError, car elle serait
décomposée en classes d'un caractère. Le vocabulaire est persistant :
définissez-le une fois après le chargement, il reste actif jusqu'à sa prochaine
définition.
chat
model.chat(image, prompt, max_new_tokens=None, color_format="auto") -> strGénération multimodale brute : une image et un prompt en entrée, le texte
décodé verbatim en sortie. C'est la porte de sortie sous l'outil pratique de
détection, destinée aux questions libres, au comptage ou à un format de sortie
non couvert par le wrapper de détection. max_new_tokens utilise par défaut
la valeur MAX_NEW_TOKENS de la famille, soit 1024 sur la classe de base. Le
décodage est glouton avec une légère pénalité de répétition.
Confiance
La sortie générée ne possède aucune confiance calibrée par bounding box. Cette
version attribue une valeur factice constante afin que predict, le dessin et
track fonctionnent. Le filtrage conf= et la mAP deviennent donc
approximatifs plutôt que significatifs. C'est également la raison pour laquelle
val() lève une erreur : une mAP COCO calculée sur des scores factices serait
trompeuse.
Prédire et suivre
L'interface de prédiction standard s'applique et track() fonctionne. Un
détecteur VLM s'intègre donc au même pipeline que toute autre famille. Deux
politiques de classe diffèrent d'un détecteur convolutionnel : l'augmentation
à l'inférence est désactivée, car une augmentation multi-échelle n'a aucun sens
pour un générateur à résolution fixe, et la prédiction par batch est
désactivée, car la génération est autorégressive et le prétraitement renvoie
un encodage texte-image plutôt qu'un tenseur d'images empilable.
Fonctionnalités non prises en charge
L'export et la validation par mAP de détection ne sont pas pris en charge. L'entraînement est limité au parcours Qwen3-VL ci-dessous.
Code distant
Chaque famille fournie se charge par l'intermédiaire d'une classe de modèle
native. LibreYOLO n'exécute donc pas de code de dépôt tiers par défaut. Une
famille qui en a réellement besoin doit l'activer explicitement et épingler la
révision d'un snapshot. LocateAnything est la seule à le faire, avec le commit
c32291ca5e996f5a7a485845b4f57a233936bba0.
LibreMODUS constitue une exception explicite au schéma de checkpoint : son
alias se résout en un répertoire de fichiers upstream épinglés plutôt qu'en un
fichier .pt LibreYOLO. LibreYOLO ne lui ajoute pas de métadonnées v1.0 et ne
le republie pas.
Entraîner
Qwen3-VL prend en charge LoRA pour la détection via train(data=...) après installation de libreyolo[vlm-train]. Il gèle la tour de vision, choisit les meilleurs checkpoints selon la loss de validation et enregistre des répertoires de checkpoints. Consultez le fine-tuning VLM.