본문 바로가기
AI/논문

Image-to-Image Translation with Conditional Adversarial Networks

by jennyf 2022. 7. 30.

Key Point는 아래와 같습니다.

1. Input에서 Output Image 로 mapping 하는 Conditional Adversarial Networks

2. Mappign network 훈련에 사용되는 Loss function

 

이 글에서는 2016년 11월 PHillip Lsola 등이 발표한 Image-to-Image Translation with Conditional Adversarial Networks(Pix2Pix)를 공부해보도록 하겠습니다.

 

Pix2Pix는 Image to Image Translation을 다루는 논문입니다. 

 

💡 Image-to-Image Translation 은 무엇을 의미할까요?

 

Image 분야에서 Translation은 특정 이미지의 이동을 의미합니다.

Image-to-Image Translation은 이미지를 입력으로 받아 또 다른 이미지를 출력으로 반환하는 task들을 의미합니다.(이미지 -> 이미지)

 

이러한 변환은 Colorization (black & white -> color image) 등을 포함하는데, Pix2Pix에서는 이미지 변환 문제를 colorization처럼 한 분야에만 국한되지 않고 좀 더 일반화한 문제를 풀고자 했습니다.

그 수단으로써 Conditional adversarial nets를 사용했습니다. 

 

pix2pix 모델은 image-to-image translation 모델입니다. 

 

지금까지 image -> image로 변환하는 이 Image-to-Image Translation 모델들은 predict pixels from pixels 라는 동일한 setting에도 불구하고 경계선만 있는 이미지 복원, 흑백 이미지를 색이 있는 이미지로 변경, semantic label map 을 이미지로 복원 등 다양한 문제들에 있어서 각각 따로 연구되어왔습니다.

 

이 논문에서 추구하고자 하는 목표는 바로 이러한 변환 문제들을 위한 어떤 일반적인 framework를 개발하는 것 입니다. 

 

이러한 방향에 있어서는 이미 CNN이라는 좋은 모델이 있습니다.

즉 paired images (짝을 이루는 이미지들: 흑백/색, 윤곽/실제이미지)들이 충분히 존재한다면, 그것들을 이용해 신경망을 학습시키면 되는것입니다.

 

이때 대부분의 CNN은 결과의 quality를 알려주는 loss function을 최소화하는 방향으로 학습됩니다.

 

먼저 L1 loss or L2 loss 를 최소화시키는 방식입니다.

이러한 학습과정 자체는 자동이지만, 결과를 잘 나오게 하기 위해서는 여전히 수많은 manual effort 가 필요합니다. 

 

즉 우리는 여전히 CNN에게 우리가 무엇을 최소화 하고 싶은지를 알려주어야 합니다.

 

 

 

1) 우리는 CNN이 우리의 예측값과 실제값 사이의 Euclidean 거리를 줄여주길 원합니다.

 

먼저 첫번째 요구가 다음과 같다고 생각해봅니다.

단순히 일반적인 CNN 모델처럼 우리가 예측하고 만들어낸 이미지와 실제 이미지 사이의 유클라디안 거리를 줄여주기를 바라는 것 입니다.

그럼 방금 말한것을 바탕으로 loss function을 식으로 써보면 아래와 같습니다.

 

 

 

Loss 만 가지고 학습을 진행한 결과입니다. 

 

왼쪽은 우리가 넣어준 진짜 사진에 대해 픽셀 별로 창문, 문, 벽 같은것들을 사람이 라벨링 한 데이터이고, 

우리는 generator의 neural net을 통해 이 이미지를 가장 오른쪽의 실제 이미지와 유사한 데이터를 생성해내고 싶습니다.

 

하지만 실제 output은 가운데 사진과 같이 blurring 형태로 나오게 됩니다.

왜 그런것일까요? 이것은 우리의 요구가 잘못된 것 입니다.

 

generator가 새로운 이미지를 생성할 때 input인 label만 보았을때 벽이 나무로 되어있는지, 흰색 벽돌로 되어있는지 등을 알 수 없습니다.

이런 상황에 부딪힌 generator는 어느 것을 택해도 loss가 너무 커지지 않도록 중간의 어떤 애매한 것을 택하는 경향을 보이게 됩니다.

 

 

즉, Average를 학습하려고 하는 것이기 때문에 low-frequency한 부분에는 효과적이지만 high- frequency를 살리지 못하게 됩니다.

 

 

 

이러한 방식으로 생성된 이미지는 사람인 우리가 봐도 애매하고 진짜 같지 않은 이미지가 됩니다.

그렇다면 이제 우리의 두번째 요구가 어느정도 정해진것 같습니다.  

 

 

 

2) 우리는 생성된 이미지가 조금 더 실제 같기를 원합니다.

 

이것이 우리의 두번째 요구입니다. 

하지만 이 요구에 부합하는 모델이 이미 존재합니다. 바로 GAN 입니다. 

 

GAN은 실제와 가짜를 구분하지 못하도록 Discriminator와 Generator가 서로 경쟁하며 학습을 진행하기 때문에 이미지가 뿌옇게 나오는 현상을 없앨 수 있습니다. (뿌연 사진은 실제 사진처럼 보일리가 없기 때문입니다.)

 

그렇다면 GAN의 loss function을 가져오기만 하면 되는것이 아닐까요?

그런데 이때 그냥 일반적인 GAN을 이용하는 것은 아닙니다.

 

바로 cGAN이라는 Conditional Generative Adversarial Nets 라는 GAN의 변형모델을 이용하게 됩니다.

 

cGAN이 GAN과 어떻게 다른지를 살펴보며 GAN이 아닌 cGAN을 이용하는지 살펴보겠습니다. 

 

💡 cGAN은 무엇일까요??

 

cGAN은 앞서 말했듯이 GAN의 변형 모델입니다.

GAN과 학습 방법 자체는 별로 다를 것이 없습니다.

 

다음은 cGAN의 구조입니다.

cGAN은 출력물에 처음으로 조건을 주어 통제하려는 시도에서 만들어졌습니다. 

 

예를들어 MNIST 손글씨 숫자 데이터셋을 출력하는 GAN을 훈련시켰다고 했을 때, 그 결과물은 random noise vector z값에 따라서 무작위 손글씨이겠지만, 어떤 특정 숫자를 출력할 수는 없었습니다. 

 

따라서 이러한 GAN에 어떤 특정한 condition(조건)을 부여하게 된 것입니다.

위의 그림을 보면 기존 GAN의 모델에서 어떤 추가정보 y라는 조건이 새로 등장합니다.

 

이 y를 통해서 우리는 조건부 생성모델을 만들게 되는데, y는 보조정보라도 될 수 있습니다.

우리는 이 y를 G와 D의 input layer에 추가로 같이 집어넣게 됩니다. 

G에서는 input noise인 z와 y가 합쳐진 형태가 들어가게 되고, D에서는 x와 y가 input으로 들어가게 됩니다. 

 

 

이때 학습과정은 GAN과 거의 동일하기 때문에 cGAN의 loss function은 다음과 같은 수식으로 표현할 수 있습니다. 

 

 

즉, GAN의 손실함수에서 D, G에 들어가는 input이 단지 조건부로 바뀐것인데,

이것은 y가 조건으로 주어진 상황에서의 결과값을 사용한다고 이해하면 됩니다. 

 

 

 

💡 그렇다면 pix2pix논문에서는 처음으로 이미지 변환문제에 바로 이 cGAN을 사용하게 되는데 GAN이 아닌 왜 conditional GAN을 사용한것일까요?

 

 

우리는 지금 image-to-image translation 문제에 대해 고민하고 있습니다. 

따라서 어떤 이미지가 주어졌을 때 그 이미지를 우리가 원하는 방향으로 변환하고 싶습니다.

앞에서 계속 언급했듯이 흑백을 컬러로 변환한다던지, 윤곽만 있는 그림을 원래 그림으로 만들고 싶다던지 하는 문제들이 바로 다양한 변환의 예시가 될 수 있습니다.

 

 

이때 GAN은 어떤 데이터 분포를 입력받아 실제에 가깝게 데이터를 생성하는 모델이기 때문에 주어진 이미지와 구분하기 힘든 그저 진짜 같은 새로운 이미지를 생성하게 됩니다.

 

하지만 cGAN은 만약 우리가 조건으로 input image를 넣어준다면 입력 이미지가 조건이 되는 것이기 때문에 입력 이미지와 연관된 이미지를 생성할 수 있게 되는 것 입니다. 

 

 

정리해보자면 random noise vector : z, output : y, input : x 일때,

  • GAN : 랜덤 노이즈 벡터 z에서 출력 이미지 y로 mapping을 학습, G : z ->  y
  • CGAN : 관찰된 이미지 x와 랜덤 노이즈 벡터 z를 y로 학습, G : x,z -> y

 

(또한 이미지 변환문제는 per-pixel 분류 또는 회귀문제로 다뤄져왔는데, 이러한 공식화는 output space가 unstructured 이며 각 pixel과 인접한 pixel간에는 서로 영향을 끼치지 않고 독립적이라는 올바르지 않은 가정이 들어가있습니다.

하지만 cGAN은 pixel과 pixel간의 연관관계까지 고려한 structured loss 개념이 자동으로 적용이 되기 때문에 더욱 적합하다고 말할 수 있습니다.)

 

 

위의 2가지 요구사항을 모두 수렴한 최종 loss function에 대해 설명하겠습니다.

 

먼저 두 가지 loss function에 대해 복기해보면 

 

첫 번째로, 만들어낸 이미지와 실제 이미지간의 격차를 줄여주는 loss function인 L1 loss function 입니다.

cGAN을 사용하기 때문에 generator에 인자로 x, z가 들어가게 됩니다. 

두 번째로, cGAN의 loss function 입니다. 

 

 

따라서 우리가 구하고자하는 최종 pix2pix의 loss function은 위의 두 가지 식을 결합한 아래와 같은 식 입니다.

이때 람다는 두 개의 loss를 몇대 몇의 비율로 합칠것인지에 대한 내용입니다. 

 

💡 이때 한 가지 의문이 들 수 있습니다.

 

바로 cGAN Loss 면 충분해보이는데 왜 굳이 L1 loss 를 합친것일까? 에 대해 의문이 들것입니다. 

 

이유는 바로 cGAN이 input x 를 참고한다 하더라도generator G의 궁극적인 관심사는 오직 D를 속이는 것이기 때문에 x가 상대적으로 덜 반영될 수 있기 때문입니다.

 

따라서 만들어진 이미지 G(x, z)와 대응되는 y 이미지를 직접 비교하는 L1 loss를 추가할 필요가 있습니다. 

 

 

Abstract


우리는 conditional adversarial networks를 일반화된 이미지 변환 문제에 테스트하였습니다.

이 네트워크는 단지 input-output mapping만 배우는 것이 아니라 이를 학습하기 위한 loss function 까지 배웁니다.

따라서 전통적으로 매우 다른 loss function을 쓰던 문제들도 이 접근법을 적용할 수 있습니다.

우리는 이 접근이 label과 동기화, 경계선만 있는 이미지를 복원, 흑백 이미지에 색 입히기 등등의 문제에 효과적임을 보였습니다. 

 

이미지 처리, 그래픽 및 비전의 많은 문제는 input image를 output image로 변환하는 것과 관련이 있습니다.

cGAN을 이용하여 한 유형의 이미지를 다른 유형의 이미지를 변환할 수 있는 framework를 제시했습니다.

GAN을 사용하기 때문에 L1, L2 loss를 사용할 때보다 더 선명한 이미지를 얻을 수 있습니다. 

또한 L1 loss를 사용했기 때문에 pixel 간의 관계를 고려한 scturcted loss 개념도 적용되었습니다. 

 

이미지의 빈 영역을 그럴싸하게 채우려면 대상 영상의 semantic을 정확하게 이해해야 합니다.

그러나 L1, L2 loss를 이용하는 것만으로는 복원 영상이 불선명해지는 현상을 피할 수 없습니다. 이 문제를 해결하기 위해 Adversarial Loss를 사용합니다. 

 

Introduction


Image Prediction 문제는 주로 Convolutional Neural Nets(CNN)을 활용하여 처리되어 왔습니다. 

 

대부분 Image 분야에서 CNN을 사용하려면 minimize하고자 하는 Loss-function을 직접 정의해야 합니다.

이때 최적의 loss function을 정의하기 어려울 수 있습니다. 또한 예측 이미지의 픽셀과 ground truth 이미지의 픽셀 간 Euclidean distance를 Loss-function으로 단순하게 정의한다면 결과 이미지의 성능이 좋지 못한 문제가 생길 수 있습니다.

(좋지 못한 문제: blurry, not semantic)

 

Loss function을 직접 정의해주는 것은 manual 한 요소가 들어가기에 최적의 함수를 찾기 힘든 문제가 존재합니다.

 

GAN(Generative Adversarial Networks)은 이런 문제를 해결합니다.

GAN의 생성자는 판별자가 생성 이미지와 실제 이미지를 잘 구분하지 못하는 방향으로, 판별자는 생성 이미지와 실제 이미지를 제대로 구분하는 방향으로 경쟁적으로 학습됩니다. 

GAN에서 blurry한 image는 가짜로 판별되며, 데이터에 적합하게 loss가 학습되기 때문에 여러 종류의 task에 적용할 수 있습니다. 

GAN은 두 이미지 간 차이를 Loss 함수로 정량화하는 게 아닌, Discriminator를 이용해 판별하고, 그로부터 feedback을 받아 새로운 이미지를 생성하게 됩니다. 

 

이 논문에서는 조건부 설정에서 GAN을 탐색합니다.

GAN이 데이터 생성 모델을 학습하는 것처럼 조건부 GAN은 조건부 생성 모델을 학습합니다.

 

아래 그림은 cGAN(조건부 GAN)입니다.

( x: 조건에 해당하는 image )

cGAN은 기존 GAN과는 다르게 G는 condition x를 받아 생성하며, D 또한 condition x를 받아 판별하게 됩니다. 

이 글에서는 Image-to-Image Translation에 적합한 cGAN을 기반으로 하며 다양한 task에서 좋은 결과를 보이는 프레임워크 pix2pix를 다룹니다. 

 

Image-to-Image Translation은 보통 GAN의 변형 중 CGAN(Conditional GAN)을 기반으로 합니다. 

 

아래 그림에서는 edge를 조건으로 받아 실제 이미지를 생성하고, 판별자 또한 이 edge와 생성 이미지를 받아 판별하면서 모델을 발전시키게 됩니다. 

 

edge -> photo를 매핑하기 위해 GAN을 훈련하는 예시 입니다. 

 

노이즈 z를 사용하지 않기 때문에 거의 deterministic 한 결과를 생성합니다. 

 

 

본 논문에서는 Image-to-Image Translation에 적합한 conditional GANs(cGAN)을 이용하여 광범위한 task에서 좋은 결과를 낼 수 있는 프레임워크인 pix2pix를 소개합니다. 

 

Method

💡 Pix2pix에서는 Generator로는 U-Net 구조를, Discriminator로는 PatchGAN을 사용합니다.

Objective

 

G: Generator

D: Discriminator

x: input image

y: output image

z: latent vector

 

cGAN의 Objective(loss function)는 아래 식으로 표현됩니다.

cGAN의 목표는 아래의 adversarial loss를 최소화하는 것이며,

이때 G는 minimize하는 방향, D는 maximize하는 방향입니다. 

 

이때 아래 loss를 단일하게 사용하는 것 보다는, L1 Distance나 L2 Distance와 같은 traditional loss를 loss function에 추가함으로써 덜 blurry한 이미지를 생성할 수 있습니다. 

L2보다는 L1을 추가했을 때 생성된 이미지의 품질이 더 좋다고 검증되어 최종 loss function은 아래와 같이 정의합니다. 

  • L1 Distance : 
  • Final Loss function : 

이때, 람다는 hyperparameter로 이 람다를 조정함으로써 최적의 loss function을 찾아나가게 됩니다.

 

 

이를 해결하기 위해 pix2pix의 저자들은 train, test time에 dropout을 적용해 노이즈를 부여했습니다. 

 

pix2pix의 noise 

Random noise vector z가 없는 경우에도 생성모델은 x에서 y로의 mapping을 학습할 수 있지만, 이 경우 출력이 deterministic하다는 문제점이 있습니다. (하나의 입력에 대해서 하나의 출력이 존재)

이러한 문제를 해결하고자 과거 GAN은 z를 x와 함께 입력했습니다.

그런데 본 논문의 실험에서는 입력된 noise가 무시되면서 학습되는 현상이 일어났고, 이를 효과적으로 해결할 strategy 또한 찾을 수 없었다고 합니다.

이를 해결하기 위해 pix2pix는 train, test 시점에 dropout을 적용해 노이즈를 부여했습니다. 

 

Network architectures

 

이제 논문에서 말하고 있는 모델 구조를 살펴봅니다.

우리는 먼저 DCGAN을 G와 D의 기본 모델로 하였고 둘 다 convolution-Batchnorm-ReLU 구조를 따릅니다. 

(1) Generator

Generator의 기본 구조는 U-Net 입니다.

이미지 변환 문제에서 어려운 점은 고해상도 input grid를 고해상도 output grid로 mapping 하는 것 입니다.

이때 U-Net은 Encoder-Decoder 구조에 skip-connection이 추가된 형태입니다.

skip-connection을 추가하면, decoder가 학습이 잘 되지 않는 문제를 해결할 수 있습니다. 

pix2pix 연구에서는 입력이미지와 목표로 하는 이미지가 상당히 유사하기 때문에, 이와같은 U-Net을 사용합니다. 

 

UNET

pix2pix 연구에서 Generator로는 Encoder-Decoder 구조에 skip-connection이 추가된 U-Net을 사용합니다. 

기존 Encoder-Decoder는 input이 일련의 layer들을 통과하면서 점차 downsampling 되고, bottleneck layer를 기준으로 다시 반대 과정을 거치는 구조입니다. (즉, 인코더와 디코더가 대칭적으로 연결되어 있습니다. )

Layer들을 통과하면서 입력된 이미지의 핵심적인 feature들은 추출되지만, low-level(detail)에 관해서는 정보 손실이 발생할 수 있습니다. 

 

따라서 U-Net은 skip-connections를 추가하여 detail이 전달될 수 있도록 했습니다. 

 

 

skip-connection을 사용하지 않는다면 어떻게 될까요? 

입력 x를 인코더로 단순히 압축하고 압축된 벡터를 다시 디코더로 복원해 y를 만들 경우, 굉장히 핵심적인 global 정보만 남게 됩니다. 

즉, 디테일한 정보(fine)는 유지하기 쉽지 않습니다. 

 

그래서 U-Net은 skip-connection을 대칭적으로 추가해 이 경로를 통해 디테일한 정보(fine) 또한 전달할 수 있게 해줍니다. 

  • 총 layer 개수가 일 때,
  • 번째 layer와 번째 layer에 있는 모든 channel을 concatenate함으로써 마지막까지 detail이 잘 전달됩니다.

 

U-Net 심화

U-Net은 대칭구조로 되어있습니다.

이때, U-Net은 이미지의 전반적인 context 정보를 얻기 위한 네트워크인 Contracting path와 정확한 지역화를 위한 네트워크인 Expanding path로 이루어져 있습니다.

 

좌측 부분이 핵심적인 부분, 포괄적인 부분을 포착해 나가는 contracting path입니다. 

우측 부분은 이미지의 세밀한 부분과 localization을 책임지는 expand path입니다. (디테일한 결과를 생성해야 하므로 )

이때, 사용할 디테일한 정보가 바로 skip-connection을 통해 주어지게 됩니다. 

(layer가 깊기 때문에 어디선가 받지 않는 이상 디테일한 정보는 잘 남지 않습니다.)

얕은 layer의 경우 조금 fine 한 정보를 담고 있고, 깊은 layer의 경우 global 한 정보를 담게 됩니다. 

 

이러한 구조를 통해 정보 손실을 낮추고, 기존의 Localization(details, fine)과 Context(semantic, global)의 trade-off 관계를 해결할 수 있게 됩니다. 

 

 

인코더 디코더 구조에 skip-connection을 추가할 경우 조금 더 좋은 생성 성능을 보이게 됩니다.

 

아래는 Cityscape generation에 대하여 Encoder-Decoder와 U-Net을 비교한 결과입니다.

L1 loss 만을 이용한 경우 L1 loss + cGAN loss를 이용한 경우 모두 U-Net이 더욱 realistic한 이미지를 생성해내고 있습니다. 

 

U-Net의 성능이 더 좋은것을 확인할 수 있습니다. 

 

(2) Discriminator(PatchGAN)

 

L1 loss를 사용하는 것은 이미지와 비슷한 이미지를 만드는 것을 돕습니다.

이것은 low-frequency에서 너무 다른 이미지가 생기는 것을 막아줍니다.

즉, Discriminator는 high-frequency에서 구분하는 것에 주 목적을 둡니다.

pix2pix2의 Discriminator의 기본구조는 Patch-GAN을 사용합니다.

이미지를 NxN 크기의 Patch로 나누고, 그 각각의 Patch에 대해서 참/거짓을 판별한 뒤, 참이 많으면 참으로, 거짓이 많으면 거짓으로 분류하는 방법입니다.

 

더 지역적인 특징이 반영되므로 high-frequency에서 구분하는데 적절합니다.

N이 작을수록, 전체 매개변수의 수가 작아지므로, 학습 속도가 빨라집니다. 

 

아래 Figure는 서로 다른 loss로 학습된 결과입니다. 

생성자 G는 판별자 D를 속이는 게 목적입니다. 

하지만 이 목적만을 위해 학습한다면 사람이 인식하기에 품질이 좋지 못한 이미지를 생성하게 될 수도 있습니다.

 

PatchGAN은 이러한 문제를 약간 해결해줍니다.

 

그 이전에 L1 loss의 성질을 간단히 살펴봅시다.

L1 loss만을 사용할 경우 이미지의 Low-frequency 성분들을 잘 검출해내는 특징을 지닙니다.

L1 loss를 이용하는 경우, blurry 하기는 하지만 low-frequency 성분들을 비교적 잘 검출해 냅니다. 

따라서 low-frequency 성분 검출을 위해 L1 loss는 그대로 두고, Discriminator는 high-frequency structure만을 이용해 모델링 합니다.

 

이때 high-frequency 성분 검출은 전체 이미지가 아닌 local image patch를 이용해도 충분하다고 합니다. 

 

이미지에서의 Frequency란 한 마디로 픽셀 변화의 정도입니다. 

즉, 사물에 대해서 사물 내에서는 색 변화가 크지 않기 때문에 low-frequency라 할 수 있고, 사물 경계(edge)에서는 색이 급격하게 변하기 때문에 high-frequency라고 할 수 있습니다. 

 

L2 loss를 사용하면 더 blurry 하게 됩니다.(그나마 L1 loss라 저 정도입니다,,,, )

 

 

이번 논문에서는 다양한 실험들이 많이 등장하고 있습니다.

그 중 이 실험은 loss를 변경해가면서 실험한 것 입니다. 

이미지를 통해 확인할 수 있듯이 cGAN + L1 loss 를 모두 사용한 경우가 가장 훌륭한 결과가 나온것을 알 수 있습니다.

 

즉 L1 loss를 사용할 경우 blurry 하지만 low-frequency 성분들을 잘 검출해내므로, 이는 그대로 두고 Discriminator에서 high-frequency의 검출을 위한 모델링을 진행하게 됩니다.

 

또한 이를 위해서는 이미지 전체가 필요 없고 local image patch를 사용해 판별을 진행해도 상관없습니다.

 

high-frequency, 즉 디테일한 부분을 파악하는 데에 전반적인 이미지는 필요 없으니까요 ! 

 

PatchGAN Discriminator

  • 이미지를 X으로 조각내어 각 patch별 response 값(real인지 fake인지에 대한 확률값)을 평균하여 최종 결과값 를 산출합니다.
  • 적은 수의 Parameter로 빠르게 훌륭한 결과를 낼 수 있습니다. 또 임의의 큰 사이즈의 이미지에도 적용할 수 있습니다.

 

PatchGAN 심화

 

ImageGAN: 일반적인 GAN은 이미지 전체에 대한 진위 여부를 판단합니다. 

PatchGAN: cGAN에서는 종종 PatchGAN을 사용하게 되는데, 이때는 N x N 사이즈의 이미지 패치 단위에 대한 진위 여부를 판단하게 됩니다.

PixelGAN: 이미지 픽셀 단위에서 진위 여부를 판단합니다. 

 

Classification, Regression을 위한 일반적인 CNN을 사용하는 아키텍처를 GAN과 비교해봅시다.

 

CNN

픽셀 단위의 비교(classification, regression)로 문제를 해결합니다.

각 출력 픽셀들은 다른 픽셀들에 대해 독립적입니다.

 

Conditional GAN

Structure loss를 사용해 목표 이미지와 출력 이미지의 다름에 대해 핸디캡을 줍니다.

Discriminator로 종종 PatchGAN을 사용합니다.

 

여기서는 PatchGAN에 대해 간략히 정리해보겠습니다.

 

기존의 GAN은 이미지 전체를 보고 D가 판단하기 때문에, 결과 이미지에 블러(low-frequency)가 껴서 나타날 수 있습니다. 

왜냐면 전체적인 이미지만 그럴듯하게 만들면 될 뿐, 사물의 디테일들을 디테일하게 만들 필요가 없습니다. 

그래서 전체 이미지에 대한 low-frequency를 L1 loss에게 맡기고, high-frequency의 성분들을 GAN이 맡는 것입니다. 

그 high-frequency를 추출하기 위해 이미지들을 잘게 잘라서 D에게 판별을 맡기는 것 입니다. 

(전체 이미지를 보고 D가 판단한다면 생성 이미지가 blurry 해집니다.)

 

아래와 같은 가정이 필요합니다.

patch의 직경보다 더 멀리 있는 픽셀들은 서로 독립이라 가정합니다.

 

 

Experiments

cGAN의 generality를 test 하기 위해, 본 논문에서는 다양한 task와 데이터셋에 cGAN을 적용한 실험들을 소개하고 있습니다.

아래와 같이 input segmentation이 cGAN의 조건으로 주어지게 됩니다. 

input이랑 condition을 나누는 건 크게 의미가 없어서, 그냥 보통 condition을 input으로 퉁치기도 합니다. 

 

 

 

 

아래 실험은 Patch GAN에서 patch의 개수를 다양하게 하는 실험입니다.

Patch의 개수가 늘어날 수록 선명도가 상승하는 것을 확인할 수 있습니다. 

 

 

결과적으로 이 논문은 Image-to-Image translation 문제에 대해서 Conditional adversarial network 가 괜찮은 접근법이라는 것을 보여줌과 동시에 이 네트워크가 넓은 범위의 경우에 대해 적합하다는 것 또한 보여주고 있습니다. 

 

대체로 좋은 성능을 보이고 있으나, 맨 하단 failure cases 과 같이 input image가 sparse 하거나 unusual한 경우에는 이상하거나 blurry한 이미지가 생성되기도 했습니다. 

 

참고

https://velog.io/@tobigs16gm/Image-Translation-pix2pix-CycleGAN

https://velog.io/@sjinu/%EB%85%BC%EB%AC%B8%EB%A6%AC%EB%B7%B0%EC%A0%95%EB%A6%AC-Image-to-Image-Translation-with-Conditional-Adversarial-Netspix2pix

https://di-bigdata-study.tistory.com/8

 

논문링크

https://arxiv.org/pdf/1611.07004.pdf