Dans ce tutoriel, vous découvrirez comment appliquer le modèle Meta Llama 3.2-90b-vision-instruct, désormais disponible sur watsonx.ai, aux tâches de vision par ordinateur telles que le sous-titrage d’images et la réponse aux questions portant sur des images.
Nous sommes nombreux à connaître les applications d’IA unimodales. ChatGPT est un outil d’IA unimodale très répandu. Les chatbots comme ChatGPT utilisent le traitement automatique du langage naturel (TAL) pour comprendre les questions des utilisateurs et automatiser les réponses en temps réel. Le type d’entrée auquel ces grands modèles de langage (LLM) unimodaux peuvent être appliqués est limité au texte.
L’intelligence artificielle multimodale (IA) repose sur des modèles de machine learning construits sur des réseaux de neurones. Ces derniers sont capables de traiter et d’intégrer les informations provenant de plusieurs types de données à l’aide de techniques d’apprentissage profond complexes. Ces différentes modalités produites par le modèle d’IA générative, parfois appelé modèles d’IA, peuvent inclure des textes, des images, des entrées vidéo et audio.
Les systèmes d’IA multimodaux présentent de nombreux cas d’utilisation réels, allant du diagnostic sur imagerie médicale dans les établissements de santé utilisant la vision par ordinateur à la reconnaissance vocale dans les applications de traduction. Ces avancées technologiques de l’IA peuvent optimiser divers domaines. Le principal avantage des architectures multimodales réside dans leur capacité à traiter différents types de données.
L’IA multimodale comporte trois éléments :
Module d’entrée
Le module d’entrée est construit sur plusieurs réseaux de neurones unimodaux pour assurer le prétraitement de différents types de données. Ici, les données sont préparées pour les algorithmes de machine de learning exécutés dans le module de fusion.
Module de fusion
Ce module permet de combiner, d’aligner et de traiter les données. Le processus de fusion a lieu pour chaque modalité de données. Plusieurs techniques sont couramment utilisées dans ce module. La fusion précoce, qui combine les données brutes des différents types d’entrées, en est un exemple. En outre, on parle de fusion intermédiaire lorsque les données de différentes modalités sont encodées à différents stades du prétraitement. Enfin, la fusion tardive consolide les données après avoir été traitées dans le module d’entrée par différents modèles correspondant à chaque modalité.
Module de sortie
Le module de sortie génère des résultats dans le format souhaité en interprétant les données produites par le module de fusion. Ces sorties peuvent prendre diverses formes, comme des textes, des images ou une combinaison de formats.
Regardez cette vidéo YouTube d’IBM Technology pour découvrir les instructions de configuration des étapes 1 et 2.
Bien que vous puissiez employer un autre outil, ce tutoriel convient le mieux à un Jupyter Notebook. Les Jupyter Notebooks sont largement utilisés dans la science des données pour combiner du code avec diverses sources de données comme les textes, les images et les visualisations de données.
Ce tutoriel explique comment créer un compte IBM pour utiliser un Jupyter Notebook.
Connectez-vous à watsonx.ai en utilisant votre compte IBM Cloud.
Créez un projet watsonx.ai.
Vous pouvez obtenir l’ID de votre projet à partir de ce dernier. Cliquez sur l’onglet Manage (Gérer). Ensuite, copiez l’ID du projet à partir de la section Details (Détails) de la page General (Général). Vous aurez besoin de cet ID pour ce tutoriel.
Créez un Jupyter Notebook.
Cette étape vous permettra d’ouvrir un environnement notebook dans lequel vous pourrez copier le code de ce tutoriel pour mettre en œuvre le prompt sur votre propre environnement. Vous pouvez également télécharger ce notebook localement sur votre système et le charger dans votre projet watsonx.ai en tant qu’actif. Ce Jupyter Notebook, ainsi que les jeux de données utilisés, se trouvent sur GitHub.
Pour éviter les conflits de dépendance entre les paquets Python, nous vous recommandons de mettre en place un environnement virtuel.
Pour ce tutoriel, nous vous recommandons d’utiliser le modèle Meta 3.2-90b-vision-instruct avec watsonx.ai pour obtenir des résultats similaires. Vous êtes libre d’utiliser tout modèle d’IA qui prend en charge l’apprentissage multimodal. Vous pouvez choisir parmi plusieurs modèles d’IA multimodale comme GPT-4 V(ision) et DALL-E 3 d’OpenAI, ou Gemini de Google. Veillez à utiliser l’API appropriée si vous travaillez avec d’autres modèles, car ce tutoriel est conçu pour watsonx.ai.
Créez une instance de service d’exécution watsonx.ai (sélectionnez votre région et choisissez le plan Lite, qui est une instance gratuite).
Générez une clé d’API.
Associez l'instance de service Runtime watsonx.ai au projet que vous avez créé dans watsonx.ai.
Nous avons besoin de quelques bibliothèques et modules pour ce tutoriel. Assurez-vous d’importer les bibliothèques suivantes ; s’ils ne sont pas installés, vous pouvez résoudre ce problème en exécutant rapidement une commande pip install.
Pour définir nos identifiants, nous avons besoin des WATSONX_APIKEY et WATSONX_PROJECT_ID que vous avez générés à l’étape 1. Vous pouvez soit les stocker dans un fichier .env dans votre répertoire, ou remplacer le texte de l’espace réservé. Nous définirons également l’URL servant de point de terminaison de l’API.
Nous pouvons utiliser la classe Credentials pour encapsuler les identifiants transmis.
Dans ce tutoriel, nous utiliserons plusieurs images pour des applications d’IA multimodales telles que le sous-titrage d’images et la détection d’objets. Les images que nous utiliserons sont accessibles via les URL suivantes. Nous pouvons stocker ces URL dans une liste pour les encoder de manière itérative.
Pour mieux comprendre nos entrées de données, affichons les images.
Output:
url_image_0
url_image_1
url_image_2
url_image_3
Pour que le LLM les comprenne, nous encoderons ces images en octets, puis nous les décoderons en représentation UTF-8.
Maintenant que nos images peuvent être transmises au LLM, configurons une fonction pour nos appels d’API watsonx. La fonction augment_api_request_body prend la requête utilisateur et l’image comme paramètres, et complète le corps de la requête d’API. Nous utiliserons cette fonction à chaque itération.
def augment_api_request_body(user_query, image): messages = [ { "role": "user", "content": [{ "type": "text", "text": ’Vous êtes un assistant compétent. Veuillez répondre à la question suivante en une ou deux phrases : ’ + user_query }, { "type": "image_url", "image_url": { "url": f"data:image/jpeg;base64,{image}", } }] } ] return messages
Instancions l’interface du modèle à l’aide de la classe ModelInference. Dans ce tutoriel, nous allons utiliser le modèle themeta-llama/llama-3-2-90b-vision-instruct.
Nous pouvons maintenant parcourir nos images en boucle pour voir les descriptions de texte produites par le modèle en réponse à la requête « Que se passe-t-il dans cette image ? »
Output:
Cette image montre une rue animée, avec de grands immeubles et des voitures, et des gens qui marchent sur le trottoir. La rue est parsemée de feux de circulation, d’arbres et de panneaux de signalisation, et plusieurs personnes traversent la rue à un carrefour.
L'image représente une femme en tenue de sport qui court dans la rue, avec un bâtiment et une voiture visibles en arrière-plan. La femme porte un sweat à capuche jaune, un legging noir et des baskets, et semble faire du jogging ou de la course à pied.
L’image représente une zone inondée, l’eau recouvrant le sol et les bâtiments environnants. Les inondations semblent importantes, puisque l’eau monte jusqu’au toit de certaines structures.
**Description de l’image**
* L’image est un gros plan sur une étiquette nutritionnelle, avec un doigt pointé vers elle.
* L’étiquette fournit des informations détaillées sur la composition nutritionnelle d’un aliment, notamment :
+ Calories
+ Lipides
+ Sodium
+ Glucides
+ Autres informations importantes
* L’étiquette affiche un texte noir sur fond blanc, ce qui la rend facile à lire et à comprendre.
Le modèle Llama 3.2-90b-vision-instruct a pu légender chaque image de manière très détaillée.
Maintenant que nous avons démontré la capacité du modèle à effectuer la conversion image-texte, posons-lui quelques questions nécessitant une détection d’objets. Concernant la deuxième image, qui représente la femme en train de courir dehors, nous demanderons au modèle : « Combien de voitures y a-t-il sur cette image ? »
Sortie : Cette image contient une voiture. La voiture est garée dans la rue, à droite du bâtiment.
Le modèle a correctement identifié le seul véhicule présent sur l’image. Maintenant, interrogeons-le au sujet des dégâts décrits dans l’image de l’inondation.
Sortie : Les dégâts visibles sur cette image sont importants, les eaux de crue recouvrant une grande partie des terres et risquant de causer des dommages considérables aux structures et aux cultures. Le niveau de l’eau semble atteindre au moins la taille, ce qui pourrait entraîner des pertes importantes pour les propriétaires fonciers et les agriculteurs de la région.
Cette réponse démontre la valeur de l’IA multimodale dans des domaines tels que l’assurance. Le modèle a permis de détecter la gravité des dommages causés à la maison inondée. Cela pourrait être un outil puissant pour améliorer le temps de traitement des demandes d’indemnisation.
Ensuite, demandons au modèle quelle est la teneur en sodium sur l’image de l’étiquette nutritionnelle.
Sortie : **Teneur en sodium :** 640 milligrammes (mg)
Excellent ! Le modèle a pu identifier des objets dans les images suite aux requêtes utilisateur. Nous vous encourageons à tester d’autres requêtes afin de mieux démontrer les performances du modèle.
Dans ce tutoriel, vous avez utilisé le modèle Llama 3.2-90b-vision-instruct pour effectuer des opérations multimodales, notamment le sous-titrage d’images et la réponse à des questions portant sur les images. Pour découvrir d’autres cas d’utilisation de ce modèle, nous vous invitons à consulter la page de documentation officielle. Vous y trouverez de plus amples informations sur les paramètres et les capacités du modèle. La sortie Python est importante car elle montre la capacité du système multimodal à extraire des informations à partir de données multimodales.
Entraînez, validez, réglez et déployez une IA générative, des modèles de fondation et des capacités de machine learning avec IBM watsonx.ai, un studio d’entreprise nouvelle génération pour les générateurs d’IA. Créez des applications d’IA en peu de temps et avec moins de données.
Mettez l’IA au service de votre entreprise en vous appuyant sur l’expertise de pointe d’IBM dans le domaine de l’IA et sur son portefeuille de solutions.
Réinventez les workflows et les opérations critiques en ajoutant l’IA pour optimiser les expériences, la prise de décision et la valeur métier en temps réel.