Computer Vision

[GAN 시리즈] CGAN(Conditional Generative Adversarial Nets) 간단 정리

Suhd 2023. 1. 22. 22:39

GAN이 나온 2014년 이후 이미지 생성 모델 분야는

한 동안 GAN의 변형 모델들이 주름잡았다.

GAN의 아쉬운 점이라 한다면

다양한 이미지를 생성함에 있어서는 성공을 거두었지만

의도된 이미지를 생성하지는 못하였다는 점이라 할 수 있다.

입력 데이터 자체에 conditional한 부분이 존재하지 않았기 때문이다.

( 특정 경향성을 지니는 이미지를 모델이 내뱉게 시키기 위해서는, 입력에 그 경향성에 대한 정보를 추가적으로 전달해 주면 된다. )

의도된 이미지 생성 영역에 발을 내민 시도는

2014년 11월 Mehdi Mirza 등이 발표한

Conditional Generative Adversarial Nets 에서 확인할 수 있다.

 

cGAN

cGAN이라고 불리는 이 모델의 아이디어는 매우 간단하다.

모델을 conditional(이전 사건에 의존)하게 만들기 위해

GAN의 input에 label 정보를 함께 담아 MLP에 넘기는 것이다.

도식화 하면 아래와 같다.

https://github.com/hwalsuklee/tensorflow-generative-model-collections

 

Generator의 입력인 Latent Vector z에

우리가 원하는 출력에 해당하는 label 정보를 이어붙인다음

( label 이미지 자체, class label, label의 특성이 담긴 벡터(modality) 라던지, 아무튼 label로 부터 얻어낸 정보면 Okay다. )

Generator에 집어넣고,

실제 이미지 x에 대해서도

앞서 사용한 label 정보를 이어붙인다음

Discriminator에 집어넣는다.

논문에서는 아래와 같이 도식화 해 놓았다.

그럼 목적함수도 그에 따라

기존 GAN에 conditional한 부분 y( label로부터 얻어낸 정보 )만 추가된다.

cGAN 목적함수

 

 

 

| 성능 확인

각 행은 하나의 라벨에 대해 conditional하게 만든 모델의 output이고

각 열은 다른 생성 샘플들이다.

위에서 부터 0,1,2, ... 9까지 라벨을 input과 함께 넣어가면서

출력을 확인해보니

입력으로 함께 넣은 label에 해당하는 output들이 나옴으로 인해

의도된 이미지 생성이 가능함을 볼 수 있다.

추가적으로 왼쪽 2개의 열은

이미지와 그 이미지에 대해 사람이 직접 넣은 tag이고

맨 오른쪽은 해당 이미지를 출력 했을 때 모델이 생성한 tag인데

사람이 손수 넣은 tag와 비교했을 때, 꽤나 비슷한 성격을 지니는 tag들을 선택했음을 확인 할 수 있다.