Wyszukiwanie w witrynie

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. Obrazowanie medyczne: analizowanie obrazów medycznych (np. zdjęć rentgenowskich, rezonansu magnetycznego) wraz z notatkami lub raportami klinicznymi, pomaganie radiologom w diagnozowaniu i planowaniu leczenia.
  8. 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.
  9. 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.
  10. 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

Powiązane artykuły: