sketch된 영상을 실제 사진과 같은 이미지로 변환해주는 과정을 생각해보자
어떻게 보면 언어가 다를 때 번역하는 것과 같아서 서로 다른 두 도메인을 translation한다는 task이다.
이 때 하나의 정보가 주어졌기 때문에, 이것을 condition되었다 또는 조건이 주어졌다고 한다.
이 조건에 해당하는 결과가 나오는 형태를 conditional generative model이라 한다.
Generative Model vs Conditional generative model
MAE : GT가 주어졌을때 생성된 영상과의 오차 절대값의 평균,
MSE : GT가 주어졌을때 생성된 영상과의 오차의 제곱합의 평균,
이렇게 regression model을 사용하면 해상도는 높아지는 것 같지만, 굉장히 blurry한 이미지를 얻게 된다.
픽셀 자체의 intensity 차이를 이용하기 때문에 평균 error를 구하다 보니 출력 결과와 비슷한 error를 가지는 많은 patch들이 존재하게 된다. 그래서 구분성이 떨어지게 된다.
하지만, GAN을 이용하면 판별자가 그동안 보았던 real data와 구분을 못하게 하는 것만이 목적이므로 real data와 가장 비슷한 이미지쪽으로 생성하면 되기 때문에 blurry한 이미지가 생성될 확률이 상대적으로 적어지게 된다.
GAN Loss는 입력된 x와 y를 직접 비교하지 않고 독립적으로 real과 fake만을 판별하기 때문에 입력이 뭐가 들어와도 GT인 y와 비교하지 않으므로 Gan loss만 사용해서는 y와 비슷한 이미지를 생성할 수 없다.
따라서, MAE loss가 blurry한 이미지를 만들 수 있지만, 적당한 가이드로는 쓸 수 있다고 판단하여 사용하고, 여기에 GAN Loss를 더해서 조금 더 현실적인 이미지를 만들 수 있게 하였다.
또한, GAN만으로 학습하는 것이 굉장히 불안전하고 어려웠었는데 blurry한 L1 Loss를 추가함으로 가이드라인을 제시하여 조금 더 안정적인 학습이 이루어질 수 있게 하였다.
여기서 이전의 GAN loss와의 차이점은 Generative 모델에 z만 들어가는 것이 아닌 x도 함께 들어간다.
CycleGAN Loss
CycleGan Loss는 기존의 Gan loss와 같이 G,D가 존재하지만, Cycle-consistency loss가 추가되었다.
,
GAN loss에 방향성이 존재하는데, X에서 Y로 가는 방향과 Y에서 X로 가는 방향 동시에 학습을 진행한다.
하지만 GAN loss만 사용하게 되면 Mode Collapse 문제가 발생한다.
💡 Mode CollapseDiscriminator가 특정한 output하나만 출력했을 때 굉장히 낮은loss를 갖게 되는 형태가 생긴다.
그렇게 되면 Generator는 자신이 잘 생성하고 있다고 판단하고 아무런 학습이 되지 않는다. Generator와 Discriminator 반대의 경우도 마찬가지!
따라서, input에 상관없이 하나의 output만 계속 출력되는 문제가 발생한다!
이처럼 Cycle Gan은 X라는 style의 dataset와 Y라는 style의 dataset만이 주어졌을 때 이 두 dataset의 translation 관계를 학습할 수 있는 획기적인 방법이다.
일반적으로 Conditional Gan을 사용하는 이유는 regression을 사용한 결과보다 훨씬 더 선명하고 퀄리티가 좋기에 사용한다.
하지만, GAN은 generator와 discriminator를 반복하여 학습해야 하기 때문에 학습하기 어렵다는 문제가 있다.
이렇게 high quality output을 출력하는 다른 학습 방법은 없을까?? 해서 나온 것이 Perceptual loss이다.
Gan loss
Perceptual loss
perceptual loss 학습 방법
Image transform network
Loss Network
이제 Loss를 측정하는 부분을 조금 더 자세히 보자
위에서 input X로 부터 y_hat을 생성해냈는데 이 생성된 y_hat이 우리 의도대로 transform 되기 위해 VGG를 사용하여 feature를 뽑게 되고 loss를 측정하여 transform을 하려는 function(x)를 학습하게 된다.
Feature reconstruction loss
Style reconstruction loss
feature map의 공간적인 특징들을 통계적으로 담기 위해 디자인 한 것
영상의 공간에 따른 각각의 스타일이 다른지를 보고 싶은 것이 아닌 영상의 전체적인 스타일을 보고 싶은 것이기 때문에 각 feature map의 공간적인 특징을 제거한다.
이는 Pooling을 통해 제거할 수 있다.
1. 각 feature map을 C x H x W로 reshape한다.
2. 이들을 각각 자신의 전치행렬을 곱해주게 되면 C x C 행렬이 나타난다.
- 각 채널은 사람의 눈, 코, 입과 같은 서로 다른 특징들을 담고 있다.
- 이 채널들을 C x C로 나타냄으로써 각각의 특징 별 상관관계를 확인할 수 있다.
3. 이렇게 생성된 두 C x C 행렬을 비교하여 loss를 측정한다.
- transform을 적용한 이미지 특징의 C x C를 우리가 원하는 style 특징의 C x C와 닮게 학습함으로써 원하는 style과 비슷하게 출력하는 것이 가능해졌다.
이 외에도 style reconstruction loss를 사용하지 않고 feature reconstruction loss만을 사용해서 L2 loss대신 사용하기도 한다.
존재하지 않는 사람의 얼굴을 high quality로 생성해 낼 수 있을 뿐만 아니라, 비디오에 적용하여 애니메이션에 맞게 목소리까지 낼 수 있는 강력한 기술이다.
그래서 이런 안 좋은 영향들을 방지하기 위해 윤리적인 부분을 고려하여 어떻게 하면 디펜스 매커니즘을 만들 수 있을지에 대한 연구가 계속되고 있다.
이를 통해 GAN은 오남용이 충분히 될 수 있음으로 항상 주의해서 사용해야 한다는 교훈을 얻을 수 있었다.
Face de-identification
사람의 프라이버시를 보호해주는 것과 같은 선한 영향력을 줄 수도 있다.
사람의 얼굴을 약간씩 변형하여 실제로 이 사람이 누군지 인식하지 못하게 할 수 있다.
face anonymization with passcode