본문 바로가기

카테고리 없음

[논문 리뷰] Image-to-Image Translation with Conditional Adversarial Networks (Pix2pix)

반응형

Submit : Isola, Phillip, et al. CVPR (2017)

Paper : arxiv.org/pdf/1611.07004.pdf

Code : github.com/phillipi/pix2pix

 


 

 

0. Abstract

이미지 처리, 그래픽 및 비전의 많은 문제는 input image를 output image로 변환하는 것과 관련이 있습니다. 이러한 문제는 설정이 항상 동일하더라도(pixel을 pixel로 매핑) 응용 프로그램 별 알고리즘으로 처리되는 경우가 많습니다.  조건부 적대적 네트워크는 다양한 문제에서 잘 작동하는 일반적인 방법입니다.  여기서 우리는 몇가지 방법에 대한 결과를 보입니다. 각각의 경우에 우리는 같은 아키텍쳐와 방법으로 다른 데이터에 대해 간단하게 학습합니다.
Edge->photo으로 매핑하기 위해 Conditional GAN을 학습합니다. Unconditional GAN과 다르게 generator, discriminator 모두 edge map을 살핍니다.

cGAN을 이용하여 한 유형의 이미지를 다른 유형의 이미지를 변환할 수 있는 framework를 제시했습니다. GAN을 사용하기 때문에 L1, L2 loss를 사용할 때보다 더 선명한 이미지를 얻을 수 있습니다. 또한, L1 loss를 사용했기 때문에 pixel 간의 관계를 고려한 scturcted loss 개념도 적용되었습니다.

이미지의 빈 영역을 그럴싸하게 채우러면 대상 영상의 semantic을 정확하게 이해해야 합니다. 그러나, L1/L2 loss를 이용하는 것만으로는 복원 영상이 불선명해지는 현상을 피할 수 없습니다. 이 문제를 해결하기 위해 Adversarial Loss를 사용합니다.

 

1. Method

1.1. Objective

Pix2Pix는 이미지가 진짜 이미지인지를 나타내는 Adversarial Loss, 생성된 이미지가 gt와 유사한 정도를 나타내는 Reconstruction Loss가 있습니다.

Adversarial Loss는 cGAN의 loss와 매우 유사합니다. Generator는 입력 이미지 x를 넣으면 출력 이미지 y가 생성됩니다. 기존 GAN과 달리 noise z를 넣지는 않습니다. Discriminator에는 입력 영상 x와, 생성된 영상 G(x) or 원래 영상 y가 같이 들어가서, 이미지가 진짜인지 가짜인지 판별하게 됩니다.

Reconstruction Loss는 L1 loss인데, 생성된 이미지와 ground truth와의 유사한 정도를 나타냅니다. Discriminator가 가짜 이미지를 판별하는 역할은 그대로 둔 채로, Generator가 실제와 더 유사한 이미지를 생성할 수 있도록 하기 위해 사용합니다. Context Encoder와 달리 L1 loss만 사용했는데, L2 loss를 사용했을 때보다 이미지가 덜 흐릿했기 때문입니다.

pix2pix의 최종 loss function은 두 loss를 합친 값입니다.

 

1.2. Network Architecture

Generator, Discriminator 둘 다 DCGAN의 구조를 기본으로 조금 변형해서 사용합니다.. Generator, discriminator 둘 다 convolution-BatchNorm-ReLu 형태의 모듈을 사용합니다.


(1) Generator에 skip 구조 사용

Generator 아키텍쳐를 위한 2가지 선택이 존재합니다. 그 중, 우측의 U-Net은 encoder, decoder 스택안의 mired layer 사이에 skip connection이 있는 encoder-decoder 구조입니다.

Generator의 encoder, decoder를 합치면 bottleneck 구조의 모델로 볼 수 있습니다. Pix2Pix는 고해상도 이미지를 고해상도 이미지로 변환하는 만큼, input 이미지에 있던 이미지의 색상이나, edge의 위치 등의 low-level 정보는 보존될 필요가 있습니다. 따라서 같은 level을 가진 encoder의 layer와 decoder의 layer간에 skip conenction을 추가합니다. 즉, layer가 n개 있으면, i번째 layer의 n-i번째 layer 간에 skip connection이 존재합니다.

(2) Markovian discriminator (PatchGAN)

L1, L2 loss를 사용하면 이미지가 흐릿해진다는 현상이 보고되어 왔습니다. 이 문제를 해결하기 위해 GAN의 Discriminator는 high-frequency structure만을 모델링하도록 제한하고, low-frequency correctness는 L1 loss에서 담당합니다.

 

2. Experiments

 

다른 loss를 사용해본 다양한 결과
다양한 loss를 사용한 FCN-scores. Cityscape의 label/photo로 평가
다른 generator를 사용한 FCN-scores. Cityscapes의 labels/photos로 평가
다른 discriminator의 receptive field sizes를 사용한 FCN-scores. Cityscapes의 labels/photos로 평가

L1 loss만을 사용했을 때에도 타당한 결과를 출력하긴 했지만 매우 흐릿한 이미지가 생성되었습니다. cGAN loss만 사용하면 이미지가 선명하긴 하지만, gt에 없던 구조물들이 추가로 생성되는 문제점이 있습니다. lambda 값을 100으로 주어 두 loss를 둘 다 사용했을 때, gt에 없던 구조물들이 추가 생성되는 것을 감소시킬 수 있습니다. 

Cityscape에서 테스트 된 cGAN을 사용한 Color distirbution

cGAN은 선명한 이미지를 만들려고 하는 효과가 있기 때문에, input label map에도 없는 것들을 만들어내기도 합니다. 한편,  L1은 불명확한 점이 있으면 흐릿해지는 경향이 있어서, 색상들이 평균으로 수렴하기 때문에 회색에 가까운 색상이 많이 나옵니다. 즉 색상의 분포가 줄어들기 때문에 회색에 가까운 색상을 띄게 됩니다. 하지만 cGAN을 쓰면 색상의 분포가 gt에 가깝도록 조정되어, 색상이 더 다양해집니다.

Encoder-decoder 간에 skip conenction을 추가했을 때 생성된 이미지 품질이 더 좋았습니다. 


U-Net 구조는 low-level 정도를 network 간에 전달하는 shortcut입니다. L1 loss만 사용했을 땐 shortcut을 넣어 준다고 해서 이미지가 크게 좋아지진 않았습니다. 하지만 cGAN까지 같이 쓸 경우, shortcut을 넣어 주면 생성되는 이미지의 품질이 크게 좋아지는 것을 확인했습니다.

Patch 크기 변형한 결과. output의 불확실성은 다양한 Loss function에 따라 달라집니다.


patch size를 1x1로 한 PixelGAN은 이미지의 색상에 기여하는 것 빼곤 효과가 없었습니다. 16x16 PatchGAN은 이미지는 선명했지만 불필요한 구조물들이 생기는 문제점이 있습니다. 70x70 PatchGAN의 성능이 제일 좋았습니다, 286x286 ImageGAN은 70x70 PatchGAN과 비슷한 성능을 보였으나, 파라미터 수가 더 많이 필요해서 학습이 조금 더 어렵습니다.

지도와 위성 이미지 간을 변환하는 실험을 진행했습니다. 실제 이미지와 생성된 이미지를 둘 다 제시한 뒤, 실험자가 생각하는 실제 이미지를 고르는 실험입니다. 생성된 이미지를 실제 이미지라고 선택하는 비율이 높을수록, 생성된 이미지가 실제 같다고 볼 수 있습니다.

단순히 L1 loss를 썼을 때보다, cGAN까지 같이 사용했을 때, Turker(Amazon Mechanical Tulk service 작업자)들이 실제 이미지라고 태깅하는 비율이 더 높았습니다. 또한, 이미지 채색 Task에서도 타 model에 비해 생성된 이미지가 실제 이미지라고 태깅된 비율이 더 높았습니다.

실제 이미지에서 label을 추출하는 Sementic segmentation 실험도 진행했습니다. label은 discrete한 분포를 보이는 만큼 L1 loss만 사용했을 때 성능이 가장 좋았습니다. 논문 저자들은, GAN은 continuous-valued variation을 가짐에도 불구하고 discrete한 label을 어느 정도 생성해 내는 것에 흥미로워했습니다.

pix2pix의 첫 발표 이후 community에서 다양한 모델이 나왔습니다. 스케치를 고양이로 바꾸거나, 배경을 지우거나, 스케치를 초상화 등으로 바꾸는 등 다양한 응용들이 있었습니다. 이 중에는 원래 논문에서 의도하지 않았던 부분까지 있었습니다. 즉, pix2pix는 단순히 label과 image 간을 상호 변환하는 모델이 아니라, 일반적인 image-to-image translation 문제를 해결할 때 사용할 수 있다는 가능성을 보여주었습니다.

반응형