1. 소개
A. 샘플러(sampler)란 무엇인가요?
Stable Diffusion은 이미지 생성과정에서 임의의 초기 이미지를 만든 후, 해당 이미지에 노이즈를 적용합니다. 그런 다음, 예측된 노이즈를 사용하여 초기 이미지의 노이즈를 추정하고 제거합니다. 이 과정은 여러 번 반복되어 예측된 노이즈를 점차적으로 개선하고 최종적으로 깨끗한 이미지를 생성하는데 도움을 줍니다.
Stable Diffusion은 각 단계에서 새로운 샘플 이미지를 생성하기 때문에 이러한 노이즈 제거 프로세스를 ‘샘플링’이라고 합니다. 이전의 이미지에서 새로운 샘플을 추출하는 것이라고 할 수 있으며, 이 추출 방법을 ‘샘플러’ 또는 ‘샘플링 방법’이라고 합니다.
샘플러는 이미지의 특정 부분을 선택하거나 이미지의 전체적인 분포를 변형하는 등 다양한 방식으로 샘플을 추출합니다. 이를 통해 샘플러는 노이즈를 제거하고 더욱 정확하고 선명한 이미지를 생성하기 위해 사용됩니다. 즉, 샘플링 방법을 선택하고 구현함으로써 Stable Diffusion은 이미지에서 노이즈를 효과적으로 제거할 수 있습니다.
B. 노이즈
Stable Diffusion은 노이즈가 많은 이미지를 점차적으로 선명하고 깨끗한 이미지로 변환하는 과정에서 각 샘플링 단계의 노이즈 수준을 조절합니다. 샘플링 단계의 진행에 따라 노이즈는 초기 단계에서 가장 높으며, 점차적으로 마지막 단계에서는 0으로 수렴하게 됩니다.
각 샘플링 단계에서 샘플러는 주어진 노이즈 수준에 맞는 이미지를 생성하는 역할을 담당합니다. 이를 통해 샘플링 단계가 진행됨에 따라 이미지의 노이즈는 감소하고, 최종적으로는 거의 없어지는 결과를 얻을 수 있습니다.
샘플링 단계 수를 늘리면 각 단계 사이의 노이즈 수준이 점차적으로 감소하며, 더 많은 단계로 세분화된 샘플링은 샘플링의 오류를 줄이는 데 도움이 됩니다. 이로써 더욱 섬세하고 정확한 이미지를 생성할 수 있게 됩니다.
.
2. 샘플러의 종류
A. Euler – 가장 간단함.
B. Heun – Euler의 느린 버전으로 더 정확함.
C. LMS(Linear multi-step method) – Euler와 속도는 동일하지만 더 정확하다고 함.
D. Euler a
E. DPM2 a
F. DPM++ 2S a
G. DPM++ 2S a Karras
“Karras”라는 샘플러는 Karras 기사에서 권장하는 노이즈 진행을 사용한다. 노이즈 단계 크기가 초기에는 비슷하거나 더 크지만 끝 부분에서 더 작아진다.
각 샘플러 이름에 “a”가 붙은 경우는 각 샘플링 단계에서 이미지에 노이즈를 추가한다. 샘플링 결과에 임의성이 주어지는 샘플러이다.
샘플러 이름에 “a”가 있거나 없더라도 확률적 샘플러다. “a”가 붙은 샘플러 사용의 단점은 이미지가 수렴되지 않는다는 것이다.
H. DDIM, PLMS
DDIM(Denoising Diffusion Implicit Model) 및 PLMS(Pseudo Linear Multi-Step Method)는 Stable Diffusion v1과 함께 제공된 샘플러였다.
DDIM은 확산 모델용으로 설계된 최초의 샘플러 중 하나다 .
PLMS는 DDIM의 더 새롭고 빠른 대안.
이들은 일반적으로 오래된 것으로 간주되어 잘 사용되지 않는다고는 하지만 개별적인 부분이다.
I. DPM 및 DPM++
DPM(Diffusion probabilistic model solver) 및 DPM++는 2022년에 출시된 모델로 샘플러입니다. 유사한 아키텍처의 솔버 제품군을 나타낸다.
DPM과 DPM2는 DPM2가 2차라는 점을 제외하고 더 정확하지고 느리지만 유사합니다.
DPM++는 DPM보다 개선된 버전.
DPM adaptive은 스텝 사이즈를 적응적으로 조정합니다. 이는 샘플링 단계 수 내에서 완료를 보장하지 않기 때문에 속도가 느릴 수 있습니다.
J. UniPC
UniPC(Unified Predictor-Corrector)는 2023년에 출시된 샘플러입니다. 5~10단계로 고품질 이미지 생성을 달성할 수 있다.
K. k-diffusion
k-diffusion는 Katherine Crowson의 k-diffusion GitHub 저장소 및 이와 관련된 샘플러다.그 저장소는 Karras 2022 기사에서 연구된 샘플러를 구현합니다.
stable diffusion v1.0, a. Photographic, b. Cinematic
.
3. 샘플러(sampler) 선정 방법
.
유저들의 대략적은 테스트 결과로 알려진 단계(STEPS) 값은 다음과 같습니다.
A. 빠르고, 새롭고, 괜찮은 품질을 원한다면 좋은 선택하는 방법은?
DPM++ 2M Karras (예, 20~30 steps)
UniPC (예, 20~30 steps)
.
B. 좋은 품질의 이미지, 컨버전스에 관심이 없다면 좋은 선택하는 방법은?
DPM++ SDE Karras (예, 10~15 steps , 속도 느림)
DDIM (예, 10~15 steps )
.
C. 안정적이고 재현 가능한 이미지를 원한다면 좋은 선택하는 방법은?
Euler a, DPM2 a, DPM++ 2S a, DPM++ 2S a Karras 샘플러를 제외하고 나머지.
.
D. 간단한 것을 선호한다면 좋은 선택은?
Euler
Heun
.
4. 마치며..
유저들이 테스트한 결과를 보면 그래프의 값의 변화량이 커 보이이는 구간을 선택하고 있어서 참고만 하고 개별적으로 적용해 보는것이 좋다. 소자는 개인적으로 50 steps 사용하고 있다.