Review: Enhanced Deep Residual Networks for Single Image Super-Resolution (Winner of NTIRE 2017 SISR challenge)

Brian Jaehong Aum
Lunit Team Blog
Published in
14 min readJun 4, 2020

이 포스팅은 루닛 블로그에 2017년 9월에 올렸던 포스트입니다.

원문 링크: https://blog.lunit.io/2017/09/29/enhanced-deep-residual-networks-for-single-image-super-resolution-winner-of-ntire-2017-sisr-challenge/

2017년 개최 되었던 NTIRE 2017 SISR challenge의 우승 서울대 팀의 (임범, 손상현, 이경무 교수)(http://cv.snu.ac.kr) 차지였습니다. Single Image Super-Resolution (SISR)는 저해상도의 영상으로부터 고해상도의 영상을 추정하는 문제입니다. 서울대 팀은 SISR를 수행하는데에 있어서 2개의 새로운 네트워크 구조를 제안했는데, 2개의 네트워크 모두 상당히 좋은 성능을 보여 주었습니다. 이번 포스팅에선 팀이 챌린지 결과를 기반으로 CVPR 2017 workshop에서 발표한 논문 ‘Enhanced Deep Residual Networks for Single Image Super-Resolution’을 살펴보고, 챌린지 1등팀의 노하우는 무엇이었을지 살펴보도록 하겠습니다 [1].

NTIRE 2017 Challenge results and rankings. Both of the teams are ranked on top 2 with different networks who are from SNU_CVLab.

1. Introduction

2016년 말에 Twitter 연구팀에서 SRResNet이라는 네트워크 구조를 소개한적이 있었습니다 [2]. SRResNet을 기존의 ResNet구조를 상당히 많이 그대로 차용하여 상당히 좋은 성능을 보여주었습니다. 서울대 팀은 SRResNet을 통해 기존의 ResNet이 SISR에도 상당히 적합한 네트워크임을 인정하면서도, 한편으로는 image classification과 같은 High-level의 문제를 해결하기 위해 고안된 ResNet이라는 네트워크 구조를 SISR과 같은 Low-level 문제를 풀기위해서 동일하게 사용하는것은 최적의 선택이 아닐수도 있다 생각했습니다. 때문에 이들은 SRResNet을 변형하여 SISR문제에 더 적합하게 최적화 시키는데 네트워크에서, (1) 불필요한 요소들을 제거하고, (2) 깊이를 더 깊이 쌓음으로써 네트워크의 성능을 더욱 끌어올릴 수 있었습니다.

2. Proposed Methods

2.1 Residual blocks

Comparison of residual blocks in original ResNet, SRResNet, and proposing network

서울대 팀은 기존의 ResNet이나 SRResNet의 residual block 에서 사용되었던 Batch normalization(BN) 층을 과감히 모두 제거했습니다. BN을 제거함으로써 저자는 두 가지 이득을 얻을 수 있었다고 합니다. 하나는 기존에 BN은 네트워크의 features를 normalize시켜 버림으로써 네트워크의 flexibility를 저하시키는 영향을 미쳤는데, 이를 제거함으로써 네트워크가 좀 더 유연하게 동작할 수 있었고, 이는 성능 향상으로 이어졌다고 주장하였습니다. 또 다른 하나는 가장 중요한 부분인듯 한데, BN을 제거함으로써 학습시에 메모리 사용량을 대략 40% 정도 절감할 수 있었고, 덕분에 메모리 사용량이 절감된 만큼 더 큰 네트워크를 학습시킬 수 있었다고 합니다. BN을 제거한 것에 대한 효과는 뒤에 실험 결과를 통해 확인하도록 하겠습니다.

2.2 Single-scale model

총 2개의 네트워크 구조를 제안했는데 그중 하나인 Sigle-scale model를 먼저 보도록 하겠습니다. 논문에는 Enhanced deep super-resolution network (EDSR)이라는 이름을 소개 되었습니다. 앞으로 소개되는 네트워크들은 모두 2.1에서 소개한 residual block 을 활용한 구조이며, activation function으로는 다른 SISR 네트워크들이 LeakyReLU, PReLU 등을 사용했던데 비해 여기선 가장 흔하게 사용되는 평범한 ReLU를 사용하였습니다. 여기서 사용한 convolution은 모두 3×3 convolution 이며 동일한 feature size를 가집니다.

EDSR은 영상의 해상도를 2배, 3배, 4배 올리는 경우 각각에 대하여서 따로따로 네트워크를 학습시켰습니다. 그리고 각각의 네트워크는 구조가 모두 동일하지만 Upsampling 부분만 각각의 상황에 맞게 서로 다른 구로를 가지고 있습니다. Residual block 구조에 위에서는 소개되지 않았던 Multiplication layer가 존재하는데, 이는 residual scaling [3] 을 적용한 것으로 residual block 최종단에서 element-wise sum을 수행하기 이전에, convolution을 통과한 feature matrix에 일정한 적당히 작은 constant값을 곱해주는 부분입니다 (여기서 사용된 constant 값은 0.1). 저자의 경우 네트워크의 feature channel 크기를 크게 하는 경우 학습에 어려움이 있었는데, residual scaling을 적용함으로써 네트워크가 좀 더 안정적으로 학습될 수 있게 되었다고 합니다.
추가적으로 성능을 끌어올리는데 저자가 소개한 노하우가 있습니다. 저자는 해상도를 2배 올리는 문제에 대해선 처음부터 학습을 시켰지만, 3배, 4배 올리는 문제에 대해서는 기존에 2배 문제에 대하여 학습 시켜둔 모델을 Pretrained network로 두고 학습을 시켰다고 합니다. 이렇게 학습을 시켰을때, 바닥부터 학습을 시켰을때에 비해 최종적으로 더 좋은 성능을 보여주었다 했는데, 이는 해상도를 2배 올리는 문제나, 3배, 4배 올리는 문제 모두 서로 유사한 문제이기 때문에 그 효과가 두드러진것이 아닌가 생각해봅니다.

2.3 Multi-scale model

서울대 팀이 제안한 두번째 네트워크는, 하나의 네트워크로 여러 scale의 (x2, x3, x4) SISR에 적용이 가능한 네트워크인데, Multi-scale deep super-resolution system (MDSR)이라 명명했습니다.

MDSR은 네트워크 중앙에 하나의 학습된 모델을 공유합니다. 그리고 각 스케일에 대처할 수 있도록 각 스케일에 서로 다르게 적용되는 Pre-processing module을 적용했고, 최종단의 upscaling역시 각 스케일에 대응하는 구조를 따로 배정하였습니다. 이때 Pre-processing module에는 두 개의 ResBlocks를 쌓았고, 여기서는 5×5 convolution을 적용했다고 합니다. 엄밀히 따지면 서로 다른 스케일에 대응하기 위하여 각 스케일에 대응하는 Pre-processing module과 upscaling을 학습시켰기 때문에, 완벽한 하나의 네트워크라고 부르기는 어렵긴 하지만, 중앙에 ResBlocks를 공유함으로써 각 스케일에 대응하기 위해 EDSR 3개를 만드는 것에 비해 더 적은 수의 파라미터를 필요로 했다고 합니다. (EDSR 3개: 4.5M parameters, MDSR: 3.2M parameters)

3. Experiments

3.1 Datasets

NTIRE2017 challenge에선 새롭게 DIV2K dataset이 주어졌습니다. 이 dataset은 2K resolution의 영상으로 구성되어있는데, 학습용 800장, validation용 100장, test용 100장이 있고, test용 100장은 미리 주어지지 않았기 때문에 논문에선 validation용 100장을 이용하여 실험 결과를 얻었다고 합니다.

3.2 training details

학습시에 사용된 내용들 중 언급할만 하다 여겨지는 부분들을 살펴보도록 하겠습니다. 더 자세한 사항은 논문을 참고하시기 바랍니다.

Input processing:
- Input patch: 48×48 크기의 패치를 뜯어서 사용했습니다. 이전 논문들에선 receptive field의 크기를 따져서 패치 크기를 정하는 경우도 있었는데, 최근에는 크게 신경쓰지 않는 분위기입니다.
- Augmentation: 학습시킬때 영상을 좌우 반전 및 90도 단위로 회전시켜 학습시켰습니다.

Optimizer:
- Adam optimizer: 작년에 같은 연구실에서 발표한 SISR에서 State-of-the-art 모델이었던 VDSR이 SGD with momentum에 gradient clipping을 사용했었는데[4], 이번에는 SRResNet과 마찬가지로 Adam을 이용하였다고 합니다. VDSR에선 gradient clipping으로 학습의 안정성을 높이고, 대신에 learning rate을 높에 설정함으로써, 네트워크의 학습 시간을 줄이고 성능은 끌어올렸다고 서술하였는데, 이번에 사용한 네트워크에도 같은 방법론을 적용하면 어떤 결과가 나왔을지 궁금해지는 부분입니다.

Loss:
- L1 loss: 이전 SISR관련 모델들은 L2 loss를 많이 사용했습니다. 이는 SISR 뿐만이 아니라 다양한 image processing 기술들을 평가하는 아주 널리 쓰이는 Peak signal-to-noise ratio (PSNR)이라는 지표가 정확히 L2 loss와 같은 기준으로 평가되기 때문으로 생각됩니다. 하지만 여기선 L1 loss를 사용했는데, 서울대 팀의 경험상 L2 loss 보다는 L1 loss가 더 좋은 결과를 보여줬다고 합니다. 사실 영상을 추정하는 문제에 대해서 L1 loss 말고도 다양한 loss들이 존재하는데 (GDL loss[5], GAN loss[5], SSIM loss[6], etc.), 어떤 loss를 사용하는게 좋을지에 대해서 더 생각해보고 싶으신 분들은 [5], [6] 논문을 참고하시면 도움이 될꺼라 생각됩니다.

3.3 Geometric Self-ensemble

학습시킬때 인풋 영상에 대하여 좌우 반전 및 90도 단위 회전을 무작위로 적용하여 학습 시켰었는데, 이를 활용하는 방안을 제시했습니다. 이를 Geometric self-ensemble이라 불렀는데, 방법은 간단합니다. 이미 학습된 모델을 이용해 업스케일된 영상을 추정할때, 영상을 네트워크에 한번만 통과 시키는 것이 아니라, 영상에 좌우 반전, 4가지 회전 (0도, 90도, 180도, 270도)를 적용하여 총 8개의 영상을 네트워크에 통과시킨 후, 이 영상들을 합쳐서 평균을 내는 과정을 거칩니다. 이과정을 통해 하나의 네트워크로 8개의 서로 다른 결과를 앙상블 하는 효과를 노렸는데, 결과를 보게되면 Geometric self-ensemble을 적용하는 것이 약간의 성능 향상에 도움을 준 것을 확인 할 수 있습니다.

3.4 Evaluation on DIV2K validation set

일단 논문에서는 네트워크의 성능을 평가하기 위하여 PSNRSSIM이라는 지표를 사용했는데, 두 지표는 모두 영상처리 분야에서 굉장히 자주 사용되는 지표입니다. 기본적으로 두 지표 모두 원본 영상과 만들어진 영상이 서로 얼마나 유사한지를 평가하는 지표입니다.
논문에서 제시한 결과들을 하나하나 살펴보도록 하겠습니다. 참고로 여기서 제시된 SRResNet의 성능은 새롭게 저자가 DIV2K dataset으로 본인들의 네트워크와 동일하게 학습시킨 결과입니다.

L1 loss에 대해
Table 2에서 보면 SRResNet에 L2 loss를 이용했을때와 L1 loss를 이용했을대의 결과가 정리되어 있습니다. 눈에 띄는 큰 차이는 아니지만 아주 약간이나마 L1 loss가 더 좋은 성능을 보여주는 것을 확인할 수 있습니다.

BN을 제거한 새로운 네트워크 구조에 대해
논문에서 제시한 baseline 네트워크의 경우 EDSR과 MDSR을 기존의 SRResNet과 동일한 층수와 필터 수를 사용한 경우입니다. 때문에 SRResNet과 비교하여 baseline 네트워크는 BN을 제거한것 이외에는 상당히 유사한 네트워크인데, 결과를 보게 되면 거의 동일하지만 EDSR이 SRResNet(L1 loss)의 경우보다 미약하게나마 더 좋은 결과를 보여준 것을 확인할 수 있습니다. MDSR의 경우는 상대적으로 더 확실히 좋은 성능을 보여주긴 했지만, MDSR에는 추가적인 Pre-processing 모듈이 들어가 있기 때문에 MDSR과의 비교는 적절한 비교가 아닌것 같습니다. 다만 여기서 주목할만한 점은 새롭게 제시된 네트워크의 경우 BN이 없기때문에 training시에 훨씬더 많은 층 수를 쌓을 수 있다는 점인것 같습니다.

EDSR, MDSR에 대해
두 네트워크 모두 상당히 많은 수의 parameters를 이용하였고, 그 결과 기존의 SRResNet에 비해 더 좋은 성능을 보여주었습니다. 그리고 MDSR의 경우 여러 스케일에 대해 동일한 네트워크를 공유하고 있음에도 불구하고 EDSR에 견주어 상당히 유사한 성능을 냄을 확인할 수 있습니다.

Geometric self-ensemble에 대해
Table 2에서 + 로 표시된 결과가 Geometric self-ensemble을 적용한 결과입니다. 확실히 굉장히 간단한 기술로 약간이나마 성능을 끌어올릴 수 있음을 볼 수 있습니다.

이제 다양한 dataset에 대하여 기존의 네트워크들과의 성능을 비교한 결과를 살펴보도록 하겠습니다.

위의 결과에서도 EDSR과 MDSR이 가장 좋은 성능을 보여주었습니다. 그리고 이러한 차이는 눈으로 봐도 알아볼만한 차이가 있음을 알 수 있습니다.

특히나 중앙의 창문 영상의 경우 기존의 방법들이 창문의 격자형태를 제대로 복원하지 못했는데, 이번에 제시된 네트워크의 경우 그것들을 제대로 복원한 부분이 인상적입니다.

또 언제 더 뛰어난 성능의 네트워크가 나올지 모르겠지만, 적어도 올해까지는 이번에 서울대 팀이 제시한 네트워크가 SISR에서의 state-of-the-art 이지 않을까 생각해 봅니다. 앞으로도 SISR 분야에서 영상을 추정하는 문제에 대해서 다양한 연구가 활발히 진행되길 기대하고, 또 여기서 검증된 기술들이 SISR분야 이외에도 다양한 영역에도 활용되기를 기대하며 이번 포스팅을 마치도록 하겠습니다.

References

[1] Enhanced Deep Residual Networks for Single Image Super-Resolution, https://arxiv.org/abs/1707.02921
[2] Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network, https://arxiv.org/abs/1609.04802
[3] InceptionV4, inception-resnet and the impact of residual connections on learning, https://arxiv.org/abs/1602.07261
[4] Accurate Image Super-Resolution Using Very Deep Convolution Networks, http://cv.snu.ac.kr/research/VDSR/VDSR_CVPR2016.pdf
[5] Deep Multi-Scale Video Prediction Beyond Mean Square Error, https://arxiv.org/abs/1511.05440
[6] Loss Functions for Neural Networks for Image Processing, https://arxiv.org/abs/1511.08861

--

--

Brian Jaehong Aum
Lunit Team Blog

Ph.D in Computer Science. Working at Lunit since 2017. Former deep learning research scientist. Current product manager.