- 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
내용 요약
Actnorm, Invertible 1×1 Convolution, Affine Coupling Layer를 사용하여 Normalizing Flow 모델을 구현한 Glow의 핵심 내용을 살펴봅니다.
1. 들어가며
이번 글에서는 2018년 NIPS에서 발표된 Glow: Generative Flow with Invertible 1×1 Convolutions 논문을 리뷰합니다.
Normalizing Flow의 기본 개념과 기존 방법의 문제에 대해서는 딥러닝과 Normalizing Flow 글을 참고 바랍니다.
2. 제안 방법
바로 제안 방법을 살펴보겠습니다. Glow의 Normalizing Flow는 Actnorm, Invertible 1×1 Convolution, Affine Coupling Layer로 구성됩니다.
위 그림은 Glow의 Architecture를 표현한 그림입니다. 오른쪽에서는 Multi Scale Architecture를 표현하고 있고요. 왼쪽에는 핵심이 되는 Flow의 구성을 보여주고 있습니다. Flow는 Actnorm, Invertible 1×1 Covolution, Affine Coupling Layer로 구성된 모습을 볼 수 있습니다. 하나씩 자세히 살펴보겠습니다.
2-1. Actnorm
Actnorm은 Activation Output에 Affine Transformation을 적용하는것을 의미합니다. 결과적으로 Batch Normalization과 유사한 역할을 수행하게 되죠. 게다가 Inversion이 가능하고 Log Determinant 계산이 쉬워 Normalizing Flow에 적용하기 수월합니다.
2-2. Invertible 1×1 convolution
다음은 Invertible 1×1 Convolution 함수를 살펴보겠습니다. 이 함수는 Coupling Layer의 Input을 Split 하는 용도로 사용됩니다. 1×1 Convolution을 사용함으로써 계산 복잡도가 크지 않으면서도 쉽게 Log Determinant를 구할 수 있습니다.
2-3. Affine coupling layers
다음은 기존 방식에서 사용했던 Affine Coupling Layer의 사용입니다. 기존 방식 대비 세 가지 다른 포인트를 적용했습니다.
첫 번째로 Zero Initialization입니다.
학습을 시작할 때 Affine Coupling Layer가 Identity Function이 되도록 마지막 Convolution을 Zero로 세팅했습니다. 이는 매우 깊은 모델에서의 학습을 용이하게 합니다.
두 번째는 Split and Concatenation입니다.
채널을 나누는 방식으로 NICE와 같이 channel을 따라 절반을 나누는 방법이 있고 RealNVP처럼 checkerboard pattern으로 나누는 방법이 있습니다. Glow는 NICE 방식을 사용합니다.
세 번째는 Permutation입니다.
NICE는 Channel의 순서를 반대로 바꾸는 방법을 사용했습니다. RealNVP는 Fixed Random Permutation 방식을 사용했습니다. Glow는 1×1 convolution 방식을 사용했습니다.
3. 실험 결과
다음은 이렇게 제안한 방법의 실험 결과를 살펴보겠습니다.
3-1. Permutation 별 실험
먼저 세 가지 permutation 방식에 대한 실험입니다.
Reverse, Shuffle, 1×1 Conv 방식의 Permutation을 실험한 결과입니다. 그래프를 보면 다양한 Permutation 방법들 중 1×1 conv 방식의 성능이 가장 좋은 모습입니다.
3-2. RealNVP와의 비교
다음은 다양한 데이터셋에 대한 RealNVP 모델과의 비교입니다. Bits per Dimension 성능을 측정했습니다.
GLOW는 모든 데이터셋에서 RealNVP 보다 좋은 성능을 보입니다.
3-3. Image synthesis
다음은 생성한 image입니다.
확실히 NICE, RealNVP보다 훨씬 선명한 사진이 나오는 모습을 볼 수 있습니다.
3-4. Image interpolation
다음은 두 Image 간의 Interpolation입니다.
두 개의 이미지를 각각 Latent Space z로 Encoding 한 뒤 Latent Space에서 Linearly Interplation 한 결과입니다. 부드럽게 잘 이어지는 모습을 볼 수 있습니다.
3-5. Semantic manipulation
다음은 미소, 피부색 등의 Semantic Maniplation 실험입니다. CelebA 데이터셋에는 Smiling, Blond Hair 등의 Label이 존재합니다. 일단 Label 없이 Normalizing Flow를 학습한 다음 True/False Label 데이터들의 Average(z)를 각각 구합니다. 그 다음 두 개의 점에서 Interpolation을 수행하며 Image를 생성해냅니다.
3-6. Effect of temperature
다음은 temperature에 따른 효과입니다.
Temperature가 높으면 Noisy 한 모습입니다.
3-7. Effect of model depth
다음은 Model Depth에 대한 실험입니다.
모델이 적당히 깊을때 Long Range Dependency를 잘 학습하는 모습을 볼 수 있습니다.