Deep Learning/GAN

[GAN] DCGAN - 논문 리뷰, Paper Review, 설명 (2)

미미수 2021. 7. 6. 13:56

오늘은 1편에 이어 2016년에 발표된 DCGAN -Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks에 대한 리뷰입니다. 논문에 흥미로운 Figure들이 많아  읽은 논문입니다.

 

DCGAN에 앞서 GAN에 대한 내용을 참고하고 싶으시면 제가 정리한→ GAN 리뷰 ←를 보고 와주세요.

 


 

DCGAN의 실험 결과를 살펴보기 전에, 결과 검증시 중요한 두가지 기준에 대해 먼저 소개하겠습니다.

 

1.  Model is not producing high quality samples via simply overfitting/memorizing training examples

       ☞ 한마디로 Generator가 학습이미지를 단순히 외우거나 베낀게 아니어야 함

2.  "Walking in the latent Space"

       ☞ G의 input z의 공간인 latent Space에서 $z_1$에서 $z_2$로 살짝 이동한다 하더라도 급작스러운 변화가 일어나지 않고 물흐르듯 부드러운 변화를 보여줘야 한다.

갑작스러운 변화가 일어났다는 건 sample data랑 1:1 matching됐다고 보여지기 때문인듯

 

 


 

결과분석

 

Test Data는 총 3가지 LSUN(침실사진), FACES(인간 얼굴), IMAGENET - 1K 를 사용했습니다.

실험 결과들을 각각 Test data별로 나눠 살펴보겠습니다.

 

 

NOT MIMICKING TRAIN DATA

아래 사진은 1epoch만 학습시켰을때(위), 그리고 5epoch를 학습시켰을때(아래)의 결과물입니다.

 

1epoch를 돌렸을때의 이미지를 보면, 자세히 봤을땐 요상(??)하지만 언뜻 보면 굉장히 그럴싸한 느낌을 준다는 걸 알 수 있습니다.

1 epoch

GAN의 결과평가에 중요한 기준이 되는 mimicking의 여부를 생각해봤을때,

DCGAN은 minibatch SGD(128)을 사용했고 ,첫 epoch이기 때문에 단순히 이미지를 overfit/memorize했을리는 없다는 것을 알 수 있습니다.

 

5 epoch

5 epoch를 돌린 결과물은 진짜 그럴싸합니다. 모르고 보면 이게 진짜 있는 방이 아니라 만들어진 이미지라는거에 놀랄거 같습니다. (Discriminator도 속고 나도 속고...)

논문에서는 자세히 보면 침대 위쪽같이 부분부분에서 noise가 발생해서 overfitting은 커녕 under-fitting이 됐다고 합니다.

 

 

WALKING IN THE LATENT SPACE

이번에는 Walking the latent Space에 대한 검증입니다. 마찬가지로 학습 데이터의 memorization이 있는지 없는지 확인합니다.

각 줄은 z(latent vector)의 값을 조금씩 바꿔가면 부드럽게 결과가 변경되는것을 확인시켜줍니다.

특히 마지막 줄에서는 맨 왼쪽에 있던 TV가 오른쪽으로 가면서 창문으로 바뀌는것을 볼 수 있습니다.

 

 

VISUALIZING THE DISCRIMINATOR FEATURES

 

CNN의 Black Box는 중간중간 어떤 feature map이 어떤 작용을 해서 이런 결과가 나오는지 그 인과관계를 명확하게 설명할 수 없다는 문제점이 있었습니다. DCGAN에서는 Discriminator에 학습을 시킨 결과, 필터에서 침대나 창문같이 침실의 특정 부분에서 활성화 되는 필터들을 발견했습니다.

 

 

FORGETTING TO DRAW CERTAIN OBJECTS

 

여기서는 학습이 잘 되어있는 filter를 dropout 시켜서 이미지에서 해당 filter가 맡고 잇던 부분을 제거하는 것을 보여줍니다.

논문에서 진행한 실험은,

 

1. 우선 150개의 sample image에서 52개의 window를 찾아내 bounding box 처리를 한다.

2. 고차원 feature( high-level feature)중 window를 activate하는 feature를 고른다.

3. 고르는 방법은 window bounding boxes안에서는 positive한 결과를 보이고, 다른 랜덤 이미지에서는 negative한 반응을 보이는 필터를 찾는다.

 

이렇게 해서 원본이 윗줄, window 필터를 dropout 한게 아래줄입니다. 진짜로 window가 사라진 것을 볼 수 있습니다.!

 

VECTOR ARITHMETIC ON FACE SAMPLES

마지막 실험결과는 Vector Arithmetic이 DCGAN에서도 사용될 수 있음을 보여줍니다.

우선, word2vec을 모르시는 분들을 위해 간단히 vector arithmetic이 무엇인지 살펴보겠습니다.

 

vector("King")은 King이 지니고 있는 속성들을 vector화한 것입니다. 

[남자 여자 어른 아이 ...]와 같은 column들이 있을때,

[1      0      1       0    ...]이 vector("King")입니다.

 

 

$$Vector("King") - Vector("Man") + Vector("Woman")$$

$$ = Vector("Queen")$$

 

Vector에 산수연산을 가하면, 위의 식이 성립합니다(의미적으로)

이런 벡터연산을 이미지에도 적용할 수 있다는게 DCGAN을 통해 밝혀졌습니다.

 

각 카테고리마다 세개의 z를 평균내 Z vector를 생성합니다.

그리고 평균값으로 구한 각 Z vector들을 연산해주면 결과가 나옵니다.

 

 

 

회전의 의미를 컴퓨터가 이해하도록 실험도 해봤습니다.

회전

 

왼쪽을 보고 있는 얼굴 $z_{left}$들의 평균 vector $\widetilde{z}_{left}$와 오른쪽을 보고 있는 얼굴들 $z_{right}$들의 평균 vector $\widetilde{z}_{right}$를 계산합니다. 그리고 두 벡터를 잇는 축을 interpolate해서 G에 대입한 결과 회전하는 얼굴이 쭈르륵 나왔습니다.

 

 

Conclusion

 

DCGAN은 GAN을 한층 더 발전시킨 놀라운 논문임은 틀림없습니다. 학습을 오래하면 불안정해지고 collapse할 수도 있다는 문제점이 있기는 하지만, 그래도 black box 문제를 최대한 설명하려 하고 중간과정을 볼 수 있다는 점이 흥미로웠습니다. 

 

DCGAN 코드 구현과 실제로 결과를 직접 testing 해본거도 포스팅으로 언젠가 써볼 계획입니다.

 

다음 게시물은 LSGAN으로 찾아오겠습니다!!