[1501.00092] Image Super-Resolution Using Deep Convolutional Networks
Image Super-Resolution Using Deep Convolutional Networks
We propose a deep learning method for single image super-resolution (SR). Our method directly learns an end-to-end mapping between the low/high-resolution images. The mapping is represented as a deep convolutional neural network (CNN) that takes the low-re
arxiv.org
1. INTRO
SR 문제
- ill-posed 문제
- 한 개의 LR 이미지 → 여러 개의 가능한 HR 복원 결과가 존재하기 때문
해결 : prior(사전 정보)로 가능한 해의 범위를 줄임 = example-based strategy
- internal example-based : 입력 이미지 안에서 반복되는 패턴/패치 활용
- external example-based : 외부 데이터셋에서 LR–HR patch 쌍을 학습
Sparse-coding-based method (2에 해당)
- LR의 patch들을 겹치게 자르고 전처리
- 미리 학습된 저해상도 dictionary를 이용해 patch를 sparse coefficient α로 표현 : y≈DL⋅α
- 얻어진 α를 고해상도 dictionary에 적용해 복원 : x=DH⋅α
- 겹치는 패치들을 평균내서 최종 고해상도 이미지 구성
문제점
- 일부 단계만 최적화
- e2e가 아니고 각 단계 별도 설계, 학습
해결 : SRCNN
- CNN으로 e2e 학습 : 딥러닝 기반
- 전체 pipeline이 하나의 네트워크로 통합, 동시에 최적화 가능
- 간단한 구조이지만 정확도, 속도 우수
- 더 크고 다양한 데이터셋에 + (vs 기존)
- 3 ch img도 처리 가능
2. RELATED WORK
2.1 Image Super-Resolution
SISR 방식 4가지
- Prediction-based
- Edge-based
- Image statistical
- Example-based → SOTA
Example-based
- Internal example-based
- External example-based
External example-based
- Freeman et al. [14]
- LR patch의 NN 찾아서, 해당 HR patch 사용해 복원
-
더보기
입력 이미지의 작은 조각 (패치) 하나를 고르면,
학습 데이터셋(LR-HR patch 쌍) 중에서 가장 비슷한 LR 패치를 찾고,
그 LR 패치에 대응하는 HR 패치를 그대로 복원 결과로 사용
- Chang et al. [4]
- NN 대신 manifold embedding 사용 (patch 간 비선형 구조 반영)
- Yang et al. [49], [50]
- sparse coding 방식으로 정교한 매핑 수행 : SOTA
- LR patch를 sparse하게 표현한 후, 동일한 sparse vector로 HR patch 복원
→ 이 방식들은 모두 딕셔너리나 매핑에 집중 // patch 추출, 합성은 별도 전처리/후처리 단계로 간주 (최적화에 포함X)
Color img
- 기존 SR : gray scale이나 Y채널(밝기 성분)만 SR
- 시도 : RGB 각각 SR 처리 → 최종 결과 합침
- 문제 : 3ch 각각의 SR 성능 비교 분석 부족
→ SRCNN은 3ch 동시 학습/처리, 효과 실험적으로 분석 가능
2.2 Convolutional Neural Networks
CNN의 +로 SRCNN도 +
2.3 Deep Learning for Image Restoration
기존
- MLP, CNN을 이용한 denoising
- Cui et al. : internal example-based SR, autoencoder 삽입
→ layer마다 따로 최적화 필요, e2e 아님 (vs SRCNN)
3. CNN FOR SR
3.1 Formulation
- LR에서 bicubic interpolation으로 사이즈 키운 Y 생성 (여전히 LR)
- GT HR : X (Y와 사이즈 같음)
- 하고자 하는 것 : X와 가장 비슷한 F(Y)를 얻자 → 매핑 함수 F를 CNN으로 학습!
흐름
Input (Upscaled Y)
↓
[Conv Layer 1] : Patch extraction & feature embedding
↓
[Conv Layer 2 + ReLU] : Non-linear mapping (LR → HR patch)
↓
[Conv Layer 3] : Patch aggregation → Reconstructed output F(Y)
↓
Output img vs GT HR (X)
3.1.1 Patch extraction and representation (단계 1)
기존
- 이미지에서 patch 잘라냄
- 그것들을 고정된 basis (ex: PCA, DCT)로 변환해서 고차원 벡터로 표현
- 즉, patch → basis 벡터 공간으로 매핑
SRCNN에서는
- 그 basis를 CNN 필터로 보고, 그 필터들을 학습 가능한 형태로 네트워크 안에 넣음
- 즉, basis를 학습하면서 동시에 최적화
- B1은 필터마다 하나씩 있는 bias term → 총 n1 벡터
- max는 각 필터 응답값에 대해 ReLU 적용 : 음수는 제거하고 양수만 통과시켜 비선형성 부여
- 결국 각 위치의 패치(초록부분)가 n1차원의 벡터로 표현되는것
3.1.2 Non-linear mapping (단계 2)
목적
- 첫 번째 레이어에서 나온 각 n1 벡터를 더 추상적인 n2차원 벡터로 비선형적으로 매핑하자
방법
- 1*1 conv와 비슷 = 차원 수 줄이기 : 위치별 특징만 보고 변환
- 3*3 or 5*5도 가능 : 이웃 위치의 특징까지 함께 고려해서 더 복잡한 표현 가능
- 이 layer는 중간 mapping layer라서 더 깊게 쌓기 가능
- but 필터 크기가 커질수록 파라미터 수 증가, 학습 시간 증가
3.1.3 Reconstruction (단계 3)
목적
- 두 번째 layer에서 생성된 n2차원 feature map을 하나의 최종 img (c ch)로 합쳐서 고해상도 이미지 F(Y) 생성
기존
- 여러 HR 패치를 예측하고 겹치는 부분 평균 내기
-
더보기
고해상도 이미지 전체를 한 번에 생성하지 않고,
입력 LR 이미지를 겹치는 패치들로 나누고,
각 패치를 독립적으로 HR로 복원한 뒤,
겹치는 부분을 평균해서 최종 이미지 구성.
평균내기 = 필터 적용으로 보면?
- n2개의 feature map을 입력으로 받아 → c개의 고해상도 이미지 채널로 변환하는 convolution layer
- F2(Y)의 feature들이 img domain에 있다면
- F2(Y)의 feature들이 basis vector에 대한 계수라면
- basis로부터 실제 이미지 형태로 투영
- 그리고 여러 HR patch 겹쳐서 avg
3.2 Relationship to Sparse-Coding-Based Methods
Sparse coding = CNN
Sparse coding 단계
- 입력 LR에서 f1*f1 patch 자르기
- 이 patch를 dictionary에 투영 (project the patch onto a (low resolution) dictionary)
- dictionary : "대부분의 패치는 이런 벡터들의 조합으로 만들 수 있다"라고 생각해서 많은 basis 벡터들을 모아 놓은 큰 행렬
- α는 대부분 값이 0, 몇 개만 값이 있음 : 그래서 sparse
- 즉, x는 256개의 basis 중 몇 개만 사용해서 근사
- 결국 patch가 몇 개의 basis로 이루어져 있는지를 나타내는 sparse 표현을 찾음
결과적으로 n1 차원 coefficient 벡터가 나오게 되니까, f1*f1 커널 n1개를 적용한 것과 같음!
- 이 계수들을 비선형적으로 최적화
- 가능한 한 적은 개수의 basis만 사용해서 원래 패치를 재구성 하려고 하는 최적화
첫번째 항 : 재구성 오차 최소화, 두번째 항: α의 sparsity 유도 (많은 계수가 0이 되게끔)
- n2개의 고해상도 표현으로 (고해상도 패치를 표현하는 정보)
- n2 = n1
- sparse coding solver는 CNN 관점에서 1*1 spatial support를 가진 특수한 비선형 매핑
- 한 위치의 feature vector만 보고 처리하니까 1*1
- HR dictionary에 투영 : HR patch 생성
- 겹치는 부분을 평균내서 부드럽게 이어지도록 = linear convolutions on n2 feature maps
문제점
- 위의 과정들은 반복적인 최적화 과정을 통해 비선형 매핑을 수행해야해서 속도 느림
SRCNN은?
- 같은 과정을 FF CNN layer 2개로 단순화함(feature 추출 + 비선형 mapping)
- 반복 없이 한 번의 전파로 결과 도출
- 커널 크기가 f2=1이면:
- 공간을 고려하지 않고, 각 위치에서만 비선형 변환
- 즉, 차원을 줄이는 픽셀 단위의 FC layer와 같음
| f₁ |
9 |
9*9 입력 패치 |
| f₂ |
1 |
1*1 비선형 매핑 |
| f₃ |
5 |
5*5 복원 필터 |
| n₁ |
64 |
첫 번째 layer feature map 수 |
| n₂ |
32 |
고해상도 표현 벡터 차원 (압축됨) |
- f3은 출력에서 중심 픽셀에 집중하기 위해 작게 설정
- 극단적으로 f3 = 1이면, 중심 픽셀만 이용 (patch averaging 없이)
- n2<n1 : feature 표현은 가능한 한 적은 수의 basis로 구성되도록 압축 (sparse하게)
- 전체 receptive field는 169
- 기존 exemple based 방법은 81
결국 SRCNN은 :
- 넓은 receptive field를 사용해 정보를 많이 활용
- 출력 복원에서는 중심부에 집중하여 디테일 보존 +
댓글 영역