스테이블 디퓨전으로 고품질 그림을 생성하는 팁 몇 가지(3. hire.fix)
- 공유 링크 만들기
- X
- 이메일
- 기타 앱

팁 1, 2에서는 퀄리티 태그와 네거티브 프롬프트를 이용하여 높은 퀄리티의 그림을 생성하는 법을 보았다. 계속 프롬프트 이야기만 할 수는 없으니, 이제 파라미터 쪽으로 넘어가려한다.
이번에 다룰 주제는 hires.fix(High resolution fix)이다. 2023년도 후반에는 SDXL로 넘어오면서 기본 생성 해상도가 증가했고 hires.fix 까지 사용하는 코어 유저들은 img2img도 주로 사용하기 때문에 중요성이 떨어지긴 했으나, 필자같이 img2img가 귀찮은 유저들은 hires.fix를 주로 이용지도 모르겠다. 그래도 hires.fix를 사용하면 단번에 그림의 디테일이 상승하기 때문에 일단 알아두자. 특히 필자는 배경을 생성할때 hires.fix가 필수 옵션이라 생각하고 애용하고 있다.
high resolution fix = 고해상도 고치기다. 고해상도 생성시에 그림이 틀어지거나 퀄리티가 낮아지는 현상을 고쳐주는 옵션이다. 이 옵션이 왜 나왔냐면...
![]() |
해상도: 1336*2032 |
해상도가 높으면 괴물이 나온다..... 참고로 hires.fix사용하기 전은 아래와 같다.
![]() |
해상도: 832*1312 |
그리고 여기에 hires.fix를 이용하면?
![]() |
해상도: 1080*1704 |
대충 필요성은 파악됬는가? hires.fix를 이용하면 저해상도로 생성하던 그림을 대강 유지하면서 고해상도로 생성하는 것이 가능하다. 사실 SDXL로 넘어오면서 1K가 넘는 해상도도 쉽게 생성할 수 있지만, SD1.5 시절에는 정말 필수 옵션이었다. 아무리 SDXL이 좋다 해도 해상도가 높아버리면 괴생명체가 나오는 것은 피할 수가 없기에 hires.fix를 알아두는 것이 좋다.
hires.fix는 low-resolution pass(first pass, 첫번째 패스), high-resolution pass(second pass, 두번째 패스)로 나누어 생성한다. 즉, 두번 생성한다. 처음엔 text2img로 두번째는 img2img.
low-resolution pass에선 저해상도로 생성하고, high-resolution pass에선 고해상도로 생성한다. 이름은 필자가 대충 붙였다. first pass, second pass가 가장 많이 사용되는 말인거 같다.(pass 대신 phase를 이용하기도 한다.)
암튼 왜 생성과정을 두개로 나누냐하면, 스테이블 디퓨전1은 512*512 해상도 이미지를 생성하는 AI 모델이다. 그런데, 1536*1536 같은 고해상도를 생성하라고 하면 못 한다. 그나마 512*512에 가까운 768급은 생성 가능하나, 1024를 넘기면 그림이 뒤틀리거나 망한 그림들이 나온다(위 그림참조). 그럼 이를 어찌하면 좋을까? 답은 img2img를 이용하는 것이다.
스테이블 디퓨전이 생성하기 적합한 해상도로 그림을 먼저 생성하고, 이미지 크기를 원하는 만큼 키운다. 그리고 크기를 키운 이미지를 img2img기능을 이용하여 덧칠하면 고해상도로 이미지가 생성된 것 같은 효과를 준다. 그래서 생성과정이 두개로 나뉘는 것이다. 첫번째 패스에선 저해상도로 이미지를 생성하고, 두번째 패스에선 고해상도로 이미지를 생성한다. 이 두 생성과정 사이에는 이미지를 키우는 Upscaler가 필요한데, hires.fix의 Upscaler 옵션은 어떤 방식으로 이미지 크기를 키울것인지를 고르는 옵션이다. 그럼 hires steps는? 두번째 패스에서 생성 steps를 몇으로 할지를 설정한다. Denoising strength는 img2img를 사용해보았다면 이미 알것이다. Denoising strength는 이따가 설명하도록하고, Upscale by는 이미지 크기를 몇 배로 늘릴것인지를 물어보는 것이다.
정리하자면 hires.fix는 이미지 생성과정을 하나 더 늘려서 두번에 과정에 걸쳐 이미지를 생성하는 기능이고, hires.fix에서 설정하는 옵션들은 두번째 생성과정에서 사용할 파라미터라 보면된다. 여기서 steps는 20 step만 되도 이미지 품질에는 크게 영향을 끼치지 않으므로 20~30으로 설정하면된다. 그럼 나머지 옵션들을 살펴보자.
Denoising strength
먼저 denoising strength를 알아보자. 이 denoising stength는 img2img에 있는 denoising strength와 동일한 옵션이다. img2img에서 지정하는 denoising stength는 기존 이미지에 노이즈를 얼마나 더하는 지를 지정한다. 0으로 넣으면 노이즈가 전혀 없으며, 1로 넣으면 이미지 전체가 노이즈로 뒤덮인다. 그런데 왜 굳이 이미지에 노이즈를 주어야할까? 스테이블 디퓨전의 이미지 생성과정은 노이즈 제거 과정과 비슷하다. sampler가 우리가 지정한 steps 만큼 노이즈를 제거하는 원리로 이미지를 생성한다. 그러니까, 노이즈가 존재해야 비로소 이미지가 새로 생성되는 것이다. (정확히는 데이터에 노이즈(잡음)를 주고 노이즈를 제거하는 과정을 반복한다. 실은 샘플러마다 다른데 정확히 아시는분 있으면 댓글로 달아주세요. 저도 몰름)
그럼 hires.fix에서 denoisng은 뭘까? 답은 첫번째 패스에서 생성된 이미지에 얼마나 노이즈를 뿌릴건지 설정하는 옵션이다. 두번째 패스에서 이미지에 노이즈가 있어야 고해상도에 맞추어 덧그리기 때문에 우리는 노이즈를 줘야한다. 노이즈를 얼마나 주느냐가 두번째 패스의 생성 퀄리티에 영향을 많이 주기 때문에 적절한 값이 필수이다. 필자는 보통 비 latent계 업스케일러를 이용할 때는 denoising stength를 0.5이하로 주며, latent계 업스케일러를 이용할때는 denoising stength를 0.5이상으로 준다.
latent계는 뭐고 비 Latent계는 뭘까? 업스케일러에 대해 알아보도록 하자
업스케일러(upscaler)
업스케일러는 말 그대로 크기를 키운다. 즉, 이미지 해상도를 높이는 작업이다. 일반적인 업스케일러는 nearest, bicubic, 기타 등등 여러가지 있지만, Latent는 처음 듣는 사람이 많을거다. 왜냐면... 그야 업스케일러가 아니니까...
Latent란 사실 AI쪽 용어이다.
Latent는 잠재적인 데이터이다 (전공자들은 그냥 래턴트(래튼트) 혹은 레이턴트(레이튼트)라 읽는다. 정확한 발음은 Latent. ㅋ) Latent엔 이미지가 잠들어 있다고 보면 된다(매우 고차원적인 데이터이다). 스테이블 디퓨전에선 매 스텝마다 이 Latent를 갈고 닦고(Denoising), 최종 형태로 VAE를 통해 비로소 Latent가 이미지로 변환되어(Decoder) 우리가 예쁜 그림을 얻을 수 있는 것이다.
그러니까 굉장히 쉽게 말하자면 노이즈가 낀 Latent를 잘 디노이징해서 노이즈가 제거된 Latent로 만들고 이걸 VAE로 디코딩하면 이미지가 생성된다.
이 Latent를 업스케일하는 것이 Latent계 업스케일러다. Latent계 업스케일러는 첫 번째 패스에서 수행한 Latent 정보를 업스케일하고, 노이즈를 Latent에 뿌리고, 샘플링 과정을 수행한다. 반면, 비 Latent계 업스케일러는 첫번째 패스에서 수행한 Latent를 VAE로 통해 이미지로 변환한다. 그 후에 이미지를 업스케일하고 VAE를 통해 다시 Latent로 변환한다. 이 후 과정은 Latent계와 동일하다. 즉, Latent와 비 Latent 둘의 차이점은 Latent를 업스케일하는가 아니면 이미지를 업스케일하느냐 차이이다.
이미지를 업스케일하는 것은 저해상도 이미지의 정보를 그대로 담고 2차원 정보를 2차원으로 업스케일하기 때문에 퀄리티가 저하되는 일은 없다. 그리고 디노이징 값도 0~1 아무 값을 택해도 문제 없다. 하지만, Latent계 업스케일러는 적절한 디노이징값과 적절한 해상도를 택하지 않으면 이미지가 심각하게 무너진다. 이 차이를 알아보기 위해 한번 생성해보도록 하자.
실험할 프롬프트와 파라미터는 다음과 같다.
프롬프트: 1girl, best quality, masterpiece, large breasts, french braid, swept bangs, light brown hair, blue eyes, (realistic:0.6), fantasy, absurd long hair, makeup, eyeliner, eyeshadow, portrait, general, bare shoulders
댓글
댓글 쓰기