Hello Computer Vision

Pix2Pix(Image to Image Translation with Conditional Adversarial Networks, 2016) 논문 리뷰 본문

Generative

Pix2Pix(Image to Image Translation with Conditional Adversarial Networks, 2016) 논문 리뷰

지웅쓰 2022. 11. 25. 17:34

지난 번 U-Net에 이어서 U-Net구조를 활용한 Pix2Pix 논문 리뷰입니다.

처음부터 천천히 읽어나가보겠습니다.

 

Introduction

 

처음부터 translation에 대하여 정의하는데요, 

translation an input image into a corresponding output image로 정의할 수 있지만 저자들은

translating one possible representation of a scene into another

으로 정의합니다.

 

요약해보자면 optimal 한 G가 있다한다면 A이미지에 대해 B로도 translating 가능하고 C로도 translating될 수 있다는

가능성이 있다는 걸 말하는 거 같습니다. 

 

본인들이 만든 framework에 대해서 CNN을 사용하는데 이 CNN으로 하여금 저자들이 원하는 것에 대해

요구할 필요가 있다고 합니다.

이 부분 역시 그냥 무작정 쓰는 것이 아니라 어떠한 이유로 쓰고, 네트워크가 잘 수렴할 수 있도록 미리 정의하는 거 같습니다.

 

만약 단순히 CNN을 사용하고 손실함수로 Euclidean distance를 사용한다면 결과물은 blurry할 것이라 합니다.

본인들이 CNN을 쓰는 목적은 expert knowledge라고 합니다. (아마 첫번째 말했던 거처럼 다양한 이미지를 생성할 수 있다 의 의미 같습니다)

 

그리고 GAN보다는 cGAN이 Image-to-Image translation분야에 적합하다고 합니다.

직관적으로 한번 생각해보면 그냥 벡터를 주고 이미지를 만드는 것보다, 스케치를 준다거나 라벨을 준다면

우리가 원하는 결과를 더 얻을 수 있습니다. 

그리고 이 논문에서는 cGAN이 얼마나 효과적인지 보여준다고 합니다.

 

Related work

기존의 Image to Image translation 문제들은 per pixel 별로 문제를 해결했다고 합니다.

그렇지만 이러한 방식은

output space as "unstructured" that each output pixel is considered conditionally independent from all others given the input image 라고 합니다.

그렇지만 cGAN같은 경우 learn a "structured loss"라고 하네요

추가로 이 Structured loss는 joint configuration of the output에 대해 penalize를 준다고 합니다.

 

전체적인 구성이 아닌 각 픽셀간만의 차이로 손실함수를 구성한다는 것을 unstructured라고 표현을 한 것 같고

이와 반대로 structured loss에 대해서 픽셀간의 차이로 손실함수로 구성하는 것이 아닌 무언가의 조건을 주고 손실을

계산한다는 것을 structured 하다고 말하는 거 같습니다.  

그리고 구조는 U-Net을 사용하고 discriminator는 PatchGAN을 사용한다고 합니다.

 

Method

GAN에 대한 목적함수를 정의함과 동시에 cGAN도 정의해줍니다. 잘 기억이 안난신다면

GAN 설명  cGAN설명 참고해주시면 될 거 같습니다.

 

그리고 기존의 cGAN loss에 대해서 하나의 loss를 더 추가하는데요, blurry한 결과를 내는

L2 보다는 L1 loss를 추가합니다. 결과적으로 이 논문의 최적의 생성기 G는

$$G = min{G}max{D} L_{cGAN} (G, D) + \lambda L_{L1}(G)$$ 

 

그리고 논문 저자들은 네트워크에 dropout 노이즈만 추가하였고 이러한 노이즈에도 불구하고

네트워크는 minor한 stochasticity를 가졌다고 합니다. 

(아까 introduction부분에서는 다양한 결과를 얻는 것이 좋다고 했으니 여기서 minor stochasticity는 안좋은 결과가 나오는

변동성을 뜻하는 거 같습니다)

왼쪽이 일반적으로 쓰는 generator의 구조이고 이 논문에서는 U-Net의 구조를 택했는데

잘 보시면 초반부 레이어에서 대칭되어 있는 레이어에 대해 skip connection을 추가하였습니다.

이 skip connection에 대해서는 많은 양의 low-level information이 이동을 하게 되는데 이러한 것이 

이미지의 색깔, localization등 다양한 도움을 준다고 합니다. 그리고 bottleneck도 피할 수 있다고 합니다.

 

loss에 대한 비교 대신 구조에 대해 비교를 해보았을 때 확실히 더 많은 양의 정보가 있으며 , 선명한 것을 확인할 수 있습니다.

 

그리고 PatchGAN은 판별자에 대하여 N x N 이미지에 대하여 판별하는 것인데

저자들이 실험적으로 1x1인 PixelGAN 부터 포함하여 286 x 286 ImageGAN 까지 시도해본 결과

70x70이 가장 좋았다고 합니다. 추가적으로 1x1, 16x16같은 경우 색깔을 더 잘 보존했다고 합니다.

그리고 또 하나의 장점으로는 임의적인 큰 이미지에 다 적용할 수 있다고 합니다.

 

그리고 batch size를 1인 상태에서 배치정규화를 주게되면 이것이 "instance normalization"이며

이것이 이미지 생성 부분에 있어서 효과적이었다고 합니다.

 

Experiments

평가 지표는 AMT, FCN-score를 사용했다고 합니다.

그리고 각 loss에 대해 실험 및 비교를 수행하는데요, L1 loss만을 사용했을 경우 굉장히 blurry한 이미지가,

cGAN만 사용했을 경우 sharp한 이미지를 얻었지만 다수의 artifect 들을 발견했다고 합니다.

(맨 아래 이미지의 지붕에 문 or 냉장고 같은 물체)

 

그리고 두 loss의 결합에  대해서는 L1 loss는 ground truth에 대해 average 를 encourage하며

cGAN은 output distribution이 ground truth의 분포에 가깝도록 push한다고 합니다.

 

그리고 Semantic Segmentation 분야에서도 효과적으로 적용할 수 있다고 하는데요,

 

cGAN만 쓰는 것도 정확도가 나쁘지 않다고는 하지만, best한 결과를 얻지는 못한다고 합니다.

따라서 간단히 L1 loss를 쓰는 것이 성능이 좋다고 합니다.

 

 

그리고 이러한 것들을 바탕으로 모델을 커뮤니티에 배포하였을 때의 사람들이 만든 결과들입니다.

 

간단한 스케치에 대해 이미지를 곧장 잘 만들어내는 것을 확인할 수 있습니다.

 

요약

Pix2Pix는 Image to Image translation을 위한 framework이며 기존의 Adversarial Loss만 쓴 것이 아니라

L1 Loss를 더해주고 이를 실험적으로 보여주었습니다.  원래 알고있는 논문이긴 했지만

실제로 읽으니 훨씬 재밌고 다양한 내용을 품고 있어서 좋았습니다.

 

틀린 부분 지적해주시면 감사하겠습니다.