평범한 필기장

[평범한 학부생이 하는 논문 리뷰] StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks 본문

AI/GAN

[평범한 학부생이 하는 논문 리뷰] StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks

junseok-rh 2023. 4. 30. 22:54

기존 Text to Image의 문제점

 기존에 conditional GAN을 이용해서 Text to Image문제를 해결하려했지만 여러 문제점을 지녔다.

  • text description의 의미를 rough하게 반영은 하지만 이미지의 detail이 떨어지고 생생한 object를 생성하지 못했다.
  • 즉, 고화질의 사실적인 이미지를 생성하지 못했다.
  • GAN에 upsampling layer를 더 쌓아서 해결하려했지만, instability를 보였고, nonsensical한 결과를 생성했다.

그래서 이러한 문제점들을 해결하려 했고, 그 결과로 StackGAN이라는 모델을 만들었다!

 

Contribution

StackGAN을 알아보기 전에 이 모델이 가지는 기여점에 대해 먼저 설명하겠다.

  1. Text로부터 photo-realistic 이미지를 합성해 냈다.
  2. Conditioning-Augmentation 기술을 통해 cGAN의 학습을 안정화 시켰고 생성된 이미지의 다양성을 높였다.
  3. 전체적인 모델 디자인의 effectiveness를 높였다.

Stack GAN

 

1. 기본 아이디어

사람이 그림을 그릴 때와 유사한 방식으로, text to image 문제를 2개의 더 다루기 쉬운 sub-problem으로 나눴다.

StackGAN 전체적인 구조

2. Conditioning Augmentation (CA)

 

Conditioning Augmentation

 StackGAN에서 text to image를 위해 2단계로 나눴는데 그 두 단계를 설명하기 이전에 앞서 기여점에서 설명한 CA에 대해 먼저 설명하겠다.

 위 이미지에서 text description t로부터 encoder를 통해 text embedding ϕt를 생성한다. (이때 encoder는 pre-trained된 encoder를 사용했다.) 

 이전까지는 text embedding은 generator의 input으로써 conditioning latent variables을 생성하도록 비선형으로 변형되었다고한다. 하지만 이렇게 하면 text embedding의 latent space의 차원이 매우 높고 제한된 데이터의 양 때문에, latent data manifold에서 불연속성을 야기한다. 이 상황은 generator를 학습시키는데 바람직하지 못한 현상이다.

 이러한 문제를 해결하기 위해 conditioning augmentation (CA)라는 기술을 적용시켰다. CA를 통해 fixed conditioning text variable c대신 latent variable cˆ을 랜덤하게 샘플링했다. 이 때, cˆ은 평균이 µ(ϕt)이고, 공분산 행렬이  Σ(ϕt)인 가우시안 분포에서의 랜덤 샘플이다. (평균과 공분산 행렬이 ϕt에 대한 함수)

 이렇게 CA에 의한 randomness는 동일한 문장에 대해 다양한 포즈와 appearance를 가진 object로의 translation에 효과적이다.

 CA를 통해 적은 image text pair에서 더 많은 training pair를 만들고, 그로 인해 robustness를 올릴 수 있다.

그리고 conditioning manifold에 대한 smoothness를 올리고 overfitting을 방지하기 위해, generator의 목적함수에 아래와 같은 regularization을 추가했다.

standard Gaussian분포와 conditioning Gaussian 분포 사이의 KL divergence

3. Stage-I GAN

 앞서 text to image translation 문제를 해결하기 위해 이 문제를 2개의 sub-problem으로 나눴다고 했는데, 그 중 첫번 째에 해당하는 부분이 바로 Stage-I GAN이다. 아래의 그림이 바로 Stage-I GAN의 구조를 나타낸 이미지이다.

Stage-I GAN에 해당하는 부분의 구조

일단 Stage-I GAN 의 역할을 그림 그리는 것에 비유하면 sketch를 하는 과정이라고 비유할 수 있다. 정확히 설명하면, text에 따라 물체의 대강의 형태와 기초 색을 그리고, random noise vector로부터 배경 레이아웃을 그리는 역할을 한다. low resolution 이미지가 output으로 나온다. CA 과정에서 생성된 cˆ0와 random variable z를 통해 Generator G0와 Discriminator D0를 학습시킨다.

(여기서 0를 붙여준 것은 Stage-I GAN과 Stage-II GAN을 구분 짓기 위함인 것으로 보인다.) 

3.1 Stage-I GAN 의 목적 함수

Stage-I GAN의 object

목적 함수는 기존 cGAN의 목적 함수와 형태가 동일하지만 D0의 목적함수에서 I0는 real image를, t는 주어진 description을 나타낸다. 그리고 앞서 CA부분에서 설명했듯이 KL divergence term이 G0의 목적함수에 추가 되어있다. (이 논문에서 람다는 1로 설정을 했다고 한다.) 학습을 위해 reparameterization trick을 이용했다고 한다.

3.2 Model Architecture

  • Genrator G0

Generator 부분

ϕt가 FC layer를 지나 µ0와 σ0를 생성해서 N (µ0(ϕt), Σ0(ϕt))를 통해 cˆ0를 샘플링 한다. 여기서 cˆ0 = µ0 + σ0 ⊙ ε (⊙는 element-wise multiplication,ε ∼ N (0, I)) 를 통해 cˆ0를 계산하는데 이 때, reparameterization trick이 이용된다.

 

Reparameterization Trick 이란?

VAE를 공부할 때, 잠깐 찾아서 공부를 한 적이 있는데, stochastic한 node에서는 역전파 계산이 안되는데 이를 가능하게 하기 위해, stochastic한 node를 stochastic한 부분과 deterministic한 부분으로 나누어서 역전파가 deterministic한 부분으로 흐르게 하는 방식이라고 한다.

위 수식에서는 µ0는 deterministic하고  σ0 ⊙ ε 는 stochastic하기 때문에 이 두 부분으로 나누어서 역전파 계산이 가능하도록 한다.

 

다시 본론으로 돌아와서 cˆ0와 Nz차원의 noise vector와 concat해서 up-sampling block을 지나 W0 * H0 차원의 이미지를 생성하도록 구조를 만든다.

  • Discriminator D0

DIscriminator 부분

실제 image 혹은 생성한 image를 down-sampling block에 넣어서 Md*Md형태로 만들어주고 text embedding vector ϕt를 FC layer를 통해 Nd차원으로 만들고 spatially replicated 되어 Md*Md*Nd차원으로 만들어준다. 그리고 이 두 벡터를 concat해서  1*1 convolution 연산을 진행하고 FC layer를 통과시켜 real인지 fake인지에 대한 decision score를 output으로 내는 구조로 design됐다.

 

4. Stage-II GAN

Stage-I GAN으로만은 vivid한 이미지를 생성할 수 없고, detail들이 생략되거나 우리가 원한 이미지가 아닌 오류들이 발생하는 등의 문제들이 발생한다. 그래서 이러한 문제점을 해결하기위해 Stage-I GAN을 통해 생성된 image와 원래 주어졌던 text embedding을 이용해 오류를 수정하고 생략된 정보를 추가한 high-resolution 이미지를 생성하는 Stage-II GAN을 붙였다. 

Stage-II GAN의 구조

4.1 Stage-II GAN의 목적 함수

 

Stage-II GAN의 objective

Stage-II GAN의 목적함수를 보면 일반 GAN의 목적함수와 제일 다른 것은 바로 random noise z가 없다는 것이다.

Stage-II GAN의 목적함수에서 s0은 Stage-I에서 생성한 이미지로 s0가 randomness를 보존한다는 가정을 지닌다. 또한 Stage-I에서의 cˆ0와 Stage-II에서의 cˆ은 동일한 pre-trained encoder에서 생성된 동일한 text embedding으로부터 오지만 각 단계에서의 CA는 다른 FC-layer를 가지고 있어 다른 평균과 분산을 가지게 된다. 이렇게 함으로써 Stage-I에서 생략한 정보를 학습할 수 있게 된다.

4.2 Model Architecture

  • Generator G

기본적으로 Generator G는 residual block을 가진 encoder-decoder 구조로 디자인했다. Stage-I과 유사하게, text embedding vector를 통해 Ng 차원의 text vector cˆ를 생성하고 spatially replicate해서 Mg*Mg*Ng차원의 tensor를 만들어 낸다. Stage-I의 결과 s0는 down-sampling block(encoder)들을 통해 Mg*Mg 차원인 tensor를 만든다. 이 두 tensor들을 concat해서 residual block에 넣는다. 이 과정을 통해 이미지 특징과 텍스트 특징에 걸쳐 multi-modal representation을 학습하도록 한다. (정확한 의미를 공부하지 못했지만 찾아보니 대략 이미지와 텍스트가 같은 의미를 갖도록 학습한다는 의미로 받아들이면 될 것 같다,,,ㅎㅎ) 그러고 난 후에 up-sampling block(decoder)들을 지나 고해상도의 이미지가 생성된다. 이렇게 Generator를 design함으로써 input 이미지의 오류를 수정하고 detail들을 추가하게 한다.

  • Discriminator D

Stage-I과 거의 유사하지만 input으로 들어오는 이미지 사이즈가 커졌다는 점이 다르다. 그리고 image와 text사이의 alignment를 잘 학습시키기 위해 기존 vanilla-GAN의 discriminator가 아닌 matching-aware discriminator를 사용했다.

 

Matching-aware discriminator란??

 기존 cGAN에서 discriminator가 (text, images) pair가 진짜인지 가짜인지 판단하도록 학습한다. 이때 문제점은 discriminator는 real training image가 어떤 text embedding context와 match되는지 모른다는 점이다. 이렇게 되면 real image가 자신을 설명하지 않는 text와 match될 수도 있다(mismatch)는 것이다. 이러한 문제점을 피하기 위해 matching-aware discriminator를 도입한 것인데, 이 discriminator는 학습 과정에서 positive pair(real image + 이에 상응하는 text)와 negative pair(1. real image + mismatch text, 2. 합성 image + 이에 상응하는 text)를 가지고 학습되는 discriminator이다.

 

5. Implementation detail

  • up-sampling block : nearest-neighbor upsampling (3*3 stride 1 convolution), Batchnorm + ReLU사용 (마지막 layer 제외)

[출처 : CS231n 강의자료]

  • residual block : 3*3 stride 1 convolutions, Batchnorm + ReLU (128*128 StackGAN에는 2개, 256*256 StackGAN에는 4개를 사용)
  • down-sampling block : 4*4 stride 2 convolutions, Batchnorm + ReLU ( 첫째 layer에는 Batchnorm을 사용하지 않음)
  • Ng = 128, Nz = 100, Mg = 16, Nd = 128, W0 = H0 = 64, W = H = 256를 default로 함
  • Stage-II를 고정하고 Stage-I을 600 epoch만큼 학습시키고, Stage-I을 고정하고 Stage-II를 600 epoch만큼 학습시킨다
  • Adam optimizer를 사용하고 Batch size는 64로 한다.
  • Learning rate는 0.0002로 하고 100 epoch만큼 1/2로 줄여준다.

Experiments

기존 text to image 모델에서 SOTA였던 GAN-INT-CLS와 GAWWN과 비교하는 실험, Stage-I와 Stage-II에서 생성되는 이미지를 비교하는 실험 등 다양한 실험을 진행했다고 한다. 데이터셋으로는 CUB, Oxford-102, MS COCO등을 사용했다고 한다.

1. Evaluation metrics

 먼저 평가 방식을 설명을하자면 첫번 째 방식은 바로 'Inception Score' 이다. Inception Score의 수식은 아래와 갔다.

inception score

수식에서 x는 generated image를 의미하고 y는 inception model에 의해 예측된 label을 의미한다. 이 평가 방식은 모델이 good model이라면 다양하지만 meaningful한 이미지를 생성할 것이다 라는 생각에서 나온 방식이다. 그렇기 때문에 p(y|x)와 p(y) 사이의 KL divergence는 커야한다. (Inception Score에 대해서는 자세히 공부할 필요가 있을듯 하네요,,,)

 두번 째 방식은 'human evaluation' 이다. Inception Score는 text description이 주어졌을 때, 생성된 이미지가 well conditioned인지를 반영하지 못한다. 그렇기에 human evaluation방식을 도입한 것이다. 동일한 text description이 주어졌을 때, 각 모델이 그 text에 의해 생성한 이미지들을 사람들이 순위를 매겨서 평균 순위를 비교해서 평가하는 방식이다.

2. Quantitative And Qualitative results

Inception Score와 Human Rank에 대한 점수 표
각 모델이 같은 text description에 대해 생성한 이미지

위 표를 보면 각 데이터셋에 대한 StackGAN의 Inception Score와 Human Rank에 대한 점수가 제일 높은 것을 볼 수 있다.

 GAN-INT-CLS에 의해 생성한 이미지들을 보면, 단지 전체적인 shape과 color는 반영을 했지만 vivid한 부분과 covincing detail들이 부족해 보인다. 결국 현실적이고 고화질의 이미지를 생성한 것으로 볼 수 없다.

 GAWWN은 StackGAN보다는 낮지만 GAN-INT-CLS보다는 높은 Inception Score를 보이고, GAN-INT-CLS보다 더 고화질이고 더 디테일한 이미지를 생성한 것을 볼 수 있다. 하지만 이 논문의 저자들은 text description만 주어졌을 때는 그럴듯한 이미지 생성에 실패했다고 한다.

 반면에 StackGAN은 text description만 주어졌을 때에도 고화질의 photo-realistic한 이미지를 잘 생성할 수 있다.

 이번 실험에서는 Stage-I GAN 과 Stage-II GAN이 생성한 이미지들을 비교함으로써 각 Stage의 역할 및 특징을 알아봤다.

Stage-I 에서 생성된 이미지들을 보면 대부분 대강의 형태, 색을 생성하지만 이미지가 blurry하고 다양한 defects, missing details를 가지는 이미지를 생성해내는 것을 볼 수가 있다. 반면에 Stage-II에서 생성한 이미지들은 고해상도의 convincing한 detail들을 추가한 이미지들인 것을 볼 수 있다.

 1번째 열의 이미지를 보면 Stage-I에서 대강의 이미지 형태와 색을 생성하고 Stage-II에서는 detail들을 추가한 이미지를 생성한 것을 볼 수 있다. 이를 통해 Stage-I과 Stage-II의 이미지 생성에대한 특징을 확인할 수 있다.

 5번째 열의 이미지를 보면 text에서는 reddish brown이라고 되어 있지만 Stage-I 에서는 색이 틀린 이미지를 생성한 것을 볼 수 있다. 하지만 Stage-II에서 그 오류를 수정해서 이미지를 생성해낸 것을 볼 수 있다.

 7번째 열의 이미지를 보면 Stage-I에서 아예 이미지 생성에 실패한 것을 볼 수 있는데, Stage-II에서는 그럴듯한 이미지를 생성한 것을 볼 수 있다.

이 두 예시를 통해 Stage-II에서 text를 다시 사용함으로써 오류를 수정하는 것을 확인할 수 있다.

 

 또한 실험을 통해 아래와 같은 것을 확인했다.

'StackGAN은 단순히 training sample들을 외우는 것이 아니라 language-image relation들을 capture하는 것으로 학습한다.'

 Stage-II GAN의 Discriminator로 생성된 image들과 training image들의 visual feature들을 추출하고 그 feature들을 통해 생성된 이미지들과 가장 가까운(nearest neighbor) 이미지를 찾고, 그렇게 찾은 이미지들의 특징들과 비교한 결과 비슷한 특징들을 가지지만 동일하지는 않은 이미지인 것을 확인했다. 이를 통해 암기한 것은 아니라는 것을 확인했다.

 

3. Component analysis

StackGAN의 요쇼들에 대한 실험을 진행했다. 처음으로는 StackGAN에 구조에 대한 실험 결과에 대한 내용이다.

 

3.1 The design of StackGAN

 

위 사진에서 보면 Stage-I without CA는 그럴듯한 이미지를 생성하는데 실패했다. Stage-I with CA는 더 다양한 이미지를 생성할 수 있으나 StackGAN에 비해 현실성이 떨어진다. 이 점으로 보아 Stack구조가 필요하다는 것을 알 수 있다.

각 StackGAN의 baseline design에 대한 inception score 표

 

 위 표에서, 256*256 StackGAN과 128*128 StackGAN의 결과를 비교해보면 오히려 고화질의 256*256 StackGAN의 이미지에 대한 Inception Score가 더 높은 것을 확인할 수 있다. 이 결과는 256*256의 이미지를 생성할 경우 128*128일 경우보다 이미지에 대한 detail들을 더 추가하기에 더 좋은 Inception Score를 가진다는 것을 보인 것이라 할 수 있다.

 그리고 256*256 StackGAN의 경우 Text Twice(Stage-II에 text를 input으로 넣는지)를 하는지 안하는지를 나누어서 실험을 진행해봤을 떄, Text Twice가 yes인 경우에 Inception Score가 더 높은 것을 볼 수 있다. 이 결과로 Stage-II에도 text를 넣어줌으로써 Stage-I에서의 오류를 Stage-II에서 수정하는 것을 알 수 있다.

 

3.2 Conditioning Augmentation

이번에는 256*256 StackGAN에서 CA가 있는 디자인과 없는 디자인을 비교하는 실험을 진행했다. 위 표와 이미지에서 볼 수 있듯이, CA없는 경우 Inception Score가 낮고 Stage-I에서 CA가 있으면 다양한 포즈의 이미지를 생성하지만 없으면 그렇지 않은 것을 볼 수 있다. 이러한 실험 결과로 CA가 cGAN의 학습을 안정화하고 생성 이미지의 다양성을 높여준다는 효과를 알 수 있다. 이러한 CA의 효과는 latent manifold에 따른 작은 진동에 대한 robustness를 encourage하는 능력 때문에 나온다고 한다.

 

3.3 Sentence embedding interpolation

 

text embedding vector를 interpolate해 생성한 이미지

 

이번에는 DCGAN에서 진행한 것과 비슷한 실험을 진행을 했는데, DCGAN에서는 이미지를 특정한 축을 기준으로 interpolate시키면 그에 따라 자연스럽게 변하는 이미지를 생성했다면, StackGAN에서는 noise vector z는 고정을 시키고 text embedding vector만 interpolate시키면 그에 따라 자연스럽게 변하는 이미지를 생성한다.

 

Failure Case

여러 이미지를 생성하는 실험을 해보는 동안 Failure Case가 발생했는데, 가장 큰 이유는 Stage-I이 그럴듯한 rough shape이나 color를 생성하지 못하는 경우라고 한다.

CUB 데이터셋에서 발생한 Failure Case

 

Conclusions

 StackGAN은 기존의 text to image 모델들보다 고화질의 photh-realistic 디테일을 가진 다양한 이미지 생성이 가능하다!

 

Reference

https://arxiv.org/abs/1612.03242