Accurate Image Super-Resolution Using Very Deep Convolutional Networks
Jiwon Kim et al., 2016
논문: https://arxiv.org/abs/1511.04587
Github: https://github.com/twtygqyy/pytorch-vdsr
※혹시나 포스팅에 문제가 있을 시 댓글 남겨주세요!
Abstract
ImageNet classification에 사용된 VGG-net로부터 영감을 받아 20개의 작은 weight layers를 사용함으로써 큰 이미지 영역에 대한 정보를 효과적으로 얻어낸다고 한다. 반면, 깊은 모델을 사용하면 훈련 시 수렴 속도가 중요해지는데 본 논문에서 제안한 VDSR은 residual만 학습하고, adjustable gradient clipping 기법을 통해 큰 learning rate(SRCNN의 10000배!)를 사용함으로써 해결했으며 성능 또한 더 좋았다고 한다.
[SRCNN vs VDSR]
참고: https://0choco0.tistory.com/4
[논문리뷰] Image Super-Resolution Using Deep Convolutional Networks
Image Super-Resolutoin Using Deep Convolutional Networks Chao Dong et al., 2015 이번 여름방학동안 컴퓨터비전 분야 연구실 인턴을 하게 되었는데, 앞으로 내가 공부한 논문을 정리해보려고 한다. 지금부터..
0choco0.tistory.com
SRCNN은 SR(Super-Resolution) 분야에 딥러닝 기술을 성공적으로 도입했지만, 다음과 같은 한계점을 지니고 있다.
1. 작은 이미지 영역의 context에만 의존
-large scale factor(를 쓰면 작은 패치의 디테일한 정보는 복원하기 어려움
-VDSR은 작은 필터를 20개 사용하여 receptive field를 크게 만들어서 큰 이미지 영역의 context를 학습
-scale factor : low resolution image의 해상도를 얼만큼 키울지를 결정
2. 훈련이 너무 천천히 수렴
-기존의 SRCNN은 input LR image에서 output HR image로 direct하게 매핑시켰기 때문에 훈련이 천천히 수렴했다고 한다. 하지만 크게 보면 LR과 HR은 같은 low-frequency information(여기서는 LR image)를 공유하기 때문에, VDSR은 둘 사이의 차이(residual image)를 학습하여 optimize하는 방식으로 훈련 속도를 향상시켰다. 딥러닝에서의 loss function에 해당하는 개념인듯!
-매우 큰 초기 learning rate(SRCNN의 10000배)를 사용
3. 하나의 scale에만 학습 및 동작
-VDSR은 하나의 모델로 multi-scale factor(x2, 3, 4) super-resolution을 구현하였다.
Proposed Method
[VDSR Network]
먼저 주어진 GT image를 low-resolution interpolation 해줘서 train data를 생성한다. 이렇게 생성된 ILR을 통해 모델이 image detial을 학습하고 GT에 해당하는 HR image에 가까운 이미지를 생성하는 것이 목표가 되겠다. Github 코드 기준으로 kernel size = 3으로 동일하고, num_channels은 첫번째 필터는 1->64, 마지막 필터는 64->1이고 나머지 필터는 64->64로 매핑해준다.
첫번째 필터에서 receptive field size = 3 * 3이다. 다음 레이어를 거치면 height와 width 각각 2씩 receptive field가 커지게 된다. 따라서 20개의 layer를 사용하게 되면 receptive field size = (2 * 20 + 1) * (2 * 20 + 1)로 증가하여 image detail을 예측하기 위해 더 많은 context를 사용할 수 있어, 모델의 성능이 증가한다(깊은 모델을 쓰면 당연한 이치인듯?).
[Residual-Learning]
앞서 살펴본 것과 같이 본 논문에서 제시한 VDSR은 residual(LR과 HR의 차이)를 학습한다. 위 그림의 네트워크를 살펴보면, 각 레이어를 거쳐 ILR과 HR의 차이(residual)를 학습한 후 마지막에서 input ILR과 residual을 더해주어 최종 output을 만들어낸다.
x : interpolated low-resolution image
y : high resolution image
r = y - x : residual image
라고 하면, 이미지가 주어졌을 때 x, y는 결정되므로 r = y - x 또한 자동으로 결정된다. 따라서 f(x)를 모델의 예측이라 했을 때, loss function은 다음과 같이 정의할 수 있고, 이를 optimize하는 방향으로 모델을 학습하게 된다.
$$loss = \frac{1}{2} \lVert r − f(x) \rVert ^2 $$
[Adjustable Gradient Clipping]
deep model은 수렴 시간이 오래 걸릴 가능성이 크다. SRCNN 논문에서는 3개보다 많은 weight layer를 썼을 때 좋은 성능을 보이지 못했다고 주장했지만, 본 논문의 저자는 너무 작은 learning rate 때문이라고 한다. learning rate를 높이면 훈련이 빨라지지만 gradient exploding 문제도 발생한다. VDSR은 gradient clipping을 활용해 gradient exploding을 방지하면서 최대한의 수렴 속도를 냈다고 한다.
gradient clipping은 RNN에서 자주 사용되는 기술로 각 gradients를 미리 정한 범위 [−θ, θ] 내로 “clip”하는 것이다. optimizer로 자주 쓰이는 stochastic gradient descent(SGD)를 사용하면, step size를 조절하기 위해 learning rate를 곱해준다. VDSR에서는 최대한의 수렴 속도를 얻기 위해, gradient를 [−θ/γ , θ/γ]로 제한하였다(γ은 현재 learning rate를 의미).
gradient clipping을 적용한 network가 residual image를 학습했을 때가 그렇지 않을 때보다 훨씬 더 빠른 수렴속도를 보이는 것을 확인할 수 있다.
[Multi Scale]
보통 하나의 scale factor에 대해 하나의 network가 생성되는데, 분수 꼴의 scale factor가 종종 쓰임에 따라 multi-scale model의 필요성이 증가함. VDSR은 미리 정해진 scale factor(x2, 3, 4)들에 대해 parameter를 공유하여 여러 개의 특정 scale에 대해 훈련 데이터셋은 하나의 큰 데이터셋으로 합쳐지는 방식으로 여러 scale factor에 대해 잘 동작하는 모델을 구현하였다. 아래 그림에서 여러 개의 test scale factor에 대해서 잘 동작하는 것을 확인할 수 있다.
Experimental Results
다른 모델과 비교했을 때 더 나은 성능과 수렴 속도를 보이고 있다.
'딥러닝' 카테고리의 다른 글
[논문리뷰] Restormer: Efficient Transformer for High-Resolution Image Restoration (0) | 2022.08.09 |
---|---|
[논문리뷰] Attention is All You Need (0) | 2022.07.31 |
[논문리뷰] Specular Reflection Separation using Dark Channel Prior (0) | 2022.07.28 |
[논문리뷰] Image Super-Resolution Using Deep Convolutional Networks (0) | 2022.07.24 |