[Paper Review] Image-to-Image Translation with Conditional Adversarial Networks (Pix2Pix)
카테고리: Paper
태그: Generative ML
Main Reference:
- Pix2Pix Paper
🚀 Introduction
많은 이미지 처리, 그래픽, 비전 작업들은 image-to-image translation 문제로 해석할 수 있다. 이러한 다양한 작업들은 pixel to pixel이라는 공통점이 있음에도 불구하고 특정 작업에 따라 별개로 분류되어 다루어졌다. 다시 말해 이들은 ‘CNN 구조’라는 공통된 방향성이 있었지만 무엇을 minimize해야하냐는 것에 대한 의문이 남아있었다. 일반적인 Euclidean distance를 이용한 loss는 blurry한 결과를 낳기 때문에 원하는 task에 맞는 적절한 loss function을 정의해야 한다. 문제는 이 작업이 꽤나 전문적인 지식을 요구한다는 것이다.
우리는 이러한 문제의식을 바탕으로 CGAN 구조를 통해 image-to-image 문제를 해결했다. GAN의 경우 task에 관계 없이 loss를 정의하기 매우 쉽다는 장점이 있고, Conditional 조건을 걸어주면 image-to-image task를 학습할 수 있기 때문이다.
🚀 Method
기존의 CGAN 모델은 이미지 x와 nosize vector z로부터 이미지를 합성한다. 만약 noise z가 없다면 이미지 데이터의 분포를 학습하지 못하고, x에서 y로 deterministic한 output이 생성될 것이다. 하지만 실험 결과 generator가 noise를 무시하도록 빠르게 학습한다는 것을 알게 되었다. 따라서 noise vector z를 이용하는 방식이 아닌 generator에서 dropout을 적용하는 방식을 채택했는데 여전히 stochastic한 변화는 미미했다고 한다. 현재(2018)로서 생성 모델이 데이터의 분포를 잘 학습하는 방법은 open question이다.
Loss Function
\[\textbf{L}_{cGAN} = \mathbb{E}_{y}[logD(y)] + \mathbb{E}_{x}[ log(1 - D(G(x)))]\] \[\textbf{L}_{L_{1}} = \mathbb{E}_{x,y}[\begin{Vmatrix} y - G(x) \end{Vmatrix}_{1}]\] \[\textbf{L}_{pix2pix} = \text{arg}\min_{G}\max_{D} \textbf{L}_{cGAN} + \lambda \textbf{L}_{L_{1}}(G)\]- Generator가 Discriminator를 통과하도록(GAN loss) + ground truth와 비슷해지도록 (L1 loss)
🚀 Architecture
Generator with Skips
Image-to-Image translation 작업은 기본적으로 high resolution input에서 high resolution output으로 가는 매핑이다. 뿐만 아니라 입력과 출력이 많은 low-level feature를 공유하는 비슷한 구조를 가지고 있다(ex. edge → photo). 기존의 Generator는 encoder-decoder 구조를 가지고 있지만, encoder의 downsampling 과정에서 정보가 손실되는 것을 막기 위해(우회하기 위해) skip connection을 추가한 UNet 구조를 태책했다.
Discriminator - PatchGAN
생성 모델에서 일반적인 L1, L2 loss는 blur한 결과를 낳는다는 것은 잘 알려져 있다. 해당 loss들이 비록 high frequency 특징들을 잘 잡아내지는 못하지만, Local한 부분의 low frequency는 잘 잡아낸다. 본 논문에서 Discriminator에 도입한 PatchGAN은 이러한 특징을 이용해 NxN 패치별로 real/fake를 판별하고, 이들을 평균내어 최종 output을 계산한다. Section4에서 실험을 통해 N이 작아도 충분히 고퀄리티의 이미지를 합성할 수 있음을 보였다.
🚀 Experiments
다양한 Image-to-Image task를 할 수 있는지 체크하기 위해, 여러 task와 dataset으로 모델의 generality를 체크하였다. 약간 특이했던 점은 종종 적은 데이터 양으로도 괜찮은 결과가 나왔다는 것이다.
한 가지 문제점은, 생성된 이미지를 평가하는 것이 쉽지 않다는 것이다. 이는 GAN기반 모델들의 공통적인 문제인데, 저자들은 모델을 평가하기 위해 다음 두 가지 전략을 사용했다.
- Amazon Mechanical Turk (AMT)
- 색칠과 같은 graphic작업에서는 사람이 직접 정성적으로 평가
- FCN Score
- Inception score와 유사하게, 생성된 이미지의 object가 얼마나 잘 recognize 되는지 평가
Results | FCN score |
---|---|
- L1 loss만을 이용한 blur 현상이 심함
- CGAN loss만 사용하면 선명해지긴 하지만 visual artifacts가 생김
Results | FCN score |
---|---|
- 기존 Encoder-Decoder 구조보다 U-Net구조가 확실히 좋다!
Results | FCN score |
---|---|
- Discriminiator의 Patch size를 바꿔가며 한 실험
- Full size patch보다 70x70이 가상 성능이 좋았음
- (이거 사람이 어떻게 찾나..?)
🚀 Disccusion
Pix2Pix 논문을 읽으며 가장 인상적이었던 부분은 GAN-Loss의 장점을 명확하게 알았다는 것이다. Task와 관계없이 Discriminator를 속이기만 하면 되니 Loss function 정의하기가 이보다 쉬울 수 있을까? 정말 매력적인 모델인 것 같다.
🚀 Code
Input | Output |
---|---|
댓글 남기기