Jak robić Upscale w Stable Diffusion (obrazki z sztuczną inteligencją) - poradnik część 2
Witam w kolejnym poradniku. Tym razem pokażę jak generować obrazki w lepszej jakości bądź zwiększać jakość zdjęć.
Pierwsza część poradnika znajdziesz tutaj
https://jbzd.com.pl/obr/3397022/jak-generowac-obrazki-ai
Czyli masz swój podstawowy workflow do generowania obrazków 512x768 i pierwsze efekty pracy. Co teraz zrobić dalej?
Od swojego KSamplera przeciągnij "LATENT" na puste miejsce i dodaj węzeł "Upscale Latent" są do wyboru dwa:
Pierwsza część poradnika znajdziesz tutaj
https://jbzd.com.pl/obr/3397022/jak-generowac-obrazki-ai
Czyli masz swój podstawowy workflow do generowania obrazków 512x768 i pierwsze efekty pracy. Co teraz zrobić dalej?
Od swojego KSamplera przeciągnij "LATENT" na puste miejsce i dodaj węzeł "Upscale Latent" są do wyboru dwa:
Pierwszy daje ci możliwość zwiększenia rozdzielczości procentowo, a drugi daje możliwość konkretnych rozdzielczości, więc na przykład możesz dokładnie napisać jakie wymiary ma mieć obrazek.
Następnie od tego kafelka pociągnij nitkę i dodaj kolejny węzeł KSampler, z ustawieniami tak jak poprzednio (czyli nitki od model, positive i negative również można użyć te same bądź nowe jeśli chcesz), lecz tym razem "denoise" ustawiamy dość nisko. W zależności od tego jak bardzo chcemy by obrazek się zmienił możemy wybrać wartości od 0.05 do nawet 0.7 - im większa wartość tym bardziej obrazek się zmienia i staje się tylko "sugestią" dla AI. Często większy denoising pomaga również z niedoskonałościami jak za duża ilość palców, dziwne sutki itd. Najczęściej wybieram wartości pomiędzy 0.2 a 0.45, choć używam 0.1 jeśli grafika jest super a chcę tylko zwiększyć ilość pikseli i ostrość. Oto przykład i fragment workflow (btw, robię to na laptopie na CPU bez GPU i pierwszy obrazek zajął mi 1:44 a upscale do 800x1200 zajął 6:17, pochłaniając 12GB RAMu):
Następnie od tego kafelka pociągnij nitkę i dodaj kolejny węzeł KSampler, z ustawieniami tak jak poprzednio (czyli nitki od model, positive i negative również można użyć te same bądź nowe jeśli chcesz), lecz tym razem "denoise" ustawiamy dość nisko. W zależności od tego jak bardzo chcemy by obrazek się zmienił możemy wybrać wartości od 0.05 do nawet 0.7 - im większa wartość tym bardziej obrazek się zmienia i staje się tylko "sugestią" dla AI. Często większy denoising pomaga również z niedoskonałościami jak za duża ilość palców, dziwne sutki itd. Najczęściej wybieram wartości pomiędzy 0.2 a 0.45, choć używam 0.1 jeśli grafika jest super a chcę tylko zwiększyć ilość pikseli i ostrość. Oto przykład i fragment workflow (btw, robię to na laptopie na CPU bez GPU i pierwszy obrazek zajął mi 1:44 a upscale do 800x1200 zajął 6:17, pochłaniając 12GB RAMu):
Nie powiedziałbym żeby był to jakiś udany upscale, ale porównując obrazki obok siebie, różnice widać bardzo wyraźnie - a nawet zbyt wyraźnie, na przykład dziwne artefakty na dłoniach.
Tyle z podstawowego upscale przy generowaniu txt2img. A jeśli masz już fotki/grafiki które chcesz upscale'ować?
Wtedy zamiast "Empty Latent Image" trzeba użyć kilku innych węzłów:
Tyle z podstawowego upscale przy generowaniu txt2img. A jeśli masz już fotki/grafiki które chcesz upscale'ować?
Wtedy zamiast "Empty Latent Image" trzeba użyć kilku innych węzłów:
W przypadku img2img polecam używać "Upscale Image" zamiast "Upscale Latent" z racji że o wiele lepiej na chwilę obecną działa zmiana rozmiarów plików jpg lub png niż Latent, który może powodować jakieś zniekształcenia na zdjęciu. Następnie zdjęcie konwertowane jest na Latent i podawane do KSamplera. Ponownie używamy denoising między 0.05 a 0.7 w zależności od potrzeb.
Cały workflow przy img2img ma tylko jednego KSamplera i wygląda mniej-więcej tak (model, LCM oraz prompty są schowane poza screenshotem by screenshot był czytelny):
Cały workflow przy img2img ma tylko jednego KSamplera i wygląda mniej-więcej tak (model, LCM oraz prompty są schowane poza screenshotem by screenshot był czytelny):
Tutaj mi wyszedł o wiele lepszy upscale, który przy okazji naprawił kilka rzeczy - na przykład zęby lekko lepiej wyglądają no i dłoń jest o wiele lepsza, choć kosmyki włosów mogłby być lepsze.
Jak już jestem przy img2img to przy okazji pokażę lekko inpainting. Zaczynamy od ściągnięcia checkpointu (w części 1 było pokazane jak ściągać checkpointy i Lora) który wspiera inpainting, najczęściej mają to napisane w nazwie, np ten:
Jak już jestem przy img2img to przy okazji pokażę lekko inpainting. Zaczynamy od ściągnięcia checkpointu (w części 1 było pokazane jak ściągać checkpointy i Lora) który wspiera inpainting, najczęściej mają to napisane w nazwie, np ten:
Następnie nasz img2img workflow edytujemy w ten sposób (1) (grow_mask_by decyduje jak wiele pikseli jest poświęcanych jako efekt przejścia między istniejącym obrazekiem, a tym który zostanie wygenerwowany. Jeśli widzisz linię odcięcia na gotowym obrazku to zwiększ tą wartość), klikamy prawym przyciskiem na obrazku i wybieramy opcję "Open in Mask Editor" - otwórz w edytorze maski (2) oraz zaznaczamy fragment obrazku który chcemy zmienić (3).
W edytorze maski mamy na dole suwadło którym możemy zwiększyć lub zmiejszyć rozmiar pędzla. Na koniec klikamy "Save to node" by nasz przycięty obrazek został zapisany.
W KSamplerze denoising musi być 1 (w końcu nadpisujemy fragment obrazka szumem i AI będzie go odszumać w 100% od zera). Pamiętajcie jeszcze zmienić model na ten który obsługuje inpainting oraz w prompt pozytywnym i negatywnym napisać co chcemy by zaznaczonym fagmencie się pojawiło. W moim przypadku napisałem "white blanket" - biały koc.
Należy pamiętać że konwertowanie z img do Latent i w drugą stronę jest stratne (tak jak konwertowanie filmów czy zdjęć) - i za każdym razem kiedy to robisz to obrazek traci trochę na jakości. Więc twój porzątkowy obrazek możę się nieznacznie zmienić po img2img, nawet fragmenty których nie miałeś zaznaczonych do edycji. By dowiedzieć się więcej możesz wyszukać w google "kompresja stratna".
Oto mój gotowy obrazek, przed i po inpaintingiem.
W KSamplerze denoising musi być 1 (w końcu nadpisujemy fragment obrazka szumem i AI będzie go odszumać w 100% od zera). Pamiętajcie jeszcze zmienić model na ten który obsługuje inpainting oraz w prompt pozytywnym i negatywnym napisać co chcemy by zaznaczonym fagmencie się pojawiło. W moim przypadku napisałem "white blanket" - biały koc.
Należy pamiętać że konwertowanie z img do Latent i w drugą stronę jest stratne (tak jak konwertowanie filmów czy zdjęć) - i za każdym razem kiedy to robisz to obrazek traci trochę na jakości. Więc twój porzątkowy obrazek możę się nieznacznie zmienić po img2img, nawet fragmenty których nie miałeś zaznaczonych do edycji. By dowiedzieć się więcej możesz wyszukać w google "kompresja stratna".
Oto mój gotowy obrazek, przed i po inpaintingiem.
Początkowo miałem ustawione "grow_mask_by" = 6 i było widać takie linie gdzie był oryginalny obrazek a gdzie zaczyna się ten edytowany. Ten obrazek powyżej powstał po zwiększeniu tej wartości do 10, przez co efekt przejścia był delikatniejszy i efekt wyszedł ok :)
Pozdrawiam i życzę samych sukcesów w generowaniu obrazków :)
Pamiętajcie podzielić się rezultatami.
Pozdrawiam i życzę samych sukcesów w generowaniu obrazków :)
Pamiętajcie podzielić się rezultatami.