스테이블 디퓨전(StableDiffusion)

스테이블 디퓨전(Stable Diffusion),흐릿한 이미지에서 8K까지 업스케일링 하는 법

물범쌤 2024. 5. 17. 15:15

안녕하세요 여러분 물범쌤입니다 :)

오늘은 여러분들께 업스케일링의 방식들에 대해서
알려드리기 위해 포스팅을 작성하게 되었는데요,

 

업스케일링에 대한 개념
지난번 포스팅에 한번 설명드렸지만, 다시 한번 말씀드리자면

기존 생성된 생성물의 픽셀과 픽셀 사이에 새로운 픽셀을 끼워 넣어

좀 더 선명한 화질을 갖게 해주는 것이 업스케일링의 개념입니다.

 

업스케일링을 하면 사이즈가 커진다.라는것은 업스케일 기능을

한번이라도 사용해보신 분들이시라면 다 알고 계시겠죠?
사이즈가 커지는 이유가 픽셀들이 추가로 끼워넣어져서 그렇습니다 :)

 

업스케일링의 중요성을 모르는 분들도 있으시기에

오늘은 새로운 예시 이미지를 뽑아서 진행해 보도록 하겠습니다.

자, 그럼 시작해볼까요?


여기, 기본 사이즈인 512*512 크기의 이미지가 있습니다.

이렇게 작게 볼때는 사실 화질이나 선명도가 크게 떨어져 보이진 않지만

 

어떤가요? 1.6배 정도만 확대해도 머리카락과 눈 쪽의 픽셀들이 보이면서

화질이 명확히 흐려보이는게 보이실 겁니다.

 

 

 

아래 이미지는 원본 이미지와 4K로 업스케일링한 이미지를
한 프레임에 같이 담아본 예시입니다.

 

팔 쪽의 피부,그리고 머리카락의 질감과
눈 쪽의 해상도에서 차이를 느끼실 수 있을겁니다.

 

8K까지의 차이를 보여드리고 싶지만
업스케일링 후 이미지 파일의 크기가 너무 커져서
첨부가 안되는 관계로...
같이 보여드리지 못하는 점이 아쉽네요.

 

 


사실, 애니메이션 이미지와 다르게 실사 이미지는 조금 더 선명해 보이기 위해서
인간의 피부를 디테일하게 표현해야 하기 때문에

업스케일링 기능 뿐만 아니라 로라를 통해서도
이목구비나 피부의 질감을 챙기 실 수 있는데요.

 

피부 표현에 도움을 줄 수 있는 두 가지 로라를 소개드릴게요

Skin&Hands 는 말 그대로 피부와 손 쪽에 집중적으로 학습되어있는 모델입니다.

주의사항은 로라의 적용수치를 너무 높게 잡으면 주름같은것들이 잡히면서

피사체가 좀 늙어보일 수 있으니 주의하세요 ^^;

 

두 번째는 add_detail 로라입니다.
현재 civitai에 보이는 detail로라들은
애니메이션 이미지의 명암에 대한 디테일 로라들이 많기 때문에
실사에도 적용되는 로라를 잘 찾아서 적용하셔야 합니다 :)

 


그럼 다시 업스케일링의 본론으로 돌아와서

가장 처음 시도할 수 있고 가장 쉬운 업스케일링 방식은 바로

여러분도 잘 알고계시는 Hires.fix 기능입니다.

 

 

1. Hires.fix

 

Hires.fix 기능은 지난번 스테이블 디퓨전의 UI 상세 설명에 대한 포스팅에서

각 부분에 대한 기능을 자세히 설명드렸기 때문에 다시 설명드리지는 않겠습니다.

Upscale by 기능을 통해
생성된 이미지를 몇 배로 업스케일링 할지 설정할 수 있습니다.

계산된 사이즈는 우측 상단에 표기됩니다(밑줄부분)

 

여기서 주의할 점이 Denoising strength입니다.

원본을 그대로 업스케일링 하시길 원하신다면
해당 옵션의 수치를 낮춰주시는것이 좋습니다.
Denoising strength가 높다면
스테이블 디퓨전이 노이즈를 제거하면서 원본 이미지를 수정할 수 있기 때문입니다.


아래 사진을 보시면 Denoising strength 수치에 따라서
원본 이미지와 느낌이 달라진것을 알 수 있습니다.

 


● Hires.fix의 장점
Hires.fix의 장점은 스테이블 디퓨전의 기본 기능으로서
별도의 설치 없이 바로 사용할 수 있고,
이미지 생성시에 진행되는 업스케일링 방식으로
이미지 후처리가 필요 없다는 장점이 있습니다.

 

● Hires.fix의 단점

Hires.fix의 단점은 이미지 생성단계에서 업스케일링이 동시에 진행되다 보니

기본적으로 이미지 생성 속도가 저하된다는 단점이 있습니다.
또한,기본 이미지 크기를 기본적으로 많이 사용하는 512*512 사이즈 대비

최대 4배(2048*2048)까지만 지원하기 때문에,
4K나 8K등의 초 고화질 이미지를 생성하기에는 어려움이 있습니다.
게다가 최대 옵션인 4배를 설정하면
튕김현상이 일어나거나, 이미지 생성이 엄청 오래걸려서
사실상 UI포스팅때 설명드렸던 대로 1.5~2배까지만 사용하는 경우가 많습니다.

 


2.Ultimate SD upscale

 

다음은 Extensions설치를 통한 업스케일링 방식입니다.

 

지난번 컨트롤넷 포스팅을 보신 분들이라면 사용법을 알고계시겠죠? ^^
Extensions 탭으로 이동하셔서 'upscale'혹은 'Ultimate'를 검색하시면

'Ultimate SD Upscale' 익스텐션 파일을 설치하실 수 있습니다.

 

설치 후에는 Installed 탭으로 오셔서
Apply and restart UI 버튼을 통해 스테이블 디퓨전을 재시작 해주세요!

 

여기에서 그냥 사용해도 무방하지만,

업스케일 확장프로그램을 설치한 김에 업스케일러 설치도 한번 진행해 보겠습니다.

civitai에 접속하셔서 검색어에 '4x'를 검색해주세요

4x-Ultrasharp,4x NMKD Superscale 업스케일러를 설치해 주겠습니다.

둘 다 샘플 이미지는 애니메이션이지만

4x-Ultrasharp 는 실사이미지

4x NMKD Superscale 는 애니메이션 이미지에 사용하시면 효율이 좋습니다.

다운받은 파일들은
C:\stable-diffusion-webui\models\ESRGAN 경로로 넣으시면 됩니다.

 

*스테이블 디퓨전 1.8.0 버전 이상에서는 해당 폴더가 보이지 않는데,

그냥 C:\stable-diffusion-webui\models 경로에서
ESRGAN 폴더를 생성하셔서 그 안에 넣으시면 됩니다 ^^

 

Ultimate SD Upscale은 img2img에서만 활성화 됩니다.

 

최하단의 script에서 Ultimate SD Upscale을 활성화 시키고,

Target size type를 Scale from image size로 설정하고, scale을 2로 설정해주세요

업스케일러는 방금 설치한 4xUltrasharp_4xUltrasharpV10로 사용하겠습니다.

 

생성한 이미지를 다시 샘플 이미지창으로 넣어보면
얼마나 업스케일링이 되었는지 알 수 있습니다.

● Ultimate SD Upscale 의 장점
Ultimate SD Upscale의 장점은
다양한 업스케일러를 사용해 볼 수 있다는데에 있습니다.

또한,  Hires.fix 단계에 추가적인 업스케일링을 통해

각 기능에 2배씩의 업스케일링 단계를 설정하여
안정적으로 업스케일링을 진행할 수 있다는 장점이 있습니다.

 

●  Ultimate SD Upscale 의 단점

Ultimate SD Upscale 의 단점은 뭐니뭐니 해도 별도 설치에 있습니다.

해당 기능을 알지 못하고 있거나, 혹은 설치에 대해 어려워하는 분들에게는

비교적 꺼려지는 기능이라는것은 큰 단점으로 다가옵니다.

 


3. Extras
다음은 Extras를 통한 업스케일 방식입니다.

Extras 탭으로 이동해서 resize를 통해 업스케일링 수치를 정해줍니다.

Upscaler를 설정하고 generate를 누르면 되는데,

Extras는 다수의 업스케일러를 설정할 수 있는 기능이 있습니다.

만일 다른 업스케일러와 혼용하고 싶다면

Upscaler2를 설정하고 Upscaler2 visibility를 통해
Upscaler2가 적용될 '시점'을 정해주시면 됩니다.


0은 Upscaler2를 사용하지 않겠다는 의미이고,

1은 Upscaler2만 사용하겠다는 의미 입니다.

●  Extras의 장점

Extras의 장점은 이미지 생성이 매우 빠르게 된다는 점입니다.

직접 사용해보시면 아시겠지만 다른 방식의 업스케일링 방식보다

이미지 생성에 있어서 매우 빠른 제작 속도를 가지고 있습니다.

 

●  Extras의 단점
Extras의 단점으로는 업스케일링 속도가 빠른만큼

업스케일링 기능 자체의 품질이 좋지 않습니다.

원본 이미지의 화질에 많은 영향을 받기 때문에

txt2img 에서 바로 extras를 통해 업스케일링을 하시는것은 추천드리지 않습니다.


반응형

 

 

Q. 아니, 쌤! 그래서 저는 8K 이미지를 뽑고싶은데

어떻게 하라는 말씀이신가요? 각각의 기능은 알겠는데

조합하는 순서나 설정들이 헷갈려요ㅠㅠ!

 

A. 그럼 지금부터 8K 이미지를 뽑는 것을 기준으로

순서를 알려드릴게요.
본인이 원하는 화질이 8K보다 낮다면,
지금부터 알려드리는 과정 중 가장 마지막 단계부터 생략하시면 됩니다.


 

1. 먼저, 이미지를 생성할때 Hires.fix를 통해
2배로 업스케일링을 진행해서 생성
해주세요!


※여러분의 이해를 돕기위해
예시 이미지를 지금까지와는 다른 이미지로 진행해 보겠습니다 :)

현재 해상도는 Hires.fix 기능으로 인해 1024*1024 입니다.

 


2.txt2img에서 생성한 이미지를 img2img로 전송합니다.
최하단의 Script 메뉴로 이동해서 Ultimate SD Upscale 기능을 활성화 시켜 주세요

Target size type를 Scale from image size로 설정하고, scale을 2로 설정해주세요
(이 단계에서, 컴퓨터 사양이 좋으신 분들은 scale을 4로 설정하셔도 좋습니다)

저는 scale을 2로 둔 버전을 기준으로 두고 설명드리겠습니다.

 

 

 

생성된 이미지 파일 - 우클릭 - '자세히'탭을 통해서도
생성된 이미지의 사이즈를 알 수 있습니다.

업스케일링 후 현재 파일 크기는 2048*2048 입니다.

 


 

3.여기서 우리는 두 가지 선택지가 있습니다.

 

  3-1.방금 생성된 이미지를 다시 Script를 통해서 업스케일링 후 Extra 기능 사용하기
     (4K화질만 원하시는 분들은 여기에서 Extra단계를 생략하시면 됩니다.)

 

  3-2.Extra 기능으로 4배로 업스케일링 하기

 

저는 생성 속도가 빠른 3-2번을 기준으로 진행해 보겠습니다.

Resize를 4배로 설정해주고 업스케일러를 선택한 뒤, generate를 눌러주세요.

잘 따라와 주셨다면, 최종적으로 8K에 해당하는 이미지를 출력하실 수 있습니다 :)

 


오늘은 여기까지,
Stable Diffusion을 통해서 진행할 수 있는
업스케일링 방식에 대해 알아보았습니다.

 

모두들 알려드린 방식을 참고 하셔서 고품질의 이미지에 도전해보시기 바랍니다.

 

이 컨텐츠가 유익하셨다면 공감(♡)과 댓글 부탁드립니다.

 

그럼 오늘도 좋은하루 되세요! ^^

반응형