상세 컨텐츠

본문 제목

Stable Diffusion을 이용한 이미지 업스케일

Stable Diffusion

by dfus1on 2023. 4. 30. 00:31

본문

업스케일링은 저해상도 이미지를 고해상도로 변환하는 과정을 말합니다. 예를 들어, 1024x1024 이미지를 두 배로 확대하려면 이미지의 픽셀 수를 2배로 늘려 2048x2048 픽셀로 만들어야 합니다. 이미지의 크기를 늘리려면 앱이나 컴퓨터 프로그램이 이미지에 픽셀을 추가해야 합니다. 이 과정을 이미지 리샘플링이라고 합니다. AI 이전에는 다음과 같은 방법이 일반적이었습니다.

 

  • 최근접 이웃 보간법(Nearest neighbor interpolation)[각주:1]: 기본 리샘플링이라고도 불립니다. 저해상도 이미지의 픽셀을 복사하여 높은 해상도의 모든 픽셀을 채웁니다. 이 방법으로 생성된 이미지가 좋지 않은 품질을 보이기 때문에, 앱에서 보간 후 필터를 적용하여 생성된 톱니 모양의 가장자리를 완화하는 경우가 있습니다. 궁금하다면 이 글에서 최근접 이웃 보간법을 시각화하는 데 도움이 됩니다.
  • 이중선형 및 이중입방 보간법(Bilinear and bicubic interpolation)[각주:2][각주:3] : 이 방법은 최근접 이웃 픽셀을 더 많이 조사하고 가중 평균을 계산하여 높은 해상도 출력을 생성하는 것으로 기본 리샘플링을 한 단계 발전시킨 것입니다. 이중선형 보간법은 4개의 이웃한 픽셀을 살펴보고이중입방 보간법은 16개의 이웃을 살펴봅니다. 더 많은 이웃을 조사하기 때문에 이들 리샘플링 방법은 업스케일된 이미지에서 더 부드러운 그라데이션과 전환을 만들어냅니다.
  • 란초스필터링(Lanczos filtering) : 란초스 필터링[각주:4]이 어떻게 작동하는지에 대한 수학적 이해는 위키백과를 참조하십시오. 이미지 업스케일링의 목적으로는, 란초스 필터링은 이중입방 보간법과 비슷한 시각적 결과물을 만들어냅니다.
  • 기존 업스케일러 화질비교 위키피디아 [각주:5]
원본
최근접 이웃 보간법
란초스

보다시피 결과가 좋지않습니다.그렇다면 AI는 어떻게 이러한 기존의 방법들을 개선할 수 있을까요? 일반적인 리샘플링 방법들은 저해상도 입력 이미지의 데이터만을 사용하여 고해상도 출력을 생성합니다. 그러나 AI는 업스케일링 과정에서 훈련된 이미지 세트의 데이터를 사용하여 누락된 픽셀을 채웁니다. 이 말은 즉, AI는 단순히 저해상도 이미지의 세부 사항을 확대하는 것이 아니라, 고해상도 이미지에 새로운 디테일을 추가할 수 있다는 것입니다. 

 

Stable Diffusion 방법을 이용한 Upscaling 에는 크게 다음 2가지 방법을 사용해 AI 업스케일링을 할 수 있습니다. t2i 에서 Hires fix 옵션을 사용하는 방법과 i2i에서 Tiled Diffusion 및 Tiled VAE를 사용하는 방법에 대해 설명하겠습니다.

 

T2I: R-ESRGAN 4x+ Anime6B
I2I: R-ESRGAN 4x+ Anime6B
I2I: SwinIR 4x

 

Text-To-Image (T2I) Hires fix 옵션 사용

  1. Hires fix 옵션을 체크하여 고해상도 이미지 생성을 준비합니다.
  2. Upscaler 선택: 사용할 업스케일러를 선택합니다. Latent와 R-ESRGAN 4x+ Anime6B 업스케일러 비교
  3. Denoising strength 원본과 품질 사이에서 설정 0.6 내외의 값을 추천합니다. 적절한 Sampling steps와 Denoising strength 참조할 수 있습니다.
  4. 생성: 생성 버튼을 눌러 이미지를 업스케일합니다.
  5. 디테일이 부족한 경우, Hires steps를 조정하여 더 많은 샘플링을 시킬 수 있습니다. 0일 경우 Sampling steps와 동일한 회수로 진행됩니다. 
 

적정 Sampling steps과 Denoising strength

샘플링 스텝 변경과 Denoising Strength 이해하기 이번 글에서는 샘플링 스텝 20의 포즈가 마음에 들지 않았기 때문에 스텝 수를 변경해 적절한 베리에이션을 찾아보고, 업스케일을 하면서 Denoising stre

sdiffusion.tistory.com

 

 

Image-to-Image (I2I) Tiled Diffusion 사용

  1. 이미지 불러오기: 업스케일할 이미지를 불러옵니다. AI로 생성된 이미지일 경우 Process Image를 통해 프롬프트와 나머지 설정도 동일하게 불러오는 것이 원본과 근접한 결과로 업스케일해 줍니다.
  2. Tiled Diffusion 활성화: Tiled Diffusion에서 Enable 옵션을 체크하여 활성화합니다.
  3. MultiDiffusion 선택: Method 풀다운에서 MultiDiffusion을 선택합니다.
  4. Upscaler 선택: Upscaler 풀다운에서 원하는 업스케일러를 선택합니다. R-ESRGAN 4x+, R-ESRGAN 4x+ Anime6B, SwinIR 4x 등이 선호됩니다.
  5. Tiled VAE 활성화 및 생성: Tiled VAE에서 Enable 옵션을 체크하여 활성화한 후 생성 버튼을 눌러 업스케일링을 진행합니다. 

 

t2i vs i2i 업스케일 비교

스테이블 디퓨전의 모델들이 512 해상도에 익숙하게 학습이 되어있어 i2i로 업스케일을 진행하면 아무리 디노이징 팩터를 낮춰 원본과 가깝게 설정하더라도 공간을 채우는 과정에서 의도하지 않았던 제2, 제3의 사람들이 나오게 된다. 이 과정에서 부정 프롬프트로 더이상 사람을 채우지 않도록 시도할 수 있지만 완전히 이를 막지 못하며 모델에 따라서는 프롬프트에 인식되지 않는 사람 형태의 노이즈가 생성된다.

 

따라서 인공지능을 통해 생성한 이미지의 경우 원프롬프트와 시드값을 알고있다면 Hires를 통해 이미지 생성 시 업스케일을 동시에 진행하는 것이 좋다. 불가피하게 i2i 로 업스케일을 진행하고 이 과정에서 의도하지 않은 이미지가 생성되었을 때는 inpaint 를 사용해 편집을 할 수 밖에 없다. 다음 시간에는 i2i 를 통해 단순히 크기를 늘리는 것 뿐만 아니라 그림의 일부를 수정하거나 확장 할 수 있는 여러가지 방법들에 대해 알아보도록 하겠습니다.

반응형

관련글 더보기

댓글 영역