그럼 이제 CycleGAN을 자세히 살펴보겠습니다.
CycleGAN은 하나가 아닌 두 개(G, F)의 생성자를 갖습니다.
생성자 G는 이미지 X를 이미지 Y로 변환하며, 생성자 F는 이미지 Y를 다시 이미지 X로 변환합니다. 이때 DX와 DY는 각각 이미지 X와 Y를 위한 판별자입니다. 따라서 생성자 G는 DY에 대한 적대적 학습을 하며, 생성자 F는 DX에 대한 적대적 학습을 합니다.
▲ 그림 13-44 CycleGAN의 생성자 두 개
그림 13-45와 같이 생성자 G는 조랑말 이미지 X를 얼룩말 이미지 Y'로 바꾸어 주며, 생성자 F는 얼룩말 이미지 Y'를 조랑말 이미지 X'로 바꾸어 줍니다. 이때 G(X)는 조랑말 이미지 X가 생성자 G를 통해 변환된 이미지가 되며, 함수 적용 결과는 얼룩말 Y'가 됩니다. X가 얼마나 X'와 가까운지는 L1 손실 함수를 사용해서 계산합니다. 또한, F(Y')는 얼룩말 이미지 Y'를 생성자 F를 통해 조랑말 X'로 변환합니다. 즉, CycleGAN에서는 G(X)=Y'에 대한 생성자, Y' 값을 다시 X'로 복원하는 F(Y')=X'에 대한 생성자와 이 값을 판별하는 판별자(DY, DX)가 추가되어 총 네 개의 네트워크를 사용합니다. 이때 X→Y', Y'→X'로 연결되는 것을 순환 일관성이라고 합니다. 다음 그림은 X→Y', Y'→X'로 연결되는 동작 과정을 보여 줍니다. X→Y'를 정방향 일관성(forward consistency)이라고 하며, Y'→X'를 역방향 일관성(backward consistency)이라고 합니다.
▲ 그림 13-45 CycleGAN의 순환 일관성