ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [논문리뷰] Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network (SRGAN)
    Paper Review/Computer Vision 2020. 4. 6. 23:33

    해당 논문은 4X upsacling이 가능한 최초의 framework 입니다. SISR의 정확성 문제와 속도 문제가 많이 해결되었으나, perceptual texture detail이 부족한 문제를 해결하기 위한 모델입니다.

     

    Introduction

    기존 방식 (optimization target of supervised SR algorithms)의 목표는 MSE를 줄여서 PSNR을 키우는 것이었으나, PSNR이 pixel-wise 기반이라서, perceptually relevant 표현을 잘 하지 못하는 한계를 갖고 있었으며, GAN과 perceptual loss function을 이용하여 이를 해결하는 모델 SRGAN을 고안하였습니다. 

     

    위의 그림을 보면, bicubic의 PSNR이 SRGAN의 PSNR보다 크다는 것을 확인할 수 있습니다.

    하지만 실제 사람의 눈으로 봤을 땐, SRGAN이 original과 훨씬 유사하게 표현됬음을 알 수 있습니다.

    따라서 PSNR이 매우 크다고 해서 사람의 눈으로 봤을 때 반드시 고화질로 느껴지는 것은 아닙니다. 

     

    1. Design of convolutional neural networks

    Deep network 는 학습이 어렵다는 문제가 있지만, 잠재적으로 네트워크의 정확성을 상당히 상승시킬 수 있어서, 많이 사용됩니다. 학습이 어렵다는 단점을 해결하기 위해서 SRGAN에서는 batch normalizationskip connection을 사용했습니다. 또한 upsacling filter를 사용하여 학습의 정확성과 속도를 상승 시켰습니다. 

    더보기

    batch normalization : neural network 성능 향상을 위한 기술. input layer를 정규화하는 것. 내부의 co-variate shift를 막기 위해서 사용

     

    skip connection : recurrent unit. network의 input과 output을 더한 것을 다음 layer의 input으로 사용. network architecture를 relieve 하기 위해서 사용

     

    upsacling filter : conv layer를 통과하여 줄어든 width, height를 늘려주는 필터. 4X upscaling 하면 16X pixel이 됨

     

    2. Loss function

    기존 MSE : pixel wise

    MSE의 단점 : smooth reconstruction을 위해서 high texture detail이 잘 살아 있는 mutiple potential solution들을 평균내버리면서, 과도하게 smooth해졌고, 이로 인해 pectual quality가 떨어집니다. 

     

    제안된 해결책 : 1) GAN을 적용하자 2) perceptual loss function을 사용하자

    1) GAN : 하나의 manifold를 다른 manifold로 mapping 하는데에 사용합니다. natural image에서 recontrunction 해서 보다 더 설득력 있는 solution을 얻을 수 있습니다. 

    2) adversarial loss와 content loss를 포함하는 perceptual loss를 정의합니다.

    • adversarial loss : super-resolved 이미지와 original photo-realistic 이미지를 구별하는 네트워크를 학습
    • content loss : pixel space의 similarity 대신 perceptual similarity를 학습

     

    Method

    • \(I^{LR}\) : low resolution image, input
    • \(I^{SR}\) : super-resolved image, output
    • \(I^{HR}\) : high resolution image, ground truth
    • \(I^{HR}\)에 gausssian filter를 적용해서 \(I^{LR}\)을 얻음
    • 학습 목표 : generating function G 찾기 & perceptual loss \(l^{SR}\) 구하기 

    1. Adeversarial Network Architecture

    General Idea 

    SR 이미지와 실제 HR을 구별하도록 학습된 네트워크 D를 속이는 것을 목표로 하는 네트워크 G를 학습시키는 것

     

    very deep generator network G 

    3X3 filter에 64 feature map으로 이뤄진 conv layer 두 개를 사용하며 각 conv layer에 잇따라 batch normalizationd이 있습니다. Activation function으로는 각 dimenstion마다 학습된 ReLu를 사용하는 parametricReLu를 사용합니다. Resolution을 증가 시키기 위해서 sub-pixel convolutional layer를 사용합니다. 

    더보기

    sub-pixel convolutional layer (ESPCN에서 소개)

    SR 문제는 pixel 수가 점차 늘어나야 해결이 되는데, CNN을 통과하면, image dimension이 줄어들거나 유지만 됩니다. 이 때 sub-pixel convolutional layer를 통과하면 pixel 수를 증가시켜서 해상도를 높여줍니다.  

     

    discriminator network D

    Maxpooling을 피하기 위해서 activation function으로 LeakyReLu를 사용합니다. 마지막에 sigmoid activation function을 사용하여, sample classification의 확률을 얻습니다. 

     

    2. Perceptual loss function

     

    \(l^{SR}\) 는 generator network의 성능에 매우 중요합니다. 

    우측에서 볼 수 있듯, \(l^{SR}\) 는 content loss \(l_{X}^{SR}\)과 adversarial loss \(l_{GEN}^{SR}\)의 weighted sum으로 이뤄집니다. 

     

    Content Loss \(l_{X}^{SR}\) 

    기존 MSE는 PSNR 값을 증가시키는 것에만 집중해서, high-frequency content를 자주 놓쳤고, 이로 인해서 perceptually 불만족스러운 solution을 만들었습니다. 따라서 Perceptual Similarity를 유사하게 표현할 수 있는 VGG loss를 정의했습니다. VGG loss는 pre-trained 19 layer VGGnet의 ReLu에 기반하였습니다. 

    즉, VGG 19 모델을 사용하여, \(I^{SR}\)과 \(I^{HR}\)의 VGG 모델 내의 feature map의 차이를 loss로 사용하는 것입니다. 

     

    Adversarial Loss \(l_{GEN}^{SR}\)

    Discriminator를 속여서 natural image와 비슷하게 generating을 하기 위해서, GAN의 generative componenet를 추가하였습니다. 

    모든 training sample에 대한 discriminator의 확률에 기반하여 정의하였고, \(I^{SR}\)을 조금 더 진짜에 가깝게 만드는 역할을 합니다. 

     

     

    Experiments

    * Reconstruct하는 여러 다른 접근들의 능력을 수치화 하기 위해서 MOS test를 진행했습니다.

     

    좌측의 표는 PSNR, SSIM, MOS loss function으로 SRRestNet과 SRGAN을 비교한 것입니다.

     

    SRResNet처럼 pixel 기반인 경우, PSNR이 SRGAN에 비해서 크긴 하지만, MOS 값은 SRGAN이 더 큼을 확인할 수 있습니다. 

     

     

     

    위의 표는 SRResNet, SRGAN 외의 다양한 모델들에 대해서 loss function을 평가한 것입니다.

    SRResNet의 경우 PSNR 값과 SSIM 값이  두드러지지만, SRGAN은 MOS 값이 두드러짐을 알 수 있습니다. 

     

    그리고 위의 그림을 통해서, PSNR과 SSIM 값이 SRResNet이 크지만, 눈가 주름이나 홍체의 디테일함이 SRGAN에서 더 잘 묘사됨을 알 수 있습니다. 이를 통해 Introduction에서 설명했듯, PSNR의 값이 크다고 해서 반드시 사람의 눈으로 보기에도 더 선명해 보이는 것이 아님을 알 수 있고, 이 원인은 perceptual 표현에 집중하지 못하는 pixel wise의 한계임도 확인할 수 있습니다. 

     

    Self Q&A

    더보기

    1.1.2에서 batch normalization을 co-variate shift 막기 위해서 사용한다는데, co-variate shift가 무엇인지

     

    1.1.2에서 skip connection을 사용하는 이유가 network architecture를 relieve 하기 위해서라는데, 이 표현의 의미가 무엇인지 잘 와닿지 않음

     

    3.4에서 SE-based contet loss와 adersarial loss가 compete한다고 되어있는데, 이 과정이 어떻게 이뤄지는지

     

    느낀점

    더보기

    지금까지 리뷰한 논문이 해당 페이퍼 포함해서 3편인데, 그 중에서 제일 어려웠다. 오히려 CV 첫 논문 리뷰할 때보다 모르는 내용도 훨씬 많고, 용어도 유난히 조금씩 다르게 표현된 것 같아서 어려웠던 거 같다.

    Perceptual texture detail이 잘 살도록 네트워크를 구현하는 것이, 그냥 단순히 숫자 적으로 PSNR 값을 증가시키는 것 보다, 사람이 눈으로 보기에 훨씬 좋다는 것을 느꼈다.

     

    단순히 숫자 표현에만 집중하는 것이 아니라, 또 다른 한계점과 문제를 찾아서 해결하려는 점이 좋았다. 

     

    댓글 1

    • 지승우 2021.02.17 02:18

      1.1.2에서 batch normalization을 co-variate shift 막기 위해서 사용한다는데, co-variate shift가 무엇인지
      A. 해당 내용은 batch normalization 논문에 나와있는데요, Covariate Shift는 이전 layer의 파라미터 변화로 인해 현재 layer의 입력 분포가 바뀌는 현상입니다. 따라서 BN이나 whitening 기법을 사용하게 되는데요. 쉽게 설명하자면, 입력 데이터를 모델에 넣기 전에 Regularization을 하는 원리를 layer 사이사이에 넣는다고 생각하시면 됩니다.

      1.1.2에서 skip connection을 사용하는 이유가 network architecture를 relieve 하기 위해서라는데, 이 표현의 의미가 무엇인지 잘 와닿지 않음
      A. 해당 내용은 ResNet 논문에 나와있는데요. 기존 CNN 계열의 network들은 layer가 깊어질수록 test error 뿐만 아니라 train에서도 정확도 낮아지는 즉, gradient vanishing/exploding 문제가 발생하였는데요. 따라서 residual block이라는 개념을 도입하여 network output이 x가 되도록 mapping하는 것이 아닌, 마지막 layer에 x를 더해 네트워크의 output이 0이 되도록 학습하는 것입니다. 이렇게 될 경우 + x 덕분에 backpropagation을 진행해도 미분값이 최소 1 이상을 가지기 때문에 gradient vanishing 문제를 해결하였습니다.


      3.4에서 MSE-based contet loss와 adersarial loss가 compete한다고 되어있는데, 이 과정이 어떻게 이뤄지는지
      A. 논문에서는 Generator를 통해 생성한 이미지를 pretrained VGG19에서의 feature map으로 content loss를 구하고, Generator에서 생성된 이미지를 기반으로 Discriminator에서 adversarial loss를 구합니다. 서로 적대적으로 학습하는 것이 GAN이기 때문에 Generator 입장에서는 content loss를 좋게 나오게 하여 Discriminator가 잘 구분을 할 수 없게, 즉 adversarial loss 값을 안좋게 하려고 하며, Discriminator의 입장에서는 이것이 정반대가 되므로 서로 competition을 하는 것이라고 생각하시면 될거 같습니다.

Written by Geulleun