Miksowanie twarzy w Stable Diffusion (AUTOMATIC1111)

Czyli trochę o składni w AUTOMATIC1111, kilka spostrzeżeń i hacków.

Spróbujemy połączyć w jednym obrazie wizerunki dwóch kobiet, bardzo różnych od siebie, żeby było widać co się dzieje, Użyjemy różnych spójników, łączników i spróbujemy zrobić to w różnych proporcjach włączając w prompcie nazwiska w różnych krokach (sampling steps).

Najpierw standardowo, przecinek.

słowa, czyli w nomenkaturze SD tokeny można łączyć po prostu spacją, albo przecinkiem. Nie wiem do końca jak to jest, ale prawdopodobnie, co też wynika z obserwacji, tokenem może być połączenie kilku słów, tak jak w naszym przypadku będzie imię i nazwisko. Jeśli „Naomi” może opisywać wiele osób, bo to po porstu imię, a „Campbell” może być nazwiskiem wielu osób, lub nawet nazwą zupy w puszce, to razem oznacza już konkretną osobę, modelkę, którą modele AI świetnie rozpoznają. Imię i nazwisko rozdzieliłem więc spacją, ale to mamy jeszcze Inne nazwisko, więc rozdzieliłem je przecinkiem. zresztą zobaczmy sami.

Prompt: Julianne Moore, Naomi Campbell, art by william Stout <lora:add_detail:1>
negative prompt: Fat, thick , thick arms, chubby, easynegative, animal ears, cat ears,, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurryStout

No to opiszmy co widać: Widać hybrydę Naomi Campbell, Julianne Moore i pewnie jakichś dinozaurów, których modele nauczyły się od Williama Stouta (komiksowy artysta który trochę tych dinozaurów narysował. Stąd zielona skóra i łusek też się trochę pojawi, natomiast <lora:add_detail:1>g lora add detail to przywołanie modelu lora Detail Tweaker, który powoduje dodanie bardziej szczegółowych detali. Trzeba go pobrać z civitai https://civitai.com/models/58390/detail-tweaker-lora-lora i umieścić w katalogu \models\LoRA w swoim Stable diffusion. No cóż – taki przykład wybrałem do tego wpisu.

a tak przy okazji, model to RunDiffusion FX Photorealistic do pobrania z civitai
Model jest napalony jak nastolatek, więc można dostać nagość, nawet jeśli się o nią nie prosiło. Ja nie prosiłem, ale nie dałem w negative prompt żadnego „nsfw” ani „nude”, więc efekt jest jaki jest.Mam nadzieję, że sutki nikomu oczu nie wykłują.
Co tam jeszcze? ziarno dla gołąbków (Seed, X Values: „6589, 58795, 8764”), którzy chcą odtworzyć obraz jest nad obrazami, Size: 512×768, podglądów wygenerowana za pomocą Script: X/Y/Z plot, a reszta to: Steps: 60, Sampler: DPM++ 2S a, CFG scale: 6. Zresztą wszystko można odczytać z exifa tego PNG.

Ale co nas interesuje, to połączenie wizerunku modelki i aktorki. Wyszło niespodziewanie trochę, bo wcześniejsze słowa w prompcie mają przeważnie większą wagę, ale tutaj widocznie model był lepiej wyszkolony z Naomi Campbell, bo tak na oko nie wygląda mi to na Julianne wcale.

Inne spójniki [spacja], [.] kropka, [|] kreska, [and] małymi literami, [AND] wielkimi literami, ale wszystko resztę tak samo. Zobaczmy efekt:

Julianne Moore Naomi Campbell oraz Julianne Moore. Naomi Campbell, czyli ze spacją i z kropką wyszły w zasadzie dość podobnie do przecinka, ale jednak odrobinę inaczej. Warto o tym pamiętać, bo w przypadku midjournej nie miało by to znaczenia.

Znak pionowej kreski | czyli „pipe” w zapisie z nawiasami kwadratowymi [Julianne Moore| Naomi Campbell] już robi różnicę zasadniczą, bo to w tym kontekście element składni oznacza naprzemienne w każdy kroku generowanie jednego, lub drugiego tokenu. Pierwszy krok, to była Jullianne, więc on okazał się mieć największy wpływ i tym razem Naomi słabo się zaprezentowała.

Julianne Moore and Naomi Campbell gdy [and] zapisane małymi literami oznacza słowo and, więc otrzymaliśmy dwie kobiety na jednym kadrze. Pierwszy obrazek bardzo fajnie, bo każda ma swoją twarz, ale reszta znów została zdominowana przez Naomi i dostaliśmy bliźniaczki. To bardzo niepożądany efekt w AI. Trudno osiągnąć dwie osoby obok siebie, żeby nie miały jednej twarzy, ale dziś nie o tym…

Julianne Moore AND Naomi Campbell tutaj AND napisane wielką literą to znów element składni, który ma skłonić stable diffusion do brania pod uwagę jednocześnie obu tokenów. Otrzymaliśmy więc tym razem efekt pożądany! Kobieta jest podobna zarówno do pani Moore jak i do pani Campbell. (choć osobno są piękniejsze niż ta hybryda, imho)

Blendowanie dwóch słów kluczowych (keyword Swapping)

i teraz na koniec bardzo charakterystyczna konstrukcja składni błędnie uznawana przez niektórych za procentowe miksowanie dwóch tokenów. To tak może wyglądać, oceniając po efektach, ale faktycznie działa inaczej. Zobaczmy najpierw przykład:

Jak na prawdę działa składnia [Julianne Moore:Naomi Campbell:0.5] ?
Otóż SD przez połowę (0.5) kroków próbuje się dopatrzeć w szumie pierwszego z blendowanych słów kluczowych, a potem dopatruje się drugiego słowa kluczowego.
czyli, jeśli mieliśmy kolejny przykład [Julianne Moore:Naomi Campbell:0.9] a steps ustawione na 60, to przez 90% kroków, czyli przez pierwszych 54 kroków generowano Julianne Moore, a przez ostatnie sześć Naomi Campbell. Dlaczego nie mozna tego uznać za miksowanie procentowe? ano dla tego, że największy wpływ na ogólną kompozycję mają pierwsze kroki, a dalsze działają na podstawie obrazu, który się wyłonił we wcześniejszych krokach. Stąd widać, że 0.1, 0.5 i 0.9 zaczynało od pierwszego biorąc pozę i kompozycję, a potem rafinowało drugim zmieniając rysy twarzy. Warto przemyśleć, które słowo użyjemy na pierwszym miejscu.
Co ciekawe wpisanie 0 i 1 daje bardzo podobne, choć nie identyczne efekty, w których sampler używa natychmiast tylko drugiego słowa.

To by było prawie na tyle, ale warto zaznaczyć, że w tym przykładzie nie pisałem o wzmocnieniu albo osłabieniu słów kluczowych, co robi się z podobną składnią z dwukropkiem: na przykład (Julianne Moore:0.6) osłabiło by działanie słowa kluczowego do 60 procent standardowej mocy, a wpisanie (Julianne Moore:1.5) to 150% działania tego słowa, które robi przerysowaną karykaturę albo całkiem masakruje efekt.