- Today
- Total
작심삼일
[EDSR 리뷰] Enhanced Deep Residual Networks for Single Image Super-Resolution (CVPR 17) 본문
[EDSR 리뷰] Enhanced Deep Residual Networks for Single Image Super-Resolution (CVPR 17)
yun_s 2021. 4. 27. 16:28My Summary & Opinion
ResNet의 구조에서 BN을 제거해 사용했다.
BN이 feature map을 normalize해서 blur효과가 나타나기도 하고, 학습할 때 메모리를 많이 먹기 때문이다.
Residual scaling 방법을 통해 큰 feature map에서도 안정적으로 학습되도록 했다.
Scale-specific pre-processing / up-sampling과 shared network 구조를 통해 multi-scale 네트워크를 제안했다.
BN이 여러 영역에서 사용되지만, normalization 때문인지 SR영역에서는 자주 배제되는 것 같다.
Residual scaling 방법이나 scale-specific layer, shared network같은 구조의 컨셉을 잘 알아두면 후에 좋은 네트워크를 설계할 때 도움이 될 것이다.
Introduction
최근에 deep neural networks가 PSNR 기준으로 좋은 성능을 보였지만, 그 구조에 대해서는 한계가 있다.
첫째, 네트워크 성능의 재현은 구조의 미세한 변화에 민감하다.
같은 모델이라도 initialization이나 training technique를 다르게 하면 성능이 달라진다.
둘째, 현존하는 대부분의 알고리즘들은 다른 배수(×2,×4,...)의 연관성을 생각하기보다는 이를 각각의 문제로 본다.
SRResNet은 ResNet 구조를 사용해서 이 문제를 해결했다.
하지만 애초에 ResNet은 image classification이나 detection과 같은 high-level computer vision 문제를 위해 고안된 것이기 때문에 ResNet을 low-level 문제에 바로 사용하는 것은 적절하지 않다.
SRResNet 구조에 기반해서 이 문제들을 해결하기 위해 이를 분석하고 불필요한 모듈을 제거함으로써 네트워크 구조를 단순화했다.
구조가 복잡해지면 네트워크의 성능이 변화에 민감해지기 때문이다.
또한, 다른 배수로 학습된 모델을 참고하는 방식으로 학습시켰다.
더 나아가서, 다른 배수 사이의 파라미터를 공유하는 multi-scale 구조를 제안한다.
Related Works
딥러닝 방식이 SR 문제에 적용되면서 다양한 구조들이 연구되었다.
네트워크가 깊을수록, skip-connection을 사용하거나 encoder-decoder 구조를 사용하면 성능이 좋아진다는 것을 깨달았다.
Bicubic interpolated 이미지를 입력으로 넣는 대신, up-sampling 모듈을 네트워크 끝단에서 학습시켜 계산량을 줄였다.
하지만 그렇게되면 multi-scale 문제를 해결할 수 없다.
이 논문에서는 multi-scale training과 computational efficiency 사이의 딜레마를 해결한다.
Proposed Methods
1. Residual blocks
ResNet은 CV의 low-level부터 high-level 문제까지 좋은 성능을 보였다.우리는 ResNet의 구조를 바꿔 성능을 높였다.

위 그림은 기존의 ResNet, SRResNet, 그리고 우리가 제안하는 모델들을 비교한 그림이다.
BN layer는 feature를 normalize해서 blur되기 때문에 이를 없앴다.
이는 실험적으로도 확인할 수 있다.
게다가 BN layer는 메모리를 많이 차지하기 때문에 이를 없애서 메모리를 40% 감소시켰다.
결과적으로 더 좋은 성능을 보이는 더 큰 모델을 만들 수 있었다.
2. Single-scale model
네트워크의 성능을 높이는 방법 중 가장 간단한 것은 파라미터 수를 늘리는 것이다.
B의 depth와 F의 width를 가지는 일반적인 CNN은 O(BF)만큼 메모리를 사용하고 파라미터 O(BF2)개를 가진다.
그렇기 때문에 B보다 F를 키우는 것이 제한된 computational resources에서 모델의 크기를 키우는 방법이다.
하지만 feature map 수를 일정 수준 이상으로 키우는 것은 불안정하다는 것을 발견했다.
우리는 이 문제를 0.1로 residual scaling을 넣어서 해결했다.
Residual block 안의 마지막 conv layer 뒤에 항상 scaling layer를 넣었다.
Test 할 때는 scaling layer를 그 앞의 conv layer와 합쳐 계산량을 줄일 수 있다.


Baseline 모델은 SRResNet과 구조가 비슷해보이지만, 이 모델은 residual block 밖에 ReLU가 없다.
또한, baseline(single-scale)모델에서 모든 conv layer에서 64 feature maps만 사용했기 때문에 residual scaling layer도 없다.
최종 모델(EDSR)은 baseline 모델에서 B=32,F=256,scalingfactor=0.1로 두고 사용했다.
그리고, ×3나 ×4 모델을 학습할 때 pre-trained ×2모델의 파라미터를 사용했다.
이는 모델의 속도와 성능을 높여준다.
3. Multi-scale model
Fig 4(위 오른쪽 그림)을 통해 다양한 배수의 SR 문제를 서로 연관 있다고 판단했다.
B=16인 residual block들로 single main branch를 만들어, 다른 배수의 모델들이 서로 파라미터를 공유할 수 있도록 baseline(multi-scale) 모델을 설계했다.

Multi-scale 구조에서 SR의 multiple scale을 다루기 위한 scale-specific processing 모듈을 추가했다.
먼저, 다른 크기의 input 이미지의 다양성을 줄이기 위해 네트워크 앞단에 pre-processing 모듈을 넣었다.
Pre-processing 모듈은 5×5 커널의 residual block 두개로 이루어져 있다.
Pre-processing 모듈에 비교적 큰 커널을 사용함으로써 scale-specific한 부분을 얕게 유지할 수 있다.
네트워크의 끝단에는 multi-scale reconstruction을 위해 scale-specific upsampling 모듈을 넣었다.
최종 multi-scale 모델(MDSR)은 B=80,F=64로 했다.
만약 3개의 다른 배수들을 위한 모델을 EDSR로 각각 만들었으면 파라미터는 1.5M×3으로 4.5M개가 필요했겠지만, MDSR은 3.2M만 사용한다.
그럼에도 불구하고 성능은 그와 비슷하며, residual block이 더 가벼우므로 깊이도 5배 더 깊지만 파라미터는 2.5배 밖에 차이나지 않는다.
Experiments
Input patch size | Optimizer | Learning rate | Data augmentation |
48×48 | Adam | 10−4 | True |


EDSR+, MDSR+는 self-ensemble 기법을 추가한 것이다.
NTIRE2017 SR Challenge
EDSR+와 MDSR+가 각각 1,2등을 했다.
Conclusion
기존에 사용된 ResNet 구조에서 불필요한 부분을 줄여 모델을 간결하게 했으며, 성능도 높였다. (SOTA)
큰 모델을 학습시키기 위해 residual scaling 기법을 적용했다.모델의 크기와 학습 시간을 줄여주는 multi-scale SR 네트워크도 설계했다.Scale-dependent 모듈과 shared main network를 통해 이 모델은 다양한 배수의 SR에 적용할 수 있다.
Reference
Lim, Bee, et al. "Enhanced deep residual networks for single image super-resolution." Proceedings of the IEEE conference on computer vision and pattern recognition workshops. 2017.