iMTE

Super-resolution GAN (SRGAN) 본문

Deep learning/GAN

Super-resolution GAN (SRGAN)

Wonju Seo 2018. 7. 19. 10:51

Super-resolution GAN (SRGAN)

Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network

Ledig, Christian, et al. "Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network." CVPR. Vol. 2. No. 3. 2017.

간략하게 설명하자면, 기존의 super-resolution 문제에 대해서 단순히 MSE(Mean squared error)를 loss function(objective function)으로 정해놓고 optimization을 해본 결과, high peak signal-to-noise ratio (PSNR)을 얻을 수 있었지만, high frequency 성분을 갖는 texture를 잘 표현하는 것은 어렵다는 것이 이 논문이 문제 제기를 했다. 다음 그림은 이 문제를 잘 드러내고 있다.

맨 왼쪽 그림은 bicubic interpolation 방법, 그다음은 MSE 기반, 그 다음은 이 논문에서 제안하는 SRGAN의 결과를 보여주고 있다. bicubic이 비해서 MSE와 SRGAN은 original image를 더 잘 표현하고 있는 것을 확인할 수 있다. 하지만 MSE는 image자체가 흐릿한 형태를 띄고 있는데, 이는 MSE의 특징인 average를 학습하기 때문이다. MSE의 loss function은 이 논문에서 다음과 같이 설명한다.

위 식은 앞에서 언급한 것 처럼, 높은 PSNR을 얻을 수 있지만 overly smooth된 정보를 얻어서 high frequency content를 표현하지 못하는 문제가 발생한다.

따라서, 이 논문에서는 pixel-wise losses(MSE) 대신에 perceptual similarity를 주목한 loss function을 제안하였다. 방법은 Pre-trained된 VGG net을 사용해서 feature map에서의 Euclidean distance를 계산하는 방법이다. (VGG로 추출한 feature가 얼마나 비슷한지 보자!)

Generative adversarial network에 맞게 adversarial loss를 추가해서, weighted sum을 하면 최종 loss function이 다음과 같이 정의된다.

위와 같게 loss function 을 설정하고 SRGAN을 구성하면 된다. 네트워크 구조는 다음과 같다.

Keras로 구현한 다음에 CelebA 데이터에 적용시키면 다음과 같은 결과를 얻을 수 있다.

위에서 2 사진은 high resolution image에서 low resolution으로 바뀐 이미지들이고 밑의 사진은 generative model로 부터 생성된 high resolution image와 original image사이의 차이를 보여주고 있다. epoch을 5000정도로만 해서 (논문에서는 10^(6)까지 update하였다.) 살짝 흐릿하긴 하지만, 나름 괜찮은 결과를 얻을 수 있었다.

주요하게 볼 key point는

1. loss function (perceptual content loss)를 변형

2. network 구조에 깊은 residual block과 skip connection을 사용

max pooling 대신에 strides=2인 ConvNet사용

LeakyReLU (alpha =0.2) 사용

VGG net을 사용해서 feature map 사이의 euclidean distance를 구한점(1에 포함)


Epoch 10000

Epoch 13000

epoch 18000

학습이 진행될 수록 low resolution image에서 high resolution에 근사한 이미지를 얻을 수 있음을 알 수 있었다. 하지만, 학습하는 과정에서 나온 결과들 중에 밑의 그림과 같은 문제가 발생하기도 했다. 가정하기로는, 학습이 덜 되었거나, CNN layer를 통과하면서 어느 하나의 주요 feature가 증폭되는 현상때문일 수 있을 것이다. RNN에서 multi-step forecasting을 할때, positive feed back에 error가 들어가 증폭되는 것과 비슷한 현상일 수 있다. (극히 개인적인 의견입니다.)

'Deep learning > GAN' 카테고리의 다른 글

Pix2Pix  (0) 2018.07.21
DiscoGAN  (0) 2018.07.20
CycleGAN  (0) 2018.07.19
Conditional GAN  (0) 2018.06.15
교재 : Learning Geneartive Adverarial Networks  (0) 2018.02.10
Comments