Skip to main content
RD EZ

240703 - ComfyUI Advanced KSampler

Spis Treści #

  1. Odrobina teorii - KSampler (Advancer)
    1. KSampler, Advanced KSampler i steps
    2. Sampler
    3. Scheduler
    4. Add Noise, Return with Leftover Noise
    5. Denoise
    6. Nie dość dużo stepów (steps 30, end at 20)
  2. Latent Image shenanigans
    1. Kiepski substrat + prompt = dobry kierunek
    2. Kiepski substrat + ZERO CONDITIONING = katastrofa
  3. Odpowiednio Chory Eksperyment - integrujemy wszystko
  4. Linki powiązane

.


1. Odrobina teorii - KSampler (Advancer) #

1.1. KSampler, Advanced KSampler i steps #

Mamy dwa węzły: KSampler i KSampler (Advanced). Działają podobnie, ale ten drugi daje nam więcej kontroli (jako, że pracujemy z KSamplerami i potencjalnym denoise, używam niezerowego latent space). CZARNY kolor to "zwykły" KSampler, NIEBIESKI to KSampler "Advanced".

W tym dokumencie zapoznamy się z różnicą między nimi i dojdziemy do tego jak działa KSampler.

.

Zacznijmy od parametru 'steps'.

Czyli próbuje zrobić to jednym ruchem dla 1 step, lub w dwóch dla 2 steps...:

.

Dlatego od PEWNEGO MOMENTU dla 'convergent samplers' (patrz jeden z poprzednich dokumentów) zaczyna się różnić przede wszystkim ilością detali; poniższy rysunek to różnica 50 do 20 steps:

.

1.2. Sampler #

Jak (w uproszczeniu) uczy się modele (za filmikiem)?

.

KSampler odwraca ten proces. Zmienia szum w obrazek.

Pole 'Sampler' reprezentuje matematyczny algorytm transformacji szumu w wynikowy rysunek.

Te, które są 'convergent' - "wymuszają" kontekst obrazka pochodzący z prompta a te, które są 'non-convergent' patrzą bardziej na szum niż na kontekst obrazka (prompt).

Dlatego 'non-convergent' dla większej ilości iteracji idą w inny sposób (wszystkie 'ancestral') są non-convergent:

.

1.3. Scheduler #

Do tej pory mówiliśmy, że dla 20 stepów scheduler typu NORMAL usuwa 5% szumu per iterację (czyli dzieli przez ilość stepów). Do tego właśnie służy scheduler - w jaki sposób ma usuwać stepy?

.

Te rzeczy stają się ważne gdy kaskadujemy ze sobą KSamplery.

1.4. Add Noise, Return with Leftover Noise #

Parametry:

"Prosty" KSampler zawsze dodaje szum do generacji i nie daje tu opcji.

Ale KSampler (Advanced) ma inne możliwości działania - może szumu nie dodać. Możesz np. wyjść od KSamplera, przekazać mu szum (dla pierwszej iteracji ZAWSZE chcesz dodać szum; to się dzieje gdy tego 'leftover noise' nie ma):

.

Jeśli kaskadujemy ze sobą KSamplery, możemy np. zacząć z czegoś idącego mocniej za promptem a potem przekazać to do Ancestral:

.

1.5. Denoise #

To jest bardziej skomplikowane. Parametr 'DENOISE' nie występuje dla KSampler (Advanced). Ale wreszcie rozumiem o co chodzi. Wpierw spójrzmy na "identyczność"

.

Wynik:

I to prowadzi do tego czym jest parametr Denoise:

Dzięki takiemu układowi mamy możliwość fajnego chainowania KSamplerów.

.

A dokładniej:

1.6. Nie dość dużo stepów (steps 30, end at 20) #

Z uwagi na to jak działa sampler i scheduler, możemy ustawić coś takiego:

W ten sposób nie usunęliśmy całego szumu. Zostaną pewne artefakty:

To dla dpm2pp_2m + uniform:

.

To dla dpm2pp_2m + exponential:

.

2. Latent Image shenanigans #

2.1. Kiepski substrat + prompt = dobry kierunek #

Zrobię prosty rysunek w paincie. Nic szczególnego:

.

Czyli dwie wektorowe grafiki na tle zdjęcia piramid. Zróbmy z tym coś.

.

A co gdybyśmy dali niski cfg (ważniejszy image niż prompt)?

.

Czyli kierowanie promptem zdecydowanie pomaga. Po aplikacji kilku ksamplerów, seeda, itp:

.

Czyli:

.

Oczywiście da się z tym pracować lepiej, ale na test wystarczy.

Gdybym chciał zrobić to dobrze, przeczytałbym dokument 1 jeszcze raz i zrobiłbym "dodawanie embeddingów" - osobno opisałbym promptem czołg, osobno smoka i by zadziałało. Bo tam zadziałało :-).

2.2. Kiepski substrat + ZERO CONDITIONING = katastrofa #

Tu wyzerowaliśmy prompt (czarny węzeł), dla denoise 83% (25/30):

.

A tu dla denoise 100% (1/30):

Seed X:

.

Seed X+1:

.

Czyli bez prompta, on 100% bazuje na tym jaki pojawi się szum.

3. Odpowiednio Chory Eksperyment - suma latent space #

Wiecie, to się nie może dobrze skończyć. Dodajmy do siebie latent space obu światów:

Czyli:

.

Jako, że daję ZERO CONDITIONING, chcę dać euler-ancestral + exponential, 50 kroków.

Nie wiem CZEGO oczekiwałem, ale nie tego (rysunek samochodu sportowego to wynik innego seeda):

.

A jak zrobię denoise 5/50:

.

A jak opiszę co tam ma być (prompt: "illustration of a mushroom, tank and a dragon") i dam cfg 8:

.

...i na tym chyba najlepiej zakończyć ten dokument...

4. Linki powiązane #