- Today
- Total
작심삼일
[ESPCN 리뷰] Efficient Sub-Pixel Convolutional Neural Network (CVPR 16) 본문
[ESPCN 리뷰] Efficient Sub-Pixel Convolutional Neural Network (CVPR 16)
yun_s 2021. 4. 14. 17:07Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network
My Summary & Opinion
기존의 다른 SISR network와는 다른 upscaling layer를 사용했다.
이전 네트워크들은 네트워크로 하여금 image enhancement 하는 과정을 배우게 하기 위해 네트워크의 시작 전이나 앞부분에서 upscaling을 진행한다. 하지만 이렇게하면 계산량이 증가한다는 단점이 생긴다. 이 문제를 해결하기 위해 sub-pixel layer를 제안한다.
Sub-pixel layer는 그림 1만 보면 이해할 수 있을 정도로 간단하게 구성되어 있다. 제일 마지막에 나오는 feature maps의 pixel을 번갈아가며 순서대로 하나씩 붙인다. (그림을 보면 이해가 빠르다.) 즉, upscaling을 제일 마지막에 진행한다는 것이다. 그러면 네트워크가 작은 이미지로 계산을 하게 되므로 계산량이 줄어든다. 그뿐 아니라 성능의 관점에서도 뛰어난 것을 알 수 있다.
Intoduction
SR 문제를 풀 때 가장 중요한 점은 대다수의 high-frequency data를 사용할 수 없기 때문에 low-frequency에서 복원해야 한다는 점이다.
SR 문제를 풀 때 multiple image를 사용할 수도 있지만, 그렇게 되면 계산량이 많아진다.
1. Related Work
SISR 방법에는 여러 가지가 있지만, 대표적으로는 sparsity-based 방법과 neural network를 사용하는 방법이 있다.
2. Motivations and Contributions
SISR 문제를 풀 때 LR 이미지를 HR 크기로 키우는 행위가 필수적이다.
HR 크기로 키우기 위해 네트워크 내부에서 점차적으로 키우는 방법도 있고, 네트워크에 넣기 전에, 또는 네트위크의 첫번째 단에서 키우는 방법도 있다.
하지만 image enhancement 하기 전에 크기를 키우게 되면 계산량이 증가하게 되고, 이는 네트워크의 속도에 큰 영향을 미친다.
Interpolation 방법을 사용하게 되면 reconstruction 문제를 해결할 때 추가적인 정보를 사용할 수 없다.
이 논문에서는 네트워크의 제일 마지막 단에서 이미지 크기를 키운다.
이렇게 하면 HR 크기에서 계산할 필요가 없어진다.
이 방법을 사용하면 다음과 같은 장점들이 생긴다.
* LR 이미지를 사용하기 때문에 주어진 영역에서 같은 정보를 뽑을 때 상대적으로 더 작은 필터를 사용할 수 있다. 이는 계산량을 줄인다.
* 네트워크가 $L$층으로 이루어져있다면, upscaling filter 한 개를 위해 $n_{L-1}$ upscaling filter를 $n_{L-1}$ feature map에 적용한다.
Method
Conv layer 3층으로 이루어진 네트워크를 사용했다.
먼저 LR 이미지에 바로 $l$개의 CNN을 적용한 후 LR feature map을 upscale 해서 $I^{SR}$을 만들기 위해 sub-pixel conv layer를 적용했다.
1. Deconvolution layer
Max-pooling 등과 같이 down-sampling layer로부터 해상도를 복원할 때 자주 쓰는 방법 중 하나는 deconv layer이다. 하지만 deconv layer는 계산량이 많다.
2. Efficient sub-pixel convolutional layer
LR 이미지의 해상도를 높이기 위한 다른 방법은 interpolation, perforate나 un-pooling 등이 있다. 이 방법들 모두 $r^2$만큼의 계산량이 필요하다.
LR space에서 $k_s$크기의 필터 $W_s$를 stride를 $1/r$로 하는 convolution은 다르게 적용된다.
픽셀 사이에 형성되는 weight들은 activated 되지 않으므로 계산할 필요가 없어진다.
Activation 할 때마다 그 위치에 따라 최대 $⌈k_s/r⌉^2$개의 weight들만 activate 된다.
$x, y$가 HR space의 output 위치라 할 때 $mod(x, r), mod(y, r)$만 activate 된다.
이 논문에서는 앞서 언급한 과정을 $mod(k_s, r)=0일 때만 실행되는 효과적인 방법을 제안한다.
$\mathbf {I}^{SR} = f^L(\mathbf{I}^{LR}) = \mathcal{PS}(W_L * F^{L-1}(\mathbf{I}^{LR}) + b_L)$
여기서 $\mathcal{PS}$는 그림 1처럼 $H \times W \times C \cdot r^2$ 텐서를 $rH \times rW \times C$ 텐서를 바꿔주는 연산이다.
수식으로는 아래와 같이 나타낼 수 있다.
$\mathcal{PS}(T)_{x, y, c} = T_{\lfloor x/r \rfloor, \lfloor y/r \rfloor, c \cdot r \cdot mod(y, r) + c \cdot mod(x, r)}$
마지막 conv layer에는 nonlinearity를 부여하지 않고 이 layer로 LR feature maps에서 바로 HR 이미지를 만든다.
이 연산은 각각 독립적으로 병렬처리 될 수 있기 때문에 빠르다.
Experiments
1. Datasets
ImageNet & Xiph
2. Implementation details
Layer 3개를 사용했고, 첫번째 layer의 filter size는 5, channel은 64, 두 번째 layer는 각각 3, 32, 마지막 layer는 size 3의 filter를 사용했다.
$ l = 3, (f_1, n_1) = (5, 64), (f_2, n_2) = (3, 32), f_3 = 3$
학습할 때 사용한 데이터는 $\mathbf{I}^{HR}$에서 $17r \times 17r$ 크기의 sub-images를 뽑아 사용했다.
3. Image super-resolution results
ReLU보다 tanh를 사용했을 때 성능이 더 좋았다.
4. Video super-resolution results
육안으로 보기에도 성능이 더 좋아졌다.
5. Run time evalutations
Super resolution을 진행할 때의 복잡도는 SRCNN보다 $2.5 \times r \times r$만큼 낮다.
Conclusion
첫번째 layer에서 upscale 하는 방식은 계산량을 많아지게 하는 문제가 있다.
이 문제를 해결하기 위해 마지막단에서 upscaling을 진행하는 sub-pixel convolution layer를 소개한다.
성능도 좋고, 속도도 빠르다.
Future work
비디오는 이웃한 frame에서 정보를 가져올 수 있다.
이를 이용해 spatio-temporal network에 ESPCN을 적용해보고 싶다.
Reference
Shi, Wenzhe, et al. "Real-time single image and video super-resolution using an efficient sub-pixel convolutional neural network." Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.