상세 컨텐츠

본문 제목

[논문 리뷰] SRCNN : Image Super-Resolution Using Deep Convolutional Networks

논문 리뷰

by jii 2025. 8. 7. 00:22

본문

[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

  1. internal example-based : 입력 이미지 안에서 반복되는 패턴/패치 활용
  2. external example-based : 외부 데이터셋에서 LR–HR patch 쌍을 학습

Sparse-coding-based method (2에 해당)

  1. LR의 patch들을 겹치게 자르고 전처리
  2. 미리 학습된 저해상도 dictionary를 이용해 patch를 sparse coefficient α로 표현 : yDLα
  3. 얻어진 α를 고해상도 dictionary에 적용해 복원 : x=DHα
  4. 겹치는 패치들을 평균내서 최종 고해상도 이미지 구성

문제점

  • 일부 단계만 최적화
  • e2e가 아니고 각 단계 별도 설계, 학습

해결 : SRCNN

  • CNN으로 e2e 학습 : 딥러닝 기반
  • 전체 pipeline이 하나의 네트워크로 통합, 동시에 최적화 가능
  • 간단한 구조이지만 정확도, 속도 우수
  • 더 크고 다양한 데이터셋에 + (vs 기존)
  • 3 ch img도 처리 가능

2. RELATED WORK

2.1 Image Super-Resolution

 

SISR 방식 4가지

  1. Prediction-based
  2. Edge-based
  3. Image statistical
  4. Example-based → SOTA

Example-based

  1. Internal example-based 
  2. External example-based

External example-based

  1. Freeman et al. [14]
    • LR patch의 NN 찾아서, 해당 HR patch 사용해 복원
    • 더보기

      입력 이미지의 작은 조각 (패치) 하나를 고르면,

      학습 데이터셋(LR-HR patch 쌍) 중에서 가장 비슷한 LR 패치를 찾고,

      그 LR 패치에 대응하는 HR 패치를 그대로 복원 결과로 사용

  2. Chang et al. [4]
    • NN 대신 manifold embedding 사용 (patch 간 비선형 구조 반영)
  3. 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

 

  1. F2(Y)의 feature들이 img domain에 있다면 
    • filter = avg filter
  2. F2(Y)의 feature들이 basis vector에 대한 계수라면
    • basis로부터 실제 이미지 형태로 투영
    • 그리고 여러 HR patch 겹쳐서 avg

3.2 Relationship to Sparse-Coding-Based Methods

 

Sparse coding = CNN

 

Sparse coding 단계

  1. 입력 LR에서 f1*f1 patch 자르기
  2. 이 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개를 적용한 것과 같음!
  3. 이 계수들을 비선형적으로 최적화 
    • 가능한 한 적은 개수의 basis만 사용해서 원래 패치를 재구성 하려고 하는 최적화
      첫번째 항 : 재구성 오차 최소화, 두번째 항: α의 sparsity 유도 (많은 계수가 0이 되게끔)
  4. n2개의 고해상도 표현으로 (고해상도 패치를 표현하는 정보)
    • n2 = n1
    • sparse coding solver는 CNN 관점에서 1*1 spatial support를 가진 특수한 비선형 매핑
    • 한 위치의 feature vector만 보고 처리하니까 1*1
  5. HR dictionary에 투영 : HR patch 생성
  6. 겹치는 부분을 평균내서 부드럽게 이어지도록 = 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를 사용해 정보를 많이 활용
  • 출력 복원에서는 중심부에 집중하여 디테일 보존 +

관련글 더보기

댓글 영역