Verwenden Sie Llama 3.2-90b-vision-instruct für multimodale KI-Abfragen in Python mit watsonx

In diesem Tutorial erfahren Sie, wie Sie das Meta Llama 3.2-90b-vision-instruct-Modell, das jetzt auf watsonx.ai verfügbar ist, auf Computer-Vision-Aufgaben wie Bildunterschriften und visuelle Fragebeantworten anwenden.

Überblick über multimodale KI

Multimodale und unimodale KI-Modelle im Vergleich

Viele von uns sind mit unimodalen KI-Anwendungen vertraut. Ein beliebtes unimodales KI-Tool ist ChatGPT. Chatbots wie ChatGPT verwenden Verarbeitung natürlicher Sprache (NLP), um Benutzerfragen zu verstehen und Antworten in Echtzeit zu automatisieren. Die Art der Eingabe, auf die diese unmodalen großen Sprachmodelle (LLMs) angewendet werden können, ist auf Text beschränkt.

Multimodale künstliche Intelligenz (KI) stützt sich auf Modelle des maschinellen Lernens, die auf neuronalen Netzen basieren. Diese neuronalen Netze sind in der Lage, Informationen aus mehreren Datentypen mithilfe komplexer Deep Learning-Techniken zu verarbeiten und zu integrieren. Diese verschiedenen Modalitäten, die vom generativen KI-Modell erzeugt werden, werden manchmal auch als generative KI-Modelle bezeichnet und können Text-, Bild-, Video- und Audio-Input umfassen.

Multimodale KI-Systeme haben viele reale Anwendungsfälle, von der medizinischen Bilddiagnose im Gesundheitswesen mit Hilfe von Computer Vision bis hin zur Spracherkennung in Anwendungen. Diese Fortschritte in der KI-Technologie können verschiedene Bereiche optimieren. Der Hauptvorteil multimodaler Architekturen ist die Fähigkeit, verschiedene Datentypen zu verarbeiten.

Multimodale KI: Wie sie funktioniert

Multimodale KI umfasst drei Elemente:

Eingabemodul

Das Eingabemodul basiert auf mehreren unimodalen neuronalen Netzen zur Vorverarbeitung verschiedener Datentypen. Hier werden die Daten für Algorithmen für maschinelles Lernen vorbereitet, die im Fusionsmodul ausgeführt werden.

Fusionsmodul

Die Kombination, Ausrichtung und Verarbeitung der Daten erfolgt in diesem Modul. Der Fusionsprozess erfolgt für jede Datenmodalität. In diesem Modul werden verschiedene Techniken häufig angewendet. Ein Beispiel ist die frühe Fusion, bei der Rohdaten aller Eingabearten kombiniert werden. Darüber hinaus werden während der Fusion Daten verschiedener Modalitäten in verschiedenen Vorverarbeitungsphasen kodiert. Schließlich konsolidiert die späte Fusion die Daten, nachdem sie zunächst im Eingabemodul durch verschiedene Modelle der jeweiligen Modalität verarbeitet wurden.

Ausgabemodul

Das Ausgabemodul generiert Ergebnisse im gewünschten Ausgabeformat, indem es die im Fusionsmodul erzeugten Daten analysiert. Diese Ausgaben können verschiedene Formen annehmen, wie Text, Bild oder eine Kombination von Formaten.

Schritte

Schauen Sie sich dieses IBM Technology YouTube-Video an, das Sie in den Schritten 1 und 2 durch die folgenden Einrichtungsanweisungen führt.

Schritt 1. Einrichten Ihrer Umgebung

Sie können aus mehreren Tools wählen. Dieses Tutorial eignet sich am besten für ein Jupyter Notebook. Jupyter Notebooks werden in der Data Science häufig verwendet, um Code mit verschiedenen Datenquellen wie Text, Bildern und Datenvisualisierungen zu kombinieren.

Dieses Tutorial zeigt Ihnen, wie Sie ein IBM Konto einrichten, um ein Jupyter Notebook zu verwenden.

  1. Melden Sie sich bei watsonx.ai mit Ihrem IBM Cloud-Konto an.

  2. Erstellen Sie ein watsonx.ai-Projekt.

    Sie können Ihre Projekt-ID in Ihrem Projekt abrufen. Klicken Sie auf die Registerkarte Verwalten. Kopieren Sie dann die Projekt-ID aus dem Abschnitt Details der Seite Allgemein. Sie benötigen diese ID für dieses Tutorial.

  3. Erstellen Sie ein Jupyter Notebook.

    Dieser Schritt öffnet eine Notebook-Umgebung, in die Sie den Code aus diesem Tutorial kopieren können, um Prompt Tuning selbst zu implementieren. Alternativ können Sie dieses Notebook auf Ihr lokales System herunterladen und als Asset in Ihr watsonx.ai-Projekt hochladen. Dieses Jupyter-Notizbuch zusammen mit den verwendeten Datensätzen finden Sie auf GitHub.

    Um Abhängigkeitskonflikte mit Python-Paketen zu vermeiden, empfehlen wir die Einrichtung einer virtuellen Umgebung.

Schritt 2. Richten Sie eine watsonx.ai-Laufzeit-Instanz und einen API-Schlüssel ein

Für dieses Tutorial empfehlen wir die Verwendung des Meta 3.2-90b-vision-instruct-Modells mit watsonx.ai, um ähnliche Ergebnisse zu erzielen. Sie können jedes KI-Modell Ihrer Wahl verwenden, das multimodales Lernen unterstützt. Es gibt mehrere multimodale KI-Modelle zur Auswahl, darunter OpenAIs GPT-4 V(ision) und DALL-E 3 sowie Googles Gemini. Stellen Sie sicher, dass Sie die entsprechende API verwenden, wenn Sie mit anderen Modellen arbeiten, da dieses Tutorial für watsonx.ai konzipiert ist.

  1. Erstellen Sie eine watsonx.ai Runtime -Service-Instanz (wählen Sie Ihre entsprechende Region aus und wählen Sie den Lite-Plan, der eine kostenlose Instanz ist).

  2. Generieren Sie einen API-Schlüssel.

  3. Verknüpfen Sie die Instanz des watsonx.ai-Runtime-Service mit dem Projekt, das Sie in watsonx.ai erstellt haben.

Schritt 3. Installieren und importieren Sie relevante Bibliotheken und richten Sie Ihre Zugangsdaten ein.

Für dieses Tutorial benötigen wir einige Bibliotheken und Module. Stellen Sie sicher, dass Sie Folgendes importieren; wenn diese nicht installiert sind, können Sie das Problem mit einer schnellen PIP-Installation beheben.

#installations
%pip install image | tail -n 1
%pip install -U "ibm_watsonx_ai>=1.1.14" | tail -n 1
%pip install python-dotenv | tail -n 1 #imports
import requests
import base64
import os

from PIL import Image
from ibm_watsonx_ai import Credentials
from ibm_watsonx_ai.foundation_models import ModelInference
from dotenv import load_dotenv
load_dotenv(os.getcwd()+"/.env", override=True)

Um unsere Zugangsdaten einzustellen, benötigen wir die Watsonx-WATSONX_APIKEY und WATSONX_PROJECT_ID, die Sie in Schritt 1 generiert haben. Sie können sie entweder in einer .env- Datei in Ihrem Verzeichnis speichern oder Sie ersetzen den Platzhaltertext. Wir werden auch die URL festlegen, die als API-Endgerät dient.

WATSONX_APIKEY = os.getenv('WATSONX_APIKEY', "<YOUR_WATSONX_APIKEY_HERE>")
WATSONX_PROJECT_ID = os.getenv('WATSONX_PROJECT_ID', "<YOUR_WATSONX_PROJECT_ID_HERE>")
URL = "https://us-south.ml.cloud.ibm.com"

Wir können die Klasse „Credentials“ verwenden, um unsere übergebenen Zugangsdaten zu kapseln.

credentials = Credentials(
    url=URL,
    api_key=WATSONX_APIKEY
)

Schritt 4. Bilder kodieren

In diesem Tutorial werden wir mit mehreren Bildern für multimodale KI-Anwendungen wie Bilduntertitelung und Objekterkennung arbeiten. Die von uns verwendeten Bilder können über die folgenden URLs aufgerufen werden. Wir können diese URLs in einer Liste speichern, um sie iterativ zu kodieren.

url_image_1 = 'https://assets.ibm.com/de-de/is/image/ibm/hv6b0935?$original$'
url_image_2 = 'https://assets.ibm.com/de-de/is/image/ibm/c30a2d57-a62b-4bb3-818895bfe2fc7bf8?$original$'
url_image_3 = 'https://assets.ibm.com/de-de/is/image/ibm/nt170969?$original$'
url_image_4 = 'https://assets.ibm.com/de-de/is/image/ibm/fb123b45-6530-4dd9-a758-10a7ec234d9d?$original$'

image_urls = [url_image_1, url_image_2, url_image_3, url_image_4]

Um unsere Dateneingabe besser zu verstehen, zeigen wir die Bilder an.

for idx, url in enumerate(image_urls):
    print(f'url_image_{idx}')
    display(Image.open(requests.get(url, stream=True).raw))

Output:

url_image_0

Foto von New York City

url_image_1

Frau beim Laufen

url_image_2

Der Mississippi überschwemmte einen Bauernhof

url_image_3

Nährwertkennzeichnung

Um diese Bilder so zu kodieren, dass sie für das LLM leicht zugänglich sind, codieren wir die Bilder zu Bytes, die wir dann in eine UTF-8-Darstellung dekodieren.

encoded_images = []

for url in image_urls:
    encoded_images.append(base64.b64encode(requests.get(url).content).decode("utf-8"))

Schritt 5. API-Anfrage und LLM einrichten

Nachdem unsere Bilder nun an das LLM übergeben werden können, richten wir eine Funktion für unsere watsonx API-Aufrufe ein. Die Funktion augment_api_request_body nimmt die Benutzeranfrage und das Bild als Parameter entgegen und erweitert den Inhalt der API-Anfrage. Wir werden diese Funktion in jeder Iteration verwenden.

def augment_api_request_body(user_query, image):
    messages = [
        {
            "role": "user",
            "content": [{
                "type": "text",
                "text": 'Sie sind ein hilfreicher Assistent. Beantworten Sie die folgende Benutzeranfrage in 1 oder 2 Sätzen: ' + user_query
            },
            {
                "type": "image_url",
                "image_url": {
                "url": f"data:image/jpeg;base64,{Bild}",
                }
            }]
        }
    ]

    Rücknachrichten 

Lassen Sie uns die Modellschnittstelle mithilfe der Klasse ModelInference instanziieren. In diesem Tutorial verwenden wir das Modell themeta-llama/llama-3-2-90b-vision-instruct.

model = ModelInference(
    model_id="meta-llama/llama-3-2-90b-vision-instruct",
    credentials=credentials,
    project_id=WATSONX_PROJECT_ID,
    params={
        "max_tokens": 200
    }
)

Schritt 6. Bildunterschrift

Nun können wir unsere Bilder durchlaufen, um die vom Modell als Antwort auf die Anfrage „Was passiert auf diesem Bild?“ erzeugten Textbeschreibungen anzuzeigen.

for i in range(len(encoded_images)):
    image = encoded_images[i]
    user_query = "What is happening in this image?"
    messages = augment_api_request_body(user_query, image)
    response = model.chat(messages=messages)
    print(response['choices'][0]['message']['content'])

Ausgabe: 

Dieses Bild zeigt eine belebte Stadtstraße mit hohen Gebäuden und Autos sowie Menschen, die auf dem Bürgersteig unterwegs sind. Die Straße ist voller Ampeln, Bäume und Straßenschilder, und mehrere Menschen überqueren die Straße an einer Kreuzung.
Das Bild zeigt eine Frau in Sportkleidung, die die Straße entlangläuft; im Hintergrund sind ein Gebäude und ein Auto zu sehen. Die Frau trägt einen gelben Hoodie, schwarze Leggings und Turnschuhe und scheint zu joggen oder zu laufen.
Das Bild zeigt ein überflutetes Gebiet, in dem Wasser den Boden und die umliegenden Gebäude bedeckt. Die Überschwemmungen scheinen schwerwiegend zu sein, der Wasserstand reicht bei einigen Gebäuden bis zu den Dächern.
**Bildbeschreibung**

* Das Bild zeigt eine Nahaufnahme eines Nährwertetiketts, auf das ein Finger zeigt.
* Das Etikett enthält detaillierte Informationen über den Nährstoffgehalt eines bestimmten Lebensmittels, darunter:
+ Kalorien
+ Fett
+ Natrium
+ Kohlenhydrate
+ Andere relevante Informationen
* Das Etikett ist auf weißem Hintergrund mit schwarzem Text dargestellt, so dass es leicht zu lesen und zu verstehen ist.

Das Modell Llama 3.2-90b-vision-instruct war in der Lage, jedes Bild erfolgreich und sehr detailliert zu erfassen.

Schritt 7. Objekterkennung

Nachdem wir nun die Fähigkeit des Modells zur Bild-zu-Text-Konvertierung im vorherigen Schritt gezeigt haben, stellen wir dem Modell einige Fragen, die Erkennung erfordern. Bezüglich des zweiten Bildes, das die im Freien laufende Frau zeigt, werden wir das Model fragen: „Wie viele Autos sind auf diesem Bild zu sehen?“

image = encoded_images[1]
user_query = "How many cars are in this image?"
messages = augment_api_request_body(user_query, image)
response = model.chat(messages=messages)
print(response['choices'][0]['message']['content'])

Ausgabe: Auf diesem Bild ist ein Auto zu sehen. Das Auto ist auf der Straße geparkt, rechts neben dem Gebäude.

Das Modell identifizierte das einzelne Fahrzeug im Bild korrekt. Nun wollen wir uns mit den auf dem Bild der Überschwemmung dargestellten Schäden befassen.

image = encoded_images[2]
user_query = "How severe is the damage in this image?"
messages = augment_api_request_body(user_query, image)
response = model.chat(messages=messages)
print(response['choices'][0]['message']['content'])

Ausgabe: Die Schäden in diesem Bild sind schwerwiegend, die Überschwemmungen bedecken einen großen Teil des Landes und können möglicherweise umfangreiche Schäden an den Gebäuden und an der Ernte verursachen. Der Wasserstand scheint mindestens bis zur Hüfte zu reichen, was zu erheblichen Verlusten für die Grundstückseigentümer und Landwirte in der Region führen könnte.

Diese Antwort unterstreicht den Wert, den multimodale KI für Bereiche wie Versicherungen hat. Das Modell war in der Lage, den Schweregrad der Schäden am überfluteten Haus zu erkennen. Dies könnte ein wirksames Instrument zur Verbesserung der Bearbeitungszeit von Versicherungsansprüchen sein.

Als Nächstes fragen wir das Modell, wie hoch der Natriumgehalt auf dem Nährwertetikett ist.

image = encoded_images[3]
user_query = "How much sodium is in this product?"
request_body = augment_api_request_body(user_query, image)
messages = augment_api_request_body(user_query, image)
response = model.chat(messages=messages)
print(response['choices'][0]['message']['content'])

Ausgabe: **Natriumgehalt:** 640 Milligramm (mg)

Großartig! Das Modell konnte Objekte innerhalb der Bilder nach Benutzeranfragen erkennen. Wir ermutigen Sie, weitere Abfragen auszuprobieren, um die Leistung des Modells zu demonstrieren.

Zusammenfassung

In diesem Tutorial haben Sie das Llama 3.2-90b-vision-instruct-Modell verwendet, um multimodale Operationen wie Bildbeschreibung und visuelle Fragebeantwortung durchzuführen. Für weitere Anwendungsfälle dieses Modells empfehlen wir Ihnen, die offizielle Dokumentationsseite zu besuchen. Dort finden Sie weitere Informationen zu den Parametern und Funktionen des Modells. Die Python-Ausgabe ist wichtig, da sie die Fähigkeit des multimodalen Systems zeigt, Informationen aus multimodalen Daten zu extrahieren.

Weiterführende Lösungen
IBM watsonx.ai

Trainieren, validieren, optimieren und implementieren Sie generative KI, Foundation Models und maschinelle Lernfunktionen mit IBM watsonx.ai, einem Studio der nächsten Generation für AI Builder in Unternehmen. Erstellen Sie KI-Anwendungen mit einem Bruchteil der Zeit und Daten.

Entdecken sie watsonx.ai
Lösungen im Bereich künstlicher Intelligenz

Setzen Sie KI in Ihrem Unternehmen ein – mit branchenführendem Fachwissen im Bereich KI und dem Lösungsportfolio von IBM an Ihrer Seite.

Erkunden Sie KI-Lösungen
KI-Services

Erfinden Sie kritische Workflows und Abläufe neu, indem Sie KI einsetzen, um Erfahrungen, Entscheidungsfindung in Echtzeit und den geschäftlichen Nutzen zu maximieren.

KI-Services entdecken
Machen Sie den nächsten Schritt

Profitieren Sie von einem einheitlichen Zugriff auf Funktionen, die den gesamten Lebenszyklus der KI-Entwicklung abdecken. Erstellen Sie leistungsstarke KI-Lösungen mit benutzerfreundlichen Oberflächen, Workflows und Zugriff auf branchenübliche APIs und SDKs.

watsonx.ai erkunden Buchen Sie eine Live-Demo