- Diffusion Model 설명 – 기초부터 응용까지
- [22′ NIPS] Classifier Guidance : Diffusion Models Beat GANs on Image Synthesis
- [21′ NIPS workshop] Classifier Free Guidance : Classifier-free diffusion guidance
- [23′ PAML] SR3 : Image Super-Resolution via Iterative Refinement
- [22′ PMLR] GLIDE: Towards Photorealistic Image Generation and Editing with Text-Guided Diffusion Models
- [22′ NIPS] Imagen : Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding
- [22′ arxiv] DALLE2 : Hierarchical Text-Conditional Image Generation with CLIP Latents
- [22′ CVPR] Stable Diffusion : High-Resolution Image Synthesis with Latent Diffusion Models
- [23′ CVPR] GLIGEN: Open-Set Grounded Text-to-Image Generation
- Normalizing Flow 설명 – 정의, 특징, 딥러닝 모델들
- [15′ ICLR] NICE: NON-LINEAR INDEPENDENT COMPONENTS ESTIMATION 핵심 리뷰
- [17′ ICLR] DENSITY ESTIMATION USING REAL NVP (RealNVP) 핵심 리뷰
- [18′ NIPS] Glow: Generative Flow with Invertible 1×1 Convolutions 핵심 리뷰
- [22′ ICLR] SDEDIT: GUIDED IMAGE SYNTHESIS AND EDITING WITH STOCHASTIC DIFFERENTIAL EQUATIONS
- [23′ ICCV] ControlNet : Adding Conditional Control to Text-to-Image Diffusion Models
1. Introduction
이번 글에서는 2022년 NIPS에 발표된 Photorealistic Text-to-Image Diffusion Models with Deep Language Understanding 논문을 리뷰합니다. 이 논문은 Imagen 이라고 불리며 이번 글에서도 Imagen 이라고 지칭하겠습니다.
이번 글에서는 Diffusion Model 배경 지식에 대한 설명은 생략했습니다. Diffusion Model의 기초와 응용 글을 참고해주세요.
지난 글에서는 Open-AI에서 발표한 Text Guided Diffusion Model인 GLIDE 논문을 리뷰했는데요. Imagen은 GLIDE에 바로 이어서 Google Research에서 발표한 Text Guided Diffusion Model입니다. Imagen은 어떤 방법으로 GLIDE보다 좋은 성능을 낼 수 있었는지에 초점을 맞춰 Imagen 논문의 핵심 내용을 살펴보도록 하겠습니다.
이번 글은 다음과 같은 순서로 이루어져 있습니다. 먼저 Imagen 제안 방법의 핵심 내용을 살펴보겠습니다. 이어서 이렇게 구성된 Imagen이 생성한 이미지 퀄리티를 살펴보겠습니다. 마지막으로 Imagen의 의의에 대해 생각해봅니다.
2. Imagen
이번 챕터에서는 Imagen의 제안 방법을 살펴보겠습니다. Imagen의 전체 모델 구성은 다음과 같습니다.
크게 보면 세가지로 구성되어 있음을 알 수 있습니다.
첫 번째는 Text Encoder 입니다. 입력된 Text Caption을 Embedding Vector로 Projection 하는 역할을 수행합니다.
두 번째는 Diffusion Model 입니다. Classifier Free Guidance 방법을 사용하여 Text Embedding을 Condition으로 하는 이미지를 생성하는 역할을 수행합니다.
세 번째는 Cascaded Diffusion Model 입니다. 이는 Super Resolution을 위한 Diffusion Model 입니다. 두 번째 Diffusion Model 에서 생성한 Low Resolution 이미지를 High Resolution 이미지로 Upscale 하는 역할을 수행합니다.
2-1. Pretrained Text Encoder
첫 번째 Text Encoder 부분을 자세히 살펴보겠습니다. Imagen의 Text Encoder는 Pretrained LLM을 사용합니다. 대표적으로 CLIP, BERT, T5 등등이 있죠. 이는 GLIDE와의 결정적인 차이인데요. GLIDE에서는 Pretrained LLM을 사용하지 않고 Transformer를 사용하여 같이 학습해주었죠. Imagen의 Pretrained LLM을 사용하는 방식이 구성도 간단하고 이해하기도 쉬운데요. 이 차이로 인해 Imagen은 아주 다채로운 이미지를 생성할 수 있게 됩니다.
Pretrained LLM을 사용하면 왜 유리할까요? Pretrained LLM은 아주 많은 언어 데이터셋을 통해 사람의 언어 표현 방식을 학습한 모델이죠. 따라서 언어 표현간의 미세한 뉘앙스 차이를 이해하고 있는 모델이라고 볼 수 있습니다. 이렇게 언어를 완벽하게 이해한 모델이 아무것도 모르는 Diffusion Model에게 이미지 생성 부분을 지도해준다고 생각할 수 있죠. 그니까 Imagen은 ‘언어’ 부분은 마스터한 상태에서 ‘이미지 생성’ 부분만 학습하면 되는 것이죠. 반면 Text Encoder도 같이 학습해야 한다면 아무것도 모르는 Text Encoder와 Diffusion Model 둘이서 나란히 앉아 서로가 서로를 가르쳐주며 Text에 해당하는 이미지 생성을 동시에 학습해야 하는 거죠. 따라서 한 가지만 학습해야 하는 Pretrained LLM 방식이 유리하다고 생각할 수 있습니다.
2-2. Classifier Free Guidance
다음은 Diffusion Model 부분을 살펴보겠습니다. Diffusion Model에게 Condition을 입력하는 방법은 크게 두 가지가 있는데요. 첫 번째는 Classifier Free Guidance 방식이고요. 두 번째는 Classifier Guidance 방식입니다.
Classifier Guidance 방식은 Noisy Image에 Classifier를 추가로 학습해야 한다는 단점이 있습니다. 게다가 이러한 방식은 ImageNet 같이 Class를 구분하는 문제에서만 사용할 수 있다는 한계가 있죠. 따라서 Imagen은 Classifier Free Guidance 방식을 사용합니다.
2-3. Large Guidance Weight Sampler
이렇게 Classifier Free Guidance 방식으로 Diffusion Model을 학습했을때 문제가 한가지 발생하는데요. Guidance Weight에 해당하는 w 값이 일정 수준보다 커지면 픽셀값이 포화되어 버린다는 것입니다. 쉽게 말해서 생성한 이미지가 온통 검정색이 되어버리는 현상이죠.
이러한 문제는 예측한 픽셀값(x)가 x의 범위인 [-1,1]을 벗어나면서 발생하는 문제인데요. 저자들은 이 문제를 해결하기 위해 두 가지 방법을 제안합니다.
첫 번째 방법은 Static Thresholding 입니다. 간단하게 픽셀 값에 대한 Threshold를 정해놓고 이 범위를 넘어가면 잘라주는 방식이죠.
두 번째 방법은 Dynamic Thresholding 입니다. 이름에서 알 수 있듯이 픽셀 값에 대한 Thresholding 을 Dynamic 하게 정해주는 방법인데요. Threshold로 정한 [-s,s]의 범위에서 특정 비율을 정해 그 값을 넘는 픽셀은 잘라주는 방식입니다.
이렇게 두 가지 방법을 적용했을때의 효과는 다음과 같습니다.
왼쪽 그림은 아무 방법도 적용하지 않았을때의 모습입니다. 생성된 이미지가 여기저기 포화된 상태를 볼 수 있습니다. 가운데 그림은 Static Thresholding을 적용했을때의 모습이고요. 오른쪽은 Dynamic Thresholding을 적용했을때의 모습입니다.
2-4. Super Resolution Diffusion Model
마지막으로 Cascaded Diffusion Model 부분을 살펴보겠습니다. 이 부분은 Super Resolution을 위한 Diffusion Model 인데요. 위의 Diffusion Model로부터 생성한 이미지는 Low Resolution 이미지입니다. 이를 Upscale 하기 위한 Super Resolution Diffusion Model을 이어 붙여주는 것이죠. 64×64 이미지를 256×256으로 확대하기 위한 모델과 256×256 이미지를 1024×1024로 확대해주기 위한 모델, 총 두 가지를 연속으로 붙여줄 겁니다.
이때 사용된 Super Resolution Diffusion Model은 기존 방식을 따르는데요. Super Resolution을 위한 Diffusion Model의 구성 방법은 SR3 논문 리뷰글을 참고해 주세요.
3. Experiments
다음은 이렇게 구성한 Imagen이 생성한 이미지들을 살펴보겠습니다.
위 그림은 Imagen이 생성한 이미지 샘플들을 보여주고 있습니다. 아마 Diffusion Model이 대중에게 ‘와우’ 소리를 들은 모델은 Imagen 부터일것 같은데요. 일단 화질이 매우 고화질입니다. 이 전까지는 최종 생성된 이미지가 저화질이라 ‘와우’ 소리가 나올 정도는 아니었죠. 그런데 Imagen 부터는 고화질 이미지가 생성되기 시작합니다. 또한 생성된 이미지가 매우 ‘그럴듯’하죠. 이젠 정말 상상속의 이미지들도 전문 화가가 그린 수준으로 생성해줍니다.
4. Conclusion
이번 글에서는 Google Research 에서 발표한 Imagen 논문의 핵심 내용을 살펴봤습니다. 기존 Diffusion Model과 비교했을때 생성한 이미지의 퀄리티가 크게 좋아졌다는 느낌을 받을 수 있는데요. 이러한 성능 향상을 낼 수 있었던 주요 포인트는 Pretrained LLM의 사용과 2개의 Super Resolution Diffusion Model의 사용이었다는 점을 기억하면 좋겠습니다.
2-2 부분에 classifier free guidance 다른 하나는 classifier guidance 방식이 되어야 하는게 맞지 않나요??
좋은 지적 감사합니다! 글 본문 수정 했습니다!
2.1 부분에 GLIDE에서는 Pretrained LLM을 사용하지 않고 Transformer를 사용하여 같이 학습해주었다고 하는데 clip을 학습하는 건가요? 이전 글을 보는데 clip guidance 부분이 없어서 찾아보다가 잘 모르겠어서요ㅜ clip guidance는 CLIP embedding을 사용한다는 것인가요?
GLIDE 논문의 포인트 중 하나는 Text Encoder를 사용해 추출한 Text Feature를 Diffusion Model의 Condition으로 학습했다는 점인데요, 이때의 Text Encoder를 무엇을 사용했는지는 논문을 찾아봐야겠으나, 성능의 차이가 있을 뿐 Feature Dimension만 맞춰주면 Encoder 종류는 상관 없을듯 합니다.
Clip Guidance는 어떤 부분을 말씀하시는건가요?