논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Image-to-Image Translation with Conditional Adversarial Networks

1. Introduction

  • 이미지를 입력 받아 또다른 이미지로 만드는 "translating"은 많은 문제들과 연결되어있다.
  • 이 논문에서는 씬의 어떤 한 표현을 다른 것으로 바꾸는 일을 자동으로 해주는 image-to-image translation를 정의한다.
  • 이러한 일들은 여러가지 방법으로, 그 목적에 맞게 각각 연구되어있지만, 픽셀으로부터 픽셀을 prediction한다는 점만은 공통점이다.
  • 여기에서는 모든 문제들에 적용할 수 있는 공통 프레임웍을 제안한다.
  • Image prediction을 위해서 Convolutional Neural Network (CNN) 보편적으로 쓰이는 추세이지만, CNN은 최소화하고자 하는 로스 함수를 수동으로 정의해주어야 하는 단점이 있다.
  • 즉, CNN을 사용하려면 여전히 우리가 원하는 방향으로 어떻게 최소화해야하는지 알려주어야 한다는 뜻이다.
  • 픽셀들의 Euclidean distance를 줄이는 방향으로 최소화한다면 CNN은 흐린 이미지를 결과로 내놓는다.
  • 이것은 Euclidean distance가 모든 출력을 평균하여 최소화하기 때문이다.
  • 이러한 두가지는 우리에게 높은 수준의 목표를 원하게 하는데, "출력 이미지를 현실과 구별할 수 없게 내놓으면서도, 이 목적에 맞게 로스 함수를 자동으로 학습해주었으면" 한다.
  • 이것은 Generative Adversarial Networks (GAN)이 하는 것과 정확히 일치하는 것이다.
  • GAN을 이용하면 흐린 영상은 허용되기 않게끔 할 뿐더러, 데이터에 붙어 loss를 내놓기 때문에 여러 종류의 과제에 대해서도 적용이 가능하다.
  • 여기서는 image-toimage translation에 적합한 Conditional GAN (cGAN)을 이용한다.
  • 이 논문의 기여 중 하나는 cGAN이 많은 문제에 적용해본 결과를 보이고, 좋은 결과를 낼 수 있는 간단한 프레임웍을 제시한 것이다.

2. Related work

Structured losses for image modeling

  • Image-to-image translation은 보통 픽셀단위의 classification 혹은 regression으로 폴어왔다.
  • 하지만 이런 방식은 unstructured인 출력 공간이라 생각하고 다루고 있는다. 즉 각 출력 픽셀들은 다른 픽셀들에 서로 독립적이라고 생각하는 것이다.
  • 반면, cGAN은 structured loss를 사용한다.
  • Structured loss에는 Conditional random field (CRF)나 SSIM 등과 같은 여러 연구가 있었으나 cGAN은 다른 종류의 로스를 사용한다. 주어진 목표 이미지와 출력의 다름을 penalize하는 것이다.

Conditional GANs

  • cGAN을 사용하는 것은 이 논문이 처음은 아니지만, image-to-image에 사용된 방법은 GAN 자체는 unconditionally하였고, 입력과 출력에 대해서 조건을 주었을 뿐이었다.
  • 제안하는 프레임웍은 다른 방법들보다 더 간단하면서 어떠한 문제에도 적용가능하다.
  • 또, 이전 연구들과는 달리 generator로써 "U-Net"기반의 구조를 사용하였고, discriminator로써 convolutional "PatchGAN"을 사용한다.
  • PatchGAN의 비슷한 형태는 [37]에서 제안되엇다.

3. Method

  • 일반적인 GAN에서의 generative model은 랜덤 노이즈 벡터 $z$로부터 이미지 $y$를 출력하는 $G: z \rightarrow y$를 학습한다.
  • 하지만 cGAN에서는 관찰한 이미지 $x$와 랜덤 노이즈 벡터 $z$로부터 이미지 $y$를 출력한다. $G: \{ x, z\} \rightarrow y$
  • Generator $G$는 discriminator$D$가 실제 이미지인지 구분하지 못하는 출력을 내도록 학습되고, $D$는 generator가 생성한 이미지를 "fakes"로 구별할 수 있도록 훈련된다.

3.1 Objective

  • cGAN의 목적 함수는 다음과 같다.

$$ \mathcal{L}_{cGAN} = \mathbb{E}_{x, y} [ \log D(x,y)] + \mathbb{E}_{x, z}[ \log(1- D(x, G(x,z)))]$$

  • 여기서 $G$는 목적 함수를 최소화하는 방향으로, $D$는 최대화 하는 방향으로 한다.
  • Discriminator에 걸려 있는 조건의 중요도를 테스트할 때에는, $x$가 없다고 생각하였을 때와 비교하였다.

$$ \mathcal{L}_{GAN} = \mathbb{E}_{y} [ \log D(x,y)] + \mathbb{E}_{x, z}[ \log(1- D(x, G(x,z)))]$$

  • 이전의 연구에서 GAN의 목적함수에 L2 distance와 같은 로스를 $G$에 섞으면 discriminator를 잘 속이면서도 ground truth에 가까운 이미지를 만들어낸다는 내용이 있으나, 여러 방법을 실험해본 결과 L2보다는 L1이 덜 블러한 이미지를 만들어내었다.

$$ \mathcal{L}_{L1}(G) = \mathbb{E}_{x,y,z} [||y - G(x,z)||_1]$$

따라서 최종 목적 함수는 다음과 같다.

$$ G^* = \arg \min_D \max_D \mathcal{L}_{cGAN}(G, D) + \lambda \mathcal{L}_{L1}(G)$$

  • $z$가 없을 경우, 네트워크는 $x$에서 $y$로의 매핑을 학습하지만, deterministic한 출력을 내기 때문에 델타 함수와 같은 분포 외에는 어떠한 분포도 학습할 수가 없어진다.
  • 이전의 cGAN에서는 이를 위해서 generator에 직접 노이즈 $z$를 넣어주었지만, 대신 여기에서는 dropout의 형태로 여러 레이어에 대해 노이즈를 주도록 하였다. 이는 학습과 테스트 시점에 모두 적용되었다.

3.2 Network architectures

  • 설계한 generator와 discriminator를 GAN에 적용하였다.
  • 두 모델 모두 convolution-BatchNorm-ReLu 모듈을 사용하였다.

3.2.1 Generator with skips

  • Image-to-image translation 문제는 입력과 출력이 모두 높은 해상도를 가지면서도 서로 다른 표현 방법을 가진다.
  • 또한 입력과 출력 모두 같은 structure에 놓여있으면서, 지역적으로 서로 정렬되어있는 structure이다.
  • 따라서 generator가 이러한 부분을 고려하도록 하였다.
  • 이전의 연구들에서는 encoder-decoder 네트워크를 많이 사용하였는데, 입력이 여러 레이러를 통하면서 점점 다운샘플링 되고, 병목 레이어를 통화하고 나면 이러한 과정을 거꾸로 진행하는 처리를 거쳤다.
  • 하지만, 이러한 문제에서 입력과 출력 사이에서 저수준의 정보를 공유한다면 많은 잇점이 있을 것이다.
  • Generator에게 병목 부분을 우회하여 저수준의 정보를 제공하기 위하여 "U-Net"에 나온 것처럼 skip connection을 추가하였다.
  • 자세히 이야기하자면, 층 $i$과 층 $n-i$를 잇는 skip connection을 만들어주었다. 여기서 $n$은 전체 층의 수이다.
  • 각 skip connection은 층 $i$의 모든 채널을 그대로 $n-i$층에 붙이도록 하였다.

3.2.2 Markovian discriminator (PatchGAN)

  • 앞에서 이야기하였듯, L1 로스를 포함한 L2 로스가 블러한 이미지를 생성한다.
  • 이러한 로스가 고주파 성분을 찾지 못하긴 하지만, 저주파 성분은 비교적 잘 검출한다.
  • 따라서 전체 로스를 수정하는 작업은 하지 않고 L1로스는 그대로 사용하도록 한다.
  • L1로스를 유지하면서도 discriminator가 고주파 structure를 모델링할 수 있도록 하기 위해, 로컬 이미지 패치의 structure를 사용하도록 하였다.
  • 이를 위해 PatchGAN이라는 discriminator 구조를 디자인하였다.
  • 이것은 패치의 scale 수준에서의 structure를 penalize하는 역할을 한다.
  • 이 discriminator는 각 N x N 패치가 실제인지 가짜인지 분류하는 역할을 하게 된다.
  • Discriminator를 convolutionally하게 전체 이미지에 대해 실행한 뒤, 모든 response를 평균하여 $D$의 출력으로 사용하였다.
  • 섹션 4.4에서 N을 이미지 크기보다 꽤 작게 하여도 높은 수준의 출력이 생성되는 것을 보였으며, 작은 PatchGAN은 적은 파라미터와 빠른 실행이 가능하고 큰 이미지에 대해서 실행될 수 있는 장점이 있다.

3.3 Optimization and inference

  • 네트워크를 최적화하기 위해 GAN[23]의 표준 방법을 사용하였다.
  • 하지만 $D$와 $G$를 한번씩 그래디언트 스텝을 진행하였다.
  • 마찬가지로 $G$를 최적화 하기 위해 $\log D(x, G(x,z))$ 를 최적화하는데 사용하였다.
  • 추가로 $D$를 최적화 할때는 목적 함수를 2로 나누어 사용하여 $D$가 $G$보다 학습을 더 느리게 하도록 하였다.
  • 미니배치를 적용하여 Adam을 사용하였으며 학습률은 0.0002, 모멘텀은 $\beta_1 = 0.5, \beta_2 = 0.999$를 사용하였다.
  • 보통의 Dropout을 사용할 경우와 다르게 학습할때와 추론할 때 모두 같은 방법을 사용하였다.
  • 단, 테스트할 때에는 batch normalization을 테스트 배치의 것으로 적용하였다.

4 Experiments

  • cGAN의 generaility를 테스트하기 위해 여러가지 과제와 데이터셋에 대해서 실험을 해보았다.
  • Semantic labels <-> photo, Cityscapes
  • Architecural labels -> photo, CMP Facades
  • Map <-> aerial photo, Google Maps
  • BW -> color photos
  • Edges -> photo
  • Sketch -> photo
  • Day -> night
  • Thermal -> color photos
  • Photo with missing pixels -> inpainted photo, Paris StreetView
  • 모든 경우, 입력과 출력은 1-3 채널 이미지를 가진다.

4.1 Evaluation metrics

  • 생성된 이미지의 품질을 측정하는 것은 어려운 문제다.
  • 전통적인 방법으로 mean-squared error를 측정하는 방법이 있으나, structure를 측정하지 못한다는 단점이 있다.
  • 좀더 거시적인 관점에서 품질을 측정하기 위해 두가지 전략을 사용하였다.
  • 첫째로 map generation, image colorization, aerial photo generation 문제와 같은 "real vs fake"의 조사는 Amazon Mechanical Turk (AMT)에서 진행하였다.
  • 두번째로 생성된 cityscape가 충분히 실제적인지는 제공되는 인식 시스템을 이용하여 객체를 인식할 수 있는지로 측정하엿다.

4.2 Analysis of the objective function

  • 로스 식에서 GAN과 L1부분이 각각 어떤 효과가 있는지, 그리고 입력에 조건이 걸린 것과 아닌 것의 차이가 무엇인지 확인하기 위해 실험을 진행하였다.
  • two label -> photo 문제에서, L1만 사용한 결과는 맞는 이미지이지만 블러한 결과를 보였다.
  • cGAN은 그보다는 더 샤프한 결과를 내었지만, 아티팩트를 생성하였다.
  • 두 항을 더하자 비로소 아티팩트가 사라졌다.
  • labels -> photo 문제에서, 조건이 없는 로스를 사용해 보았다. 이 경우 로스는 입력과 출력의 미스매치를 penalize하지 않고 단순히 출력이 실제적인 것에만 신경쓰게 되었다. 그 결과 단순히 입력 사진에 관계없이 거의 같은 사진만 생성해버렸다.
  • 따라서 cGAN이 GAN보다 더 좋은 성능을 내지만, L1 항을 추가함으로서 출력이 입력을 반영할 수 있다.

Colorfulness

  • cGAN은 샤프한 이미지를 만들 뿐더러 입력 레이블맵이 없어도 그럴싸한 지역적으로 structure를 생성한다.
  • 마찬가지로 cGAN을 이용해서 spectral한 차원에서 샤프닝을 생각해볼 수 있다. 즉 이미지를 좀 더 Colorful하게 만드는 것이다.
  • Cityscape 데이터에 대해 이를 적용할 수 있었다.

4.3 Analysis of the generator architecture

  • U-Net 구조를 이용해서 저수준 정보를 전송하게 되는데 도움이 되는지 알아보기 위해서 encoder-decoder와 비교를 하였는데, encoder-decoder의 경우 실제적인 이미지를 얻을 수 없었다.

4.4 From PixelGANs to PatchGANs to ImageGANs

  • 패치의 크기 N을 1x1의 PixelGAN에서 286x286의 ImageGAN까지 늘려가며 효과를 측정하였다.
  • PixelGAN은 샤프니스에 효과가 없었으나 colorfullness의 효과를 증가시켰다.
  • 16x16 PatchGAN은 샤프니스가 상당히 올랐으며 FCN-score에서도 높은 점수를 얻었으나 여전히 tiling 아티팩트가 나타났다.
  • 70x70 PatchGAN은 아티팩트가 완화되었고, 좀 더 나은 점수를 보였다.
  • 286x286 ImageGAN은 더 이상 품질이 향상되지 않았으며, 오히려 FCN-score가 줄어들었다. ImageGAN은 더 많은 파라미터를 갖고 네트워크가 더 깊기 때문에 학습이 어려웠다.
  • 이 논문에서 특별한 언급이 없는 한 70x70 PatchGAN에 L1+cGAN로스를 사용하였다.

Fully-convolutional translation

  • PatchGAN은 고정된 패치 discriminator를 사용하므로 어떠한 이미지 크기에도 적용할 수 있다.
  • 마찬가지로 generator또한 convolutionally하게 적용할 수 있으므로 학습할 때 보다 더 큰 이미지에도 적용할 수 있다.

4.5 Perceptual validation

4.6 Semantic segmentation

  • Semantic segmentation에 적용해보기 위해 cityscape에서 photo -> label 데이터에 cGAN을 테스트하였다.
  • 이것이 GAN이 레이블 데이터를 생성해내는 첫번째 시도일 것이며, 성공적으로 레이블을 생성해 내었다.
  • 그 결과는 이미지에 적용한 것 보다 좀 더 discrete하고 continuous-valued variation하였다.
  • 하지만 cGAN보다 L1 리그레션을 사용한 것이 더 성능이 좋았다.

4.7 Community-driven Research

5. Conclusion

6. Appendix

6.1 Network architectures

  • Ck는 Convolution-BatchNorm-ReLU를 의미한다.
  • CDk는 Convolution-BatchNorm-Dropout-ReLU를 의미한다. Dropout rate는 50%이다.
  • 모든 컨볼루션은 4x4 크기이며, stride 2이다.
  • encoder와 discriminator에 사용된 컨볼루션은 2 단위로 다운샘플링된다.
  • decoder에서는 2단위로 업샘플된다.

6.1.1 Generator architecutres

  • encoder-decoder 구조는 다음과 같다
    • encoder: C64-C128-C256-C512-C512-C512-C512-C512
    • decoder: CD512-CD512-CD512-C512-C256-C128-C64
  • decoder의 마지막 층이 끝나면 컨볼루션을 수행하여 채널까지 출력 형식에 맞추고 다음 Tanh를 적용한다.
  • 한가지 예외로 encoder의 처음 C64에서는 BatchNorm을 적용하지 않는다.
  • encoder의 모든 ReLU는 leaky로 0.2의 기울기를 가지며, decoder에서는 일반적인 ReLU를 사용한다.
  • U-Net 구조는 다음과 같다.
    • U-Net decoder: CD512-CD1024-CD1024-C1024-C1024-C512-C256-C128

6.1.2 Discriminator architectures

  • 70x70 discriminator 구조는 다음과 같다.
    • C64-C128-C256-C512
  • 마지막 레이어 이후 컨볼루션이 적용되어 1개을 만들고 Sigmoid function을 통과시킨다.
  • 처음 C64 층에서는 BatchNorm을 사용하지 않는다.
  • 모든 ReLU는 leaky로 0.2의 기울기를 가진다.
  • 다른 discriminator는 기본적으로 같은 구조를 가지나, receptive field의 크기에 따라 깊이가 달라진다.
    • 1x1 discriminator: C64-C128 (모든 컨볼루션은 1x1 필터이다.)
    • 16x16 discriminator: C64-C128
    • 286x286 discriminator: C64-C128-C256-C512-C512-C512

6.2 Training detail

6.3 Errata

 

 


Add a Comment Trackback