Cycle GAN의 가장 큰 특징은 unpaired data set으로도 학습이 가능한 image - to - image translation 메서드를 제안한다는 것입니다.
위 사진과 같이 Cycle GAN은 다음과 같은 작업이 가능합니다.
- 모네가 그린 듯한 그림을 실제 사진으로 바꾸거나 실제 자연을 다시 모네의 화풍으로 변경
- 얼룩말을 말로 바꾸거나 말을 얼룩말로 바꾸는 작업이 가능
- 겨울 사진을 여름 사진으로 또는 여름 사진을 겨울 사진으로
이러한 Task를 CycleGAN으로 해결할 수 있습니다. 그리고 각 Task 마다 별도의 Loss 함수나 특별한 아키텍처 없이 좋은 성능을 보입니다.
Motivation
- 이전에 제안된 pix2pix의 경우 사람을 속일 수 있을 정도로 정교한 가짜 이미지를 만들 수 있었지만 조건이 너무 까다로웠습니다.
- pix2pix는 paired data가 필요한데 같은 구도 같은 shape의 데이터를 찾는 것이 어려움!
다음과 같이 한 쌍으로 묶이지 않는 unpaired data를 사용해 진행한다면 입력 데이터의 content 정보가 소실되는 문제가 생기게 됩니다.
- 이러한 unpaired data도 활용할 수 있는 방법을 찾아낸 것이 CycleGAN
CycleGAN
Unpaired data가 활용될 수 없는 이유
- 특정한 이미지 x가 주어졌을 때 데이터 쌍이 존재하지 않는다면 이것을 어떤 정보로 변환을 해야할지 알지 못합니다.
- 이러한 문제로 mode-collapse 문제를 야기합니다. (어떤 입력이든 모두 같은 출력 이미지로 매핑하면서 최적화에 실패한 경우)
- 일반적인 GAN Loss로는 실제 이미지의 content를 보존하는 방향으로 업데이트가 되지 않습니다.
이러한 문제점을 해결하기 위해서 CycleGAN에서 제안된 핵심 내용은 다음과 같습니다.
- 입력 데이터 x를 G(x)로 변환을 한 뒤 F(G(x))로 reconstruct 될 수 있게 합니다.
함수 G와 F는 역함수 관계입니다.
그래서 $G(F(y))$는 y 다시 $F(G(x))$는 x가 될 수 있도록 학습을 진행하는데 이모습이 마치 사이클을 도는 것 같다라고 해서 cycle - consistency loss라고 합니다.
Loss function
1. Adversarial Loss
G는 위의 함수를 최소화시킬려고 하고, D는 위 함수를 최대화 시키고자 합니다.
- 현실적인 이미지를 만들도록 학습
이 함수만으로는 mode collapse 문제가 생길 수 있기 때문에 가능한 매핑 함수의 공간을 줄이기 위해, 아래 그림과 같이 새로운 Loss를 만들어 줍니다.
2. Cycle Consistency Loss
입력이나 출력을 복원했을 때 실제값과 복원값의 차이를 계산
그 식을 유도했을 때 위 식과 같습니다.
복원된 이미지가 실제 이미지와 같으면 Loss가 0이 되도록 구성되었습니다.
결과
AMT: 사람이 가짜 이미지를 진짜라고 인식할 확률
- 기존 baseline 메소드는 거의 사람을 속이지 못함
- 나머지 자동화된 테스트 지표에서도 Cycle GAN 지표가 좋은 성능을 보여줍니다.
pix2pix는 이미 정답 이미지를 알고 있는 상황에서 학습이 되었기에 좋은 성능을 보여주는데 CycleGAN은 unpaired data set을 사용한다는 불리한 조건에도 비슷한 성능을 보여줌
style transfer 메서드와 비교했을 때에도 자연스럽게 보이며 content를 유지하며 style을 적용한 이미지를 생성하는 것이 가능했습니다.
CycleGAN은 기본적으로 색상 정보는 유지하지 않고 작동하기 때문에 만약 색상을 유지해야할 경우 CycleGAN의 Loss 함수에 추가적으로 identity loss 더해 사용해야합니다.
- 그림을 사진으로 변경할 때처럼 색상 정보가 유지되어야 하는 task에서 효과적으로 사용할 수 있습니다.
활용
스마트 폰으로 찍은 사진을 DSLR으로 찍은 사진으로 훈련을 시키면 DSLR로 찍은 사진과 유사하게 아웃포커싱(바탕이 흐려짐)이 적용된 사진을 얻을 수 있습니다.
- 일반 사진을 전문가가 찍은 사진처럼 바꿀 수 있다.
한계점
위에서 unpaired data set을 사용하기 위해서 입력 이미지의 content 정보를 최대한 보존시키는 방향으로 학습이 진행되기 때문에 원래 형태에서 크게 변하지 않습니다.
위 사진과 같이 CycleGAN이 잘 동작하지 않는 경우는
- content 정보를 저장하고 움직이기에 입력 데이터의 shape에서 크게 달라지지 못합니다. = style 만 변경가능
- 말 위에 사람이 존재할 때 얼룩말로 변경할 시 사람도 얼룩이 생김 = 원하지 않는 부분에도 style이 변경이 됩니다.
- 강아지를 고양이로 고양이를 강아지로 바꿀 때 하위 레벨 style만 변경이 되어 제대로된 결과를 얻을 수 없습니다.
- 위에서 content 정보까지 변경하는 문제에 대해서 좋지 못한 성능을 보인다고 했지만 어떤 data set을 사용하냐에 따라 결과가 많이 바뀌는 경우가 있기 때문에 아직까지는 많은 논의가 필요하다고 합니다.
'Pseudo Lab > 3기 반 고흐 전시전' 카테고리의 다른 글
반 고흐 전시전 마무리 (0) | 2021.12.26 |
---|---|
대회 참가 (0) | 2021.11.08 |
[5주차] NIPS 2016 Tutorial: Generative Adversarial Networks: Ian Goodfellow part 2 (0) | 2021.09.12 |
[4주차] NIPS 2016 Tutorial: Generative Adversarial Networks: Ian Goodfellow (0) | 2021.09.10 |
[3주차] TensorFlow Tutorial(Neural Style Transfer) (0) | 2021.08.29 |