PaliGemma : un modèle léger de langage de vision ouvert (VLM)
Introduction
Google a récemment introduit un nouveau modèle de vision léger, PaliGemma. Ce modèle est sorti le 14 mai 2024 et dispose de capacités multimodales.
Un modèle vision-langage (VLM) est un type avancé d'intelligence artificielle qui intègre des données visuelles et textuelles pour effectuer des tâches qui nécessitent de comprendre et de générer à la fois des images et un langage. Ces modèles combinent des techniques de vision par ordinateur et de traitement du langage naturel, leur permettant d'analyser des images, de générer des légendes descriptives, de répondre à des questions sur le contenu visuel et même de s'engager dans un raisonnement visuel complexe.
Les VLM peuvent comprendre le contexte, déduire des relations et produire des résultats multimodaux cohérents en exploitant des ensembles de données à grande échelle et des architectures neuronales sophistiquées. Cela en fait des outils puissants pour des applications dans des domaines tels que la reconnaissance d’images, la création automatisée de contenu et les systèmes d’IA interactifs.
Gemma est une famille de modèles ouverts légers et de pointe développés en utilisant les mêmes recherches et technologies que les modèles Gemini. PaliGemma est un puissant modèle de langage à vision ouverte (VLM) qui a récemment été ajouté à la famille Gemma.
Conditions préalables pour PaliGemma
- Connaissances de base en ML : Compréhension des concepts d'apprentissage automatique et des modèles de langage de vision (VLM).
- Compétences en programmation : Maîtrise de Python.
- Dépendances : Installez les bibliothèques PyTorch et Hugging Face Transformers.
- Matériel : système compatible GPU pour une formation et une inférence plus rapides.
- Ensemble de données : accès à un ensemble de données de langage de vision approprié pour tester ou affiner.
Qu’est-ce que PaliGemma ?
PaliGemma est un nouveau modèle de langage de vision ouvert puissant inspiré de PaLI-3, construit à l'aide du modèle de vision SigLIP et du modèle de langage Gemma. Il est conçu pour offrir des performances de haut niveau dans des tâches telles que le sous-titrage d’images et de courtes vidéos, la réponse visuelle aux questions, la reconnaissance de texte dans les images, la détection d’objets et la segmentation.
Les points de contrôle pré-entraînés et affinés sont open source dans diverses résolutions, ainsi que des points de contrôle spécifiques à des tâches pour une utilisation immédiate.
PaliGemma combine SigLIP-So400m comme encodeur d'image et Gemma-2B comme décodeur de texte. SigLIP est un modèle SOTA capable de comprendre des images et du texte, similaire à CLIP, doté d'un encodeur d'image et de texte formé conjointement. Le modèle PaliGemma combiné, inspiré de PaLI-3, est pré-entraîné sur les données image-texte et peut être facilement ajusté pour des tâches telles que le sous-titrage et la segmentation de référence. Gemma, un modèle uniquement décodeur, gère la génération de texte. En intégrant l'encodage d'image de SigLIP à Gemma via un adaptateur linéaire, PaliGemma devient un puissant modèle de langage de vision.
Source
Présentation des versions du modèle PaliGemma
Points de contrôle de mélange :
- Modèles pré-entraînés et affinés sur un mélange de tâches.
- Convient pour l'inférence à usage général avec des invites en texte libre.
- Destiné uniquement à des fins de recherche.
Points de contrôle FT :
- Modèles affinés spécialisés sur différents référentiels académiques.
- Disponible en différentes résolutions.
- Destiné uniquement à des fins de recherche.
Résolutions du modèle :
- 224x224
- 448x448
- 896x896
Précisions du modèle :
- bfloat16
- flotteur16
- flotteur32
Structure du référentiel :
- Chaque référentiel contient des points de contrôle pour une résolution et une tâche données.
- Trois révisions sont disponibles pour chaque précision.
- La branche principale contient des points de contrôle float32.
- Les révisions bfloat16 et float16 contiennent les précisions correspondantes.
Compatibilité:
- Des référentiels séparés sont disponibles pour les modèles compatibles avec les transformateurs 🤗 et l'implémentation JAX d'origine.
Considérations relatives à la mémoire :
- Les modèles haute résolution (448 x 448, 896 x 896) nécessitent beaucoup plus de mémoire.
- Les modèles haute résolution sont utiles pour les tâches plus fines comme l'OCR.
- L'amélioration de la qualité est marginale pour la plupart des tâches.
- Les versions 224 x 224 conviennent à la plupart des applications.
Essayez PaliGemma
Nous explorerons comment utiliser les transformateurs 🤗 pour l'inférence PaliGemma.
Commençons par installer les bibliothèques nécessaires avec l'indicateur de mise à jour pour nous assurer que nous utilisons les dernières versions des transformateurs 🤗 et autres dépendances.
!pip install -q -U accelerate bitsandbytes git+https://github.com/huggingface/transformers.git
Pour utiliser PaliGemma, vous devez accepter la licence Gemma. Visitez le référentiel pour demander l'accès. Si vous avez déjà accepté la licence Gemma, vous êtes prêt à partir. Une fois que vous y avez accès, connectez-vous au Hugging Face Hub en utilisant notebook_login()
et entrez votre jeton d'accès en exécutant la cellule ci-dessous.
Image d'entrée
Source
input_text = "how many dogs are there in the image?"
Ensuite, nous importerons les bibliothèques nécessaires et importer AutoTokenizer
, PaliGemmaForConditionalGeneration
et PaliGemmaProcessor
depuis la bibliothèque transformers
.
Une fois l'importation terminée, nous chargerons le modèle PaliGemma pré-entraîné et le modèle sera chargé avec le type de données torch.bfloat16
, ce qui peut fournir un bon équilibre entre performances et précision sur le matériel moderne.
from transformers import AutoTokenizer, PaliGemmaForConditionalGeneration, PaliGemmaProcessor
import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model_id = "google/paligemma-3b-mix-224"
model = PaliGemmaForConditionalGeneration.from_pretrained(model_id, torch_dtype=torch.bfloat16)
processor = PaliGemmaProcessor.from_pretrained(model_id)
Une fois le code exécuté, le processeur prétraitera à la fois l'image et le texte.
inputs = processor(text=input_text, images=input_image,
padding="longest", do_convert_rgb=True, return_tensors="pt").to("cuda")
model.to(device)
inputs = inputs.to(dtype=model.dtype)
Ensuite, utilisez le modèle pour générer le texte basé sur la question d'entrée,
with torch.no_grad():
output = model.generate(**inputs, max_length=496)
print(processor.decode(output[0], skip_special_tokens=True))
Sortir:-
combien de chiens y a-t-il sur l'image ? 1
Charger le modèle en 4 bits
Nous pouvons également charger le modèle en 4 bits et 8 bits, pour réduire les ressources de calcul et de mémoire requises pour la formation et l'inférence. Tout d’abord, initialisez BitsAndBytesConfig
.
from transformers import BitsAndBytesConfig
import torch
nf4_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
bnb_4bit_compute_dtype=torch.bfloat16
)
Ensuite, rechargez le modèle et transmettez l'objet ci-dessus en tant que quantization_config,
from transformers import AutoTokenizer, PaliGemmaForConditionalGeneration, PaliGemmaProcessor
import torch
device="cuda"
model_id = "google/paligemma-3b-mix-224"
model = PaliGemmaForConditionalGeneration.from_pretrained(model_id, torch_dtype=torch.bfloat16,
quantization_config=nf4_config, device_map={"":0})
processor = PaliGemmaProcessor.from_pretrained(model_id)
Générer la sortie,
with torch.no_grad():
output = model.generate(**inputs, max_length=496)
print(processor.decode(output[0], skip_special_tokens=True))
Sortir:-
combien de chiens y a-t-il sur l'image ? 1
Utiliser PaliGemma pour l'inférence : étapes clés
Tokenisation du texte d'entrée :
- Le texte est tokenisé comme d'habitude.
- Un jeton
<bos>
est ajouté au début. - Un jeton de nouvelle ligne (
\n
) est ajouté, ce qui est important car il faisait partie de l'invite de saisie de formation du modèle.
Ajout de jetons d'image :
- Le texte tokenisé est préfixé par un nombre spécifique de jetons
<image>
. - Le nombre de jetons
<image>
dépend de la résolution de l’image d’entrée et de la taille du patch du modèle SigLIP.
Pour les modèles PaliGemma :
- Résolution 224x224 : 256 jetons
<image>
(224/14 * 224/14). - Résolution 448x448 : 1024 jetons
<image>
. - Résolution 896x896 : 4096 jetons
<image>
.
Considérations relatives à la mémoire :
- Des images plus grandes entraînent des séquences d'entrée plus longues, nécessitant plus de mémoire.
- Des images plus grandes peuvent améliorer les résultats pour des tâches telles que l'OCR, mais le gain de qualité est généralement faible pour la plupart des tâches.
- Testez vos tâches spécifiques avant d'opter pour des résolutions plus élevées.
Génération d'intégrations de jetons :
- L’invite de saisie complète traverse la couche d’intégration de texte du modèle de langage, produisant des intégrations de jetons de 2 048 dimensions.
Traitement de l'image :
- L'image d'entrée est redimensionnée à la taille requise (par exemple, 224 x 224 pour les modèles à plus petite résolution) à l'aide d'un rééchantillonnage bicubique.
- Il est ensuite transmis via l'encodeur d'image SigLIP pour créer des intégrations d'images à 1 152 dimensions par patch.
- Ces intégrations d'images sont projetées à 2 048 dimensions pour correspondre aux intégrations de jetons de texte.
Combinaison d'intégrations d'images et de texte :
- Les intégrations d'images finales sont fusionnées avec les intégrations de texte
<image>
. - Cette entrée combinée est utilisée pour la génération de texte autorégressive.
Génération de texte autorégressive :
- Utilise une attention de bloc complète pour l'entrée complète (image +
<bos>
+ invite +\n
). - Utilise un masque d'attention causale pour le texte généré.
Inférence simplifiée :
- Les classes de processeur et de modèle gèrent automatiquement tous ces détails.
- L'inférence peut être effectuée à l'aide de l'API des transformateurs de haut niveau, comme démontré dans les exemples précédents.
Applications
Les modèles de langage de vision comme PaliGemma ont un large éventail d'applications dans divers secteurs. Quelques exemples sont répertoriés ci-dessous :
- Sous-titres d'images : génération automatique de légendes descriptives pour les images, ce qui peut améliorer l'accessibilité pour les personnes malvoyantes et améliorer l'expérience utilisateur.
- Réponse visuelle aux questions (VQA) : répondre à des questions sur les images, ce qui peut permettre des moteurs de recherche, des assistants virtuels et des outils pédagogiques plus interactifs.
- Récupération d'images et de textes : récupération d'images pertinentes sur la base de requêtes textuelles et vice versa, facilitant la découverte de contenu et la recherche dans des bases de données multimédias.
- Chatbots interactifs : engager des conversations avec les utilisateurs en comprenant à la fois les entrées textuelles et le contexte visuel, conduisant à des réponses plus personnalisées et contextuellement pertinentes.
- Création de contenu : génération automatique de descriptions textuelles, de résumés ou d'histoires basées sur des entrées visuelles, facilitant la création automatisée de contenu pour les industries du marketing, de la narration et de la création.
- Agents artificiels : utiliser ces technologies pour alimenter des robots ou des agents virtuels capables de percevoir et de comprendre l'environnement, permettant ainsi des applications dans la robotique, les véhicules autonomes et les systèmes de maison intelligente.
- Imagerie médicale : Analyser des images médicales (par exemple, radiographies, IRM) ainsi que des notes ou des rapports cliniques, aider les radiologues à diagnostiquer et à planifier le traitement.
- Mode et vente au détail : fournir des recommandations de produits personnalisées basées sur des préférences visuelles et des descriptions textuelles, améliorant ainsi l'expérience d'achat et augmentant les taux de conversion des ventes.
- Reconnaissance optique de caractères : la reconnaissance optique de caractères (OCR) consiste à extraire le texte visible d'une image et à le convertir en un format de texte lisible par machine. Même si cela semble simple, la mise en œuvre de l’OCR dans les applications de production peut poser des défis importants.
- Outils pédagogiques : création de matériel d'apprentissage interactif combinant du contenu visuel avec des explications textuelles, des quiz et des exercices pour améliorer la compréhension et la mémorisation.
Ce ne sont là que quelques exemples, et les applications potentielles des modèles de langage de vision continuent de se développer à mesure que les chercheurs et les développeurs explorent de nouveaux cas d'utilisation et intègrent ces technologies dans divers domaines.
Conclusion
En conclusion, nous pouvons dire que PaliGemma représente une avancée significative dans le domaine des modèles de langage vision, offrant un outil puissant pour comprendre et générer du contenu basé sur des images. Grâce à sa capacité à intégrer de manière transparente des informations visuelles et textuelles, PaliGemma ouvre de nouvelles voies de recherche et d'application dans un large éventail d'industries. Du sous-titrage d’images à la reconnaissance optique de caractères et au-delà, les capacités de PaliGemma sont prometteuses pour stimuler l’innovation et résoudre des problèmes complexes à l’ère numérique.
Nous espérons que vous avez apprécié la lecture de l’article !
Ressources
- Présentation de PaliGemma, Gemma 2 et d'une boîte à outils d'IA responsable améliorée
- PaliGemma – Le modèle linguistique de pointe à vision ouverte de Google
- PaliGemma Github README
- Documentation PaliGemma
- Documentation de mise au point de PaliGemma
- Affiner PaliGemma dans Google Colab
- Blog Câlins Visage