CycleGAN의 구조는 매우 복잡하다. 이를 위해 판별자 두 개와 생성자 두 개가 필요하다.
이미지 대 이미지 변환. 이런 종류의 변환을 구현하려면 생성자의 입력이 사진이어야 한다. 생성자(변환기)가 이미지에서부터 시작하기 때문이다. 다른 말로 하면 한 도메인의 이미지를 다른 도메인의 이미지로 매핑한다. 이전에 생성자에게 주입한 잠재 벡터는 해석이 불가능했다. 이제 이 벡터를 입력 이미지로 대체한다.
이러한 아이디어는 강력하고 용도가 다양하지만 데이터 쌍이 필요하다는 것이 문제이다. CycleGAN의 뛰어난 점은 완벽한 쌍이 필요하지 않다는 것이다. 대신 사이클을 구성한다. 한 도메인에서 다른 도메인으로 변환하고 다시 반대로 변환한다.
예를 들어 공원의 여름 사진(도메인 A)에서 겨울 사진(도메인 B)으로 변환하고 다시 여름 사진(도메인 A)로 변환한다. 사이클을 구성했기 때문에 이상적으로는 원래 사진(a)와 재구성된 사진(a*)는 동일할 것이다. 두 사진이 동일하지 않다면 픽셀 수준에서 이 손실을 측정하여 그림 9-2에 나와있는 CycleGAN의 첫 번째 손실인 사이클-일관성 손실(cycle-consistency loss)를 구한다.
<사이클-일관성 손실>
사이클-일관성 손실을 사용하려면 두 개의 생성자가 필요하다. A에서 B로 변환하는 G(AB)를 간단히 G라고 하자. B에서 A로 변환하는 G(BA)는 F로 부르자. 기술적으로는 정방향 사이클-일관성 손실과 역방향 사이클-일관성 손실 두 개의 손실이 있다. 하지만 이 둘은
을 의미하기 때문에 출발이 다를 뿐 기본적으로 같은 것으로 생각할 수 있다.
<적대 손실>
사이클-일관성 손실 외에 적대 손실(adversarial loss)이 있다.
<동일성 손실>
동일성 손실(identy loss)의 아이디어는 간단하다. CycleGAN이 사진의 전반적인 색 구성(또는 온도)을 유지하길 원한다. 이를 위해 사진의 색조가 원본 이미지와 일치하도록 규제 항을 도입한다.
<구조>
CycleGAN은 CGAN 구조에서 바로 만들 수 있다. 기본적으로 두 CGAN이 연결된 것이다. 또는 CycleGAN 저자가 지적했듯이 오토인코더로 생각할 수 있다.
이미지는 두 경로를 따라 이동한다. (1) 판별자에게 주입되어 진짜인지 아닌지 판단을 받는다. (2) 생성자에게 주입되어 B로 변환되고, 판별자 B가 도메인 B에 있는 진짜 이미지처럼 보이는지 평가하고, 다시 A로 변환되어 사이클 손실을 만든다.
<생성자 구조>
다음 그림은 생성자의 구조를 보여준다. 이 신경망을 U-Net 구조라 부른다. 동일한 수준의 해상도를 이어보면 U모양이 되기 때문이다.
다운스케일링한 다음 연이어 업스케일링하기 때문에 조금 이상하게 느낄 수 있다. 이미지를 가장 의미 있는 표현으로 압축하지만 동시에 세부 사항을 모두 되돌릴 수 있어야 한다. 이는 뉘앙스를 기억하는 스킵 연결이 있다는 것을 제외하면 오토인코더와 이유가 같다. 이 U-Net 구조는 여러 도메인의 다양한 분할(segmentation) 작업에서 성능이 좋다고 알려져 있다. 핵심 아이디어는 다운샘플링하는 동안 분류와 넓은 영역을 이해하는 데 초점을 맞추면서 고해상도의 스킵 연결을 제공하여 정확한 분할에 도움이 되는 세부 사항을 유지하는 것이다.
<판별자 구조>
판별자는 PatchGAN 구조를 기반으로 한다. 이 판별자는 출력이 실수 하나가 아니다. 대신 채널이 하나인 일련의 값이다. 이를 나중에 평균할 작은 판별자 집합으로 생각할 수 있다. 이런 방식 덕택에 CycleGAN을 합성곱으로만 설계할 수 있다. 비교적 고해상도로 쉽게 확장할 수 있다는 뜻이다.
'GAN > 이론' 카테고리의 다른 글
===================================================== (0) | 2021.10.31 |
---|---|
14. CycleGAN- 구현 (0) | 2021.07.02 |
12. CGAN - 구현 (0) | 2021.06.30 |
11. CGAN - 이론 (0) | 2021.06.30 |
10. SGAN - 구현 (0) | 2021.06.28 |