My CycleGAN
https://github.com/KiHwanLee123/Coursera---GAN/blob/main/C3W3_CycleGAN.ipynb
이제는 두 이미지 간을 매핑시켜 차이점을 찾고, 적용시키는 방안을 진행합니다.
예를 들어 paired generation은 아래와 같이 edge를 따서 생성할 수 있습니다.

그에 반해 unpaired generation은 말을 얼룩말로 바꾸거나, 아래의 모네 그림을 실제로 바꾸는(반대 또한 마찬가지) 등 수 천개의 쌍이 없기에 훈련하기 어렵습니다.

둘을 비교하자면 똑같은 쌍이 있는 데이터셋과 하나는 realistic, 하나는 모네의 그림과 같은 데이터셋을 생각하면 됩니다.

이러한 방식은 하나의 이미지를 통해 다양한 그림들을 생성해 낼 수 있습니다.

아래의 경우는 얼룩말을 그냥 말로 변경시키고 싶은 것입니다. 얼룩말 사진의 경우는 얼룩말들의 집합을 이용한 것이며, 변형된 말은 말들의 집합을 이용한 것 일 것입니다.
Content를 통해 공통된 부분을 찾고, Style을 통해 각자의 특징을 찾는 것입니다.

즉, unpaired image to image translation은 매칭되는 이미지 대신 다른 스타일의 이미지 더미를 사용합니다. 모델은 이 두 더미 사이의 매핑을 학습하며, 두 더미 사이의 내용은 유지하되, 스타일은 변경합니다.
그렇다면 이제 CycleGAN을 알아보겠습니다.
얼룩말에서 줄무늬를 없앤 말은 어떻게 generate할 수 있을까요?
우선 Real 얼룩말 이미지를 줄무늬를 없애는 작업을 진행하여 fake로 만들고, 이 fake를 다시 얼룩말로 생성하여 새로운 fake를 만들어 냅니다. 여기서 중요한 점은 content는 유지해야 하기에, 두 얼룩말 사진의 content는 동일해야 한다는 점입니다.

그렇기에 두 개의 GAN이 필요하며, 이렇게 두 더미 사이의 순환하듯 구성되기에 CycleGAN이라 불립니다.


판별자는 PatchGAN을, 생성자는 U-net+DCGAN을 사용합니다.
그렇다면 이 두 개의 GAN이 어떻게 상호작용하는 지 알아보겠습니다.
우선 두 개의 GAN이 있기에 총 4개의 모델이 있는 것과 같습니다.
GAN Z -> H
Real 얼룩말에서 fake 말로 생성
이 fake말과 실제 말 이미지를 사용하여 판별자H 학습(PatchGAN을 통해 classification matrix로 학습)
그 다음 fake말을 얼룩말로 생성하여 fake얼룩말을 생성
이 fake얼룩말과 실제 얼룩말을 통해 판별자Z 학습
실제 얼룩말 이미지와, fake말로 생성 후 이를 fake얼룩말로 생성한 이미지의 pixel difference를 통해 loss를 구합니다. 이를 진행하는 이유는 오직 Style만 변형시키고 싶고, content는 그대로 유지하고 싶기 때문입니다. 반대로도 실제 말 이미지도 마찬가지입니다.

두 genenrator에 대해서는 single optimizer를 사용합니다!
이러한 경우는 꽤 자주 사용되는데, text를 번역 후 돌리거나, 데이터 증강에서 약간의 변형만 줄 때 사용됩니다.
즉. 이 두 Adversarial loss와 Cycle Consistency loss를 통해 기존 GAN의 mode collapse를 없애고, 실제와 같은 이미지를 얻게 해줍니다.
BCE loss와 달리 이를 사용하면, 기울기 소실 문제를 방지할 뿐 아니라 스무스하게 진행이 가능합니다.

정리하자면 아래와 같습니다.

주로 출력의 색상 보존을 위해 사용됩니다. 예를 들어 아래와 같이 real 말을 생성자ZtoH(얼룩말에서 말)에 넣어서 input image와 같은 것을 생성하게 합니다. 이를 pixel distance로 값을 구합니다. 즉, 색상이 다르면 loss값이 커집니다.

아래와 같이 추가적인 loss term을 추가해주게 됩니다.


이 CycleGAN은 데이터 증강에서도 사용됩니다. 아래와 같이 암 세포를 제거하거나 만듭니다.

이 CycleGAN이외에도 unpaired image to image translation을 수행하는 모델이 있습니다.
이름은 UNIT으로 latent space를 공유함으로 잠재 공간에 noise vector z가 주어집니다.
이렇게 두 도메인을 이동하며 생성하게 됩니다.

다음으로 Multimodal UNIT인 MUNIT이 존재합니다. multi modal은 한 도메인에서 다양하 도메인으로 이동함을 의미하며, 아래와 같이 하나의 스케치를 통해 여러 이미지들을 생성함을 말합니다. VAE+GAN으로 비지도 방식으로 진행되기에 라벨 또한 필요 없습니다.
