StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks

KimDoing
12 min readMar 21, 2021

--

ICCV 2017에 발표된 논문으로, 이미지에 대한 설명인 text description을 토대로 이미지를 생성해내는 방법인 text-to-image에 관한 논문입니다. 본 논문은 총 2단계의 stage를 사용하여 보다 사실적인 이미지를 만들어내는 방법을 고안해냈습니다.

현재 딥러닝을 공부하는 학생이기 때문에, 내용에 오류가 존재할 수 있습니다. 잘못된 정보를 발견하셨을 경우 알려주시면 감사하겠습니다!

2014년 Ian Goodfellow가 발표한 논문인 Generative Adversarial Networks (GAN)은 이미지 생성 분야에 많은 영향을 주었습니다. GAN의 등장으로 이미지 생성 분야는 많은 발전을 이루었고, 지금도 GAN과 관련된 논문은 여전히 많이 나오고 있습니다. 이렇게 이미지 생성 분야가 발전함에 따라, text를 기반으로 이미지를 생성하는 method를 제안하는 논문들도 등장하고 있습니다. 오늘 소개할 논문인 StackGAN 역시 text-to-image 논문 가운데 하나입니다.

StackGAN의 contribution은 이름에서부터 알 수 있듯이, 한번에 생성하던 이미지를 두 단계로 나누어 생성하는 것입니다.

위 사진처럼 한번에 이미지를 생성하는 Vanilla GAN과 달리, 두번의 stage로 나누어 이미지를 생성하고 있습니다. 또한 다양한 조건의 latent를 위해 Conditioning Augmentation을 제안하였습니다.

Stacked Generative Adversarial Networks

StackGAN은 Stage-Ⅰ GAN과 Stage-ⅠⅠ GAN으로 이루어져 있습니다. Stage-Ⅰ GAN은 이미지의 전체적인 shape을 sketch하며 기본적인 색깔과 배경의 layout에 대한 이미지를 생성합니다. Stage-ⅠⅠ GAN은 Stage-Ⅰ GAN에서 부족했던 부분을 보완하고, text를 통한 detail을 추가합니다.

Preliminaries

먼저 GAN에 대해 간단히 짚고 넘어가겠습니다. GAN은 앞서 말했듯이 Ian Goodfellow에 의해 2014년에 발표된 논문으로, generator와 discriminator의 적대적인 관계를 통해 이미지를 생성하는 방법입니다. Generator인 G는 discriminator가 real/fake를 구분하지 못하는 이미지를 생성하도록 학습됩니다. 반면에 discriminator인 D는 이미지가 real인지 fake인지를 더 잘 구분하도록 학습합니다. 이러한 적대적인 관계를 통해 generator의 성능을 높이는 것이 GAN의 목적입니다.

본 논문에서는 GAN의 확장판인 Conditional GAN이 사용됩니다. Conditional GAN은 이미지를 생성할 때 conditioning variable인 c도 함께 인자로 넘겨주게 됩니다.

이를 통해 이미지를 생성할 때 conditioning variable인 c도 고려되어 이미지를 생성하게 됩니다. Text-to-image method같은 경우, c로 text의 embedding vector를 넘겨주어 text에 따라 이미지가 생성되도록 합니다.

Conditioning Augmentation

Generator와 Discriminator에 conditioning vector로 text description을 넘겨주기 위해서는 먼저 text description을 encoder를 통해 vector로 embedding하여야 합니다. 이렇게 만들어진 text embedding phi_t는 high dimensional하다는 특징을 가지고 있습니다. Data의 양은 한정된 것에 반해, dimension의 크기는 크기때문에 latent data manifold의 불연속성을 야기합니다. 이러한 문제를 해결하기 위해 본 논문은 Conditioning Augmentation이라는 방법을 제시합니다.

먼저 fully-connected layer를 통해 phi_t의 평균값인 mu_0과 표준편자 sigma_0를 구합니다. 그 후 표준정규분포로부터 sampling된 epsilon을 이용하여 conditioning Gaussian distribution을 만듭니다. 해당 distribution으로부터 conditioning variable인 c hat을 sampling합니다.

Condition Augmentation은 적은 양의 text-image pair로부터 더 많은 training pair를 얻을 수 있고, conditioning manifold의 작은 변화를 통해 더 안정적이게 만듭니다.

또한 conditioning manifold의 smothness와 overfitting을 방지하기 위해 generator가 training 할 때 Conditioning Gaussian distribution과 standard Gaussian distribution 간에 KL divergence를 사용합니다.

이렇게 Conditioning Augmentation을 통해 부여된 randomness는 동일한 문장이 다양한 형태가 될 수 있는 text-to-image translation에 유용합니다.

Stage-Ⅰ GAN

Stage-Ⅰ GAN에서는고해상도의 이미지를 바로 생성하는 대신, 전체적인 모양을 잡아주는 저해상도의 이미지를 먼저 생성합니다.

이 때 generator인 G_0과 discriminator인 D_0의 loss는 다음과 같습니다. G_0과 D_0의 conditioning variable로 c_0 hat과 phi_t를 넘겨줍니다. c_0 hat은 앞선 Conditioning Augmentation을 통해 생성된 vector이고 phi_t는 pre-trained encoder를 통해 얻어진 text embedding입니다. G_0의 loss에는 KL divergence값이 추가되며 hyperparameter인 λ는 두 term 사이 균형을 위한 것으로, 본 논문의 모든 실험에는 1로 설정되어있습니다.

Stage-Ⅰ GAN은 generator G_0과 discriminator D_0으로 구성되어있습니다.

Generator는 Conditioning Augmentation 과정에서 N_g dimensional vector인 c hat을 얻습니다. 그 후 N_z dimensional noise vector와 concatenate되어 upsampling과정을 통해 W_0 x H_0 크기의 이미지를 생성합니다.

Discriminator는 먼저 이미지를 downsampling합니다. 그렇게 만들어진 tensor와 text embedding phi_t를 통해 만든 tensor는 concatenate 한 후 1 x 1 conv layer에 입력됩니다. 이를 통해 real/fake 여부를 판단하는 것입니다.

Stage-ⅠⅠ GAN

Stage-Ⅰ GAN을 통해 만든 이미지는 많은 왜곡이 존재하며 구체적이지 않습니다. 이러한 문제를 Stage-ⅠⅠ GAN을 통해 해결합니다.

Stage-Ⅰ GAN의 G_0에서 생성한 이미지를 S_0이라고 했을 때 Stage-ⅠⅠ GAN의 generator와 discriminator의 loss는 다음과 같습니다.

기존의 GAN loss와 달리 random noize인 z를 사용하지 않습니다. 이는 S_0에 이미 randomness한 성질이 내포되어있기 때문입니다.

Stage-Ⅰ GAN과 Stage-ⅠⅠ GAN은 같은 Conditioning Augmentation을 사용하지만, 각 dataset의 평균과 표준편차가 서로 다르기 때문에 서로 다른 fully-connected layer를 사용합니다.

Stage-ⅠⅠ GAN 역시 generator G_1과 discriminator D_1로 구성되어있습니다.

Generator는 Stage-Ⅰ GAN의 generator와는 다른 구조를 갖고 있습니다. Stage-ⅠⅠ GAN의 generator는 residual blocks를 사용한 encoder-decoder 형태를 띄고 있습니다. 먼저 S_0을 downsampling을 통해 생성한 tensor와 tensor로 변환된 c hat을concatenate합니다. 그 후 residual blocks를 통과시킨 후 upsampling을 통해 고해상도의 이미지를 생성합니다.

Discriminator는 생성된 이미지의 크기가 커져서 downsampling block이 조금 변경된 점을 제외하면 Stage-I GAN의 discriminator와 거의 유사합니다. 두 stage의 discriminator 모두 기존의 GAN에서 사용하는 discriminator이 아닌 matching-aware discriminator를 사용합니다. Training동안 discriminator는 real image와 text description이 일치하는 positive sample pair와 그렇지 않은 negative sample pair를 받습니다. Negative sample pair같은 경우는 real image와 mismatch된 text description이 pair로 주어지는 경우와 fake image와 그에 상응하는 text description이 pair로 주어지는 경우가 있습니다.

Experiments

본 논문은 이전 text-to-image sota인 GAN-INT-CLS와 GAWWN과 비교를 하였습니다. 이 때 StackGAN은 Stage-Ⅰ GAN, Stage-ⅠⅠ GAN 이 각각 64 x 64, 256 x 256 크기의 이미지를 생성하는 버전과 128 x 128, 256 x 256 크기의 이미지를 생성하는 버전이 존재합니다.

Datasets and evaluation metrics

Dataset으로는 새와 관련된 CUB dataset과 꽃과 관련된 Oxford-102를 사용하였습니다. 또한 본 논문의 generalization ability를 보여주기 위해 MS COCO dataset 또한 사용하였습니다. COCO dataset은 CUB나 Oxford와 달리 다양한 배경과 여러개의 물체가 이미지에 함께 포함되어있습니다.

Evaluation metrics

GAN과 같은 generative model의 성능을 측정하기는 어렵습니다. 따라서 본 논문은 quantitative evaluation을 위해 inception score를 사용하였습니다.

Inception score를 통해 생성한 이미지의 diversity 정도를 확인할 수 있습니다.

Quantitative and qualitative results

위 표에서 볼 수 있듯이 이전의 sota model들에 비해 좋은 성능을 보여주고 있음을 확인할 수 있습니다.

위 사진은 CUB test set에 대한 model별 결과입니다. GAN-INT-CLS는 물체의 대략적인 모양만 표현되어 있습니다. GAWWN은 GAN-INT-CLS보다는 더 좋은 결과를 보입니다. 하지만 여전히 StackGAN보다는 낮은 해상도의 이미지를 만들어냅니다. 게다가 GAWWN은 text description만 주어졌을 때는 그럴듯한 이미지를 만들어내지 못한다고 저자가 언급하였습니다. 이러한 점으로 미루어봤을 때, StackGAN은 뛰어난 성능을 보여줌을 알 수 있습니다.

위 사진은 Stage-Ⅰ GAN과 Stage-ⅠⅠ GAN의 generator에서 생성한 이미지를 비교한 것입니다. Stage-Ⅰ GAN의 사진에서 부족한 detail을 Stage-ⅠⅠ GAN에서 채워주고 있습니다.

Component analysis

위 표는 StackGAN의 여러 상황에 대해 비교를 한 것입니다. CA는 Conditioning Augmentation을 뜻하고, Text twice는 Stage-ⅠⅠ GAN에도 input으로 주어졌는지에 대한 column입니다.

먼저 Stage-Ⅰ GAN만 사용했을 경우에는 inception score가 떨어짐을 확인할 수 있습니다. 또한 해상도를 낮출 경우에도 inception score가 낮아지고, CA와 text twice를 사용하지 않은 경우에도 inception score가 낮아집니다. CA는 특히 학습의 안정성을 높이는데 도움을 주기 때문에 필요한 요소임을 확인할 수 있습니다.

Text-to-image 종류의 논문을 처음 읽어봤는데 매우 흥미로웠습니다. 또한 NLP 분야 또한 공부를 해보고 싶은 마음이 생겼습니다.

--

--