한국인공지능학회

Recent trends of text-to-image translation models [3/4] ( UNIST 유재준 교수님 ) / 이미지 생성모델의 역사 2016-2020

Suhd 2023. 2. 5. 10:43

| From 2016 to 2020

이제 datasets까지 다뤄보았으니

Text-to-Image Synthesis가 시작된 2016년으로 거슬러 올라가본다.

 

2016

 

2016 Reed et al.,“Generative Adversarial Text to Image Synthesis,” ICML’16

지금 LG에서 AI 연구를 하고 계시는 이홍락 교수님이 2016년 5월에 발표하신

Generative Adversarial Text to Image Synthesis

처음으로 Text로 이미지 생성을 control하려는 시도를 한다.

2014년에 GAN이 등장하고, 그 해 말 cGAN이 나옴으로 인해

conditional(이전 사건에 의존)한 방법을 통한 의도된 이미지 생성 시도가 이뤄지고 나서

2016년 conditional한 부분을 Text로 넣어본 것이다.

Reed et al., “Generative Adversarial Text to Image Synthesis,” ICML’16

 

cGAN에서 사용한 방식 그대로 G와 D의 input에 φ라는 label 정보를 추가적으로 같이 전달 해주는 것인데

φ 자리에 Text를 집어 넣었다.

물론, Text를 그대로 집어넣지 않고

당시 최신이던 RNN,LSTM 기반의 character level text encoder를 이용해

sentence feature를 뽑아 낸 다음에 condition(φ)으로 넣어 주었다.

( character level text encoder : 문장을 character 단위로 쪼갠 다음에 순서대로 하나씩 RNN,LSTM에 집어넣고 마지막 character의 출력을 sentence feature로 사용하는 모델 )

이런 시도를 해본 것이 처음이엿기 때문에

당시에 sensational 하기는 했지만, 정말 단순한 시도이기는 하다.

결과를 확인해보자면

이미지 - 문장 쌍 데이터인 GT(Ground Truth: 수집한 데이터)로 부터

그 문장을 모델에 넣었을 때 얻어낸 이미지(Ours)를 확인해보니

주목할만한 성능의 64x64 사이즈의 이미지를 생산해 내었다는 것을 확인할 수 있었다.

이를 통해, sentence 안에도 꽤나 풍부한 정보가 들어있다는 것을 알아차렸다!

 

2017

2017 A Odena et al.,"Conditional Image Synthesis With Auxiliary Classifier GANs " ICML17

"Conditional Image Synthesis With Auxiliary Classifier GANs " ICML 2017

 

 

2017년에 들어서자

cGAN에서는 단순이 Generator와 Discriminator의 입력에 label에 관련된 정보를 집어넣었지만,

여기서 더 나아가

함께 입력으로 넣은 라벨에 알맞는 이미지가 출력되고 있는지

확인하고 아니라면 그렇게 되도록 하는 classification 층(Q)을 하나 더 만들어서

이미지가 Discrminator에 들어갈 경우

1. 진짜(Real) 인지 가짜(Fake)인지 판단하는 동시에

2. 그 이미지의 라벨까지 잘 예측하도록 (만약 고양이 이미지라면 고양이라고 판단할 수 있게) 하였다.

이렇게 학습시킨 Generator의 성능은 앞선 cGAN보다 준수해졌다.

A Odena et al.,"Conditional Image Synthesis With Auxiliary Classifier GANs " ICML17

 

위쪽 행이 생성된 것이고

아래쪽 행이 진짜 이미지이다.

추가적으로 발전된 점이라면, 이전 64x64 해상도를 넘어 128x128 짜리 해상도 이미지까지 생성해내었다.

 

 

2016 Zhang et al.,"StackGAN: Text to Photo-realistic Image Synthesis with Stacked Generative Adversarial Networks" ICCV’16

2017 Zhang et al.,"StackGAN++: Realistic Image Synthesis with Stacked Generative Adversarial Networks" TPAMI’17

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

 

2016-2017년에는 GAN의 능력을 최대한 뽑아먹으려는 구조들이 나온다.

StackGAN같은 경우

2개의 GAN을 이용한다.

첫번째 GAN을 이용해 대략적인 이미지를 생성하고

두번쨰 GAN에 앞서 생성했던 이미지를 집어넣어서 디테일을 추가하고 화질을 높인다.

한해가 지나고 2017년

StackGAN++이라는 StackGAN의 후속버전을 낸다.

StackGAN++: Realistic Image Synthesis with Stacked Generative Adversarial Networks

 

기존 StackGAN은 2번의 이미지 생성 과정을 거쳤더라면,

StackGAN++는 3번의 이미지 생성 과정을 거친다.

GAN에 넣을 때마다,

화질이 높아지고 64x64 -> 128x128 -> 256x256

디테일이 추가된다.

성능 비교를 해보니, 확실히 좀더 깔끔한 이미지들과

텍스트에 더욱 알맞는 이미지를 뽑아내는 것을 볼 수 있다.

 

2018

2018 Xu et al.,"AttnGAN: Fine-Grained Text to Image Generation with Attentional Generative Adversarial Networks" CVPR’18

한 해가 지나 2018년이 되니

Attention이 유행하기 시작한다. (Attention is All you Need NIPS 2017)

자연스럽게 Attention이 사용된 GAN이 나온다.

Attention은 왜쓰냐?

text condition을 입력으로 같이 줄 것인데,

이미지를 생성하는데에 있어 중요한 역할을 하는 단어에 가중치를 줘서 이미지를 생성하는 것이다.

AttnGAN: Fine-Grained Text to Image Generation with Attentional Generative Adversarial Networks

 

AttnGAN의 도식도를 보니 어디서 본 것 같다.

바로 앞의 StackGAN++와 아주 유사할 것이다.

사실 AttnGAN은 그 당시 SOTA를 찍던 StackGAN++에

Text condition의 attention 정보를 추가한 것 뿐이다.

성능은 어떠할까?

앞선 모델들 (GAN-INT-CLS, StackGAN)과 비교해보니

확실히 같은 Text에 대해서 더 명확하고 뚜렷한 이미지들을 생성 해 내는 것을 볼 수 있다.

 

2018 Park et al.,“MC-GAN Multi-conditional Generative Adversarial Network for Image Synthesis” BMVC’18

MC-GAN: Multi-conditional Generative Adversarial Network for Image Synthesis

 

[19] Reed et al : Learning what and where to draw. In NIPS, 2016. : GAN에 text label을 같이 전달해서 text에 대한 이미지를 생성하는 것은 좋은데, 이미지 내에 사물이 무엇이고(What) 어디에 위치하는지(Where)에 대한 정보를 추가적으로 넣어줘서 보다 정확한 이미지 생성을 시도한 논문

[4] Dong et al : Semantic Image Synthesis via Adversarial Learning in ICCV, 201 7: 실제 이미지에 text condition을 줘서 text에 알맞는 합성된 이미지 생성

네이버CLOVA와 서울대 연구실에서는 이런 연구도 진행했다.

하나의 condition이 아니라 여러개의(multiple) condition을 전달해서

보다 정확한 이미지 생성 및 합성을 하려 한 것이다.

단순히 " 물체가 있다" 라는 설명을 넘어

"~에 물체가 있다" 라는 text label을 전달해준다던지,

image segmentation 정보(이미지의 사물에 따라 영역을 나눈 label 정보)를 전달함으로써

보다 정확한 이미지 생성을 하려는 시도가 있었다.

 

2018 Johnson et al.,“Image Generation from Scene Graphs,” CVPR’18

stackGAN 같은 경우 단일 Object에 대해서는 준수한 이미지를 잘 뽑아낸다.

하지만 여러 Object는 잘 처리하지 못한다.

단순히 Sentnece를 임베딩해서 집어넣는 것만으로는

Object와 Object 사이의 관계를 파악하지 못하는 것이다.

그래서 문장이 담고 있는 정보가 정돈되지 않아 엉뚱해 보이는 이미지를 생성해내기도 한다.

Johnson et al.,“Image Generation from Scene Graphs,” CVPR’18

 

그렇다면 해결방법은 간단하다.

Object와 Object사이의 관계 정보를 입력으로 넣어주면 되는 것이다.

이러한 이미지 내에서의 Object간의 관계 정보를 담은 그래프를

Scene Graph라고 한다.

텍스트의 Object의 위치 정보를 잘 이해하고,

그런 Object간의 위치관계까지 이해할 수 있다면

좋은 이미지를 생성해낼 수 밖에 없지 않은가?

모델의 이미지 생성 과정은 위와 같다.

Graph Sence 데이터를 가지고 Graph Convolution이라는 기법으로

각 Object를 벡터화 시킨다.

그 벡터는 해당 Object가 어디에 있고, 각 Object와 어떤 위치 관계에 있는지에 대한 정보를 담고 있다.

이 벡터를 가지고, Object의 경계 박스(box)를 예측하거나, segmentation mask(Object 에 해당하는 영역의 마스크)

예측하는 것이다.

이 예측 과정을 통해 Scene layout이라는

각 Object의 경계 박스와 sementation mask를 하나로 하나로 합쳐

모든 Object 정보가 잘 녹아들은 3차원 Tensor를 얻는다.

이제 이 Tensor를 가지고

(無)에서 이미지라는 유(有)를 생성해내는 힘을 길러주기 위해 노이즈를 추가한 생태에서

이미지 생성을 과정(cascaded Refinement Network라는 신경망층 통과)을 수행한다.

학습은 dataset로는

Visual genome: Connecting language and vision using crowdsourced dense image annotations. IJCV, 2017.

Scene graph의 label 학습을 위한 Visual genome과

Coco-stuff: Thing and stuff classes in context. arXiv preprint arXiv:1612.03716, 2016.

segmentation mask의 label 학습을 위한 Coco-stuff가 있다.

이 lebel 데이터로 생성한 이미지에 대해 supervised 학습을 진행한다.

 

2019

2019 Qiao et al., “MirrorGAN: Learning text-to-imagegeneration by redescription,” CVPR’19

MirrorGAN: Learning Text-to-image Generation by Redescription

 

2019년

Cycle consistency를 사용한 모델이 좋은 성능을 보였다.

CycleGAN : Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks

 

Cycle consistency를 설명하면 다음과 같다.

한 영역에서 표현된 정보를 다른 영역에서 최대한 정보를 보존 한 채로 구현하고자 한다.

이때, 다른 영역에 구현된 정보를 다시 원래의 영역으로 되돌려서 표현하고자 할 때

애초에 기존 영역에서 표현된 정보와 다른 영역을 한번 거쳤다가 온 정보간의 차이가 없기를 바라는 것이다.

그런데, 정보가 서로 다른 영역을 넘나들게 되면 정보의 손실이 생길 우려가 있다.

하나의 영역을 완벽하게 다른 영역에 mapping 하는 함수를 찾는 것이 힘들기 때문이다.

그래도 영역간 이동을 해도 정보의 손실 없이 기존 정보를 유지할 수 있다는 것.

영역간 이동 Cycle을 한번 돌고도 동일한 정보를 나타내는 일관성consistency를 유지하는 것이

Cycle consistnecy인 것이다.

Cycle consistnecy를 사용한 논문 CycleGAN에서는 아래와 같이 설명하고 있다.

2개의 변수 X, Y에 대해

X -> Y 로 mapping 하는 G, Y -> X로 mapping하는 F가 있다고 하자.

( mapping : 영역 X,Y가 있을 때, X 기준으로 표현된 X에 존재하는 값을 Y 기준으로 나타내는 작업. 즉, X를 Y로 만들기 위해 변환하는 과정이다 )

이미지 생성 분야를 예시로 들자면

X라는 노이즈를 가지고 Y라는 이미지를 생성하는 Generater라고 생각할 수 있고,

Y라는 이미지를 생성해낼 수 있는 X를 찾는 Function이라고 생각하면 된다.

우리는 적대적Adverserial 학습을 통해

G(X)를 통해 생성한 Y'가 Discriminater(DY)를 거쳤을 때,

진짜라고 판단되기(실제 Y와 생성해낸 Y'를 구분할 수가 없음)를 바라는 것이고

F(Y)를 통해 생성한 X'가 Discriminater(DX)를 거쳤을 때,

또한 진짜라고 판단되기(실제 X와 생성해낸 X'를 구분할 수가 없음)를 바라는 것이다.

결국, 하나의 정보가 서로 다른 영역을 넘나들때

그 정보의 손실이 없는 방향을 추구함으로써

서로 다른 영역을 넘나들기 위한 함수를 학습시키는 것이다.

그럼 이제 다음을 생각해 볼 수 있다.

학습을 통해, G(X)로 만들어낸 Y' 이 DY에서 진짜 Y와 구분할 수 없을 정도로 정교해질 텐데,

다시 X로 되돌리기 위해 수행한 F(Y')=X'이

우리가 앞서 사용했던 X와 동일해야 할 것이다.

하지만, 확률상의 오차로 인해 약간의 차이가 생길 수 있다.

그때의 차이값을 cycle-consistnecy loss라고 하는 것이다.

그 반대도 동일하다.

Y에서 X'을 생성해내고, 그 X'를 만들어낸 Y를 다시 찾는 과정에서 얻은 Y'이

실제 사용한 y와의 차이값 또한 cycle-consistnecy loss이다.

 

 

MirrorGAN: Learning Text-to-image Generation by Redescription

이제 MirrorGAN의 구조를 다시 보자.

MirrorGAN이 Cycle consistency를 어떻게 활용하는지 살펴보면,

텍스트로부터 이미지를 생성해낼텐데,

이 이미지를 가지고 생성해낸 텍스트가

우리가 처음 이미지를 생성해낼 때 사용했던 텍스트가 되도록 학습시키는 것이다.

그래서 그 과정을 3가지로 나눠서 수행한다. ( MirrorGAN [code] 를 통해 모델 구조를 자세히 확인 할 수 있다. )

1. STEM : semantic text embedding module

RNN을 이용해 Text를 Word-level embdding, sentence-level embedding(Conditioning Augmentation 적용)

두 가지를 수행한다.

2. GLAM: Global-Local collaborative Attentive Module in Cascaded Image Generators

가장 먼저 노이즈 Z와 sentence-level embedding을 참고하여 신경망을 거치고

점차 Word-level embdding과 sentence-level embedding의 Attention 정보를 추가한 신경망을

거쳐나가면서 신경망을 거친 output에 Text에 대한 정보가 점진적으로 녹아들어가도록 한다.

그렇게 몇 번을 거쳐 나온 output vector를 Generater에 집어넣어 이미지를 생성한다.

3. STREAM: Semantic Text REgeneration and Alignment Module

Generater를 통해 생성된 이미지를 CNN을 통해 압축하여 얻은 Vector를

LSTM의 0번째 hidden state로 설정 한 후에

하나씩 LSTM을 auto-regressive(현재의 출력이 다음의 입력이 되도록 학습, 꼬리에 꼬리를 무는 학습)하게 이어나가면서

우리가 이미지를 생성하기 위해 입력으로 넣었던 Text를 반환하도록 학습한다.

동시에, GAN이기 때문에 Generater와 Discriminator의 적대적 학습 또한 진행된다.

MirrorGAN: Learning Text-to-image Generation by Redescription

 

AttnGAN만 하더라도 매우 좋아보였는데

MirrorGAN을 보니 AttnGAN은 허접처럼 보인다.

역시 성능은 상대적이다..

2019년쯤 오면은 옛날같이 느껴지지는 않지만

이미지 생성 분야의 성장 속도를 고려하면 옛날 일이다.

그리고 2021년.

특이점이 발생했다.

”Running at the edge of space, toward a planet, calm, reaching the abyss, digital art“ by OpenAI

DALL·E이다.