- (ECCV 2016) Accelerating the Super-Resolution Convolutional Neural Network (https://arxiv.org/pdf/1608.00367.pdf)
이 논문은 기존의 Super Resolution CNN(SRCNN)의 연산을 가속화하는 방법을 연구했다. Super resolution task는 저해상도 이미지를 입력받아 고해상도로 복원하는 작업이다.
1. 기존의 SRCNN
SRCNN은 Dong et al. (2014)에 의해 제안된 모델로, 기본적으로 세 개의 컨볼루션 레이어로 구성되어 Patch Extraction and Representation, Non-Linear Mapping, Reconstruction의 과정을 통해 이미지 해상도를 복원한다. Patch Extraction and Representation에서는 입력 이미지에서 패치를 추출하여 고차원 공간으로 mapping한다(Conv1). Non-Linear Mapping에서는 추출된 특징을 non-linear하게 mapping하여 더 복잡한 표현을 학습시킨다(Conv2). Reconstruction 단계에서는 앞선 레이어들에서 추출된 feature map을 이용해 최종 고해상도 이미지를 생성한다(Conv3).
-> 이 방식은 input image를 먼저 업샘플링한 후 네트워크의 입력으로 사용하고 있어 계산량이 많고 처리 속도가 느리다.
2. 개선된 FSRCNN
우선 입력 이미지를 업샘플링해 넣는 것이 아니라 그자체 그대로 네트워크에 넣어 네트워크 내부에서 업샘플링을 수행한다. 그리고 bottle neck layer를 이용해 계산량을 줄였다.
FSRCNN은 Feature Extraction, Shrinking, Mapping, Expanding, Deconvolution으로 구성된다.
(위 이미지의 Conv(5, d, 1)은 순서대로 filter size(5*5), # of filters(output channels), # of intput channels를 의미한다.)
1) Feature Extraction
SRCNN의 첫 번째 CNN의 kernel 사이즈는 9x9였지만 FSRCNN은 이를 5x5로 대체해 모델의 연산량을 줄이면서도 충분한 특징을 추출할 수 있도록 했다. Conv(5, d, 1)의 1은 Grayscale 이미지를 사용함을 뜻한다.
2) Shrinking
차원 축소를 담당하는 파트로, 차원 축소에 흔히 쓰이는 1*1 Conv. 연산을 한다. Conv(1, s, d)가 그것이다. 이 다음 단계인 Non-linear mapping은 특히 layer 단위로 이루어지는데, 차원(layer)가 많아지면 연산량이 급격히 증가한다. 그렇기에 그 전에 Shrinking을 해준 것이다.
3) Non-linear mapping
이는 SRCNN에도 있는 단계인데, SRCNN의 실험에서 1*1보다 5*5일 때 performance가 좋다는 것이 확인되었다. 연산량과의 trade-off를 고려한 것인지 FRCNN에서는 이때의 kernel size를 3으로 설정해 Conv(3, s, s)로 만들었다.
4) Expanding
Expanding은 Shrinking의 반대 역할을 하는 파트이다. Non-linear mapping 이전에 Shrinking을 해준 이유는 연산량 감소를 위해서였는데, 물론 Deconv도 연산량이 매우 크지만 super resolution 성능이 나오려면 다시 layer를 늘려 feature map이 더 많은 feature를 표현하게 해야 한다.
5) Deconvolution
여기서 혼동하면 안되는 개념이 Deconvolution과 Transposed Convolution이다. 이 논문에서 말하는 Deconvolution은 사실 'Transposed Convolution'에 해당한다.
단순히 DeConv.와 Trensposed Conv.를 비교하면 차이가 느껴지지 않지만, 최종 출력 색상을 보면 직관적으로 이해할 수 있다. DeConv는 말 그대로 Convolution 연산 이전의 결과를 내놓는 것이다. 이는 수학적으로 Convolution의 역연산을 수행하면 된다. (쉽지는 않다.) 그렇다면 Transposed Convolution은 무엇일까?
2*2 input의 빨간색 element를 3x3 kernel에 곱한 뒤 output의 대응 위치에 집어넣는다. 같은 방법으로 input의 파란색 원소도 마찬가지의 연산을 치뤄 대응 위치에 집어 넣는다. 이렇게 하면 output에 겹치는 구간이 발생하는데, 겹치는 부분의 값은 모두 더해준다. 이렇게 계산하는 방식이 FSRCNN에 사용된 Deconvolution(Transposed Convolution)이다.
아무튼 이 단계에서는 DeConv(9, 1, s)를 수행해 해상도가 좋아진, 다시 최종 출력 채널이 1인 Grayscale이미지를 내놓게 된다.
3. Result of FSRCNN
parameter를 5배가량 줄이면서도 resolution performance는 더 좋아졌다. ✨
'Study > Deep Learning' 카테고리의 다른 글
[Deep learning] Class-Incremental Learning (LwF, PODNet) (0) | 2024.07.08 |
---|---|
[Deep learning] What is 'Style transfer'? (0) | 2024.07.07 |
[Deep Learning] Attention, Seq2Seq, Transformer (0) | 2024.02.19 |
[Deep Learning] RNN, LSTM, GRU 총정리★ (+판서) (1) | 2024.01.12 |
[AI] What is ResNet? (1) | 2024.01.05 |