https://arxiv.org/abs/1611.07004
https://github.com/phillipi/pix2pix
Abstract
Computer vision분야에는 많은 task들이 존재하며 그로 인해 우리는 각 task의 Input image에 대한 Output image의 translating 방법을 찾아야 했다.
Traditional methods는 각 task에 알맞은 application specific algorithms을 사용했지만 저자는 pixel을 사용하여 pixel을 예측하는 공통적 문제를 하나의 architecture로 해결하기를 원했고 Input image에 대한 Output image의 translate 과정을 image to image translation으로 정의하고 framework를 제안한다.
> 동일한 Predict pixels from pixels이라는 문제를 해결하는데 너무 세분화되어 있었음(경계선 이미지 복원, 흑백 이미지 변경 등)
pix2pix은 Input image와 Output image를 매핑하는 손실함수를 학습하고 매핑이 잘 이뤄졌는지를 확인하기 위한 손실함수 또한 학습하기 때문에 다양한 task에 동일한 방식으로 접근할 수 있다.
> 변환 문제 해결을 위한 일반적인 framework를 개발함
실제로 software 출시를 통해 입증했고 synthesizing photos from label maps, reconstructing objects from edge maps, colorizing images 등의 작업에 효과적이다.
Introduction
대부분의 Computer vision의 문제는 Translate이며 Traditional methods는 각 task에 맞게 설계된 방법을 사용했지만 각 task는 pixel에서 pixel을 예측한다는 공통점이 있다. 논문에서는 이를 image to image translation으로 정의하고 모든 문제에 대한 공통의 framework를 제안한다.
image to image translation task에 대해 CNN을 활용한 방법들이 연구가 되었는데 이는 손실함수가 minimize 할 수 있게 설정을 해야 하며 그렇다고 해도 Euclidean distance(L2)를 사용하면 predicted와 truth의 pixel 차이의 평균을 최소화하기 때문에 흐린 이미지를 생성하게 된다.
> 새로운 이미지 생성시 input만으로 건물의 재질을 알 수 없기에 loss가 커지지 않도록 중간의 애매한 것을 선택하기 때문(표의 L1 확인)
위의 문제를 해결하기 위해 GAN을 사용한다. GAN은 predicted가 real image인지 fake image인지에 대한 손실함수를 최소화하여 현실에 있을 법한 이미지를 만드는데 특화됐기 때문에 흐린 이미지가 생성되지 않도록 한다.
본 논문에서는 조건부 생성 작업을 진행하기 위해 cGAN을 사용할 것이다. GAN이 출시되고 효과적인 이미지 변환에 대한 방법들이 많이 연구되었지만 이 연구는 다양한 문제에 대해서 cGAN은 reasonable results를 보여준다는 것에 초점을 맞췄다.
Related work
기존의 image to image translation 알고리즘은 unstructured loss로 판단하여 학습을 진행하였다. pixel과 pixel은 상관관계가 높기 때문에 이와 같은 가정을 하는 것을 옳지 않다.
(unstructured loss: pixel과 인접한 pixel이 있을 때 둘 사이가 독립이라는 가정)
Conditional GANs
cGAN은 structured loss를 학습하기 때문에 연관관계(joint configuration)까지 고려하여 학습이 가능하다. 그러므로 다른 변환 알고리즘에 비해 좋은 결과를 얻을 수 있고 이 논문에서 base model로 사용한다.
학습을 위해서 {x, y} pair가 필요하고 G(x)는 학습 후 얻을 수 있는 결과 중 하나이다.
D는 가짜와 진짜 {edge, photo} 튜플을 판별하고 G는 edge를 기반으로 생성된 photo {edge, photo}를 통해 D를 속인다.
conditional setting에 GAN을 적용한 것이 최초는 아니지만 이전의 방법들은 application별로 알고리즘을 사용해야 했다. 하지만 이 논문의 framework는 application별로 별로의 작업을 해주지 않아도 된다.
Method
GAN은 random noise vector를 통해 G : z -> y 매핑을 학습하는 모델이다. cGAN은 {x, y} -> y를 매핑하며 G는 가짜를 판별하는 D에 실제 이미지와 구별할 수 없는 출력을 생성하도록 훈련된다.
GAN Objective loss
$$ L_{cGAN}(G,D) = \mathbb{E}_{y}[log \ D(x,y)]+\mathbb{E}_{x,z}[log(1-D(x, z))] $$
D는 D(x)를 minimize하고 G는 G(x)는 minimize하면서 대칭적인 학습을 하며 G는 D가 구별할 수 없을 정도의 진짜 이미지 같은 가짜 이미지를 생성하며 D는 G가 만든 가짜 이미지와 진짜 이미지를 잘 구별하도록 학습된다.
cGAN Objective loss
$$ L_{cGAN}(G,D) = \mathbb{E}_{x,y}[log \ D(x,y)]+\mathbb{E}_{x,z}[log(1-D(x, z))] $$
cGAN과 GAN의 차이는 condition x의 추가 유무이다. GAN은 output의 종류와 관계 없이 진짜 같은 이미지를 생성하도록 학습하였다고 한다면 cGAN은 생성된 이미지의 label까지 확인한다.
pix2pix논문에서는 L2 distance와 GAN objective loss를 합쳐서 loss로 사용하는 것이 더 좋다는 것을 발견하였고 이는 학습에서 G가 생성한 이미지가 D를 속이며 ground truth 이미지와 비슷한 이미지를 생성할 것이다.
하지만 L2보다 L1에서 blur효과가 덜하기 때문에 L1를 주로 사용한다.
(ground truth란 학습하고자 하는 데이터의 원본, 실제 값이다.)
L1 distance
$$ \mathfrak{L}_{L1}=\mathbb{E}_{x,y,z}[\left\|y-G(x,z) \right\|_{1}] $$
final objective
$$ G^{*}=arg \ min_{G} \ max_{D} \ \mathfrak{L}^{cGAN}(G,D)+ \lambda \mathfrak{L1}(G) $$
GAN objective loss 와 L1 distance를 고려한 최종 목적함수는 위와 같다.
초기 cGAN 실험에서는 random noise z를 제공하지 않았고 이로 인해 deterministic 한 결과를 내는 문제가 있었다. 이를 인지하고 pix2 pix는 random noise z를 제공하려고 했고 실험 결과 G가 z를 무시하는 방향으로 학습하거나 모델 성능에 안 좋은 영향을 주는 방향으로 학습했다.
z가 없기 때문에 mapping 과정에서 stochastic 한 결과를 내지 못하는 것은 cGAN에서 해결되지 않은 문제지만 본 연구에서는 dropout을 사용하여 조금의 stochastic 한 효과를 낼 수 있도록 하였다.
Network architectures
Generator
image to image translation problems은 고해상도의 input grid를 고해상도의 output grid에 매핑해야 한다는 점과 입력과 출력의 structure는 그대로 유지하는데 surface appearance만 달라진다는 점이다.
Encoder-decoder 구조는 입력의 크기를 점진적으로 줄이며 프로세스가 역전되는 병목 레이어까지 레이어를 통해 정보가 전달된다. 하지만 이 경우 입력과 출력 간에 low-level information이 전달되고 이를 해결하기 위해 U-Net과 같이 해당 layer의 정보를 직접 전달한다. 이렇게 하면 residual connection을 사용하여 input의 sturcture information을 공유하여 위의 문제를 해결할 수 있다. image colorization의 경우 각 layer에서 가장자리 위치를 공유하며 학습된다.
Discriminator
Patch-GAN 구조를 사용하며 이는 이미지를 NxN크기로 나누고, 각 Patch에 대해 참과 거짓을 판별한 뒤 참이 많으면 참으로 거짓이 많으면 거짓으로 분류하는 방법이다
지역적 특징이 반영되기 때문에 high-frequency를 구분하는 게 적절하다.
Experiments
Conditional GAN의 일반성(Generality)를 실험하기 위해 여러 가지 task를 실험했다.
1. Semantic label <> photo
2. Architectural labels <> photo
3. Map <> aerial photo
4.BW <> color photos
5. Edges <> photos
6. Sketch <> photos
7. Day <> night
8. Thermal <> color
9. Photo with missing pixels > inpainted photo
그 결과 L1 loss + cGAN을 사용한 경우 제일 성능이 좋았고 Encoder-Decoder 구조 보다 U-NET구조의 성능이 더 좋다는 것을 입증했다.
Conclusion
image-to-image translation 문제에 대해 cGAN이 괜찮은 접근법이라는 것을 보여준다. 이 네트워크의 문제(visual artifacts가 생기는 문제)를 L1 loss를 통해 넓은 범위 문제 해결에 적합하는 것을 입증했다.