-
Image Super-Resolution Using Deep Convolutional Networks논문 Review 2020. 10. 18. 03:48
이번에 Review할 논문은 2014년 ECCV에서 발표한 Image Super-Resolution Using Deep Convolutional Networks 이다.
이 논문과 Deep Learning for Single Image Super-Resolution: A Brief Review의 일부분을 읽고 함께 공부하고 정리할 생각이다.
딥러닝을 처음으로 Super-resolution 분야의 적용해 간단한 구조로 기존의 SR 방법들을 능가하였기 때문에 SR 분야에
충분히 의미가 있다고 생각해서 기본적으로 먼저 읽었다.
두 논문을 읽고 Single Image Super Resolution이라는 분야와 딥러닝을 적용하는 SR 분야의 연구동향과 방식, 문제 들을 살펴 볼 예정이다.
먼저 Image Super-Resolution의 개념을 정리해보자.
Image Super Resolution이란?
image Super-Resolution은 컴퓨터 비전 분야의 중요한 갈래 중 하나로 이미지나 비디오의 해상도를 좋게 하는 영상처리 기술을 말한다.
Low Resolution(저해상도) 이미지를 High Resolution(고해상도) 이미지로 변환시키는 문제이다. 이미지 SR은 크게 이미지를 이용하는 개수에 따라 Single Image Super Resolution (SISR), Multi Image Super Resolution(MISR)로 나뉜다.
복원 과정에서 복원해야 하는 타겟인 고해상도의 이미지가 정답이 여러개 존재 할 수 있다.
유일한 정답이 존재하지 않는, 정의할 수 없는 문제를 의미한다. 이러한 경우를 Regular Inverse Problem 혹은 ill-posed Problem이라고 한다.
Super Resolution의 대표적인 접근 방법 중에 크게 3가지를 설명해보자면
ºInterpolation-based method
ºReconstruction-based method
ºDeep Learning-based method
OpenCV를 통해 image resize 함수를 사용하는 방식이 Interpolation-based method 이고 interpolation 옵션을 다르게 사용하는 경우 이미지의 품질이 달라진다.
Bicubic, Bilinear, Nearest Neighbor 등 다양한 interpolation 옵션이 있으며, 일반적으로 이미지의 해상도를 키워주는 경우에는 Bicubic, Bilinear, Lanczos interpolation을 사용한다. OpenCV를 다루면서 사용했던 다양한 보간법들이 이에 해당 된다.
이미지의 크기만 바뀔 뿐 디테일한 부분은 blur가 존재한다. 이걸 해결하기위해
Reconstruction-based method 와 Learning-based method가 나왔고
이 논문은 Single Image Super-Resolution 문제에 대해 최초로 딥러닝을 적용했다는 것이 의미가 있다.
Introduction
SR관련된 얘기는 위에서 설명했으니 생략하겟다.
지금까지 SR 문제를 풀어 왔던 가장 대표적인 방법은 example-based 방법과 sparse-coding-based 방법이었다.
Example-based 방법은 저해상도/고해상도 이미지 patch의 쌍을 미리 dictionary 형태로 구축하는 방식이고,
sparse-coding-based 방법은 입력된 저해상도 이미지를 sparse coefficient로 encoding했다가 dictionary를 거쳐 복원하는 방식이다.
이러한 방식들이 모든 pipline의 모든 단계들에 대해서 최적화 시키지는 않는다. unified optimization framework에 관해서는 고려하지 않는다.
Convolutional Neural Networks for Super-Resolution
일반적인 SR과 다르게 이 논문은 저해상도 이미지는 Y, 복원한 출력 고해상도 이미지는 F(Y), ground truth 고해상도 이미지는 X로 표현하고 있다. 즉 input이 y이고 output이 x이므로 헷갈리지 ㅏㅁㄹ자.
Low resolution input image는 bicubi interpolation을 적용하여 만든다.
최종 목표는ground truth 고해상도 이미지인 X와 유사한 image Y를 mapping 하는 F(Y)를 찾는 것이다.
Bicubic interpolation
- 영상처리 할때 영상을 회전 시키거나 확대하는 등의 변화를 가하여 입력 버퍼와 출력 버퍼의 geometry가 변했을때
출력 버퍼의 임의 위치에 있는 데이터를 입력 버퍼에서의 근접한 픽셀로부터 계산 하는데 사용되는 방법이다. Cubic 보간법을 2차원으로 확장한 것이다. 하나의 값을 결정하는 데에 인접한 16개의 화소 값을 이용한다.
-
Patch extraction and representation: 저해상도 이미지 로부터 patch 추출, 이 patch들은 특징을 가진다.
-
Non-linear mapping: 다차원 patch 벡터를 다른 다차원 patch 벡터로 non-linear하게 mapping 하기
-
Reconstruction: 다차원 patch 벡터에서 최종 고해상도 이미지(F(Y)) 생성
위 3가지 방식들을 Convolutional layer로 이루어져 실행된다.
Loss Function은 다음과 같이 MSE를 사용했다.
Meen Squared Error로 평균 제곱 오차로 기본적인 방법이다.
핵심아이디어다. 아주 간단한 3개의 Convolutional layer만 사용했다.
각각의 layer를 자세히 살펴보자.
layer 1개가 위에서 설명한 3가지를 하나 씩 담고 있다고 생각하면 된다.
image Y로부터 patch를 추출한다. 각 patch가 feature가 되고 CNN을 통과 시켜 feature map을 생성한다.
n1-dimensional vector 가 1번째 operation의 output이다.
output에 Relu를 넣어준다.
high-dimensional vector들을 non-linear하게 mapping 시키는 layer이다. 1*1 convolutional layer를 사용하고 각각의 mapped된 vector는 high resolution patch를 의미한다. layer1과 마찬가지로 output에 Relu를 사용한다.
high resolution image를 만든다.
전통적인 방법에서는 예측된 higu resolution patch를 average 하여 최종 전체 이미지를 생성하는 경우가 많았다.
high resolution patch가
image의 domain에 있을 경우 필터는 평균 필터처럼 작동한다.
일부 다른 domain에 있을 경우 W3이 계수를 먼저 이미지 domain에 project하고 평균을 산출한다.
위 세가지 연산은 서로 다른 직관에 의해 동기부여가 되지만 그것들은 모두 convolutional layer의 같은 form으로 이어진다. 위 그림은 간단한 그림으로 정리한 것이다.
Training
loss function은 위에 말한 MSE를 사용하고 Training 평가 척도는 PSNR을 사용한다.
PSNR이란?
- 최대신호대잡음비는 신호가 가질 수 있는 최대 전력에 대한 잡음의 전력을 나타낸 것이다. 주로 영상 또는 동영상 손실 압축에서 화질 손실 정보를 평가할 때 사용된다.
위와 같이 계산한다. 위 식에선 MSE의 값이 작아질수록 PSNR 값이 커져서 화질 개선을 더 잘할 수 있다.
JPEG 압축 손실된 이미지들의 PSNR을 보면 압축률이 클수록 PSNR도 작아진 것을 확인할 수 있다.
PSNR은 위 첫번째 공식에서 보듯이 단순히 원본 이미지와 왜곡 이미지 사이의 수치적 차이로 이미지 품질을 평가하기 때문에, 종종 사람이 느끼는 것과 일치되지 않은 품질 점수를 산출한다.
Experiments
SRCNN의 PSNR이 높은 것을 알 수 있다. 위 실험은 SR을 luminance 채널 (YCbCr color space의 Y 채널)에만 적용한 것이지만, 저자들은 이후 다른 실험에서 RGB 모든 채널에 적용하면 성능이 더 좋아짐을 보이고 있다. 또 ImageNet을 이용해 더 많은 데이터, 필터를 사용하면 성능이 좋아지는 모습을 볼 수 있다.
위의 테이블은 filter 관련 테이블인데 필터의 Size가 커질수록 PSNR 값이 좋아지는 것을 볼 수 있다.
하지만 training time 또한 증가한다.
해당 내용의 그래프이다.
CNN layer를 4개, 5개로 더 늘려도 성능이 좋아지지 않는 것은 training의 어려움 문제라고 생각한다.
논문에서는 Fig.9 . Deeper structure does not always lead to better results 라고 표현한다.
위 논문을 코드로 구현해 볼 예정이다. 관련 코드는 GitHub에 올리도록 하겠다.
Reference
www.youtube.com/watch?v=1jGr_OFyfa0&list=PLUK1Om2xtY0oeXnkN6b9Ri9469ncNZaWW&index=9 (PR-004)
jamiekang.github.io/2017/04/24/image-super-resolution-using-deep-convolutional-networks/
'논문 Review' 카테고리의 다른 글
Knowledge Distillation for Multi-task Learning (0) 2022.02.06 Generative Adversarial NetS (GAN) (0) 2020.11.23 CutMix: Regularization Strategy to Train Strong Classifierswith Localizable Features (0) 2020.10.23 Bag of Tricks for Image Classification with Convolutional Neural Networks (0) 2020.10.02 Batch Normalization (0) 2020.08.16 -