

Nous lançons jina-vlm, un modèle de langage vision de 2,4 milliards de paramètres qui réalise des performances de pointe en matière de question-réponse visuel multilingue parmi les VLM ouverts à l'échelle de 2B. En combinant un encodeur de vision SigLIP2 avec une base de langage Qwen3 via un connecteur de pooling d'attention, jina-vlm offre de solides performances dans 29 langues tout en restant suffisamment efficace pour fonctionner sur du matériel grand public.
| Modèle | Taille | VQA Moy. | MMMB | Multi. MMB | DocVQA | OCRBench |
|---|---|---|---|---|---|---|
| jina-vlm | 2.4B | 72.3 | 78.8 | 74.3 | 90.6 | 778 |
| Qwen2-VL-2B | 2.1B | 66.4 | 71.3 | 69.4 | 89.2 | 809 |
| Qwen3-VL-2B | 2.8B | 71.6 | 75.0 | 72.3 | 92.3 | 858 |
| InternVL3-2B | 2.2B | 69.2 | 73.6 | 71.9 | 87.4 | 835 |
| InternVL3.5-2B | 2.2B | 71.6 | 74.6 | 70.9 | 88.5 | 836 |





tagArchitecture
Deux défis ont limité le déploiement pratique des VLM : les capacités multilingues se dégradent souvent lors de l'adaptation à la vision, et les VLM de haute qualité restent coûteux en termes de calcul. jina-vlm relève ces deux défis grâce à des choix architecturaux judicieux : notre connecteur de pooling d'attention réduit les 词元 visuels de 4× avec un impact minimal sur les performances, et une recette d'entraînement qui préserve explicitement les capacités multilingues.
L'innovation architecturale clé est notre connecteur vision-langage. Plutôt que de transmettre les 729 词元 visuels par tuile au modèle de langage, nous appliquons un pooling d'attention 2×2 qui réduit ce nombre à 182 词元, soit une réduction de 4× avec une perte d'information minimale. Le connecteur fonctionne comme suit :
- Fusion des caractéristiques multicouches : Nous concaténons les caractéristiques des couches ViT 18 et 24 (avant-dernière et neuvième avant-dernière), en capturant à la fois les détails spatiaux fins et la sémantique de haut niveau.
- Pooling d'attention : Pour chaque voisinage de patch 2×2, nous calculons une requête comme la moyenne des caractéristiques du voisinage, puis nous appliquons une attention croisée pour produire une seule représentation mise en commun.
- Projection SwiGLU : Les caractéristiques mises en commun sont projetées vers la dimension du modèle de langage via une unité linéaire à porte.
Ce gain d'efficacité est décrit ci-dessous :
| Métrique | Sans pooling | Avec pooling | Réduction |
|---|---|---|---|
| 词元 visuels (12 tuiles + vignette) | 9,477 | 2,366 | 4.0× |
| FLOPs de préremplissage LLM | 27.2 TFLOPs | 6.9 TFLOPs | 3.9× |
| Mémoire du cache KV | 2.12 GB | 0.53 GB | 4.0× |
Étant donné que le ViT traite chaque tuile de manière identique, quel que soit le pooling, ces économies s'appliquent exclusivement au modèle de langage, qui est le coût dominant pendant l'inférence.
tagProcédure d'entraînement
Un mode de défaillance courant dans l'entraînement des VLM est l'oubli catastrophique : le modèle de langage perd ses capacités textuelles lorsqu'il s'adapte aux entrées visuelles. Ceci est particulièrement aigu pour les modèles multilingues, où l'adaptation à la vision peut dégrader les performances sur les langues autres que l'anglais.
Nous abordons ce problème grâce à un pipeline d'entraînement en deux étapes avec des données multilingues explicites et une préservation du texte seul.
Étape 1 : Entraînement à l'alignement
La première étape se concentre sur l'ancrage sémantique interlinguistique en utilisant des ensembles de données de légendes couvrant divers domaines visuels : scènes naturelles, documents, infographies et diagrammes. Il est essentiel d'inclure 15 % de données textuelles pour maintenir la compréhension du langage de la base. Le connecteur utilise un taux d'apprentissage plus élevé (2e-4) et un échauffement plus court que l'encodeur et le décodeur, ce qui lui permet de s'adapter rapidement tandis que les composants pré-entraînés changent progressivement.
Étape 2 : Ajustement fin des instructions
La deuxième étape consiste à entraîner le suivi des instructions pour les tâches de VQA et de raisonnement. Nous combinons des ensembles de données publics couvrant le VQA académique, la compréhension de documents, l'OCR, les mathématiques et le raisonnement, avec des données d'instructions textuelles pour maintenir les capacités linguistiques.
Les données combinées comprennent environ 5 millions d'échantillons multimodaux et 12 milliards de 词元 sur 29 langues, dont environ la moitié en anglais et le reste en chinois, arabe, allemand, espagnol, français, italien, japonais, coréen, portugais, russe, turc, vietnamien, thaï, indonésien, hindi, bengali et autres.
tagDémarrage
tagVia l'API Jina
Nous fournissons une API compatible avec OpenAI à l'adresse https://api-beta-vlm.jina.ai.
tagImage à partir d'une URL
| Format | Exemple |
|---|---|
| URL HTTP/HTTPS | https://example.com/image.jpg |
| URI de données Base64 | data:image/jpeg;base64,/9j/4AAQ... |
curl https://api-beta-vlm.jina.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $JINA_API_KEY" \
-d '{
"model": "jina-vlm",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "Describe this image"},
{"type": "image_url", "image_url": {"url": "https://example.com/photo.jpg"}}
]
}]
}'
Image locale (base64)
curl https://api-beta-vlm.jina.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $JINA_API_KEY" \
-d '{
"model": "jina-vlm",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "What is in this image?"},
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,'$(base64 -i image.jpg)'"}}
]
}]
}'
Requête textuelle uniquement
curl https://api-beta-vlm.jina.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $JINA_API_KEY" \
-d '{
"model": "jina-vlm",
"messages": [{"role": "user", "content": "What is the capital of France?"}]
}'
Réponse en streaming
Ajoutez "stream": true pour recevoir les 词元 au fur et à mesure de leur génération :
curl https://api-beta-vlm.jina.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $JINA_API_KEY" \
-d '{
"model": "jina-vlm",
"stream": true,
"messages": [{"role": "user", "content": "Write a haiku about coding"}]
}'
Lorsque le service démarre à froid, vous recevrez :
{
"error": {
"message": "Model is loading, please retry in 30-60 seconds. Cold start takes ~30s after the service scales up.",
"code": 503
}
}
Réessayez simplement votre requête après avoir attendu.
tagVia CLI
Le référentiel HuggingFace comprend un script infer.py pour des expériences rapides :
# Single image
python infer.py -i image.jpg -p "What's in this image?"
# Streaming output
python infer.py -i image.jpg -p "Describe this image" --stream
# Multiple images
python infer.py -i img1.jpg -i img2.jpg -p "Compare these images"
# Text-only
python infer.py -p "What is the capital of France?"tagVia Transformers
from transformers import AutoModelForCausalLM, AutoProcessor
import torch
from PIL import Image
# Load model and processor
model = AutoModelForCausalLM.from_pretrained(
"jinaai/jina-vlm",
torch_dtype=torch.bfloat16,
trust_remote_code=True,
device_map="auto"
)
processor = AutoProcessor.from_pretrained(
"jinaai/jina-vlm",
trust_remote_code=True
)
# Load an image
image = Image.open("document.png")
# Create the conversation
messages = [
{
"role": "user",
"content": [
{"type": "image", "image": image},
{"type": "text", "text": "What is the main topic of this document?"}
]
}
]
# Process and generate
inputs = processor.apply_chat_template(
messages,
add_generation_prompt=True,
tokenize=True,
return_dict=True,
return_tensors="pt"
).to(model.device)
outputs = model.generate(**inputs, max_new_tokens=256, do_sample=False)
response = processor.decode(outputs[0], skip_special_tokens=True)
print(response)tagConclusion
jina-vlm démontre que les petits VLM peuvent atteindre une forte compréhension visuelle multilingue grâce à des choix architecturaux et de formation judicieux. Le connecteur de mise en commun de l'attention offre une réduction de 4× du nombre de 词元 avec un impact minimal sur les performances, et l'incorporation de données textuelles uniquement pendant la formation multimodale préserve les capacités linguistiques qui se dégraderaient autrement.
Nous notons plusieurs limitations de l'approche actuelle :
- Surcharge de la mosaïque : le traitement évolue linéairement avec le nombre de mosaïques. Pour les images à très haute résolution, cela peut devenir important. De plus, la mosaïque peut nuire aux tâches nécessitant une compréhension globale de la scène, telles que le comptage d'objets ou le raisonnement spatial au-delà des limites des mosaïques. La vignette globale atténue partiellement ce problème, mais les approches en résolution native peuvent être mieux adaptées à de telles tâches.
- Raisonnement multi-images : les performances sur les benchmarks multi-images sont plus faibles en raison de données d'entraînement limitées dans ce régime. L'optimisation des réponses visuelles concises semble entrer en conflit avec le raisonnement multi-étapes étendu, comme en témoigne la dégradation de MMLU-Pro.
Les travaux futurs pourraient explorer une gestion de la résolution plus efficace, des améliorations ciblées pour les tâches de comptage et spatiales, et étudier si notre recette de formation multilingue se transpose à des échelles de modèles plus grandes.







