ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Pix2Pix (Image-to-Image Translation with cGAN)
    GAN 2018. 11. 8. 20:35

    요약: cGAN을 image-to-image translation에 사용한다. 이 net은 input 이미지를 output 이미지에 매핑하고, 이 매핑을 훈련하기 위해 loss function을 학습한다. 이런 방법은 라벨맵으로부터 사진종합, edge맵으로부터 object 재구성, 이미지 색상화 등에 효과적이다.



    1. 소개

    ...


    2. 관련 연구

    과거 연구와 달리, G에 U-Net을 사용하고 D에 PatchGAN을 사용한다.

    PatchGAN은 이미지 패치단위로 구조를 penalize한다.


    3. 방법

    3.1 Objective

    전통 방법론은 GAN에서 L2 거리를 사용하였다.

    이때 G는 D를 속이기 위해 노력하면서, L2 안에 ground truth output이 가까워지도록 한다.

    논문에서는 실험을 위해 L2 대신 L1을 사용한다.

    objective는 아래와 같다.

    기존 cGAN에서 사용하던 방식인 noise z를 G의 input으로 사용하는 방식은 이 실험에서 사용하지 않는다.

    대신, 마지막 모델에서 noise를 dropout 형태로 G를 train 및 test할 때 일부 레이어에 적용한다.

    cGAN은 높은 확률적 output을 생성하고 따라서 조건부 분포의 full entropy를 확인하는 것은 중요하다.


    3.2 네트워크 구조

    G와 D는 convolution-BatchNorm-ReLU의 모듈을 사용한다.


    3.2.1 Generator with skips (U-Net)

    image-to-image translation 문제의 특징은 높은 해상도의 input grid를 

    높은 해상도의 output grid에 mapping하는 것이다.

    또한 input과 output이 서로 다른 외형을 나타날 수 있지만, 같은 구조로 표현된다.

    따라서 input 안의 구조는 output 안의 구조에 강하게 align된다.


    과거의 솔루션들은 bottleneck까지 점진적으로 downsample되고, 

    이후에 upsample이 되며, 모든 정보가 모든 레이어를 통과했다.

    하지만 이미지 문제에서 바람직한 것은 이런 정보를 net을 직접 뛰어넘는 것이다.

    이를 위해 논문에서는 connection을 skip하는 U-Net이 적용되었다.



    3.2.2 Markovian discriminator (PatchGAN)

    일반적으로 L2 loss는 이미지 생성문제에서 blur한 결과를 만든다.

    비록 이 loss는 높은 빈도의 crispness를 만드는데 실패하지만, 

    그럼에도 많은 경우에 low frequency를 정확하게 capture한다.

    이 low frequency에서의 correctness를 만들기 위해 기존의 L1이 적용된다.


    이 방식은 GAN의 D가 높은 빈도의 구조에서만 L1 term에 따라

    낮은 빈도의 correctness를 만드는 것을 제약시킨다.

    높은 빈도의 모델을 만들기 위해, 로컬 이미지 패치 안으로 구조를 제약하도록 한다.

    따라서 D의 구조를 PatchGAN으로 한다.

    이런 D는 이미지 안에서 각각의 N x N의 patch가 진짜인지 아닌지 구별하도록 한다.

    D를 이미지에 걸쳐 convolution하게 사용하여, 

    D의 최종 output을 제공하기 위해 모든 반응을 평균화한다.


    N은 이미지 전체 사이즈보다 작아도 되며, 높은 품질의 결과를 만든다.

    이 장점은 적은 파라미터, 빠른 학습, 큰 이미지에 적용되기 때문에 가능하다.


    이런 D는 이미지를 효과적으로 Markov Random Field로 만든다. 

    이때 patch diameter보다 더 떨어진 pixel들 간의 독립성을 가정한다.

    그러므로 이 PatchGAN은 texture/style loss 형태로 이해될 수 있다.


    3.3 최적화 및 추론

    D에서 한 번의 GD를 하는 대신에, G에서 한 번의 GD를 한다.

    원본 GAN 논문처럼 G를 log(1-D(x,G(x,z))를 최소화하도록 학습하는 것이 아니라, 

    logD(x,G(x,z))를 최대화하도록 학습한다.

    또한 D를 최적화할때 objective를 2로 나눠서 D가 G에 비해 상대적으로 늦게 학습하도록 한다.

    minibatch SGD, Adam solver를 사용하고 learning rate 0.0002, momentum 파라미터 β1 0.5, β2 0.999를 쓴다.


    일반적 방법과 달리, test시에 dropout을 사용하고 

    또한 batch normalization에선 training batch의 통계 대신에 test batch의 통계가 쓰인다. (재검토 필요한 부분)

    batch normalization 대신 이미지 생성에서 효과적인 instance normalization이 쓰인다.

    batch size는 1이 아니라 1~10 사이로 사용한다.


    4. 실험

    cGAN의 일반성을 실험하기 위해 사진 생성 같은 그래픽 task와 

    semantic segmentation 같은 비전 task 등을 포함한 다양한 것을 테스트한다.

    최근 결과들은 작은 데이터셋에서도 나올 수 있다.

    facade training set은 단 400개의 이미지로 구성되어 있다.


    4.1 평가 척도

    기존 방식인 pixel별 MSE 같은 것은 결과의 결합 통계를 평가하지 않는다.

    더 좋은 평가를 위해 다음 2가지 방식을 사용한다.


    먼저 real vs fake 인식분야의 Amazon Mechanical Turk (AMT) 를 사용한다.

    지도생성, 사진생성, 이미지 색상화에 이 방식을 쓴다.


    다음으로 종합된 도시풍경이 충분히 사실적이어서

    off-the-shelf recognition 시스템이 이 대상들을 인식할 수 있는지 아닌지 평가한다.


    FCN Score-8s 구조를 semantic segmentation에 사용하고, 도시풍경 데이터셋에 훈련시킨다.

    이후에 종합된 사진으로부터의 라벨에 대해서 정확도 분류로 종합된 사진을 평가한다.


    4.2 objective function의 분석

    L1만 하면 blur하다. cGAN만 하면 더 샤프하나 몇가지 인공물이 생긴다. 2개를 합치면 인공물이 줄어든다.

    이런 관측을 FCN score로 정량화한다. GAN기반의 objective가 더 높은 score가 나온다.


    또한 D에서 조건부를 제거하는 것을 실험한다.

    이 경우에 loss는 input과 output이 미스매치되는 것에 penalty를 주지 않고

    단지 output이 더 사실적인지에 집중한다.

    이 결과는 결국 낮은 성과가 나오며 G가 input 사진에 상관없이

    거의 정확한 같은 output을 생성할때 붕괴되는 것을 드러낸다.

    이때 loss가 input과 output 사이의 매칭의 질을 평가하는게 중요하고, 실제로 cGAN이 GAN보다 더 좋다.

    또한 L1을 추가한 것은 L1 loss가 ground truth output (input가 적절히 match된)과

    종합된 output (input과 적절히 match되지 않은) 사이의 거리를 penalize하면서 output이 input과 유사하도록 한다.

    따라서 L1+GAN이 input label map을 잘 따르는 사실적 output을 만드는데 효과적이다.

    L1+cGAN 역시 성과가 좋다.


    색상에 대해선 아래와 같다.

    cGAN의 효과는 샤프한 이미지를 만드는 것인데, input label map에 있지 않은 공간구조를 희미하게 한다.

    cGAN이 이미지를 더 칼라풀하게 만드는 것처럼 스펙트럼 차원에서 "샤프하게"하는 효과와 유사한 효과를 가진다.

    L1이 edge를 어디에 놓을지 정확히 모를때 blur하게 하듯, 

    픽셀이 어떤 그럴듯한 색상값을 가질지 불명확할때 회색으로 평균화한다.

    특히 가능한 색상을 넘어서 조건부 확률분포함수의 중앙값을 고를때 L1이 최소화된다.

    반면에 적대적 loss는 회색 output이 비현실적이라고 인식하고 진짜 색상분포를 매치하도록 한다. (Figure 7 확인)



    Figure 7의 plot은 Lab color space 안의 output color를 넘어선 marginal 분포이다.

    ground truth는 검은 점선이고, L1은 ground truth보다 더 좁아진 분포를 이끄는 것으로 보인다.

    이것은 L1이 회색으로 평균을 만드는 가설을 입증하는 것이다.

    반면에 cGAN을 사용하면 output 분포가 ground truth에 가까워지도록 한다.


    4.3 G 구조의 분석

    U-Net의 구조는 low-level 정보가 네트워크에 걸쳐서 shortcut하도록 한다. 이것이 더 좋은 결과가 나올까?

    Figure 5와 Table 2는 U-net과 encoder-decoder를 비교한 것이다.

    encoder-decoder는 사실적 이미지 생성이 불가능했다.

    U-Net의 장점은 cGAN에 대해 구체적으로 보이지 않는다.

    U-Net과 encoder-decoder를 L1 loss와 함께 훈련시키면 U-Net이 가장 좋은 결과를 낸다.


    4.4 From PixelGANs to PatchGANs to ImageGANs

    D에 patch 사이즈로 1 x 1 부터 286 x 286 을 테스트한다. ( Figure 6, Table 3, Figure 7 참고)

    1 x 1 의 PixelGAN은 샤프한 효과는 없지만 색상을 증가시킨다. 

    PixelGAN은 색상 히스토그램 매칭에 가벼운 솔루션이 될 수 있다.

    16 x 16 PatchGAN은 샤프한 효과가 있지만 인공물을 만들어낸다.

    70 x 70 PatchGAN은 위의 인공물을 없애고 미세하게 더 좋은 점수를 낸다.

    이것보다 큰 286 x 286 ImageGAN은 시각적 품질을 더 향상시키지는 않고 더 낮은 FCN 스코어를 기록한다.

    이 이유는 아마 더 많은 parameter와 깊이가 더 많이 있고 또한 훈련하기 어려운 점 때문일 것이다.


    * Fully-convolutional translation

    PatchGAN의 장점은 고정된 사이즈의 patch D가 큰 이미지에 적용될 수 있다는 점이다.

    또한 G도 큰 이미지에 convolutionally 적용가능하다.

    G를 256 x 256으로 훈련하고 512 x 512에 테스트한 결과는 아래와 같다.


    4.5 Perceptual validation

    map↔aerial photo 그리고 회색↔칼라의 perceptual realism을 검증한다.

    생성된 항공 사진에선 L1만 사용한 것보다 L1+cGAN의 성과가 더 좋다.

    반면에 사진에서 지도를 만들때는 6.1의 성과로, L1만 사용한 결과와 큰 차이가 있지는 않다.

    이유는 아마 마이너한 구조적 에러가 항공사진보다 지도에서 더 잘 보이기 때문일 것이다.

    다음으로 ImageNet에 색상화를 훈련시키고 split test를 진행했다.

    L1+cGAN은 22.5%가 나왔다.

    [61]의 full method는 27.8%가 나왔는데 이는 색상화를 잘하기 위해 특별히 엔지니어링된 것을 알 수 있었다.



    4.6 Semantic segmentation

    cGAN은 output이 디테일하거나 사진그래픽일때 효과적인 것으로 보인다. 

    이 유형은 이미지 프로세싱이나 그래픽 업무에서 일반적이다.

    그렇다면 semantic segmentation 같은 vision problem은 어떨까? output이 input보다 덜 복잡할까?

    이를 위해 cGAN을 도시사진→label에 훈련시킨다. (Figure 10, Table 6 참고)

    L1 loss가 없는 cGAN은 상당한 accuracy로 이 문제를 해결하는 것처럼 보인다.

    이는 GAN이 연속된 value의 이미지보다 더 구체적인 label을 잘 생성하는 것을 처음 증명한 것이다.

    그러나 가장 좋은 method로 보기는 어려운데, L1만 사용했을때 점수가 더 높기 때문이다.

    vision problem에서는 ouput이 ground truth와 가까워지는 것을 예측하는 것 등의 목표는 

    graphic task보다는 덜 모호하며, L1 같은 재구성 loss가 매우 충분한 것으로 볼 수 있다.


    4.7 Community-driven Research

    이 pix2pix 논문의 첫 발표 이후, 트위터 커뮤니티에서 다양한 분야에 적용하였다. (Figure 11 참고)

    이는 논문의 방식이 일반적인 image-to-image translation에 적용가능한 것을 증명한다.


    5. 결론

    결론적으로 cGAN은 다양한 image-to-image translation에 사용가능하다.

    특히 매우 구조적인 그래픽 output이 포함된다면 더 그렇다.

    이 네트워크는 loss를 학습하고 이는 다양한 세팅에 적용가능하도록 한다.


    'GAN' 카테고리의 다른 글

    CycleGAN (Unpaired Image-to-Image Translation)  (0) 2018.11.13
    cGAN (Conditional GAN)  (0) 2018.11.07
Designed by Tistory.