Anifusion-SD
TL;DR
Jest to nowy model podobny do stabilnej dyfuzji (dostrojony z SD2) dla obrazów anime, obsługujący rozdzielczość 768x768 i znacznie przewyższający niektóre popularne modele anime według naszych ocen. Punkty kontrolne są publiczne ( instrukcje instalacji ), demo jest dostępne przez jakiś czas.
- Wprowadzenie
- Tło
— modele dyfuzji
— dyfuzja utajona — dyfuzja stabilna — dyfuzja Waifu — dyfuzja stabilna 2 - Nasz model: trening
- Kondycjoner
- Kwestie techniczne i optymalizacje
- Aktualizacja zestawu treningowego
- Trening w wyższej rozdzielczości
- Zmiany w próbkowaniu - Wyniki
- Porównanie z innymi modelami anime
- Dyskusja
- Bibliografia
- Wskaźniki
Po moich eksperymentach z trenowaniem modeli dyfuzji od podstaw, wiele osób zwróciło uwagę, że istnieje kilka precyzyjnie dostrojonych wersji stabilnej dyfuzji na tych samych/podobnych zestawach danych. W szczególności:
- Waifu Diffusion : używa stosunkowo niewielkiego podzbioru danych i po prostu podaje znak zachęty do CLIP w celu kondycjonowania), bez żadnych modyfikacji kodu do oryginalnej stabilnej dyfuzji (jest to problem IMO). Niemniej jednak wydaje się, że jest to obecnie najpopularniejszy model rozpowszechniania anime. Wypuścił punkt kontrolny dla publiczności, w przeciwieństwie do następnego modelu;
- NovelAI : robi to prawdziwa firma, a nie niezależni badacze/inżynierowie. Nie wypuszczają modelu, ale udostępniają do niego płatny interfejs. Najwyraźniej doszło też do pewnego dramatu związanego z wyciekiem ich punktu kontrolnego i kodu, z którego wydaje się, że wprowadzili kilka drobnych modyfikacji do oryginalnej wersji Stable Diffusion;
- Anything-v3 : ten pojawił się nieco później, nie ma zbyt wielu informacji na temat modelu, ale podejrzewa się, że został dopracowany przez WaifuDiffusion (przynajmniej używa podobnych szybkich transformacji przed przekazaniem go do CLIP). Tworzy bardzo szczegółowe i ładnie wyglądające obrazy, ale nie jest zbyt wierny monitowi. Jego przestrzeń wyjściowa jest bardzo mała (brak różnorodności, wszystkie obrazy mają ten sam styl i są do siebie podobne) i przypomina przeddyfuzyjne modele GAN. W przeciwieństwie do innych modeli, ten również nie jest w stanie generować NSFW – więc być może został uzyskany przez dopracowanie małego zestawu danych wysokiej jakości obrazów przez jednego artystę.
Jednak biorąc pod uwagę obfitość modeli w tej dziedzinie, na początku postanowiłem nie zawracać sobie głowy angażowaniem się i pozwolić postępowi toczyć się własnym torem. Ale teraz wydano Stable Diffusion 2 i nadal nie widać widocznych postępów w modelach anime. Postanowiłem więc spróbować — w tym poście opiszę, jak dostroiłem Stable Diffusion 2 za pomocą niestandardowej odżywki zachęty i pokażę wyniki. Oczywiście publikuję również model — z kilku podpowiedzi, które wypróbowałem, był lepszy niż modele wymienione powyżej. Kilka następnych sekcji koncentruje się na szczegółach technicznych. Jeśli nie jesteś zainteresowany, możesz przejść bezpośrednio do sekcji Wyniki .
Tło
Aby zrozumieć, co się dzieje i co się zmieniło, zróbmy najpierw krótki przegląd istniejących modeli.
Modele dyfuzyjne
Nie będę wchodził w szczegóły modeli dyfuzyjnych, w Internecie jest już mnóstwo dobrych recenzji na jego temat. Dla naszych celów wystarczy wiedzieć, że chodzi o dekompozycję procesu generowania obrazu na sekwencję kroków „odszumiania”. Podczas uczenia szkielet modelu (w przypadku obrazów — zwykle plik UNet) otrzymuje uszkodzony obraz i krok odszumiania i próbuje cofnąć pojedynczy krok uszkodzenia. Podczas wnioskowania zaczynamy od przypadkowego szumu i wielokrotnie stosujemy szkielet, aby „cofnąć” wszystkie wyimaginowane kroki korupcji. Dokładna matematyka za tym musi być precyzyjna. W czasie wnioskowania większość nowoczesnych modeli dyfuzji modyfikuje proces w celu zmniejszenia liczby kroków próbkowania (było to możliwe dzięki temu, że ktoś zauważył, że proces ten jest podejrzanie podobny do rozwiązywania stochastycznego równania różniczkowego metodą numeryczną i zastosował inteligentniejszy solwer DE zamiast).
Utajona dyfuzja
Jest to prawdopodobnie najważniejsza idea, stosowana w większości modeli otwartej dyfuzji. Firmy takie jak Google czy OpenAI mogą sobie pozwolić na trenowanie i używanie modeli dyfuzji w oryginalnej przestrzeni pikseli, ponieważ mają dużo sprzętu. Ale dla laika trenowanie (a nawet uruchamianie) UNet w przestrzeni 512x512 pikseli jest bardzo drogie. Chodzi o to, aby wytrenować autoencoder, który kompresuje obraz z oryginalnej przestrzeni 512x512x3 do przestrzeni ukrytej (w przypadku stabilnej dyfuzji — 64x64x4). Autoencoder jest szkolony jako VAE z regularyzacją opartą na KL, aby zachować ukrytą przestrzeń „ładną”.
Następnie model wykonuje dyfuzję w tej przestrzeni 64x64x4, co jest oczywiście znacznie bardziej wydajne. Wadą jest to, że VAE nie jest doskonały, a niektóre informacje są tracone podczas kompresji obrazu. Ale w praktyce sprawdza się bardzo dobrze.
FWIW, możliwe są alternatywne podejścia, np. Imagen generuje niskowymiarowy obraz w przestrzeni pikseli, a następnie stopniowo go skaluje. Nie dotyczy to jednak modelu, który opisujemy w tym artykule.
Stabilna dyfuzja
Był to bardziej przełom społeczny niż techniczny. Model był „waniliowym” utajonym modelem dyfuzyjnym, wyszkolonym na LAION iw przeciwieństwie do większości poprzednich modeli generowania obrazów został udostępniony publicznie. Dzięki temu technologia stała się dostępna dla szerokiego grona odbiorców nieobeznanych z uczeniem maszynowym, co wywołało wiele kreatywności, dyskusji i ludzi dopracowujących ją na różnych zbiorach danych (np. wspomnianych powyżej modelach anime).
Jednym z interesujących wyborów w architekturze, który jest dla nas bardzo istotny, jest sposób warunkowania modelu. Zwykle modele są szkolone zarówno w trybach „bezwarunkowych” ( UNet (uszkodzony obraz) ~ obraz ), jak i warunkowych ( UNet (uszkodzony obraz, stan) ~ obraz ), a wskazówki bez klasyfikatorów są używane podczas próbkowania: zamiast korzystania z UNet ( uszkodzony obraz , warunek ) podczas generowania obrazów używa C * UNet ( uszkodzony obraz , stan ) — ( C — 1) * UNet ( uszkodzony obraz ) i Cjest znacznie wyższa niż 1 (np. 7). Nie jest to zbyt intuicyjne, ale znacznie poprawia zarówno jakość obrazu, jak i natychmiastową wierność generowanych obrazów.
Dla nas istotne jest to, w jaki sposób uzyskuje się stan . W Stable Diffusion używają ostatniej ukrytej warstwy kodera tekstu modelu CLIP . Jest zamrożony, tzn. gradienty nie są do niego wstecznie propagowane podczas uczenia. Można go uznać za model kodera języka, z pewnymi drugorzędnymi odmianami obrazu, które wpływają na rozumienie języka w kierunku rozumienia wizualnego.
Rozpowszechnianie Waifu
To jest stabilna dyfuzja dostrojona do obrazów anime. Wygląda na to, że jako zestaw treningowy użyli podzbioru Danbooru2021 (lub czegoś podobnego). Użyli Stable Diffusion w obecnej postaci, bez żadnych modyfikacji kodu (dopracowali jednak część dekodera VAE, aby działała nieco lepiej z obrazami anime).
W rezultacie podobnie używają CLIP jako kondycjonera, podając mu ciąg znaków z tagami jako monit. Zgaduję, że działało to dość słabo, ponieważ przetwarzają również tagi (np. Zastępując podkreślenia spacjami). Ale nawet przy tym wydaje się, że zrozumienie monitu przez CLIP jest nieoptymalne.
Stabilna dyfuzja 2
Jest to wydanie przyrostowe, które przeszkoliło model (tego samego rozmiaru) od podstaw, a także zastąpiło kondycjoner OpenCLIP . Ma również kilka interesujących dodatkowych funkcji, takich jak img2img oparty na głębi i model o wyższej rozdzielczości (768x768 pikseli).
Nasz model: szkolenie
Celem jest dostrojenie Stable Diffusion 2 do obrazów anime, zastępując koder niestandardowym modelem wyspecjalizowanym dla zestawu tagów jako danych wejściowych, w przeciwieństwie do języka naturalnego CLIP. Poza lepszym kondycjonowaniem umożliwiłoby to również zastosowanie techniki szybkiej augmentacji z Anifusion , która tak bardzo pomogła w jakości i różnorodności.
Odżywka
Używamy tego samego podejścia, co w Anifusion: model warunkowania to transformator wielkości BERT bez osadzania pozycyjnego (aby uchwycić symetrię podpowiedzi znaczników: kolejność znaczników nie powinna mieć znaczenia). Po prostu wymieniamy kondycjoner, zachowując tę samą część rdzenia dyfuzyjnego, która skupia uwagę.
Ważnym pytaniem jest tutaj, jak zainicjować transformator wagowy. Rozpoczynanie od nietrenującego kondycjonera i wytrenowanego UNet i trenowanie ich łącznie może doprowadzić do zniszczenia lub znacznej degradacji ciężarów UNet w procesie treningowym. Na szczęście nie jest to trudne do naprawienia: możemy zamrozić UNet i na jakiś czas uruchomić szkolenie tylko dla części transformatora.
Kwestie techniczne i optymalizacje
Aby trening był efektywny, ważne jest, aby wcisnąć jak największy rozmiar wsadu do pamięci RAM wideo (np. ponieważ koszt zastosowania logiki optymalizatora jest płacony tylko raz na wsad). Mamy tutaj w zasadzie dwa kierunki.
Zmiany rurociągów
Kanoniczny kod szkoleniowy SD uruchamia koder VAE w trybie online, analizując nieprzetworzony obraz i kodując go. Jest to najniżej wiszący owoc, którego należy się pozbyć: wagi VAE zużywają VRAM, zmienne pośrednie z zastosowania tego kodera również zużywają VRAM, proces kodowania wymaga czasu. W szczególności, jeśli wykonujemy wiele przejść nad danymi, nie ma sensu ponosić kosztów wielokrotnego kodowania tego samego obrazu.
Na szczęście tę część można łatwo zoptymalizować: po prostu wstępnie kodujemy wszystkie obrazy w zbiorze treningowym. Dodatkową korzyścią jest to, że wynikowy zestaw treningowy jest znacznie mniejszy (pod względem rozmiaru dysku) niż oryginalne obrazy 512x512 w przestrzeni pikseli.
Innym sposobem na zaoszczędzenie trochę VRAM jest wyłączenie EMA. Wykładnicza średnia ruchoma to sztuczka mająca na celu nieznaczną poprawę jakości modelu poprzez (z grubsza) uśrednienie wag z kilku ostatnich punktów kontrolnych, a niezapisywanie EMA to łatwy sposób na użycie mniejszej ilości pamięci VRAM bez znacznego uszczerbku dla wynikowego modelu.
Zmiany treningowe
Popularnym sposobem na przyspieszenie uczenia i zaoszczędzenie pamięci VRAM jest użycie niższej precyzji: zamiast zwykłego fp32 (32-bitowe liczby zmiennoprzecinkowe), użyj fp16 lub bf16 (odmiany 16-bitowych liczb zmiennoprzecinkowych) lub mieszanej precyzji (wykonaj niektóre operacje w FP16).
Próbowałem tego i rzeczywiście pomaga to w wydajności, ale jest zbyt niebezpieczne. W szczególności w pewnym momencie dodałem „with torch.autocast():” (mieszana precyzja), aby zwrócić uwagę, a potem zmarnowałem trochę czasu, zastanawiając się, dlaczego model powoli rozchodzi się w czasie.
W rezultacie zdecydowałem, że bezpieczniej będzie nie stosować optymalizacji tego typu do modelu, biorąc pod uwagę, że trening był już dość wydajny.
Aktualizacja zestawu treningowego
W Anifusion wykorzystano starszą wersję datasetu Danbooru , więc uznałem, że to dobry moment na jego aktualizację, przy jednoczesnym zwiększeniu rozmiaru zbioru uczącego i zestawu obsługiwanych tagów w monicie. Było jednak kilka komplikacji: (1) nowa wersja zestawu danych nie była prostym nadzbiorem poprzedniego i (2) zdecydowałem się to zrobić, gdy model już się uczył, więc trochę dodatkowej pracy, aby przenieść istniejący punkt kontrolny był niezbędny.
Różnice w zbiorach danych
To trochę mało, ale po pobraniu metadanych dla nowej wersji zestawu danych zauważyłem, że kilka obrazów (kilka procent) zniknęło. Niektóre tagi, które wcześniej znalazły się w top-2.5k, również zniknęły (w tym niektóre z najpopularniejszych), ponadto usunięte obrazy pasowały do usuniętych tagów.
Dalsza inspekcja wykazała, że wszystkie zniknięte tagi pasowały do wzoru „frędzli NSFW” (niektóre z nich były tak frędzlowe, że nawet nie wiedziałem, że takie rzeczy istnieją…). Było to trochę niespójne, ponieważ inne podobne z natury tagi i obrazy były utrzymywane na miejscu. Zgaduję, że albo opiekun zbioru danych, albo witryna hostująca obraz źródłowy, zaimplementowała to jako szybki hack, aby rozwiązać niektóre problemy związane z PR. W każdym razie po prostu wziąłem połączenie starych i nowych zestawów danych, zdobywając około 2M obrazów do trenowania. Ponadto spróbowałem z nich 800 000 obrazów o rozdzielczości ≥ 786x768, aby później dostroić model o wyższej rozdzielczości.
Rozszerzanie zestawu tagów
Ta sekcja jest właściwie nietrywialna. W momencie tworzenia nowego zestawu danych model był szkolony przez dość długi czas, mając dobrze zbieżny transformator kondycjonujący, przyjmując monity z tagów o najwyższej wartości 2,5 tys. jako dane wejściowe. W przypadku nowszej wersji zdecydowałem się zamiast tego wziąć tagi o największej liczbie 12 000. Jak dodać je do modelu?
To, co wymaga aktualizacji, to stół osadzania transformatora (z 2500x1024 na 12000x1024). Naiwnym podejściem jest losowe inicjowanie nowych osadzeń i trenowanie modelu przez pewien czas z zamrożonym UNet, aktualizując tylko transformator. Ale jest to (1) marnotrawstwo czasu i mocy obliczeniowej, (2) nudne. Czy możemy je lepiej zainicjować?
Przyjrzyjmy się, jakie informacje są dla nas dostępne. Przeszkoliliśmy już 2,5 tys. osadzeń, a osadzania dla nowych tagów powinny być do nich nieco podobne. Ale do których? Naiwnym pomysłem jest użycie osadzania semantycznie podobnych tagów. Ale jak uzyskać podobieństwo semantyczne? Stary dobry word2vec jest w tym bardzo dobry, więc możemy po prostu wziąć zestawy tagów i trenować na nich osadzanie word2vec. Poniżej znajduje się wizualizacja wyniku t-SNE (ciemne punkty odpowiadają tagom NSFW, więc łatwo je pominąć osobom, które nie chcą na nie patrzeć): link interaktywny .
Przyjrzyjmy się tej samej wizualizacji dla 2,5 tys. przeszkolonych osadzeń z transformatora: łącze interaktywne .
Więc to nie jest tak naprawdę to samo i skupia się bardziej na wyglądzie niż na semantyce. Jednak powinno być wystarczająco blisko, abyśmy mogli obliczyć początkowe osadzenie dla nowych znaczników w następujący sposób: weź najbliższych sąsiadów w przestrzeni word2vec z górnych 2,5 tys. i zagreguj ich osadzenie transformatora. W rzeczywistości możemy go nawet trochę ulepszyć: wytrenować małą sieć NN, która przekształci słowo 2vec tak, aby agregacja najbliższego sąsiada odpowiadała prawdziwemu osadzeniu na pierwszych 2,5 tys. i zastosować to do pozostałych znaczników.
Dzięki temu uzyskujemy rozsądną inicjalizację dla nowych osadzeń, modyfikujemy ostatni punkt kontrolny i wznawiamy szkolenie na nowych danych bez zmian.
Trening w wyższej rozdzielczości
Wersja Stable Diffusion 2 generuje obrazy o rozmiarze 768x768 (tj. 2,25 razy większe niż 512x512), która ma kilka interesujących właściwości (np. lepiej radzi sobie z rysowaniem palców niż wersja o niższej rozdzielczości). Postanowiliśmy więc zrobić to samo z naszym modelem. W szczególności wyróżniamy dwa etapy szkolenia:
- Niska rozdzielczość: uczenie na obrazach 512x512 (64x64x4 utajona przestrzeń), z wsadem o wielkości 11, szybkość uczenia 5e-6, dla 1 miliona kroków;
- Wysoka rozdzielczość: wznawianie z poprzedniej fazy, trenowanie na obrazach 768x768 (96x96x4 ukryta przestrzeń), z wsadem o rozmiarze 5, szybkość uczenia się 5e-6, 80 tys. kroków.
Próbkowanie zmian
W Anifusion rozszerzenie monitu o oddzielny model drastycznie poprawiło wyniki. Intuicyjnie łatwiej jest próbkować rzeczy w dyskretnej przestrzeni pojęciowej, w przeciwieństwie do niejawnej ciągłej przestrzeni wewnątrz procesu dyfuzji.
Tutaj stosujemy tę samą technikę, ponownie trenując szybki transformator wspomagający na nowym zestawie treningowym. Obserwujemy ten sam efekt — jakość i różnorodność próbki drastycznie wzrasta wraz ze zwiększaniem podpowiedzi, szczególnie w przypadku krótkich podpowiedzi.
Wyniki
Wygląda na to, że model 768x768 daje lepsze obrazy niż model 512x512, i to nie tylko ze względu na rozdzielczość: ogólna spójność obrazów i (zwłaszcza) szczegóły anatomiczne postaci są lepsze. Wydaje mi się jednak, że z terminową wiernością jest nieco gorzej (nie mam jednak dokładnych wymiarów, to tylko moje wrażenie).
Należy zauważyć, że w porównaniu z Anifusion model wydaje się być bardziej stronniczy w stosunku do obrazów NSFW/racy. Część z nich można przypisać szybkiej augmentacji, ale część UNet jest również odpowiedzialna. Nie jestem pewien, dlaczego tak się dzieje (zmiany zestawu treningowego były raczej niewielkie; może powoduje to rozmiar/zaczynanie od stabilnej dyfuzji?).
Przyjrzyjmy się krok po kroku różnym typom obrazów.
Portrety
Jest to najprostszy przypadek użycia, a portrety anime były z powodzeniem generowane nawet w erze GAN. Nic więc dziwnego, że model nie ma z tym problemów (kilka przykładów poniżej).
Pojedynczy znak, popularne tagi
To trudniejszy test i zgodnie z oczekiwaniami od czasu do czasu (rzadko) można uzyskać złe obrazy. Częstym trybem awarii jest zła anatomia — dodatkowa ręka lub noga. I oczywiście palce są dużym wyzwaniem dla modelki.
Pojedynczy znak, znaczniki ogona
Tutaj testujemy mniej popularne tagi, w szczególności te, które zostały dodane na późniejszych etapach uczenia (więcej szczegółów powyżej). Wydaje się, że działają całkiem dobrze, choć nie idealnie. Niektóre przykłady znajdują się poniżej. Ogólnie rzecz biorąc, wydaje się, że znaczniki znaków są łatwiejsze dla modelu niż znaczniki pojęć.
Interakcje postaci
W końcu dochodzimy do czegoś ciekawego. Oryginalna Anifusion nie radziła sobie dobrze, gdy postacie wchodziły w interakcje. Czy nowy model jest lepszy?
Wiele postaci stojących obok siebie wydaje się być w porządku:
Proste działania również trochę działają:
Interakcje z obiektami są również mniej lub bardziej w porządku:
Jeśli jednak spróbujemy określić skomplikowane interakcje, najczęściej wywołuje to przerażenie ciała (nie będę zamieszczał tych zdjęć tutaj, ponieważ mogą być niepokojące). Dlaczego to się dzieje? Spekuluję, że dzieje się tak, ponieważ monity są po prostu zestawami tagów i nie określają wystarczająco dokładnie interakcji. To, co sprawiło, że modele dyfuzji generowały dobre obrazy, to przede wszystkim wskazówki wolne od klasyfikatorów: nadmierne podkreślanie podpowiedzi drastycznie poprawiło jakość w porównaniu z próbkowaniem bez podpowiedzi, ponieważ próbkowanie skomplikowanych koncepcji w ramach dyfuzji jest trudne. Możemy więc spodziewać się, że to, co jest jednoznacznie określone w pytaniu, zostanie wygenerowane ładnie, ale niejasności zostaną rozwiązane w niezbyt przyjemny sposób. Podpowiadanie w języku naturalnym może być w tym sensie lepsze.
FWIW, w komentarzach do oryginalnego postu Anifusion na reddit, Gwern zasugerował użycie BLIP do generowania monitów w języku naturalnym z obrazów; Właściwie to próbowałem, a jakość monitów była bardzo niska, więc nie jest to takie proste.
Style
W oryginalnym Stable Diffusion ludzie znaleźli wiele sposobów określania stylów modelu, głównie poprzez dodawanie nazwisk niektórych artystów. Czy to samo działa w przypadku modelu anime?
Wypróbowanie — działa bardzo dobrze (jest to zaleta w porównaniu z AnythingV3). Poniżej znajdują się przykłady w różnych losowych stylach.
Porównanie z innymi modelami anime
Nie porównujemy z AnythingV3, ponieważ tak naprawdę nie respektuje zachęty, generując podobne obrazy dla prawie wszystkiego (jak sugeruje nazwa). To pozostawia WaifuDiffusion i NovelAI. Zrezygnowaliśmy z porównania z NovelAI, ponieważ wymagałoby to użycia wyciekającego punktu kontrolnego, a od tego dramatu lepiej trzymać się z daleka. To pozostawia nam WaifuDiffusion.
Należy zauważyć, że porównanie krótkich monitów byłoby zbyt niesprawiedliwe dla WaifuDiffusion: nie obejmuje ulepszania monitów (w przeciwieństwie do Anifusion), co daje bardzo słabe wyniki w przypadku krótkich monitów. Zamiast tego robimy dwa różne porównania. W jednym z nich próbkujemy zestawy znaczników z oryginalnego zbioru danych, skutecznie eliminując z rozważań natychmiastową augmentację i porównując tylko część dotyczącą dyfuzji. W drugim ręcznie konstruujemy kilka średniej wielkości podpowiedzi i oceniamy na nich oba modele (w tym efekt augmentacji promptów).
Zestawy tagów ze zbioru danych
Próbkujemy 97 zestawów tagów ze zbioru danych (jednolicie, filtrując do obrazów z oceną „bezpieczne”). W przypadku Anifusion przetwarzamy je wstępnie, dodając do monitu „rating_s, score_perc_100, Adjusted_score_perc_100”. W przypadku WaifuDiffusion przetwarzamy je wstępnie, zastępując podkreślenia spacjami. W obu przypadkach używamy próbkowania DDIM z 50 krokami i 9-stopniową skalą wskazówek bez klasyfikatorów.
Po uzyskaniu niektórych ocen ludzi (z losowo odwracanymi stronami dla porównania) uzyskujemy następujące wyniki w porównaniu z Waifu:
- Lepsza anifuzja: 30%
- Waifu jest lepszy: 24%
- Mniej więcej tyle samo: 46%
Jeden wzorzec awarii, który zauważyłem w Waifu: często generuje jakiś podobraz zamiast pełnego obrazu, obcinając głowę postaci. Wzorzec niepowodzenia Anifusion to niezapowiedziana NSFW (i pokrewna — zła anatomia; z jakiegoś powodu im obraz jest bliższy NSFW, tym gorsza jest anatomia modelu).
Uwaga dodatkowa: tutaj możesz znaleźć wyniki AnythingV3 dla tych samych monitów. Wyniki wyglądają dobrze, ale widać, dlaczego waham się przed włączeniem tego do porównań: wszystkie obrazy wyglądają na dokładnie w tym samym stylu, poważnie brakuje im różnorodności, co oznacza, że model ma znacznie mniejszą przestrzeń wyjściową.
Tak więc z próbkowaniem w dystrybucji nie jest drastycznie lepiej. Ale co, jeśli użyjemy modelu w wysokiej rozdzielczości?
- Anifuzja jest lepsza: 41%
- Waifu jest lepszy: 13%
- Mniej więcej tyle samo: 46%
Można zauważyć, że istnieje nietrywialna ilość „mniej więcej tego samego”. Większość z tych przykładów to oba modele równie dobre, ale są takie, w których oba modele są strasznie złe (w jakiś sposób są w tym skorelowane).
Ręczne monity średniej wielkości
Używamy tego samego wstępnego przetwarzania podpowiedzi, jak opisano w poprzedniej sekcji. Ręcznie przygotowujemy 33 rozsądne monity średniej wielkości (oczywiście, ponieważ są one przygotowywane przez jedną osobę, mogą nie być reprezentatywne dla całej dystrybucji).
Tutaj wyniki są bardzo różne:
- Anifuzja jest lepsza: 73%
- Waifu jest lepszy: 9%
- Mniej więcej tyle samo: 18%
Jak widzimy, szybka augmentacja robi różnicę. Co się dzieje, gdy używamy modelu o wysokiej rozdzielczości? Wyniki są dość podobne ( surowe dane ):
- Anifuzja jest lepsza: 73%
- Waifu jest lepszy: 3%
- Mniej więcej tyle samo: 24%
Dostępność dla laików
Interesującą obserwacją jest to, że nawet po milionie treningowych minipartii model nadal się poprawia. Nie jest jasne, czy model pamięta cokolwiek z oryginalnego punktu kontrolnego Stable Diffusion po tylu krokach. Być może zestaw danych anime jest na tyle łatwy, że można trenować modele dyfuzji wielkości SD od podstaw na zwykłym sprzęcie, bez gorącego startu z istniejącego SD? Jest to kierunek, który należałoby zbadać: w takim przypadku wypróbowanie nowych architektur dla osób indywidualnych powinno stać się łatwiejsze, bez konieczności wydawania milionów dolarów na moc obliczeniową, jak ma to miejsce w przypadku szkoleń opartych na LAION.
Dalsze ulepszenia jakości
Interesujące jest zobaczyć, jak daleko można zajść z obecnym modelem, więc chcę go nieco bardziej dostroić, być może używając pełnego zestawu danych, a nie podzbioru 2M. Podejrzewam jednak, że czynnikiem ograniczającym jest jakość zbioru danych, a nie ilość dopracowań (tj. aby poprawić jakość modelu, należałoby albo zasilić tylko obrazy o wyższej jakości, albo dodać do kondycjonera specjalny identyfikator, który pomaga modelowi rozróżniania lepszych i gorszych obrazów). O ile mi wiadomo, nie ma takich niezawodnych modeli dla anime (w przypadku ogólnych obrazów ludzie używają podzbioru „estetyki” LAION). Chociaż istnieją modele, które dają świetne wyniki, które wyglądają inaczej niż ten model lub WaifuDiffusion (np. model anime Midjorney, który jest dostępny tylko w postaci wybranych przez nich obrazów), więc może to być możliwe.
Należy zauważyć, że generowanie wyższej rozdzielczości poprawia jakość w innych aspektach niż tylko rozdzielczość — np. niesławne „ręce AI” stają się lepsze. Zastanawiam się, czy dalsze zwiększenie rozdzielczości do 1024x1024 przyniosłoby więcej ulepszeń. Coś do wypróbowania może polegać na użyciu kaskadowej dyfuzji (np . Imagen ) w przestrzeni utajonej (np. 64x64 -> 128x128 -> 256x256 w przestrzeni utajonej, dając 2048x2048 w oryginalnej przestrzeni).
Użyteczność
Jedną z obaw związanych z tym, co publikuję, jest to, że jest to dowód słuszności koncepcji. Kod modelu różni się od SD, więc nie jest tak naprawdę kompatybilny z większością narzędzi (zwłaszcza częścią tokenizera podpowiedzi). Więc chociaż ten model wygląda lepiej niż inne dostępne modele anime, łatwość obsługi nie jest tak wspaniała. Potencjalnym rozwiązaniem byłoby odpowiednie zintegrowanie go przez społeczność (lub mnie, jeśli mam na to czas) z istniejącymi narzędziami lub uczynienie go kompatybilnym z SD na poziomie interfejsu.
Bibliografia
- Stabilna dyfuzja 2
- Ukryta dyfuzja
- Zbiór danych Danbooru2021
- Instrukcje dotyczące wywoływania internetowego interfejsu użytkownika
- Punkty kontrolne modelu (huggingface): 512x512 , 768x768 , augmenter podpowiedzi
- Repozytorium SD Github dostosowane do modelu
- Wersja demonstracyjna 768x768 — ograniczona do „oceny: Bezpieczna”, będę ją uruchamiać przez jakiś czas, ale w końcu jej nie utrzymam

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































