본문에서는 컨트롤넷 타일 및 Ultimate SD Upscale을 활용하여 가장 편리하면서도 괜찮은 품질을 얻을 수 있는 SDXL 업스케일 방식에 대해 살펴보도록 하겠습니다. SD1.5와 달리 SDXL은 기본 해상도가 높기 때문에, 결과 이미지를 업스케일하는 것 또한 많은 컴퓨팅 파워를 요구합니다. 업스케일을 한 번 진행하는 것만으로도 시간이 꽤 걸리기 때문에, 오늘 소개드리는 간편하면서도 일정수준 이상의 품질이 보장되는 방식을 사용해보시기 바랍니다.
SDXL 업스케일
스테이블 디퓨전에서 업스케일(Upscale)은 사용자의 기호에 따라 다양한 방식으로 진행할 수 있습니다. 잠재영역(Latent Space)에서 디퓨전을 진행하는 특성을 고려하면, 크게 픽셀 업스케일과 잠재 업스케일로 구분할 수 있는데요, 오늘 살펴볼 방식은 픽셀 업스케일을 먼저 진행한 뒤, 해당 이미지를 타일로 나눠 각 구역을 다시한 번 인페인트하는 방식입니다.
Ultimate SD Upscale
가장 기본적으로는 업스케일 모델을 이용하는 방식이 있지만, 해당 방식으로 진행한 품질은 한계가 있습니다. 때문에 업스케일모델로 단순 진행한 이미지를 다시 구역을 나눠 인페인트를 진행해주는 방식으로 이미지 품질을 한 단계 더 업그레이드 할 수 있으며, 이 방식을 편리하게 사용할 수 있도록 해주는 커스텀노드가 바로 Ultimate SD Upscale 입니다.
Ultimate SD Upscale의 동작원리에 대한 조금 더 구체적인 정보가 필요하신 분은 아래 영상을 참고해주시기 바랍니다.
먼저 ComfyUI에서 Ultimate SD Upscale을 이용해 업스케일을 진행하기 위해 아래와 같이 워크플로우를 구성합니다.
원본 이미지는 SDXL 모델로 생성되어 1024 x 1024 기본 해상도를 가지고 있으며, 이를 모델 업스케일을 통해 4배로 확대한뒤, 다시 1/4배 축소한 상태로 Ultimate SD Upsclae 노드의 이미지 입력단으로 연결해주었습니다.
이렇게 원본을 4배 확대했다가 다시 0.25배 줄이면 결국 원본과 동일한 해상도의 이미지가 되지만, 이 과정에서 발생하는 작은 차이들이 업스케일 과정에서는 디테일을 향상시키는 밑거름이 될 수 있습니다.
위 예시는 좌에서 우로 순서대로 원본, 확대 및 축소, 둘간의 차이 강화 이미지를 나타내고 있습니다. 원본과, 확대 및 축소를 거친 두번째 이미지를 언뜻보기에는 차이가 없어보이지만, 실제로 각 픽셀마다 1:1로 비교해보면 그차이가 존재합니다.
이제 이렇게 살짝의 차이가 생긴 이미지를 Ultimate SD Upscale 노드로 넘겨 다시 4배 업스케일 진행(1024 x 1024 > 4096 x 4096)합니다. 이 때 Denoise값에 따른 결과 이미지를 비교해보면 다음과 같습니다.
Ultimate SD Upscale의 Denoise 값이 0.3 > 0.7 > 1.0 으로 증가함에 따라 원본이미지에서 변형이 일어나는 것은 물론, 인페인트를 따로 진행하기 때문에, 원본 이미지 생성에 사용했던 프롬프트가 타일별로 따로 적용되어 디노이즈 값이 0.7일 때부터는 아예 각 타일마다 새로운 인물이 등장하기 시작합니다. 디노이즈 값이 1.0이 되어서는 원본이미지의 인물은 온데간데 없이 사라지고, 타일마다 새로운 인물이 등장합니다. 따라서 디노이즈값을 0.5 아래로 적용해야 원본을 유지하면서 업스케일이 가능한데요, 일반적으로 이미지의 디테일을 향상사키기 위해서는 원본에 없는 데이터가 추가로 주어져야 하기 때문에, 이론적으로는 노이즈를 주고, 디노이즈를 더 크게 적용하여 세부적인 디테일을 살리면서 업스케일하는 것이 좋습니다.
ControlNet Tile + Ultimate SD Upscale
SDXL 업스케일을 진행하면서, Ultimate SD Upscale 이용과 동시에 디노이즈값을 더 크게 가져가려면, 컨트롤넷 타일 모델을 함께 사용하면 됩니다. 컨트롤넷 타일 모델을 사용하면, 확대된 결과 이미지에 원본의 컬러 구성(Composition)을 그대로 유지할 수 있도록 도와주기 때문에, 디노이즈 값을 크게 가져가더라도 전체적인 이미지의 구도와 구성을 유지하면서 디테일을 추가로 가져갈 수 있습니다.
먼저 위와 같이 ControlNet 적용 노드를 추가로 구성해주어야 합니다. SDXL용 ControlNet Tile 모델은 TTPlanet 모델을 사용했습니다.
주의할 점은, 컨트롤넷 힌트 이미지로 연결하는 image 입력은 모델 업스케일로 4배 확대된 이미지라는 점입니다. 다시 1/4배 축소된 이미지를 넣어주는 것이 아니라, 4배 키워진 이미지를 컨트롤넷으로 넣어줌으로써, Ultimate SD Upscale에서 최종적으로 4배 확되될 결과 이미지의 전체적인 Composition을 유지할 수 있도록 합니다.
마찬가지로 Denoise 값을 차례로 올리면서 그 결과를 비교하면 위와 같습니다. 비록 컨트롤넷 타일 모델을 적용한 덕분에 각 타일마다 새로운 인물이 그려지는 것은 방지할 수 있었지만, 역시 디노이즈 값이 커지면서 타일간의 색감의 차이가 발생하면서, 타일의 경계가 두드러지는 모습입니다.
하지만, 예상한대로 디노이즈 값이 커지면서 원본과 달리, 인물의 색감이 훨씬 다이나믹하고 짙어진 모습이 보이며, 디테일도 조금 더 살아난 모습입니다.
ControlNet Tile + Ultimate SD Upscale(Seam Fix)
마지막으로 Ultimate SD Upsclae 노드의 Seam Fix 기능을 활성화해주면, 높은 디노이즈 값으로 인해 발생하는 타일간 경계선을 완화할 수 있습니다. 따라서 이제, 업스케일 이미지의 품질을 크게 향상시키면서, 동시에 타일의 경계를 자연스럽게 변화시켜 전반적으로 한 단계 더 높은 품질을 갖는 이미지를 생성해낼 수 있습니다. 아래는 컨트롤넷 타일과 Seam Fix까지 적용해 SDXL 업스케일을 진행한 결과를 원본과 비교한 예시입니다.
왼쪽 이미지가 원본이고, 오른쪽 이미지가 Denoise값을 0.7로 준 상태에서 ControlNet Tile 및 Ultimate SD Upscale을 통해 SDXL 업스케일이 완료된 이미지입니다. Seam Fix 기능을 활성화했기 때문에 확실히 타일의 경계가 보이지 않습니다.
두 이미지를 조금 더 확대하여 비교해보면 확실한 차이가 보입니다. 원본의 구도를 그대로 유지하면서도, 원본 대비 세세한 디테일이 살아난 것이 명확하게 비교됩니다.