Direkt zum Inhalt

Llama 3.2 90B Tutorial: App für Bildunterschriften mit Groq & Streamlit

Lerne, wie du mit Streamlit für das Frontend, Llama 3.2 90B für die Erstellung von Untertiteln und Groq als API eine App für Bildunterschriften erstellst.
Aktualisierte 15. Jan. 2025  · 12 Min. Lesezeit

Meta hat dem Llama-Ökosystem endlich Multimodalität hinzugefügt, indem es das Llama 3.2 11B & 90B Vision Modelle. Diese beiden Modelle können sowohl Text als auch Bilder hervorragend verarbeiten, was mich dazu veranlasste, ein Projekt mit der 90B-Version zu bauen.

In diesem Artikel erzähle ich dir von meiner Arbeit und zeige dir, wie du eine interaktive App für Bildunterschriften erstellst. Dabei verwende ich Streamlit für das Frontend und Llama 3.2 90B als Engine für die Erstellung von Untertiteln.

Warum Llama 3.2 90B für eine App zur Bilduntertitelung verwendet werden sollte

Llama 3.2-Vision 90B ist ein modernes multimodales large language model (LLM), das für Aufgaben mit Bild- und Texteingaben entwickelt wurde.

Es zeichnet sich durch seine Fähigkeit aus, komplexe Aufgaben wie Visual Reasoning, Bilderkennung und Bildunterschriften zu bewältigen. Sie wurde auf einem riesigen Datensatz von 6 Milliarden Bild-Text-Paaren trainiert.

Llama 3.2-Vision ist eine gute Wahl für unsere App, weil es mehrere Sprachen für Textaufgaben unterstützt, obwohl Englisch der Hauptfokus für bildbezogene Anwendungen ist. Seine Hauptmerkmale machen es zu einer ausgezeichneten Wahl für Aufgaben wie Visual Question Answering (VQA), Document VQA und Bild-Text-Retrieval, wobei die Beschriftung von Bildern eine seiner herausragenden Anwendungen ist.

Sehen wir uns an, wie sich diese Fähigkeiten in einer realen Anwendung wie der Bilduntertitelung umsetzen lassen.

Pipeline für Bildunterschriften

Bei der Bildbeschriftung wird automatisch ein beschreibender Text erstellt, der den Inhalt eines Bildes zusammenfasst. Sie kombiniert Computer Vision und natürliche Sprachverarbeitung, um visuelle Details zu interpretieren und in Sprache auszudrücken.

Bisher war für die Erstellung von Bildunterschriften eine komplexe Pipeline erforderlich, die oft getrennte Schritte für die Bildverarbeitung und die Sprachgenerierung umfasste. Der Standardansatz umfasst drei Hauptschritte: Bildvorverarbeitung, Merkmalsextraktion und Beschriftungserstellung.

  1. Bildvorverarbeitung: Die Bilder werden in der Regel in der Größe verändert, normalisiert und gelegentlich beschnitten, um sicherzustellen, dass sie den Eingabespezifikationen des Modells entsprechen.
  2. Merkmalsextraktion: Visuelle Merkmale werden extrahiert, um Objekte, Szenen oder relevante Details im Bild zu identifizieren. Bei den meisten Modellen erfordert dies ein separates Bildverarbeitungsmodell, um das Bild zu interpretieren und strukturierte Daten zu erzeugen, die die Sprachmodelle verstehen können.
  3. Unterschriftenerstellung: Diese extrahierten Merkmale werden dann von einem Sprachmodell verwendet, um eine kohärente Beschreibung zu erstellen, die die in den visuellen Daten identifizierten Objekte, den Kontext und die Beziehungen miteinander verbindet.

Mit Llama 3.2 90B wird dieser traditionell komplizierte Prozess einfacher. Der Vision-Adapter des Modells integriert visuelle Merkmale in das Kern-Sprachmodell, sodass es Bilder direkt interpretieren und durch einfache Eingabeaufforderungen Beschriftungen erzeugen kann.

Durch die Einbettung von Cross-Attention-Layern in die Architektur von Llama 3.2 90B können die Nutzer/innen ein Bild beschreiben, indem sie das Modell einfach ansprechen - so werden separate Verarbeitungsschritte überflüssig. Diese Einfachheit ermöglicht eine leichter zugängliche und effiziente Bildbeschriftung, bei der eine einzige Eingabeaufforderung zu einer natürlichen, beschreibenden Beschriftung führen kann, die das Wesentliche eines Bildes effektiv erfasst.

Überblick über die App für Bildunterschriften

Um die Leistungsfähigkeit von Llama 3.2 90B zum Leben zu erwecken, werden wir eine einfache, aber effektive Anwendung für Bildunterschriften erstellen, die Streamlit für das Frontend und Groq für die Erstellung von Untertiteln verwendet.

Mit der App können Nutzer/innen ein Bild hochladen und erhalten mit nur zwei Klicks eine beschreibende Bildunterschrift, die vom Model erstellt wird. Diese Einrichtung ist benutzerfreundlich und erfordert nur minimale Programmierkenntnisse, um loszulegen.

Unsere Anwendung wird die folgenden Funktionen enthalten:

  1. Titel: Ein gut sichtbarer Titel, LlamaCaptioner, um den Zweck der App zu verdeutlichen.
  2. Schaltfläche Hochladen: Eine Schnittstelle zum Hochladen von Bildern vom Gerät des Nutzers.
  3. Schaltfläche "Erzeugen": Eine Schaltfläche, um die Erstellung von Beschriftungen zu starten.
  4. Beschriftungsausgabe: Die App zeigt die generierte Beschriftung direkt auf der Benutzeroberfläche an.

Code-Implementierung für unsere Llama 3.2 90B App

Die Groq-API dient als Brücke zwischen dem hochgeladenen Bild des Nutzers und dem Llama 3.2-Vision-Modell. Wenn du mir folgen und mit mir coden willst, solltest du das zuerst tun:

  1. Du erhältst deinen Groq-API-Schlüssel, indem du dich anmeldest bei Groq-Konsole.
  2. Speichern Sie Ihren API-Schlüssel in einer credentials.json Datei, um den Zugriff zu vereinfachen.
  3. Folgen Sie Groqs Schnellstart-Anleitung für die Installation und Konfiguration.

Der folgende Python-Codeausschnitt richtet eine Streamlit-Anwendung für die Interaktion mit der Groq-API ein. Es beinhaltet:

  1. Importiert Bibliotheken für die Entwicklung von Web-Apps (Streamlit), KI-Interaktionen (Groq), Bildbearbeitung (base64) und Dateioperationen (os, json).
  2. Liest den Groq-API-Schlüssel aus einer separaten JSON-Datei für mehr Sicherheit.
  3. Definiert eine Funktion zur Kodierung von Bildern im base64-Format für eine effiziente Übertragung und Verarbeitung.
import streamlit as st
from groq import Groq
import base64
import os
import json

# Set up Groq API Key
os.environ['GROQ_API_KEY'] = json.load(open('credentials.json', 'r'))['groq_token']

# Function to encode the image
def encode_image(image_path):
   with open(image_path, "rb") as image_file:
       return base64.b64encode(image_file.read()).decode('utf-8')

Wir machen weiter, indem wir die folgende Funktion schreiben, die eine Textbeschreibung eines hochgeladenen Bildes mit Hilfe der Groq-API generieren soll. Hier ist eine Übersicht über die Funktionen:

  1. Bildkodierung: Das hochgeladene Bild wird in eine base64-kodierte Zeichenkette umgewandelt. Mit diesem Format können die Bilddaten einfach innerhalb der API-Anfrage übertragen werden.
  2. Groq API Interaktion: Ein Groq-Client wird instanziiert, um die Kommunikation mit dem Groq-Dienst zu erleichtern. Es wird eine Anfrage zum Abschluss eines Chats formuliert, die Folgendes umfasst:
  • Eine Benutzeraufforderung: "Was ist auf diesem Bild zu sehen?"
  • Die base64-kodierten Bilddaten, eingebettet in einen Daten-URI. Das Modell llama-3.2-90b-vision-preview wird angegeben, um das Bild zu verarbeiten und eine textliche Beschreibung zu erstellen.
  1. Bildunterschrift extrahieren: Die generierte Beschriftung wird aus der Groq-API-Antwort extrahiert. Der Nachrichteninhalt der ersten Auswahl, der die Überschrift enthält, wird zurückgegeben.
# Function to generate caption
def generate_caption(uploaded_image):
   base64_image = base64.b64encode(uploaded_image.read()).decode('utf-8')
   client = Groq()
   chat_completion = client.chat.completions.create(
       messages=[
           {
               "role": "user",
               "content": [
                   {"type": "text", "text": "What's in this image?"},
                   {
                       "type": "image_url",
                       "image_url": {
                           "url": f"data:image/jpeg;base64,{base64_image}",
                       },
                   },
               ],
           }
       ],
       model="llama-3.2-90b-vision-preview",
   )
   return chat_completion.choices[0].message.content

Schließlich erstellen wir unsere interaktive Web-App mit Streamlit:

# Streamlit App
st.title("Llama Captioner")

uploaded_file = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"])

if uploaded_file is not None:
   # Show the uploaded image
   st.image(uploaded_file, caption="Uploaded Image", use_container_width=True)

   if st.button("Generate Caption"):
       with st.spinner("Generating caption..."):
           caption = generate_caption(uploaded_file)
       st.success("Caption Generated!")
       st.write("**Caption:**", caption)

Die finale Streamlit App: Llama Captioner

Diese Streamlit-Anwendung bietet eine benutzerfreundliche Oberfläche für die Beschriftung von Bildern. Hier ist eine Übersicht über die Funktionen:

  1. Titel und Datei-Uploader:
  • Die App zeigt einen Titel an: "Llama Captioner".
  • Eine Datei-Uploader-Komponente ermöglicht die Auswahl einer Bilddatei (JPG, JPEG oder PNG).
  1. Bildanzeige:
  • Sobald ein Bild hochgeladen ist, zeigt die App es mit der Funktion st.image an.
  1. Unterschriftenerstellung:
  • Die Schaltfläche "Beschriftung generieren" löst den Prozess der Beschriftungserstellung aus.
  • Wenn du darauf klickst, zeigt ein Spinner an, dass die Beschriftung gerade erstellt wird.
  • Die Funktion generate_caption wird aufgerufen, um das hochgeladene Bild zu verarbeiten und eine Beschriftung zu erhalten.
  • Bei erfolgreicher Erstellung wird eine Erfolgsmeldung angezeigt, gefolgt von der erstellten Beschriftung.

Der folgende Ausschnitt zeigt den Code in Aktion, bei dem ein Bild von Eddie Hall hochgeladen wurde, um die Beschriftung zu generieren. Überraschenderweise wurden sogar die Informationen extrahiert, die nicht deutlich sichtbar waren, wie z.B. "Stärkster Mann" usw.

Fazit

Die Entwicklung einer App für Bildunterschriften mit Llama 3.2 90B und Streamlit zeigt, wie fortschrittliche KI schwierige Aufgaben einfacher machen kann. Dieses Projekt kombiniert ein leistungsfähiges Modell mit einer einfachen Schnittstelle, um ein intuitives und leicht zu bedienendes Werkzeug zu schaffen.

Als KI-Ingenieur sehe ich in Tools wie diesen ein riesiges Potenzial. Sie können Technologien zugänglicher machen, Menschen helfen, sich besser mit Inhalten zu beschäftigen, und Prozesse auf intelligentere Weise automatisieren.

Um dein Wissen über Llama zu erweitern, empfehle ich dir die folgenden Ressourcen:


Bhavishya Pandit's photo
Author
Bhavishya Pandit
LinkedIn
Twitter

Senior GenAI Engineer und Content Creator, der mit seinem Wissen über GenAI und Data Science bereits 20 Millionen Views erreicht hat.

Themen

Lerne Llama mit diesen Kursen!

Lernpfad

Llama Fundamentals

5 hours hr
Experiment with Llama 3 to run inference on pre-trained models, fine-tune them on custom datasets, and optimize performance.
Siehe DetailsRight Arrow
Kurs starten
Mehr anzeigenRight Arrow
Verwandt

Der Blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates hat im zweiten Quartal 2023 über 20.000 Stipendien an unsere gemeinnützigen Partner vergeben. Erfahre, wie fleißige benachteiligte Lernende diese Chancen in lebensverändernde berufliche Erfolge verwandelt haben.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Der Blog

Top 30 Generative KI Interview Fragen und Antworten für 2024

Dieser Blog bietet eine umfassende Sammlung von Fragen und Antworten zu generativen KI-Interviews, die von grundlegenden Konzepten bis hin zu fortgeschrittenen Themen reichen.
Hesam Sheikh Hassani's photo

Hesam Sheikh Hassani

15 Min.

Der Blog

Die 20 besten Snowflake-Interview-Fragen für alle Niveaus

Bist du gerade auf der Suche nach einem Job, der Snowflake nutzt? Bereite dich mit diesen 20 besten Snowflake-Interview-Fragen vor, damit du den Job bekommst!
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 Min.

Der Blog

Die 32 besten AWS-Interview-Fragen und Antworten für 2024

Ein kompletter Leitfaden zur Erkundung der grundlegenden, mittleren und fortgeschrittenen AWS-Interview-Fragen, zusammen mit Fragen, die auf realen Situationen basieren. Es deckt alle Bereiche ab und sorgt so für eine abgerundete Vorbereitungsstrategie.
Zoumana Keita 's photo

Zoumana Keita

30 Min.

Der Blog

2022-2023 DataCamp Classrooms Jahresbericht

Zu Beginn des neuen Schuljahres ist DataCamp Classrooms motivierter denn je, das Lernen mit Daten zu demokratisieren. In den letzten 12 Monaten sind über 7.650 neue Klassenzimmer hinzugekommen.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 Min.

Mehr anzeigenMehr anzeigen