Recherche

Annonce de Pixtral 12B

September 17, 2024

By Mistral AI team

À noter : ce modèle est déprécié

Pixtral 12B n’est plus maintenu et a été remplacé par nos derniers modèles de vision et multimodaux, plus puissants.

Explorer nos capacités de vision actuelles

Pixtral 12B en bref :

  • Nativement multimodal, entraîné sur des données image et texte entrelacées

  • Fortes performances sur les tâches multimodales, avec d’excellents résultats en suivi d’instructions

  • Maintient des performances de pointe sur les benchmarks uniquement textuels

  • Architecture :

    • Nouvel encodeur de vision de 400 M de paramètres, entraîné à partir de zéro

    • Décodeur multimodal de 12 milliards de paramètres basé sur Mistral Nemo

    • Prend en charge les tailles d’image et les rapports d’aspect variables

    • Prend en charge plusieurs images dans la longue fenêtre de contexte de 128 000 tokens

  • Utilisation :

Pixtral est entraîné pour comprendre à la fois les images naturelles et les documents. Il atteint 52,5 % sur le benchmark de raisonnement MMMU, devant plusieurs modèles plus grands. Le modèle montre de fortes capacités sur des tâches comme la compréhension de graphiques et de figures, la réponse à des questions sur documents, le raisonnement multimodal et le suivi d’instructions. Pixtral peut ingérer des images dans leur résolution native et leur rapport d’aspect d’origine, ce qui donne à l’utilisateur de la flexibilité sur le nombre de tokens utilisés pour traiter une image. Pixtral peut aussi traiter n’importe quel nombre d’images dans sa longue fenêtre de contexte de 128 000 tokens. Contrairement aux précédents modèles open source, Pixtral ne sacrifie pas les performances sur les benchmarks textuels pour exceller dans les tâches multimodales.

Pixtral Benchmarks

Performances

Pixtral a été entraîné pour servir de remplacement direct de Mistral Nemo 12B. Son principal facteur de différenciation par rapport aux modèles open source existants est un raisonnement multimodal de premier plan sans compromis sur les capacités textuelles clés, comme le suivi d’instructions, le code et les mathématiques.

Protocole d’évaluation

Nous réévaluons une gamme de modèles ouverts et fermés avec la même suite d’évaluation. Pour chaque jeu de données, le prompt a été choisi pour reproduire les résultats des principaux modèles multimodaux (GPT-4o et Claude-3.5-Sonnet). Tous les modèles ont ensuite été évalués avec ce même prompt. Dans l’ensemble, Pixtral dépasse largement tous les modèles ouverts de taille comparable et, dans de nombreux cas, dépasse des modèles fermés comme Claude 3 Haiku. Pixtral dépasse même ou égale les performances de modèles beaucoup plus grands, comme LLaVa OneVision 72B, sur les benchmarks multimodaux. Tous les prompts seront publiés en open source.

Pixtral Comparison

Performances de Pixtral par rapport à des modèles multimodaux fermés et plus grands. [Tous les modèles ont été benchmarkés avec la même suite d’évaluation et le même prompt. Nous vérifions que les prompts reproduisent les performances rapportées pour GPT-4o et Claude 3.5 Sonnet (les prompts seront fournis dans le rapport technique)].

Suivi d’instructions

Pixtral excelle particulièrement dans le suivi d’instructions multimodal et uniquement textuel par rapport aux autres modèles multimodaux ouverts. Il dépasse largement Qwen2-VL 7B, LLaVa-OneVision 7B et Phi-3.5 Vision en suivi d’instructions, avec une amélioration relative de 20 % en texte sur IF-Eval et MT-Bench par rapport au modèle OSS le plus proche. Pour évaluer plus finement cette capacité dans les cas d’usage multimodaux, nous créons des versions multimodales de ces benchmarks : MM-IF-Eval et MM-MT-Bench. Pixtral dépasse aussi les alternatives open source sur les benchmarks de suivi d’instructions multimodales. Nous publierons MM-MT-Bench en open source pour la communauté.

Pixtral Comparison 2

Performances de Pixtral par rapport aux modèles multimodaux ouverts. Tous les modèles ont été benchmarkés avec la même suite d’évaluation et le même prompt.

Architecture

Taille d’image variable : Pixtral est conçu pour optimiser à la fois la vitesse et les performances. Nous avons entraîné un nouvel encodeur de vision qui prend nativement en charge les tailles d’image variables :

  • Nous passons simplement les images dans l’encodeur de vision à leur résolution native et avec leur rapport d’aspect d’origine, en les convertissant en tokens image pour chaque patch 16x16 de l’image

  • Ces tokens sont ensuite aplatis pour créer une séquence, avec des tokens [IMG BREAK] et [IMG END] ajoutés entre les lignes et à la fin de l’image.

  • Les tokens [IMG BREAK]

Ainsi, Pixtral peut être utilisé pour comprendre précisément des diagrammes, graphiques et documents complexes en haute résolution, tout en offrant des vitesses d’inférence rapides sur de petites images comme des icônes, des cliparts et des équations.

Pixtral Architecture

Pixtral utilise un nouvel encodeur de vision entraîné à partir de zéro, qui prend nativement en charge les tailles d’image variables.

Architecture finale : Pixtral comporte deux composants : l’encodeur de vision, qui tokenize les images, et un décodeur Transformer multimodal, qui prédit le prochain token de texte à partir d’une séquence de texte et d’images. Le modèle est entraîné à prédire le prochain token de texte sur des données image et texte entrelacées. Cette architecture permet à Pixtral de traiter n’importe quel nombre d’images de tailles arbitraires dans sa grande fenêtre de contexte de 128 000 tokens.

Pixtral Model Architecture

Exemples qualitatifs

Raisonnement sur des figures complexes

Ce tableau combine les données des deux tableaux, en veillant à inclure tous les modèles et leurs scores respectifs pour chaque benchmark dans un format unique et cohérent.

Gdp

Prompt :

Lister les cinq pays d’Europe avec le PIB le plus élevé

Réponse :

Les cinq pays d’Europe avec le PIB le plus élevé, d’après l’image, sont :

  1. Allemagne

    • PIB : 3,99 billions de dollars

    • Pourcentage : 4,65 %

  2. Royaume-Uni

    • PIB : 2,82 billions de dollars

    • Pourcentage : 3,29 %

  3. France

    • PIB : 2,78 billions de dollars

    • Pourcentage : 3,24 %

  4. Italie

    • PIB : 2,07 billions de dollars

    • Pourcentage : 2,42 %

  5. Espagne

    • PIB : 1,43 billion de dollars

    • Pourcentage : 1,66 %

Ces pays sont indiqués en vert sur le diagramme.

Compréhension et analyse de graphiques

Image :

Loss Curve

Prompt :

Quand les choses ont-elles commencé à mal tourner pour dark dragon ?

Réponse :

L’image est un graphique en courbes intitulé 'train/loss' qui montre la perte d’entraînement au fil des étapes pour quatre modèles différents : dark-dragon-50, dainty-sunset-49, different-haze-34 et morning-field-33. L’axe des x représente les étapes, de 0 à 60 k, et l’axe des y représente la perte sur une échelle logarithmique de 1e-5 à 1e+5.

Pour déterminer quand les choses ont commencé à mal tourner pour le modèle dark-dragon-50, nous devons examiner la ligne rouge qui le représente. Au début, la perte diminue, ce qui indique que le modèle apprend efficacement. Cependant, autour de l’étape 10 k, la perte commence à fortement augmenter. Ce pic indique que les performances du modèle se dégradent. La perte continue de monter brutalement et de fluctuer, jusqu’à atteindre des valeurs très élevées, ce qui suggère que le modèle n’apprend pas efficacement et qu’il est probablement en surapprentissage ou confronté à d’autres problèmes.

Le point critique où les choses ont commencé à mal tourner pour le modèle dark-dragon-50 se situe donc autour de l’étape 10 k.

Suivi d’instructions multi-image

Images :

Multi Images

Prompt :

Combiner les informations des deux tableaux dans un seul tableau Markdown

Réponse :

Pour combiner les informations des deux tableaux en un seul tableau, nous devons aligner les modèles et leurs scores correspondants pour chaque benchmark. Le tableau combiné est le suivant :

| Model | MMMU (CoT) | Mathvista (CoT) | ChartQA (CoT) | DocVQA (ANLS) | VQAv2 (VQA Match) |
|------------------------|------------|-----------------|---------------|---------------|-------------------|
| Pixtral 12B | 52.5 | 58.0 | 81.8 | 90.7 | 78.6 |
| Claude-3 Haiku | 50.4 | 44.8 | 69.6 | 74.6 | 68.4 |
| Gemini-1.5 Flash 8B (0827) | 50.7 | 56.9 | 78.0 | 79.5 | 65.5 |
| LLaVA-OV 72B | 54.4 | 57.2 | 66.9 | 91.6 | 83.8 |
| GPT-4o | 68.6 | 64.6 | 85.1 | 88.9 | 77.8 |
| Claude-3.5 Sonnet | 68.0 | 64.4 | 87.6 | 90.3 | 70.7 |
| Qwen2-VL 7B | 47.6 | 54.4 | 38.6 | 94.5 | 75.9 |
| LLaVA-OV 7B | 45.1 | 36.1 | 67.1 | 90.5 | 78.3 |
| Phi-3 Vision | 40.3 | 36.4 | 72.0 | 84.9 | 42.4 |
| Phi-3.5 Vision | 38.3 | 39.3 | 67.7 | 74.4 | 56.1 |

Ce tableau combine les données des deux tableaux, en veillant à inclure tous les modèles et leurs scores respectifs pour chaque benchmark dans un format unique et cohérent.

De l’image au code

Image :

Image to Code

Prompt :

Écrire du code HTML pour créer un site web comme celui-ci

Réponse :

Bien sûr. Vous trouverez ci-dessous un exemple de code HTML pour créer une page web simple qui permet aux utilisateurs de choisir un parfum de glace. Cet exemple comprend un menu déroulant pour sélectionner le parfum et un bouton « Suivant ».

```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pick an Ice Cream Flavor</title>
<style>
body {
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #f0f0f0;
}
.container {
background: white;
padding: 20px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
}
h1 {
text-align: center;
}
select {
width: 100%;
padding: 10px;
margin-top: 10px;
margin-bottom: 20px;
}
button {
width: 100%;
padding: 10px;
background-color: #4CAF50;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}
button:hover {
background-color: #45a049;
}
</style>
</head>
<body>
<div class="container">
<h1>Pick An Ice Cream Flavor</h1>
<select id="flavorSelect">
<option value="vanilla">Vanilla</option>
<option value="chocolate">Chocolate</option>
<option value="strawberry">Strawberry</option>
<option value="cookie_dough">Cookie Dough</option>
<option value="mint_chocolate">Mint Chocolate</option>
</select>
<button onclick="next()">Next</button>
</div>
<footer style="position: fixed; bottom: 0; width: 100%; text-align: center; font-size: 12px;">
&copy; copyright MistralAI
</footer>
<script>
function next() {
const selectedFlavor = document.getElementById('flavorSelect').value;
alert('You selected: ' + selectedFlavor);
}
</script>
</body>
</html>

Explication :

  • Structure HTML : La page web se compose d’une div conteneur qui contient le titre, un menu déroulant et un bouton.

  • Style CSS : Un style de base est appliqué pour centrer le contenu et mettre en forme les éléments.

  • Fonction JavaScript : La fonction `next` est appelée lorsque vous cliquez sur le bouton « Suivant ». Elle récupère le parfum sélectionné dans le menu déroulant et affiche une alerte avec le parfum choisi.

Vous pouvez copier-coller ce code dans un fichier HTML et l’ouvrir dans un navigateur web pour voir le résultat.

Site web généré :

Screenshot of the generated website

Compréhension de scènes naturelles

Pisa Tower

Prompt : Cette personne est-elle vraiment très grande, ou ce bâtiment est-il simplement très petit ?

Réponse :

L’image montre une personne qui tient son pouce devant la tour de Pise, ce qui donne l’impression que le pouce est beaucoup plus grand que la tour. Cela crée une illusion d’optique et fait paraître la tour plus petite qu’elle ne l’est réellement. En réalité, la tour de Pise est une grande structure iconique, et le pouce de la personne est loin d’être aussi grand qu’il en a l’air sur l’image. Le but de cette photo est de montrer la hauteur et la taille impressionnantes de la tour en la comparant à un objet familier, comme un pouce.

Comment utiliser Pixtral ?

Le Chat

Vous pouvez essayer Pixtral facilement et gratuitement via Le Chat, notre interface de conversation conviviale. Vous pouvez choisir Pixtral dans la liste des modèles, télécharger une image et commencer à poser des questions à son sujet.

La Plateforme

Pixtral est aussi disponible sur La Plateforme. Vous pouvez utiliser les capacités de Pixtral via des appels API, ce qui permet de l’intégrer à différentes applications et workflows. Un exemple simple est présenté ci-dessous. Vous trouverez plus de détails dans notre documentation.

curl https://api.mistral.ai/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $MISTRAL_API_KEY" \
-d '{
"model": "pixtral-12b-2409",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "What’s in this image?"
},
{
"type": "image_url",
"image_url": "https://tripfixers.com/wp-content/uploads/2019/11/eiffel-tower-with-snow.jpeg"
}
]
}
],
"max_tokens": 300
}'

mistral-inference

Le moyen le plus simple d’utiliser Pixtral localement consiste à utiliser mistral-inference. Après l’installation de mistral_inference, vous pouvez télécharger le modèle, charger le modèle et exécuter le modèle avec le code ci-dessous. Pour plus d’informations, consultez cette page.

# download the model
from huggingface_hub import snapshot_download
from pathlib import Path
mistral_models_path = Path.home().joinpath('mistral_models', 'Pixtral')
mistral_models_path.mkdir(parents=True, exist_ok=True)
snapshot_download(repo_id="mistralai/Pixtral-12B-2409", allow_patterns=["params.json", "consolidated.safetensors", "tekken.json"], local_dir=mistral_models_path)
# load the model
from mistral_inference.transformer import Transformer
from mistral_inference.generate import generate
from mistral_common.tokens.tokenizers.mistral import MistralTokenizer
from mistral_common.protocol.instruct.messages import UserMessage, TextChunk, ImageURLChunk
from mistral_common.protocol.instruct.request import ChatCompletionRequest
tokenizer = MistralTokenizer.from_file(f"{mistral_models_path}/tekken.json")
model = Transformer.from_folder(mistral_models_path)
# Run the model
url = "https://huggingface.co/datasets/patrickvonplaten/random_img/resolve/main/yosemite.png"
prompt = "Describe the image."
completion_request = ChatCompletionRequest(messages=[UserMessage(content=[ImageURLChunk(image_url=url), TextChunk(text=prompt)])])
encoded = tokenizer.encode_chat_completion(completion_request)
images = encoded.images
tokens = encoded.tokens
out_tokens, _ = generate([tokens], model, images=[images], max_tokens=256, temperature=0.35, eos_id=tokenizer.instruct_tokenizer.tokenizer.eos_id)
result = tokenizer.decode(out_tokens[0])
print(result)

vLLM

Si vous choisissez de servir Pixtral localement, nous recommandons aussi d’utiliser Pixtral avec la Bibliothèque vLLM, une bonne option pour atteindre un débit de serving plus élevé. Nous remercions l’équipe vLLM pour son aide à intégrer Pixtral rapidement. Un exemple d’utilisation simple est présenté ci-dessous. Vous trouverez plus d’informations ici.

from vllm import LLM
from vllm.sampling_params import SamplingParams
model_name = "mistralai/Pixtral-12B-2409"
sampling_params = SamplingParams(max_tokens=8192)
llm = LLM(model=model_name, tokenizer_mode="mistral")
prompt = "Describe this image in one sentence."
image_url = "https://picsum.photos/id/237/200/300"
messages = [
{
"role": "user",
"content": [{"type": "text", "text": prompt}, {"type": "image_url", "image_url": {"url": image_url}}]
},
]
outputs = vllm_model.model.chat(messages, sampling_params=sampling_params)
print(outputs[0].outputs[0].text)