[Paper Review] StackGAN

Text to Photo-realistic Image Synthesis 를 위한 StackGAN 살펴보기

김현우
None
16 min readFeb 20, 2021

--

휴먼스케이프 Software engineer Covy입니다.

본 포스트에서는 이전에 포스트한 논문 리뷰인 GAN을 이용해서 텍스트로부터 텍스트가 묘사하는 이미지를 생성해내는 네트워크를 선보인 논문에 대해서 리뷰하려고 합니다. 리뷰하려는 논문의 제목은 다음과 같습니다.

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

논문에 대한 내용을 직접 보시고 싶으신 분은 이곳을 참고하시면 좋습니다.

Objective

논문의 배경은 text description 으로부터 High-resolution photo-realistic images 를 생성하는 것이 쉽지 않았던 것에서 시작합니다. 최신 GAN model 들에 단순히 upsampling layer 를 붙이는 것은 아래와 같이 상식적으로 판단할 수 없는 이미지들을 생성해 냈습니다.

Vanilla GAN 256x256 Images

앞의 두 그림들은 새를, 세 번째 그림은 꽃을 나타낸 것인데 상당히 불안정한 이미지들임을 확인할 수 있습니다. 논문에서 인용한 다른 논문의 내용에 따르면 GAN으로 고해상도 이미지를 생성해내는 것은 자연 상태의(생성해내지 않은) 이미지들이 가지는 데이터의 분포와 네트워크 모델이 생성해낸 데이터의 분포가 고해상도 픽셀 영역에서 Support가 겹쳐지지 않기 때문이라고 보고 있습니다. 이는 각 픽셀에 등장하는 값들의 domain에 차이가 있다는 뜻이고 픽셀 값에 차이가 있다는 것은 이미지가 비슷하지 않다는 것을 저희는 잘 알고 있습니다.

이러한 배경 속에서 문제점을 타개하고자 논문에서는 focusing 하고자하는 문제인 “Text to High-resolution Realistic Images” 를 두 개의 다루기 쉬운 문제인 “Text to Low-resolution Images”“Text conditional Low-resolution Images to High-resolution Images” 로 나눕니다. 그리고 이것 각각을 Stage-I GAN 과 Stage-II GAN 으로 부릅니다.

더불어 “Text to Low-resolution Images” task 를 진행할 때 text-image pair 의 학습데이터의 수가 적어서 최종적으로 text-conditional 한 image 를 생성하는데에 어려움이 있어 Conditioning Augmentaion 을 활용했습니다. 이는 후술하겠지만 conditioning manifold 로 사용하게 될 값에 랜덤하게 작은 변동을 주어 Stage-I GAN 으로 생성될 이미지에 다양성을 주는 방법입니다.

이제, 네트워크의 flow 에 맞게 Conditioning Augmentation, Stage-I GAN, Stage-II GAN 의 순서로 세부적인 내용을 설명드리려고 합니다.

Conditioning Augmentation

Conditioning Augmentation 은 위 그림의 우측에 나와 있는 것 처럼 네트워크의 시작 부분에 존재합니다.

네트워크의 시작은 Text description t 가 input 으로 주어지는 데에서 부터 시작됩니다. Input 으로 주어진 text description 은 word embedding 이라는 과정을 거치게 됩니다. 이는 쉽게 설명하자면 단어를 벡터로 변환하는 과정이라고 볼 수 있습니다. 가장 기본적인 방법으로 one-hot encoding 을 들 수 있는데 text description에 존재하는 단어가 해당되는 위치에 1, 존재하지 않는 단어가 해당되는 위치에 0을 넣어 벡터를 만들 수 있습니다. 논문에서는 이 논문에서 개발한 word embedding 을 사용했습니다

이렇게 위 그림처럼 word embedding 을통해 vector phi를 만들 수 있는데, 일반적으로 phi 의 dimension 이 크기 때문에 input data 들의 discontinuity 가 상당히 크게 나타나고 이는 generator 가 학습하기에 적합하지 않습니다. 이를 해결하기 위해 논문에서는 phi 를 fully connected layer 에 통과시켜 mu_0 와 sigma_0 를 뽑아낸 후 이를 평균과 분산으로 하는 Gaussian Distribution 에서 값을 sampling 하게 됩니다. 이 때, Standard Normal Distribution 을 따르는 값 epsilon 을 이용해서 최종적으로 conditioning vector c_0 를 아래와 같이 계산함으로써 sampling 을 완료합니다.

여기서 sigma_0 와 epsilon 사이의 기호는 element-wise multiplication 이고 그렇기 때문에 이 연산은 저희가 알고 있는 fully connected layer 로 구현되어 있는 것으로 보셔도 됩니다.

정리하자면 Conditioning Augmentation 은 conditioning vector 의 dimension을 조정할 수 있으면서 conditioning vector에 어느 정도의 랜덤한 작은 변동을 부여할 수 있는 방법인 것입니다.

여기서 마지막으로 한 가지 주목할 점은 학습 안정성을 위해 논문에서 특별한 loss를 추가한 점입니다. Word embedding 으로 생겨난 vector phi 로부터 Normal Distribution 을 가정해 선언한 mu_0 와 sigma_0 를 뽑아내기 위해 정의 된 fully connected layer 의 학습 안정성을 위한 term 이라고 보셔도 됩니다.

D_KL 은 GAN 에서도 간단히 설명을 드렸습니다. Kullback-Leibler Divergence 로, 간단하게는 두 확률 분포간의 차이를 나타내는 척도로 보시면 됩니다. 정확한 설명은 생략되었지만 논문에서는 mu, sigma 를 학습시키는 과정에 있어 smoothness 를 강화하고 overfitting 을 막을 수 있다는 이유를 들어 항목을 추가했습니다.

Stage-I GAN

Stage-I GAN 은 Conditioning Augmentation block 을 통과한 conditioning vector 를 input 으로 받아 low-resolution image 를 생성합니다. 그 첫 시작은 Generator 입니다. 일반 conditional GAN 이 그렇듯이 noise vector z 또한 input 에 concatenate 되어 input 을 형성한 모습을 볼 수 있습니다.

이후 upsampling block 이 등장하는데 논문에서 자세한 구조를 설명해 주고 있지는 않습니다. 그래서 궁금해서 논문에서 제시한 레포지토리에 방문해서 어떤 구조인지 파악할 수 있었습니다. 궁금하신 분들은 이 곳에서 확인하실 수 있는데 짚고 넘어가야 할 점은 deconvolution layer 를 사용해서 upsampling 을 진행했다 정도인 것 같습니다.

이후 따라오는 것은 Discriminator 입니다. Generator 가 생성한 fake image 와 real image 를 input 으로 받아 downsampling block 을 거쳐 dimension 을 줄입니다. 이후 앞서 word embedding 으로 만들어낸 vector phi 를 concatenate 하는 과정인 Spatial Replication 을 진행합니다.

이러한 Spatial Replication 은 Discriminator 의 condition 으로 들어간 것입니다. Discriminator 의 역할은 기본 GAN 에서는 Generator 가 생성한 이미지를 Fake 로, Real world 이미지를 Real 로 정확히 구별해내는 것입니다. 하지만 cGAN 에서는 생성한 이미지가 conditional 한 이미지여야 하기 때문에 평가를 진행하는 Discriminator 에 conditional 한 term 을 넣어주어 학습효과를 높였습니다.

이렇게 Spatial Replication 을 마친 뒤에는 최종적으로 Fake(0) / Real(1) 을 구분하는 값을 산출하기 위한 fully connected layer 가 사용됩니다. 마찬가지로 자세한 구조를 설명하고 있지는 않기 때문에 이 곳에서 구조를 확인하실 수 있습니다.

최종적인 Stage-I GAN 의 모습은 위와 같습니다.

그리고 Stage-I GAN 에서 사용한 Loss 는 위와 같습니다. 이전에 제가 포스팅했던 GAN 논문리뷰를 보신 분들은 바로 이해가 되실 것 같습니다. 간단하게만 다시 설명 드리겠습니다.

Generator 는 Discriminator 를 속여 자신이 만든 이미지를 Real 이라고 판단하길 원합니다. 때문에 D 가 판단한 값이 1(Real) 에 가깝게 나오길 원하고 L_G 값을 최소화하는 것을 목적으로 합니다. 또한 앞서 말씀드렸던 Kullback-Leibler Divergence 또한 mu 와 sigma 를 바탕으로 만든 Gaussian Distribution 이 Standard Normal Distribution 과 비슷한 분포를 보이도록 학습을 하게 되면 안정성을 부여할 수 있기 때문에 이 항목을 포함해 L_G 값을 최소화하는 것을 목적으로 선언한 것입니다.

Discriminator 는 Generator 가 생성한 이미지를 Fake(0) 로, Real world 이미지를 Real(1) 로 올바르게 구별하길 원합니다. 때문에 Real Image 와의 연산의 경우에는 1(Real) 에 가깝게 나오길 원하고 Fake Image 와의 연산의 경우에는 0(Fake) 에 가깝게 나오길 원합니다. 이 때문에 L_D 를 최대화하는 것을 목적으로 선언한 것입니다.

Stage-II GAN

Stage-II GAN 은 Stage-I GAN 을 통과하여 생성된 이미지와 word embedding 으로 생성한 vector phi 를 input 으로 받아 high-resolution image 를 생성합니다. 그 첫 시작은 Generator 입니다. 시작 부분인 Generator 는 앞서 말씀드린 vector phi 와 low-resolution 이미지를 input 으로 받습니다.

Stage-I GAN 의 Generator 와 다른 점이 있다면 noise vector z 가 아니라 low-resolution 이미지 s_0 를 input 으로 받는다는 점과, word embedding 자체는 공유하지만 fully connected layer 자체는 공유하지 않아 개별적으로 Stage-I GAN 에서 결실된 정보를 학습하도록 했다는 점입니다.

이미지로부터 고해상도 이미지를 만들어내는 Generator 를 구현하기 위해 encoder — decoder 구조를 사용했고, 마찬가지로 Spatial Repliacation 을 두었습니다. 더불어 이미지와 텍스트와의 관계를 학습하기 위한 layer 가 필요했는데 길어진 네트워크 구조에서 효과적으로 Gradient 를 전달하기 위한 Residual blocks 으로 이를 수행했습니다.

이를 통해서 고해상도 fake image 를 생성해냅니다.

이후 따라오는 것은 Discriminator 입니다. 이 부분은 Stage-I GAN 과 동일한 구조이기 때문에 자세한 설명을 생략하도록 하겠습니다.

최종적인 Stage-II GAN 의 모습은 위와 같습니다.

그리고 Stage-II GAN 에서 사용한 Loss 는 위와 같습니다. Stage-I GAN 과 굉장히 비슷하신 것을 볼 수 있습니다. 특별히 다른 점은 L_D 에서 사용한 Real Image 가 고행상도 이미지로 바뀌었다는 점, 그리고 Generator 가 input 으로 받는 것이 noise vector 가 아니라 low-resolution image 라는 점입니다.

Validation

논문에서 제시한 네트워크를 평가하기 위해서 사용한 validation metric 은 Inception Score(IS) 과 육안으로 보이는 image quality / text-conditionality입니다. 또한 Baseline 으로는 GAN-INT-CLS, GAWWN 네트워크를 사용했습니다.

Inception Score 에 대해서 간단히 설명을 드리자면, Real 같은 이미지를 생성하는지와 다양성 있는 이미지를 생성하는지에 대한 기준을 제시하는 척도입니다. 이를 각각 Fidelity 와 Diversity 라 하는데 이 모두 높은 값을 가지는 네트워크에 높은 값을 매겨줍니다.

그럼 지금부터 논문에서 제시한 validation 을 살펴보도록 하겠습니다.

GAN-INT-CLS 가생성해낸 64x64 image 들은 일반적인 모양만을 생성할 수 있었고 생동감 있는 부분들이나 설득력 있는 디테일이 부족했습니다. 이 때문에 실제 사진처럼 보인다거나 고해상도로 보여지지 않았습니다.

GAWWN 이 생성해낸 128x128 image 들은 GAN-INT-CLS 가 생성해낸 그것보다 고해상도처럼 보였습니다. 하지만 이 이미지들은 text description 으로만 생성된 이미지가 아니라는 점이 논문의 StackGAN 에 비해서 아쉬운 점입니다.

위 그림은 StackGAN 에서도 존재하는 두 GAN 에서 생성하는 이미지들을 표현한 것입니다. Stage-I GAN 에서는 text description 이 묘사하는 rough 한 모양과 색감들을 표현할 수 있었습니다. 하지만 대부분이 blurry 했고, detail 이 부족했습니다. 이러한 부족함을 Stage-II GAN 에서 보완해 주었습니다.

예로써 위 그림의 5번 째 열의 그림들을 보면 reddish brown crown 인데 파란색 색감의 crown 을 가지고 있던 부분을 Stage-II GAN 에서 보완해 주었습니다. 또한 7번 째 열처럼 물체를 특정 지을 수 없던 Stage-I GAN 의 결과에도 Stage-II GAN 이 이를 바탕으로 이미지를 성공적으로 생성해 낼 수 있음을 보여주었습니다.

위 그림은 두 GAN 모두 의도했던 기능을 정확히 해내고 있음을 보여주는 그림이었습니다.

다음으로 진행했던 것은 diversity 를 눈으로 보여 주고 있습니다. 단순히 training example 을 저장하고 띄워주는 것이 아니라 그것과 비슷한 확률 부노를 학습한다는 것을 보여주는 그림입니다. 좌측의 그림이 text description 으로 생성된 이미지이고 우측의 그림이 training set 중 nearest neighbors 를 모아둔 것입니다. 이들이 비슷함과 동시에 다르다는 사실을 보여주고 있습니다.

Inception Score 를 통한 비교는 위 표와 같이 제시해 주었습니다. 다양한 데이터 셋을 이용해 학습을 진행한 결과 논문의 StackGAN 이 가장 높은 수치를 보였다는 것을 제시했습니다.

다음으로 논문에서는 Conditioning Augmentation 의 기능에 대한 검증을 진행합니다. CA 가 존재하는 Stage-I GAN 과 그렇지 않은 Stage-I GAN 의 결과는 다양성에서 큰 차이를 보이는 것을 알 수 있습니다. 그리고 CA 를 포함한 Stage-I GAN 도 가장 좋은 성능을 냈을 때의 StackGAN 보다 realistic 하지는 못했습니다.

다음으로 앞서 제시한 Conditining Augmentation 과 text embedding vector 를 Stage-I GAN 에서만 넣는 경우(Text once), Stage-II GAN 에도 넣는 경우(Text twice) 등에 대한 qualitative validation 을 진행했습니다.

그 결과 위의 표 처럼 CA 를 진행할 수록, Text twice 를 진행할 수록 높은 Inception Score 를 가짐을 보여주었습니다.

개인적으로는 이 부분이 조금 신기했습니다. 논문에서는 그들의 StackGAN 이 smooth 한 latent data manifold 를 학습한다는 것을 보여주기 위해서 두 개의 문장이 만들어 내는 word embedding vector phi 를 interpolate 한 이후 넣어 줄 경우에 나오는 이미지 또한 interploate 된 듯하게 나옴을 보여주었습니다. 서로 다른 text 가 사실은 완전히 동 떨어진 것이 아니라 자연스럽게 이어질 수 있는 data 영역을 가지고 있도록 학습할 수 있다는 것입니다.

Supplementary Materials

이것으로 논문에 대한 리뷰는 끝났습니다. 여기서는 추가적으로 text-image 데이터가 궁금하신 분들을 위해 논문에 첨부된 사진을 보여드립니다.

Conclusion

이것으로 논문 “StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks”의 내용을 간단하게 요약해보았습니다.

처음 접해보는 종류의 주제여서 신선하게 읽을 수 있었지만, 논문 내에서 네트워크 구조를 상세히 설명해주지 않아서 아쉬웠습니다. 특히 논문에서 제시하는 이미지들을 보는 재미가 컸습니다.

개인적으로는 GAN 에 더 큰 흥미를 느끼게 해주는 논문이었다고 생각이 듭니다. 여러분들도 GAN 에 관심이 있으시다면 꼭 한 번 읽어보시면 좋을 것 같습니다.

--

--