CastleJo의 개발일지

Computer Vision - Conditional Generative Model

|

Conditional generative model

서로 다른 두 도메인을 translation하는 개념

기존의 Generative Model은 단지 random한 image를 생성하는 것에 반해 Conditional Generative model은 사용자가 지정한 이미지를 만들 수 있게 하는 방법이다.

이를 통해 stlye transfer, super resolution 등의 응용사례들이 있다.

Super resolution

이미지의 해상도를 확장시키는 방법인데, 보통의 MSE와 MAE는 오차를 줄이기 위하여 중간값을, 즉 blur가 심한 이미지를 생성해낸다. 이런 문제점을 벗어나기 위하여 GANLoss를 구현하여 현재 이미지와 가까운 이미지를 따라하는 방식으로 이미지를 구현하게 만든다.

Image translation GANs

Pix2Pix

GAN loss에 L1 loss(MAE Loss)를 접합하여 $G^{*}=\arg \min {G} \max _{D} \underline{\mathcal{L}}{c G A N}(G, D)+\lambda \underline{\mathcal{L}}_{L 1}(G)$ 와 같은 Loss를 만든다.

하지만 둘을 같이 비교하지 않고, GAN Loss를 주로 쓰면 실제 y에 많이 수렴하지 못하는 문제점이 있어서 L1 Loss를 통해 y에 수렴하도록 도와주게 만들었다.

CycleGan

지금까지의 GAN은 “pairwise data”가 필요했다, 즉 input과 output이 pair인 데이터가 필요했다.
이 문제를 해결하기 위한 Cycle GAN이 연구됐는데, 이는 non-pairwise domain을 가지고 이미지의 스타일을 바꿀 수 있는 방법이다.

CycleGAN의 Loss는 $L_{G A N}(X \rightarrow Y)+L_{G A N}(Y \rightarrow X)+L_{\text {cycle }}(G, F)$ 로 구성되어있다.

이때 GAN Loss는 x와 y, y와 x를 볼 때 둘의 스타일이 같은지 판별을 한다.
하지만 GAN Loss만 쓴다면 어떤 Input이 들어가던 동일한 Output을 뽑는 결과가 초래된다.

따라서 이 문제를 해결하기 위해 Cycle-consistency loss가 고안됐는데, x->y->x로 갔을 때 한쪽이라도 컨텐츠가 다르다면 loss를 발생하게 하는 방식이다.

Perceptual Loss

GAN은 훈련시키기가 힘들다. 그렇다면, GAN 없이 high-quality image를 만들 좋은 방법이 없는가 고민하게 됐다.

그래서 Perceptual loss가 고안됐는데, 간단하고 기존의 CNN 모델과 비슷한 구조를 갖는다. 하지만 Pre-trained된 모델이 필요하다는 주의점이 있다.

Perceptual Loss는 사람의 눈의 구조를 잘 학습해 사람의 눈이 민감하게 반응하는 부분과 민감하지 않은 부분을 구분하는 특징이 있다.

feature reconstruction loss

input x로부터 생성해낸 y^와 input x를 pre-trained 된 모델에 계산시켜 추출해 낸 두개의 feature의 L2 loss를 계산하는 loss이다.

style reconstruction loss

그 다음 input x와 style target, 예를들면 얼룩말 스타일과 같은 이미지를 모델에 넣고, pre-trained된 모델에 집어넣고 나온 feature에 Gram matrices 기법을 거쳐 loss를 계산한다. 간단하게 말하자면 feature map에서의 통계적인 특징을 계산하는 방법이다.