Deep learning/Paper review

Pix2Pix paper review (CVRP2017)

위풍당당 가리비 2023. 6. 24. 11:36
반응형

Summary


Problem

application마다 똑같은 구조를 사용하는데 여러 가지 loss를 사용하는 게 맘에 안 든다. loss를 디자인하기 위해서는 전문적인 지식도 필요하다. loss도 한번 배워보자.

 

Inspiration

adversarial network가 잘되니깐 이리저리 적용해본거 같음. 어차피 어떤 application이던 image to image니깐 필요한 정보만 준다면 같은 구조로도 잘 되지 않을까?

 

Solution

conditional GAN을 사용한다. Generator는 UNet base로 만들고, discriminator는 patchGAN으로 만든다. GAN loss는 vanila GAN loss + L1 norm을 사용한다.

 

UNet은 skipconnection을 사용해서 bottleneck을 통과하지 못하는 정보들을 output단으로 전달해 준다.

 

L1 norm은 blurry한 output을 만드는 경향이 있는데 그 말을 바꿔서 생각하면 L1을 사용하면 low frequency 정보를 전달할 수 있다고 해석할 수 있다. 그러면 high frequency information은 patchGAN의 discriminator구조를 사용하면 잡아낼 수 있다고 생각함. patchGAN은 11X11 같은 patch마다 real, fake를 구분하기 때문에 좀 더 디테일한 정보들을 보기 때문에 high frequency 정보를 복원할 수 있다고 생각함.

 

즉 정리하면 low frequency 정보는 L1 loss로 학습하고, high frequency 정보는 PatchGAN discriminator로 학습한다.

 

Main contribution
  1. cGAN을 여러 application에 실험해서 결과가 잘 나오는지 확인해 본다.
  2. Application specific loss design이 필요 없는 simple frame work

 

Architecture

conditional GAN의 기본적인 구조, input x 가 discriminator에도 들어 간다는게 vanila GAN과 다르다.

 

  • Generator
    • Unet based generator, AE (Auto Encoder) 구조 2개를 실험해 봤다. 결과는 Unet base 승
    • 'Decoder stack'이라고 표현한 거는 U-Net논문 읽으면 알 수 있을 듯. 좀 더 자세한 설명은 논문 6.Appendix에 있음.

AE와 U-Net의 차이. skip connection이 U-Net의 가장 큰 특징
AE layer
Unet decoder layer

반응형

 

  • Discriminator
    • Discriminator는 patch 사이즈를 바꿔가면서 실험을 해봤고 너무 작은 patch에서는 uncertainty region이 많았다. 실험에서는 70X70이 가장 적절해 보이는 결과가 나왔다.

실험해본 discriminator 구조들
286X286도 실험해봤었음

 

Loss function

그냥 conditional GAN loss + L1 distance을 사용했다. 말이 conditional GAN이지 vanilla GAN loss랑 똑같다.

Total loss function
Conditional GAN loss
L1 lsos between input and output for auto encoding process

 

Insteresting point of paper
  1. conditional GAN이라는 이미 존재하는걸 자기들이 나름 의미를 붙여서 해석했다. loss function design이 필요 없는 archtecture라고 약을 팔았다. 결국 더 좋은 결과를 얻기 위해서는 application specific 혹은 task specific한 loss design이 필요해 보임.

 

Strength


  1. 다양한 application에 적용해 봤고 많이 실험해 봤다. GAN의 활용성을 보여준 논문.

 

Weakness


  1. naive한 loss를 사용하니깐 성능이 그렇게 좋지는 않았다.
  2. label → image
    • blurry하다.
    • 차를 만들 때 전체적인 틀은 잘 따라가는데 후미등이라든지 하는 detail한 부분은 잘 못 만든다.
    • output 이미지 deformation이 심하다.
  3. inpainting
    • 형태는 물론이고 color가 많이 다르다.
  4. failure case
    • input 이미지가 sparse하거나 unusual한 input은 잘 못했다. 근데 unusual한 input에 잘 동작하지 못하는 건 딥러닝의 고질적인 문제이므로 pix2pix만의 문제는 아닌 것으로 보인다.

 

Appendix


  1. structured loss
    • output이 어떤 구조를 이룰 수 있도록 만들어주는 loss, 예를 들어서 문장 번역을 할 때 car boar 보다는 car door가 더 나올 확률이 높다. 이런 structure를 고려해서 예측하는 걸 structured prediction이라고 한다. cGAN은 input이라는 추가적인 정보를 discriminator에 넣어줘서 output이 input까지 고려해서 나올 수 있도록 guide를 잡아주는 것이다.
    • 좀 더 쉽게 말하면 그냥 input → output만 하는 게 아니라 input + additional infomation → structured output이 나올 수 있도록 만듦.
반응형