[Paper Review] Accurate Image Super-Resolution Using Very Deep Convolutional Networks

Abstract
 본 논문은 매우 정확한 Single-Image Super Resolution(SISR) method를 제안하는 논문이다. Network의 깊이를 증가시키는 것이 정확성 향상에 큰 도움을 주었다. Very Deep Network를 사용할 때는 수렴 속도가 중요한 issue가 된다. 따라서 residual learning을 사용하고 learning rate를 SRCNN보다 10의 4승 배 크게 주며 gradient clipping을 이용하여 gradient exploding을 방지하도록 하였다.

Introduction
 SISR에는 bicubic interpolation과 같은 많은 solution들이 존재한다. 이전에 발표된 CNN based SISR method인 SRCNN은 end-to-end로 LR로부터 HR로 mapping해주는 function을 학습하여 handcrated features를 사용하지 않고 SOTA를 보여주었다.
 SRCNN이 SR 문제에 있어서 딥러닝을 성공적으로 도입하기는 했으나 몇 가지 문제가 존재하였고 본 논문에서는 이를 아래와 같이 해결하고자 하였다.

1. Context : Relies on the context of small image regions
 -> 매우 작은 patch을 이용하여 세세한 부분까지 복원을 하기는 어렵기 때문에 receptive field를 매우 크게 하여 큰 맥락에서 이미지 정보를 고려할 수 있도록 하였다.

2. Convergence : Training converges too slowly
 -> Residual learning with gradient clipping and extremely high learning rate 으로 빠르게 학습이 수렴할 수 있도록 하였다.

3. Scale Factor : The network only works for a single scale
 -> 단일 Network가 multi-scale factor에 대해서 super resolution할 수 있도록 하였다.


Related work
 SRCNN은 3개의 layer(patch extraction/representation -> non linear mapping -> reconstruction) 로 구성되어 있다. SRCNN 논문에서는 Layer를 더 깊게 쌓으려는 시도를 했으나 성능이 더 안좋아지는 현상을 겪었다고 한다.
 그러나 본 논문에서는 네트워크를 깊게하는 것이 성능을 높인다고 주장한다.

 Training 에 있어서 SRCNN은 low frequency(resolution) image를 auto-encoder 처럼 high frequency image로 복원하는 것을 학습하므로 수렴 속도가 굉장히 느리다. 반면 VDSR은 high frequency image를 input으로 하기 때문에 수렴 속도가 빠르고 성능도 좋다고 한다.

 Scale 에 있어서 SRCNN은 multi scale에 대해서 SR하고자하면 network를 여러개 두어야 하는데 VDSR은 하나의 network가 여러개의 scale를 다룰 수 있다.

Proposed Network

  * 첫번째와 마지막 layer를 제외하고, 나머지 layer에서는 64개의 (3 x 3 x 64) 필터를 사용하였다. 마지막 layer에서는 한개의 (3 x 3 x 64) 필터를 사용하였다.

 * 이미지의 가장자리 부분 까지도 정확하게 predict하게 하기 위해서 zero-padding하였다.

 * Image detail이 predicted된 후에, input 과 add되어 최종 output이 나오게 된다.

Training
 loss function - model의 output과 target(HR image) 사이의 MSE loss로 학습된다. momentum 0.9를 사용하였고 weight-decay 값은 0.0001 을 사용하였다.

 learning rate - deep 한 network를 학습시키려면 제한된 시간내에 수렴시키는 것은 굉장히 어렵다. SRCNN은 learning rate가 10의 -5승으로 매우 작았음에도 불구하고 수렴되기 까지 학습을 진행시키지 않았다.

 본 논문에서는 learning rate를 높게 하여 training 수렴 속도를 빠르게 한다. 다만, learning rate를 높게만 잡아버리면 gradient vanishing/exploding과 같은 문제를 야기하므로 gradient clipping을 사용하였다.

 Adjustable Gradient clipping - 보통 Gradient clipping이라고 하면 gradient 값을 [−θ, θ] 사이에 두도록 하는 것이 일반적이다. 이 때 learning rate가 크면, gradient exploding 을 방지하기 위하여 θ값이 작아지도록 조정한다. learning rate가 작아지게 된다면 learning rate * gradient값이 zero에 가까워져 학습이 거의 일어나지 않게 된다. 따라서 gradient 를 [-θ/γ, θ/γ] 사이의 값을 가지도록 clipping하여 학습 수렴 속도가 빨라질 수 있도록 한다. γ는 그 iteration에서의 learning rate 를 나타낸다.

 Multi-Scale - 여러 scale에 대해서 한개의 network에서 predict할 수 있도록 하는 network를 설계하였다. Data preparation은 SRCNN과 비슷하지만 다른 점이 존재한다.

1. Input patch size는 receptive field size와 같다.
2. image는 sub image로 겹치지 않도록 나뉘어진다.
3. mini-batch는 64개의 sub image로 이루어지는데, sub image들은 각각 다른 scale을 가지는 이미지로부터 나온 sub image로 구성될 수 있다.

Understanding Properties
다음과 같은 property를 보여주고자 한다.

1. "The Deeper the Better"
 layer를 깊게 쌓으면 쌓을 수록, input image에 대한 receptive field가 커진다. 예를 들어 3 x 3 filter를 처음 layer에서 사용한다면 그다음 layer에서는 receptive field가 5 x 5가 되고 depth D를 가지는 network에서는 최종 receptive field 크기가 (2D + 1) X (2D + 1)가 된다.
 즉, high frequency image를 predict하는데 receptive field 크기가 커짐으로써 더 큰 contextual information 을 이용할 수 있다는 말이다.
 또한 19개의 relu unit을 사용하므로 매우 높은 non-linearity를 이용할 수 있다.

2.  Residual learning이 일반적인 CNN보다 학습 수렴이 더 빠르고 성능도 좋다.
 Residual learning을 이용한 network와 Residual learning을 이용하지 않은 network의 성능과 수렴 속도를 비교한 그림은 아래와 같다.


 learning rate를 0.1로 주었을 때, residual network에서는 10 epoch만에 36.9 dB를 기록하지만 learning rate 가 0.001로 주면 80 epoch에 36.52 dB를 기록한다.

3.  Multi scale 을 handle하는 single Network


 위의 그림에서 알 수 있는 사실은 다음과 같다.

1. single scale에 대해서 학습 시킨 network는 test시에 동일한 scale에 대해서는 좋은 성능을 보이지만 다른 scale에 대해서는 성능이 Bicubic interpolation보다 좋지 않다.

2. multi scale에 대해서 학습 시킨 network는 single scale에 대해서 학습시킨 network과 비교하여 test 성능이 견줄만 하다.

3. Large scale에 대해서는 multi scale 을 학습시킨 network가 single scale network보다 성능이 우월하다.


Experimental Results

Training dataset
BSD(Berkeley Segmentation Dataset) 291를 training dataset으로 사용하였다.
Data augmentation - roation, flip을 사용하였다.

Test dataset
4개의 test dataset을 사용하였다 .
1. Set 5
2. Set 14
3. Urban100 - challenging한 image들이 많이 들어 있다.
4. B100

Training parameters
depth 20
batch size 64
momentum 0.9
weight decay 0.0001
weight initialization: kaiming normalization
(https://pytorch.org/docs/stable/_modules/torch/nn/init.html)

* 80 epochs 만큼 Titan Z에서 4시간 동안 학습시켰다.(9960 iteration)
* 초기 Learning rate는 0.1으로 설정되었고 20 epoch마다 0.1을 곱하였다.


BenchMark
Bench marking을 위해서, "Anchored neighborhood
regression for fast example-based super-resolution"논문에서 소개한 framework를 사용하여 다른 methods와 비교하였다. 이 프레임 워크에서는 image를 bicubic interpolation을 적용 시켜주는 등의 작업을 해준다. 또한 image 가장자리의 픽셀들을 cropping 해준다.



 VDSR은 다른 모든 methods와 비교했을 때, PSNR 과 SSIM에 있어서 가장 높은 성능을 보였으며 inference time또한 제일 빨랐다.

 


 그림 6에서 보면, VDSR만이 중간의 선들을 명확히 복원 하였고 그림 7에서는 다른 method보다 윤곽이 깔끔하고 선명한 것을 볼 수 있다.













댓글