스테이블 디퓨전 업스케일은 고해상도 이미지를 만들기 위해 사용하는 기술입니다. 대다수의 Automatic1111 WebUI 유저 분들은 t2i로 이미지를 생성할 때 Hires.fix 기능을 활성화 하여 Latent Upscale 방식으로 진행하실텐데요, 과연 Latent란 무엇일까요? WebUI 곳곳에 등장하는 Latent란 용어, 그리고 latent upscale과 단순 upscale의 차이에 대해 한 번 간략히 살펴보도록 하겠습니다.
스테이블 디퓨전 업스케일
업스케일은 말 그대로 그림의 해상도를 올리는 작업입니다. 스테이블 디퓨전이 아닌 다른 여러 프로그램들에서도 업스케일링은 가능하지만, 스테이블 디퓨전으로 Hires.fix를 통해 업스케일링을 해보신 분들은 뭔가 더 특별히 퀄리티가 올라간다는 느낌을 받으셨을 것입니다. 그런데 반대로 Extras 탭에서 진행하는 업스케일의 경우 해상도는 높아지지만, Hires.fix와는 달리 그림에 추가적인 디테일이 생기지는 않는다는 느낌을 받습니다. 아래 그림은 스테이블 디퓨전 업스케일 결과 비교를 위해 직접 WebUI에서 생성한 그림입니다.
가장 왼쪽부터 순서대로 원본, Hires.fix 및 Extras로 업스케일 한 결과 이미지입니다. 위에서 볼 수 있듯 원본과 Extras로 업스케일 한 이미지는 같은 크기로 줄여놓으면 이미지의 디테일에는 차이가 없습니다. 하지만 중앙의 Hires.fix 업스케일 이미지를 보면 확실히 디테일이 살아난 것을 볼 수 있습니다. 입고 있는 드레스의 주름, 머리카락의 표현력, 피부의 질감 및 샹들리에의 디테일 등 모든 것에서 원본 대비 굉장히 퀄리티가 향상된 모습입니다.
Latent 영역과 Pixel 영역
스테이블 디퓨전 업스케일 방식을 이해하기 위해서는 먼저 스테이블 디퓨전의 그림 그리는 원리를 생각해볼 필요가 있습니다. 스테이블 디퓨전의 그림 그리는 원리를 간략히 살펴보면 특정 노이즈 이미지와 프롬프트를 주면 그 프롬프트를 참고해 노이즈로부터 이미지를 만들어내는 방식입니다. 스테이블 디퓨전으로 그림 그릴 때 우리가 사용하는 모델이 바로 그 노이즈 이미지로부터 이미지를 추론하는 방식을 학습한 것입니다.
그런데 이 노이즈 이미지에서 실제 이미지를 추론하는 작업을 우리가 흔히 사용하는 JPG, PNG 이미지가 아니라 Latent Image로 진행하게 됩니다. 즉, 스테이블 디퓨전을 이해하려면 Latent 영역과 Pixel 영역이 따로 존재한다는 것을 알아야 합니다. 이해를 위해 ComfyUI에서 i2i 작업을 하는 워크플로우를 살펴보면 다음과 같습니다.
워크플로우를 간략히 살펴보면 좌우의 청색 영역이 Pixel 영역으로 즉, 우리가 일반적으로 다루는 PNG 이미지의 영역입니다. 중앙에 노란 영역은 Latent 영역으로, 실제 스테이블 디퓨전이 이미지를 처리하는 영역입니다. 워크플로우 상 프리뷰 이미지에서도 보이듯 Latent 영역에는 노이즈가 추가되어 있는 것을 볼 수 있습니다. 즉, 여기서 우리는 스테이블 디퓨전이 이미지를 처리하는 영역이 바로 Latent 영역이란 것을 확인할 수 있습니다.
VAE
한편 워크플로우를 다시 살펴보면 이렇게 Latent 영역과 Pixel 영역을 진입하고 다시 빠져나올 때 VAE Encode, VAE Decode라는 노드가 관여한다는 것을 알 수 있습니다. 즉, VAE는 스테이블 디퓨전이 Latent 영역에서 처리한 이미지를 다시 PNG 파일로 바꾸거나, 반대로 일반 이미지를 스테이블 디퓨전이 편집할 수 있는 상태로 바꾸는 전처리 역할을 하고 있다는 사실도 알 수 있습니다.
Latent 업스케일
그럼 다시 스테이블 디퓨전 업스케일 이야기로 돌아와보겠습니다. 이제 스테이블 디퓨전이 실제로 모델을 이용해 무언가 작업을 한다면 Latent 영역에서 원본 이미지에 노이즈를 첨가해서 진행한다는 것을 이해했습니다. Latent 업스케일은 바로 업스케일링을 이 Latent 영역에서 진행한다는 의미입니다. 즉, 스테이블 디퓨전이 직접 관여하여 VAE로 인코딩 된 Latent 이미지에 노이즈를 얹고 업스케일링하여 다시 추론을 통해 이미지를 생성해내는 것입니다. 그리고 이 Latent 업스케일을 스테이블 디퓨전에서는 Hires.fix라고 명명하고 있습니다.
반면 일반 업스케일은 Pixel 영역, 즉 일반적인 PNG 파일의 픽셀정보를 불러읽어온 뒤, 각 픽셀간의 관계로부터 특정 조건에 맞는 픽셀을 추가 삽입하는 방식으로 해상도를 증가시키는 기술입니다.
전자, 즉 Latent 업스케일의 경우 업스케일과 동시에 노이즈추가 + 스테이블 디퓨전 추론 이미지화가 함께 일어나기 때문에, 업스케일링을 진행하면서 기존 이미지에는 없던 새로운 정보(노이즈로부터)를 만들어 낼 수 있는 것입니다. 결국 일반적인 픽셀 영역에서의 업스케일링 결과 대비 차이가 여기서 발생합니다.
디노이즈 (Denoise)
Latent 업스케일을 잘 활용하면 해상도가 올라가면서 디테일도 함께 올라가기 때문에 그 결과 더욱 높은 품질의 풍부한 이미지를 얻을 수 있다는 장점도 있지만, 너무 노이즈가 과할 경우 원본과 많이 다른 이미지가 생성될 수 있다는 단점도 있습니다. 때문에 사용자가 이 노이즈 추가의 정도를 제어할 수 있는데요 그 설정값이 바로 denoise 또는 denoising strength 입니다. 0~1.0 사이의 값을 입력하게 되며, 0에 가까울수록 원본에서 변형이 없고, 1.0에 가까울수록 변형이 강하게 일어납니다. 보통 0.5를 기준으로 그 이하 값들을 주면 원본에서 크게 벗어나지 않으며, 0.5 ~ 0.7 정도를 주면 원본에 없던 디테일이 많이 추가되는 수준, 0.7 이상으로 가면 원본을 벗어난 새로운 이미지들이 생성되기 시작합니다.