논문 이름 : Accurate Image Super-Resolution Using Very Deep Convolutional Network (CVPR 2016)
원본 논문 : https://arxiv.org/pdf/1511.04587
키워드 : Super-resolution, deep convolutional neural networks
요약 : 기존 SRCNN보다 더 깊은 CNN 층을 활용하여 SR 모델 학습
느낀 점 : 기존 SRCNN에서 더 깊은 CNN층을 만들어 성능 향상, 기존 학과 수업에서 배운 CNN의 깊이가 깊어질수록 성능 향상이 있음을 SR 성능 향상으로 확인할 수 있었음
VGG-net에서 영감을 받고 만듬
VGG-net은 이미지 인식 대회 준우승한 모델로 16 or 19개 레이어 층으로 구성되어 있음. 이 모델을 시점으로 모델들이 깊이가 깊어짐
VDSR은 20개의 층을 사용함 작은 필터들을 여러번 사용하는 깊은 구조이기에 큰 이미지도 잘 복원함
네트워크 깊이가 깊어진다는 건 트레이닝 수렴 속도가 느려지는 이슈가 생김 -> residuals learnings, gradiant clipping 사용해서 해결
작은 이미지 지역에 의존
큰 scale factor를 적용했을 때, 작은 패치에 정보가 담기는데 디테일을 복원에 좋지 않음
=> VDSR이 더 깊은 층을 사용해서 receptive field를 늘림
residuals image가 HR과 LR의 차이를 보여주고 residual learning, gradient clipping으로 해결
multi scale factor 가능케 함
깊은 네트워크 모델을 썼지만 학습을 부스팅하게 함
multi scale factor in a single network
물론 성능도 향상

SRCNN에 대해 간략한 설명
99, 11, 55 3개의 레이어층 사용, 1313 receptive field 사용
기존 SRCNN에서 깊이를 깊게 하여 진행했지만 결과는 좋지 않음
VDSR은 이 문제 해결했고 (3*3) 20개 레이어층, 더 큰 receptive field 사용
HR은 low frequency information, high frequency information으로 나뉨
low frequency는 LR 이미지, high frequency는 잔여 이미지 혹은 이미지 디테일을 뜻함
그래서 LR 이미지와 HR 이미지의 low frequency는 동일함
=> residual learning에서 마지막에 더해줘도 문제가 없음
SRCNN은 두 가지 목적을 수행함
input 이미지 자체를 end layer로 보냄
이 작업은 auto - encoder와 유사함
오토 인코더는 입력 데이터를 압축하고 특징 학습하고 복원하는 학습 모델, end to end 학습이라는 점이 유사
전체 모델 학습 수렴 속도가 느려짐 -> VDSR은 residual images을 directly하게 모델링해서 빠르게 학습하고 성능도 높임
즉, 다른 scale factor를 쓸려면 또 훈련시켜야 함 번거로움
VDSR은 파라미터 수도 줄이고 싱글 네트워크로 2 3 *4 scales factor로 sr을 할 수 있게 함
VDSR은 각 레이어 통과 전 zero padding을 사용하여 input과 ouput 사이즈를 같게 함
SRCNN은 input보다 output 크기가 더 작았음
SRCNN은 각 레이어마다 다른 학습률을 적용함
VDSR은 각 레이어마다 동일한 학습률을 적용함
학습률은 코드에서 조절 가능

첫번째와 마지막 레이어를 제외하고 3*3 필터 64개를 적용 -> feature map 64개
첫번째와 마지막 레이어는 3*3 필터 1개를 적용 -> feature map 1개
input은 bicubic interpolation된 LR을 넣음
bicubic interpolation은 인접한 16개의 픽셀값에 가중치를 곱하여 계산
input RGB 이미지를 YCbCr로 변환 -> Y(밝기 정보), Cb(색상), Cr(색상) 각 채널을 bicubic interpolation으로 scale factor만큼 upscale
여기서 Y채널 이미지만 VDSR 입력으로 들어감 -> y채널이 인간의 시각에 더 민감하게 반응해서 y 채널 해상도 높이는 것이 시각적 품질 향상 sr된 y채널과 바이큐빅 된 Cr, Cb를 결합해서 최종 이미지 생성
가장자리 픽셀들이 센터 픽셀을 추론하는데 유용
가장자리 픽셀들이 제한된 범위를 제공해서 ill - posed 문제 해결에도 유용
레이어 통과하면서 feature map 크기가 작아지니까 가장자리 픽셀들 정보를 활용하기 어려워짐
유효한 정보를 뽑기 위해 필요한 만큼 영역을 키워줘야 함 그래서 가장자리에 zero padding 해줌
컨벌루션 후 이미지에 ILR 더해서 HR을 복원함
x (ILR) ,y(HR) 이고 y^은 f(x)로 고해상도 추정 이미지임
mean squre error를 최소화함
Residual -Learning
여러개의 layer 층 사용으로 vanishing / exploding gradients problem이 생김
최적화 목표 : 손실 함수 크기를 최소화하는 파라미터 찾기 -> 가중치와 바이어스 업데이트해야 함
gradient descent : 최적의 가중치를 찾는 방법 가중치에 따른 로스 함수 그래프 임의의 가중치 - 임의의 가중치의 접선의 기울기 하면 로스 함수의 최소점으로 찾아가게 되서 최적의 가중치를 찾을 수 있음

Gradient vanishing : 역전파 과정 중 출력층에서 멀어질수록 그라디언트 값이 작아지는 현상 활성화 함수의 미분값이 1 미만이어서 곱해지면 작아짐
Gradinet exploding : 역전파에서는 활성화함수말고도 가중치 값들도 관여함 가중치들이 큰 값들이면 레이어가 깊어질수록 곱해지고 곱해져서 가중치 폭발적으로 증가하게 됨
해결 방법으로 residual - learning 사용
residual image r = y - x , 0 아니면 굉장히 작은 값임
y를 예측하는 것이 아닌 r을 예측하는 걸로 바꿈 -> 모델에게 부담이 덜 함

loss layer 에도 반영하여 1. residual 추정 , 2. ILR, 3. HR 인풋이 들어감
높은 학습률 -> 속도 느림
높은 학습률을 빠르게 하기 위해 적용
Gradient Clipping : gradient 범위를 제한

감마는 현재 학습률이고 학습률이 커지면 범위 제한을 강하게 하고 작아지면 범위 제한을 약하게 함
논문에서 20에폭마다 학습률을 1/10배로 줄여 그라디언트 값을 더 넓게 제한하는데 이유는 학습이 진행될수록 그다리언트 값은 0에 가까워지고 더 최적의 그라디언트 값을 찾을 수 있게 하기 위함
앞선 두가지 방법을 적용해서 깊은 레이어 층, 높은 학습률로 생기는 문제들을 해결하고 성능을 더 우수하게 만듬
일반적으로 네트워크 하나 당 scale factor 하나에 대해 만듬
파라미터들이 서로의 스케일 펙터에 대해 공유함
h5 파일 안에 여러 scales 데이터 셋 구성이 되어 있음
33 2개 사용 = 55 1개 사용한 거와 receptive field 크기가 같음
깊이=D일 때, receptive field = (2D+1)*(2D+1)
즉, 깊이가 깊어질수록 receptive field가 커짐 -> 더 넓은 이미지 영역에서 문맥을 파악할 수 있음 -> 이미지 디테일 예측하기 좋음
깊은 네트워크는 높은 비선형성을 가지는 장점도 있음
깊이가 깊어질수록 더 높은 성능을 보여줌



residual을 적용했을 때 더 높은 psnr을 보여줌, residual은 10 에폭만에 수렴함
여기서 작은 학습률을 적용했을 때는 큰 학습률을 사용했던 성능에 도달 못함
학습률이 높으면 가중치가 큰 폭으로 변하게 되고 학습률이 낮으면 느리지만 세밀하게 조절할 수 있어서 학습률이 낮을수록 다른 모델들과 수치 차이가 작아짐
scale factor 2로 훈련된 모델은 같은 scale factor에서는 test 성능 우수하나 다른 배수에서는 성능이 좋지 않
단일 스케일로 학습된 모델보다 여러 스케일, 모든 스케일 학습된 모델이 성능이 우수

Training dataset : 91 ,291, 200 images from Berkeley Segmentation Dataset
Test dataset : Set5, Set14, Urban100, B100
depth 20
batches of size 64
Momentum 0.9
weight decay parameters 0.0001
ReLu
80 epochs (9960 iterations with batch size 64)
Learning rate 0.1 (decreased by a factor of 10 every 20 epochs)


residual - learning, gradient clipping으로 deep layer에서 발생하는 문제를 해결하고 기존 sr보다 빠르고 성능이 좋아짐
multi scale로 한 번 돌려서 여러 스케일에 대해 sr 할 수 있음