PaliGemma: lekki, otwarty model języka wizyjnego (VLM)
Wstęp
Firma Google wprowadziła niedawno nowy, lekki model wizyjny PaliGemma. Ten model został wypuszczony 14 maja 2024 r. i obsługuje połączenia multimodalne.
Model wizualno-językowy (VLM) to zaawansowany rodzaj sztucznej inteligencji, który integruje dane wizualne i tekstowe w celu wykonywania zadań wymagających zrozumienia i generowania zarówno obrazów, jak i języka. Modele te łączą techniki wizji komputerowej i przetwarzania języka naturalnego, umożliwiając im analizę obrazów, generowanie opisowych podpisów, odpowiadanie na pytania dotyczące treści wizualnych, a nawet angażowanie się w złożone rozumowanie wizualne.
VLM mogą rozumieć kontekst, wnioskować o zależnościach i generować spójne multimodalne wyniki, wykorzystując wielkoskalowe zbiory danych i wyrafinowane architektury neuronowe. Dzięki temu są to potężne narzędzia do zastosowań w takich dziedzinach, jak rozpoznawanie obrazów, automatyczne tworzenie treści i interaktywne systemy sztucznej inteligencji.
Gemma to rodzina lekkich, najnowocześniejszych otwartych modeli opracowanych przy użyciu tych samych badań i technologii, co modele Gemini. PaliGemma to potężny model języka otwartej wizji (VLM), który został niedawno dodany do rodziny Gemma.
Wymagania wstępne dla PaliGemma
- Podstawowa wiedza na temat ML: zrozumienie koncepcji uczenia maszynowego i modeli języka wizyjnego (VLM).
- Umiejętności programowania: biegłość w języku Python.
- Zależności: zainstaluj biblioteki PyTorch i Hugging Face Transformers.
- Sprzęt: system z obsługą procesora graficznego do szybszego uczenia i wnioskowania.
- Zbiór danych: dostęp do odpowiedniego zbioru danych dotyczących języka wizyjnego w celu testowania lub dostrajania.
Co to jest PaliGemma?
PaliGemma to nowy, potężny model otwartego języka wizyjnego inspirowany PaLI-3, zbudowany przy użyciu modelu wizyjnego SigLIP i modelu języka Gemma. Został zaprojektowany z myślą o najwyższej wydajności w zadaniach takich jak dodawanie napisów do obrazów i krótkich filmów, wizualne odpowiadanie na pytania, rozpoznawanie tekstu w obrazach, wykrywanie obiektów i segmentacja.
Zarówno wstępnie wytrenowane, jak i dostrojone punkty kontrolne są dostępne na zasadach open source w różnych rozdzielczościach, a także w wersjach przeznaczonych do konkretnych zadań, do natychmiastowego użycia.
PaliGemma łączy SigLIP-So400m jako koder obrazu i Gemma-2B jako dekoder tekstu. SigLIP to model SOTA zdolny do rozumienia obrazów i tekstu, podobny do CLIP, wyposażony w wspólnie wytrenowany koder obrazu i tekstu. Połączony model PaliGemma, zainspirowany PaLI-3, jest wstępnie trenowany na danych obrazowo-tekstowych i można go łatwo dostosować do takich zadań, jak dodawanie podpisów i segmentacja odsyłaczy. Gemma, model przeznaczony wyłącznie do dekodera, obsługuje generowanie tekstu. Integrując kodowanie obrazu SigLIP z Gemma za pomocą adaptera liniowego, PaliGemma staje się potężnym modelem języka wizyjnego.
Źródło
Przegląd wydań modeli PaliGemma
Mieszane punkty kontrolne:
- Wstępnie wytrenowane modele dostosowane do różnych zadań.
- Nadaje się do wnioskowania ogólnego przeznaczenia z podpowiedziami tekstowymi.
- Przeznaczone wyłącznie do celów badawczych.
Punkty kontrolne FT:
- Dopracowane modele specjalizujące się w różnych testach akademickich.
- Dostępne w różnych rozdzielczościach.
- Przeznaczone wyłącznie do celów badawczych.
Rozdzielczości modelu:
- 224x224
- 448x448
- 896x896
Precyzja modelu:
- bfloat16
- pływak16
- pływak32
Struktura repozytorium:
- Każde repozytorium zawiera punkty kontrolne dla danego rozwiązania i zadania.
- Dla każdej precyzji dostępne są trzy wersje.
- Główna gałąź zawiera punkty kontrolne typu float32.
- Wersje bfloat16 i float16 zawierają odpowiednie precyzje.
Zgodność:
- Dostępne są osobne repozytoria dla modeli kompatybilnych z 🤗 transformatorami i oryginalną implementacją JAX.
Zagadnienia dotyczące pamięci:
- Modele o wysokiej rozdzielczości (448x448, 896x896) wymagają znacznie więcej pamięci.
- Modele o wysokiej rozdzielczości są korzystne w przypadku drobnoziarnistych zadań, takich jak OCR.
- Poprawa jakości ma marginalne znaczenie w przypadku większości zadań.
- Wersje 224x224 są odpowiednie do większości celów.
Wypróbuj PaliGemmę
Zbadamy, jak używać transformatorów 🤗 do wnioskowania PaliGemma.
Najpierw zainstalujmy niezbędne biblioteki z flagą aktualizacji, aby mieć pewność, że korzystamy z najnowszych wersji 🤗 transformatorów i innych zależności.
!pip install -q -U accelerate bitsandbytes git+https://github.com/huggingface/transformers.git
Aby korzystać z PaliGemma, musisz zaakceptować licencję Gemma. Odwiedź repozytorium, aby poprosić o dostęp. Jeśli zaakceptowałeś już licencję Gemma, możesz zaczynać. Po uzyskaniu dostępu zaloguj się do Hugging Face Hub za pomocą funkcji notebook_login()
i wprowadź token dostępu, uruchamiając komórkę poniżej.
Obraz wejściowy
Źródło
input_text = "how many dogs are there in the image?"
Następnie zaimportujemy niezbędne biblioteki oraz import AutoTokenizer
, PaliGemmaForConditionalGeneration
i PaliGemmaProcessor
z biblioteki transformers
.
Po zakończeniu importu załadujemy wstępnie wytrenowany model PaliGemma, a model zostanie załadowany typem danych torch.bfloat16
, który może zapewnić dobrą równowagę pomiędzy wydajnością i precyzją na nowoczesnym sprzęcie.
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)
Po wykonaniu kodu procesor wstępnie przetwarza zarówno obraz, jak i tekst.
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)
Następnie użyj modelu do wygenerowania tekstu na podstawie pytania wejściowego,
with torch.no_grad():
output = model.generate(**inputs, max_length=496)
print(processor.decode(output[0], skip_special_tokens=True))
Wyjście:-
ile psów jest na obrazku? 1
Załaduj model w wersji 4-bitowej
Możemy również załadować model w wersji 4-bitowej i 8-bitowej, aby zmniejszyć zasoby obliczeniowe i pamięci wymagane do uczenia i wnioskowania. Najpierw zainicjuj 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
)
Następnie załaduj ponownie model i przekaż powyższy obiekt jako 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)
Wygeneruj wyjście,
with torch.no_grad():
output = model.generate(**inputs, max_length=496)
print(processor.decode(output[0], skip_special_tokens=True))
Wyjście:-
ile psów jest na obrazku? 1
Używanie PaliGemma do wnioskowania: kluczowe kroki
Tokenizowanie tekstu wejściowego:
- Tekst jest tokenizowany jak zwykle.
- Na początku dodawany jest token
<bos>
. - Dołączany jest token nowej linii (
\n
), co jest ważne, ponieważ stanowiło część monitu o wprowadzenie danych szkoleniowych modelu.
Dodawanie tokenów obrazu:
- Tokenizowany tekst jest poprzedzony określoną liczbą tokenów
<image>
. - Liczba tokenów
<image>
zależy od rozdzielczości obrazu wejściowego i rozmiaru plastra modelu SigLIP.
Dla modeli PaliGemma:
- Rozdzielczość 224x224: 256 tokenów
<image>
(224/14 * 224/14). - Rozdzielczość 448x448: 1024 tokenów
<image>
. - Rozdzielczość 896x896: 4096 tokenów
<image>
.
Zagadnienia dotyczące pamięci:
- Większe obrazy powodują dłuższe sekwencje wejściowe i wymagają więcej pamięci.
- Większe obrazy mogą poprawić wyniki zadań takich jak OCR, ale w przypadku większości zadań przyrost jakości jest zwykle niewielki.
- Zanim zdecydujesz się na wyższą rozdzielczość, przetestuj swoje konkretne zadania.
Generowanie osadzania tokenów:
- Kompletny monit wejściowy przechodzi przez warstwę osadzania tekstu modelu języka, tworząc osadzanie tokenów o 2048 wymiarach.
Przetwarzanie obrazu:
- Rozmiar obrazu wejściowego jest dostosowywany do wymaganego rozmiaru (np. 224 x 224 w przypadku modeli o najmniejszej rozdzielczości) przy użyciu ponownego próbkowania dwusześciennego.
- Następnie przechodzi przez koder obrazu SigLIP w celu utworzenia 1152-wymiarowego osadzania obrazu na plaster.
- Te osadzone obrazy są rzutowane na 2048 wymiarów, aby dopasować je do osadzonych tokenów tekstowych.
Łączenie osadzania obrazu i tekstu:
- Ostateczne osadzenia obrazu są łączone z osadzeniem tekstu
<image>
. - Te połączone dane wejściowe są wykorzystywane do generowania tekstu autoregresyjnego.
Generowanie tekstu autoregresyjnego:
- Używa uwagi pełnego bloku dla wszystkich danych wejściowych (obraz +
<bos>
+ zachęta +\n
). - Stosuje przyczynową maskę uwagi dla wygenerowanego tekstu.
Uproszczone wnioskowanie:
- Klasy procesorów i modeli obsługują wszystkie te szczegóły automatycznie.
- Wnioskowanie można przeprowadzić przy użyciu interfejsu API transformatorów wysokiego poziomu, jak pokazano w poprzednich przykładach.
Aplikacje
Modele języka wizyjnego, takie jak PaliGemma, mają szeroki zakres zastosowań w różnych branżach. Poniżej wymieniono kilka przykładów:
- Podpisy do obrazów: automatyczne generowanie opisowych podpisów do obrazów, które mogą zwiększyć dostępność dla osób niedowidzących i poprawić komfort użytkowania.
- Wizualne odpowiadanie na pytania (VQA): odpowiadanie na pytania dotyczące obrazów, co może umożliwić bardziej interaktywne wyszukiwarki, wirtualnych asystentów i narzędzia edukacyjne.
- Wyszukiwanie obrazu i tekstu: pobieranie odpowiednich obrazów na podstawie zapytań tekstowych i odwrotnie, ułatwiając odkrywanie treści i wyszukiwanie w multimedialnych bazach danych.
- Interaktywne chatboty: angażowanie się w rozmowy z użytkownikami poprzez zrozumienie zarówno treści tekstowych, jak i kontekstu wizualnego, co prowadzi do bardziej spersonalizowanych i odpowiednich kontekstowo odpowiedzi.
- Tworzenie treści: automatyczne generowanie opisów tekstowych, podsumowań lub historii na podstawie danych wizualnych, pomagając w automatycznym tworzeniu treści dla marketingu, opowiadania historii i branż kreatywnych.
- Sztuczni agenci: wykorzystanie tej technologii do zasilania robotów lub wirtualnych agentów zdolnością postrzegania i rozumienia otaczającego środowiska, umożliwiając zastosowanie w robotyce, pojazdach autonomicznych i systemach inteligentnego domu.
- Obrazowanie medyczne: analizowanie obrazów medycznych (np. zdjęć rentgenowskich, rezonansu magnetycznego) wraz z notatkami lub raportami klinicznymi, pomaganie radiologom w diagnozowaniu i planowaniu leczenia.
- Moda i handel detaliczny: zapewnianie spersonalizowanych rekomendacji produktów w oparciu o preferencje wizualne i opisy tekstowe, poprawiające doświadczenie zakupowe i zwiększające współczynnik konwersji sprzedaży.
- Optyczne rozpoznawanie znaków: Optyczne rozpoznawanie znaków (OCR) polega na wyodrębnianiu widocznego tekstu z obrazu i konwertowaniu go na format tekstowy nadający się do odczytu maszynowego. Choć brzmi to prosto, wdrożenie OCR w aplikacjach produkcyjnych może wiązać się ze znacznymi wyzwaniami.
- Narzędzia edukacyjne: tworzenie interaktywnych materiałów edukacyjnych, które łączą treści wizualne z wyjaśnieniami tekstowymi, quizami i ćwiczeniami w celu zwiększenia zrozumienia i zapamiętywania.
To tylko kilka przykładów, a potencjalne zastosowania modeli języka wizyjnego stale się rozszerzają, w miarę jak badacze i programiści badają nowe przypadki użycia i integrują te technologie w różnych dziedzinach.
Wniosek
Podsumowując, możemy powiedzieć, że PaliGemma stanowi znaczący postęp w dziedzinie modeli wizjonersko-językowych, oferując potężne narzędzie do zrozumienia i generowania treści w oparciu o obrazy. Dzięki możliwości płynnej integracji informacji wizualnych i tekstowych PaliGemma otwiera nową ścieżkę badań i zastosowań w wielu branżach. Od podpisów obrazów po optyczne rozpoznawanie znaków i nie tylko – możliwości PaliGemmy są obiecujące w zakresie napędzania innowacji i rozwiązywania złożonych problemów w erze cyfrowej.
Mamy nadzieję, że podobała Ci się lektura artykułu!
Zasoby
- Przedstawiamy PaliGemma, Gemma 2 i ulepszony zestaw narzędzi odpowiedzialnej sztucznej inteligencji
- PaliGemma – najnowocześniejszy model języka Open Vision firmy Google
- Plik README PaliGemma Github
- Dokumentacja PaliGemmy
- Dokumentacja dotycząca dostrajania PaliGemma
- Dostosuj PaliGemma w Google Colab
- Blog o przytulanej twarzy