Wstęp

Jest kwiecień 2023 r.

ChatGPT i Stable Diffusion są w modzie. Eksperci mówią o fali innowacji AI. Co tydzień pojawiają się nowe startupy.

Tymczasem nie miałeś okazji bawić się tymi nowymi technologiami. Jesteś zajęty swoją pracą, a przestrzeń generatywnej sztucznej inteligencji jest dla Ciebie onieśmielająca. Nie wiesz od czego zacząć.

Pewnego dnia przeglądając YouTube natrafiasz na coś ciekawego. Widzisz, że „fast.ai” właśnie wyszło ze stabilnym kursem dyfuzji.

Oglądasz pierwszą lekcję. To czyste złoto. Oglądasz to jeszcze raz. Jesteś podekscytowany. Robisz notatki i zamieniasz je w artykuł. Czytasz to sobie.

Artykuł

Wyobraź sobie, że masz model, który może określić prawdopodobieństwo, że obraz wejściowy będzie cyfrą napisaną odręcznie.

Można użyć tego modelu do wygenerowania cyfr pisanych odręcznie poprzez zmianę danych wejściowych. Możesz uczynić każdy piksel nieco jaśniejszym lub nieco ciemniejszym i zobaczyć, jak wpływa to na prawdopodobieństwo wydruku.

Ciekawy! 🤔

Zatem wszystko, czego potrzebujesz, to model, który powie Ci, jak zmienić dane wejściowe, aby wygenerować dobry wynik. Jak jednak wytrenować taki model?

Można wygenerować dane syntetyczne, dodając szum do MNIST, aleprzypisanie każdemu obrazowi prawdopodobieństwa byłoby trudne i arbitralne.

A co by było, gdybyś zrobił coś innego?

Co by było, gdybyś wytrenował sieć neuronową, aby przewidywała ilość dodanego szumu? Następnie możesz odjąć szum od obrazu i otrzymać cyfrę napisaną odręcznie.

Wykorzystywana do tego sieć neuronowa nazywa się U-Net i jest pierwszym składnikiem stabilnej dyfuzji.

Skuteczne szkolenie

W rzeczywistości nie będziemy pracować z cyframi 28*28. Trenowaliśmy na większych obrazach RGB. Jeśli weźmiemy pod uwagę rozmiar obrazu 512*512*3, będzie to 786 432 pikseli.

Szkolenie z milionami takich obrazów RGB wymagałoby dużych zasobów. Jak możemy to zrobić efektywniej?

Tutaj z pomocą przychodzi VAE (automatyczny koder wariacyjny).

VAE pobierają ten sam obraz jako sygnał wejściowy i wyjściowy i próbują nauczyć się skondensowanej reprezentacji obrazu. Wyszkolony VAE można podzielić na koder i dekoder.

Teraz możemy zakodować wszystkie nasze obrazy wejściowe w latents . Możemy dodać szum do tych ukrytych danych, aby wyszkolić naszą sieć U-Net. Wreszcie możemy odjąć szum od ukrytych szumów i zdekodować je za pomocą dekodera, aby uzyskać obraz wyjściowy.

Dodanie podpowiedzi

Jak dotąd widzieliśmy, jak U-Net może generować obrazy. Następnie musimy powiedzieć mu, który obraz ma wygenerować.

Musimy udzielić mu podpowiedzi, wskazówek, jak wygenerować odpowiedni obraz.

W naszym przykładzie MNIST możemy zakodować na gorąco cyfrę „3”, połączyć ją z obrazem „3” i przekazać do sieci U-Net.

W przypadku rozwiązania ogólnego przeznaczenia potrzebujemy osadzania naszego znaku zachęty, który reprezentuje obraz.

Wymaga to zbioru danych „obrazów z podpisami” i nowego modelu.

Możemy pobrać obrazy z Internetu i użyć ich tagu alt jako podpisu tego obrazu. Na przykład,

<img src="img.jpg" alt="Cat wearing sunglasses" width="500" height="600">

Przekazujemy kombinację każdego caption z każdym image przez nasze kodery tekstu i obrazu, aby uzyskać odpowiednie osadzenie.

Możemy następnie wziąć iloczyn skalarny tych osadzania, zsumować je i zapisać w macierzy.

Nasza funkcja straty polegałaby wówczas na maksymalizacji przekątnej i minimalizacji wszystkiego innego, tj. obraz i odpowiadający mu podpis powinny mieć podobne osadzenia.

Ta funkcja straty jest znana jako strata kontrastowa (CL), a model jest znany jako CLIP (Contrastive Language-Image Pre-Training).

Po przeszkoleniu możemy użyć text_encoder w naszym stabilnym modelu dyfuzji.

Planista

Ostatni składnik stabilnej dyfuzji nazywany jest harmonogramem.

Ponieważ do naszych mini partii dodajemy różne poziomy hałasu, możemy stworzyć dla tego harmonogram szumów.

Podczas wnioskowania zaczynamy od szumu losowego i podejmujemy małe kroki, aby zaktualizować nasze dane wejściowe, dopóki model nie będzie miał wystarczającej pewności, że wygeneruje końcowy wynik.

Kładąc wszystko razem

Otóż ​​to. To stabilny rurociąg dyfuzyjny.

Potok jest naprawdę wszechstronny i zapewnia wiele parametrów umożliwiających wygenerowanie wybranego wyniku.

  • Zamiast szumu możesz zacząć od wybranego obrazu początkowego.
  • Możesz dodać negatywną zachętę do usunięcia rzeczy z obrazu.
  • Możesz przekazać guidance_scale, aby powiedzieć modelowi, jak bardzo ma się skupić na monicie
  • Możesz go dostroić za pomocą znacznika własnego obrazu
  • … i wiele więcej

Koniec artykułu

To świetny artykuł. Klikasz Publikuj. Oddychasz z ulgą. Najbliższe miesiące będą pełne wrażeń :)

~miłej nauki

Bibliografia: