본문 바로가기

Review

Real-world Super-resolution via Kernel Estimation and Noise Injection

[paper], [code] *테스트 코드만 공개됨

Real-world 및 Blind Super-resolution (SR)에 관련된 논문으로 CVPR 2020 workshop (NTIRE 2020) 페이퍼입니다. 더불어 NTIRE 2020 real-world SR 챌린지에서 1위를 차지한 방법이기도 합니다.
여기서는 Real-world SR과 Blind SR에 대해서 간략히 알아보고 논문에서 제안한 방식을 알아보겠습니다.

Introduction

일반적으로 기존의 SR 방법들은 low-resolution (LR), $I_{LR}$, 영상을 다음과 같이 high-resolution (HR), $I_{HR}$ 영상들로부터 구했습니다.

$$ I_{LR} = I_{HR} \downarrow_s $$

이를 통해 paired dataset, $ \{ I_{HR}, I_{LR} \} $, 을 구성하고, supervised learning으로 학습을 합니다. $\downarrow_s$ 는 $s$의 scale factor로 downsampling하는 연산(operator)이고 여기서는 bicubic downsampling을 뜻합니다.
본 논문은 이러한 방법이 가진 문제점을 제기합니다. $I_{LR}$을 만들때 bicubic downsampling만을 사용하면 실제 (real-world) low_resolution 영상과는 다른 특성을 가진 영상에 대해서만 학습이 된다는 점을 지적하고 있습니다. 다시 말해 인위적으로 생성한 low-resolution 영상이 아닌 실제 low-resolution을 이용한 Real-world Super-resolution (RWSR)이 필요하다는 얘기입니다.

위 사진에서 real-world SR (Ours)과 그렇지 않은 기존의 SR (EDSR, ZSSR) 방법들을 비교하고 있습니다. real-world SR을 사용했을때의 결과가 훨씬 나은 것을 확인할 수 있습니다.

Real-world Super-resolution

Real-world Super-resolution은 앞서 말한대로 실제 low-resolution 영상을 가지고 super-resolution을 하는 것을 말합니다. 기존 방법들은 HR 영상을 이용해 인위적으로 LR 영상을 만들었기 때문에 손쉽게 paired dataset을 확보할 수 있었고, 이를 이용해 supervised learning을 적용할 수 있었습니다. 하지만 이렇게 학습에 이용한 LR 영상은 실제 LR 영상과 큰 차이가 있기 때문에 실제 LR 영상에 적용시 성능이 크게 떨어지는 문제가 있습니다.

이러한 문제점을 풀기 위해 Real-world SR이 대두되었고, 다양한 방법론이 제안되었습니다.

첫째로 디지털 카메라의 focal length를 조절하여 paired real-world dataset을 만들어서 real-world LR을 학습에 직접 사용한 방법입니다.[각주:1] 이 방법은 real-world 영상들을 가지고 직접 supervised learning을 할 수 있다는 장점이 있지만, 데이터셋 구축을 하기에 상당히 어렵다는 문제점이 있습니다. 자세한 내용은 해당 논문을 참조 바랍니다.

둘째로 unpaired dataset으로 real-world SR을 하는 방법이 있습니다.[각주:2] [각주:3] 이 방법들에서 사용되는 데이터셋은 unpaired 형태로, 낮은 해상도를 가진 $I_{LR}$ 영상 데이터셋과 높은 해상도를 가졌지만 $I_{LR}$ 영상과는 전혀 다른 콘텐츠를 담고 있는 $I_{HR}$ 영상 데이터셋으로 구성됩니다. 이 방법들은 주로 두 개의 Generative Adversarial Networks (GAN)을 이용해 하나는 $I_{HR} \rightarrow I_{LR}$ 매핑을 학습하고 다른 하나는 $I_{LR} \rightarrow I_{HR}$ 매핑을 학습합니다. 이를 이용해 HR 영상을 적절한 LR 영상으로 변환하고, 이렇게 생성된 LR 영상을 입력으로 하여 다시 HR 영상을 복원하는 방식으로 SR을 수행합니다. 자세한 내용은 해당 논문들을 직접 읽어보시길 바랍니다.

Blind Super-resolution

Blind Super-resolution은 real-world SR 방법들 중 한가지로 degradation kernel을 직접 estimation하는 방법입니다. [각주:4] [각주:5] 기존 방법들은 degradation kernel을 bicubic downsampling으로 가정해서 $I_{LR}$을 $I_{HR}$로부터 만들어내는것에 반해, 해당 방법은 degradation kernel을 real-world 영상으로부터 직접 찾아냅니다. 그렇게 찾은 kernel을 가지고 $I_{HR}$을 downsampling해서 $I_{LR}$ Pair를 만들어 SR 모델을 학습시키거나, zero-shot super-resolution[각주:6] 과 같은 방법을 적용해 real-world SR을 수행할 수 있습니다.

Real-world Super-resolution via Kernel Estimation and Noise Injection

지금부터 해당 논문에서 사용한 방법을 설명합니다. 제안한 방법은 두 가지 단계를 거쳐 Real-world Super-resolution을 수행합니다. 첫 번째 단계에서는 degradation function을 estimation합니다. 이 단계에서 blurry kernel과 노이즈를 estimation합니다. 이때 estimation된 kernel과 노이즈를 이용해 $I_{HR}$ 을 $I_{LR}$로 만들면 실제 LR 영상과 유사한 LR 영상을 얻을 수 있습니다. 두 번째는 앞서 획득한 paired dataset $ \{ I_{HR}, I_{LR} \} $을 이용해 SR 모델을 학습하는 단계입니다. 다음 그림에 전체적인 과정이 그려져 있습니다.

Realistic Degradation for SR

여기서는 real-world LR 영상을 생성하는 방법을 구체적으로 살펴보도록 합니다. 논문에서는 degradation kernel $\textbf{k}$와 노이즈 $\textbf{n}$을 이용해 다음과 같이 LR 영상을 만듭니다.
$$I_{LR} = (I_{HR} * \textbf{k}) \downarrow_s + \textbf{n}$$
Degradation kernel $\textbf{k}$는 KernelGAN$^{각주 4}$을 이용해 estimation 합니다. $I_{LR}$ 영상들로 추정된 $\textbf{k}$와 노이즈 $\textbf{n}$로 paired dataset을 위 식을 이용해 만듭니다. 아래에 paired dataset을 구성하는 알고리즘이 소개되어 있습니다.

입력 $\mathcal{X}$는 real-world LR 영상이고, $\mathcal{Y}$는 high-resolution 영상이며 두 셋은 unpaired 상태입니다. $s$는 downsampling scale factor이며, 동시에 SR 하려고하는 scale factor이기도 합니다.
알고리즘의 $3-10$줄에서 $\mathcal{X}$ 셋의 영상들을 돌면서 $\textbf{k}$와 $\textbf{n}$을 획득하고 있습니다. (Eq.4 와 Eq. 7은 다음 섹션에서 설명합니다)
$11-14$번 줄에서 앞서 획득한 $\mathcal{K}$ (degradation kernel set)와 $\mathcal{N}$ (noise set)으로 $\mathcal{Y}$를 돌며 paired dataset을 구성합니다.

Kernel estimation and downsampling

Degradation kernel (=Downsampling kernel=SR kernel)은 앞서 말했듯이 KernelGAN$^{각주4}$를 이용해 estimation 합니다. KernalGAN은 입력 영상의 SR kernel (Degradation kernel)을 deep linear network (activation 없는 딥 네트워크)를 generator로 가지는 GAN으로 학습합니다. Generator가 linear layer들로 이루어져 있기 때문에 최종적으로 학습된 모델은 일정한 크기를 가지는 kernel로 취급할 수 있습니다. KernelGAN의 generator를 학습시킬 때 다음을 최적화하도록 합니다. 이 식은 앞서 알고리즘에서 등장했던 Eq.4 입니다.

$$
\arg \min_{\mathbf{k}} ||(I_{src} * \mathbf{k})\downarrow_{s} - I_{src} \downarrow_{s} || + | 1-\sum_{i,j} \mathbf{k}_{i,j} | + |\sum_{i,j} \mathbf{k}_{i,j} \mathbf{m}_{i,j}| + |1-D((I_{src} * \mathbf{k})\downarrow_{s})|
$$

$(I_{src} * \mathbf{k})\downarrow_{s}$는 kerenl $\mathbf{k}$로 downsampling된 영상이고 $I_{src} \downarrow_{s}$는 bicubic으로 downsampling된 영상입니다. 즉, 첫 번째 항은 $\mathbf{k}$로 downsampling된 영상이 low-frequency 정보를 잘 보존하도록 돕습니다. 두 번째 항은 $\mathbf{k}$의 합이 $1$이 되도록하게하고, 세 번째항은 $\mathbf{k}$의 가장자리 값들이 0이 되도록 합니다. $\mathbf{m}$은 마스크로 가장자리에 페널티를 부여합니다. 마지막 항은 discriminator로 계산되는 손실입니다.

Clean-Up

논문에서 $I_{src} \in \mathcal{X}$에 속하는 영상으로 $I_{HR} \in \mathcal{Y}$ 영상을 만드는 방법을 제안합니다. bicubic kernel의 노이즈 스무딩 특성을 이용해 특정 스케일 factor $sc$로 downsampling하면 노이즈가 사라진다는 점을 이용합니다. 즉,

$$I_{HR} = (I_{src} * \mathbf{k}_{bic})\downarrow_{sc}$$

를 합니다. $\mathbf{k}_{bic}$는 bicubic kernel입니다. 이를 통해 노이즈가 제거된 $I_{HR}$ 영상을 추가 생성합니다.

Degradation Blur Kernels

Estimation된 blur kernel $\mathbf{k}$를 가지고 downsampling된 영상 $I_D$를 만드는 방법입니다. 특별할 것은 없고 다음과 같이 convolution 후 stride 연산을 합니다.

$$I_D = (I_{HR} * \mathbf{k}_i)\downarrow_s , i \in \{1,2,...,m \}$$

$\mathbf{k}_i$ 는 $\mathcal{K}$의 원소고, $\mathcal{K}$의 크기가 $m$입니다. $\mathcal{K}$는 앞서 언급했던 알고리즘의 표로부터 획득합니다.

Noise Injection

논문에서 제안하는 노이즈 estimation 방법은 매우 간단합니다. $I_{src}$ 영상 patch로부터 직접 노이즈를 획득합니다. 이때 몇가지 가정을 바탕으로 진행하는데 콘텐츠 영역의 patch는 분산이 크고, 노이즈 영역의 patch는 그리 크지 않다고 가정합니다. 이를 바탕으로 다음과 같이

$$ \sigma(\mathbf{n}_i) < v $$

로 노이즈 patch를 찾아냅니다. 위 식이 알고리즘 표의 Eq.7 입니다. $\sigma$ 는 분산을 계산하는 함수고, $v$는 노이즈 patch를 만족하는 최대 분산입니다.

Degradataion with Noise Injection

노이즈 patch $\mathbf{n}_i \in \mathcal{N}$과 $I_D$ ($\mathcal{K}$로 생성된)를 이용해 다음과 같이 $I_{LR}$을 만듭니다.

$$I_{LR} = I_D + \mathbf{n}_i , i \in \{1,2,...,l \} $$

이로써 paired dataset이 생성합니다.

SR Model

앞서 kernel 및 noise estimation으로 획득한 paired dataset으로 SR model을 학습하는 단계입니다. 논문에서 사용한 SR model은 ESRGAN[각주:7]입니다. 기존 ESRGAN과 다른점이 있다면 discriminator 구조가 다른데 제안한 방법에서는 patch discriminator[각주:8]라는 구조를 사용했습니다. 기존 ESRGAN은 VGG를 사용했는데, 그것의 깊은 구조와 마지막의 fully connected layer가 global feature에 집중하도록 하는 단점이 있음을 지적합니다. 반면 patch discriminator는 얕은 fully-convolutional network로 local feature에 집중합니다. 제안하는 방법의 patch discriminator의 구조는 3개 레이어를 가지는 fully-convolutional network로 말단 layer로부터 나온 feature map은 70x70의 receptive field를 가집니다.

실험

Ablation study

제안한 방법에서 사용한 기술들, 즉 kernel estimation, noise injection, patch discriminator 각각에 대해 성능에 미치는 영향을 확인합니다.

위 사진에서 LR은 입력 영상이고 빨간색과 노랜색 박스 영역을 확대해서 오른쪽에 보여주고 있습니다. Bicubic은 degradation operation을 bicubic으로 상정해서 학습한 결과이고, Noise는 Noise와 patch discrim. 을 사용해서 학습한 결과, Kernel은 Kernel과 patch discrim. 을 사용한 결과, VGG-128은 Kernel과 Noise와 함께 VGG discrim.을 사용한 결과, Patch는 Kernel과 Noise와 함께 patch discrim.을 사용한 결과입니다. 첫번째 Bicubic의 결과는 bicubic으로 paired 데이터셋을 만든 후 ESRGAN으로 학습한 것과 같습니다. Noise는 kernel estimation이 빠졌을 때의 결과로 제안한 기술을 전부 다 사용한 Patch 방법보다 열화가 있는 것을 볼수 있습니다. Kernel은 Noise estimation이 빠졌을 때의 결과로 역시 Patch보다 열화가 있으며, Noise보다 열화가 더 심한것으로 보아 Noise estimation 방법이 real-world SR에 더 중요한 기술임을 짐작할 수 있습니다. 끝으로 VGG discrim. 의 결과 역시 Patch의 결과보다 심한 열화가 존재합니다.

NTIRE 2020 Real-world SR

이 방법은 NTIRE 2020 Real-world SR의 track1과 track2 모두에서 1위를 차지하였습니다. track1은 주최측에서 인공적으로 만든 노이즈를 가지는 영상을 $\mathcal{X}$로 구성한 unpaired dataset에서 real-world SR을 하는 작업이고, track2는 iPhone3로 촬영된 영상을 $\mathcal{X}$로 하는 unpaired dataset에서 SR하는 챌린지입니다. 자세한 챌린지 내용 및 quantative results는 논문에서 참고하시길 바라며 여기서는 정성적 결과를 소개하면서 이 글을 마치겠습니다.

위 사진이 track1의 결과고, 아래 사진이 track2의 결과입니다.
K-ZSSR은 KernelGAN으로 estimation한 kernel로 zero-shot SR을 한 결과입니다.


[##윤광진##]

  1. Zhang, Xuaner, et al. "Zoom to learn, learn to zoom." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2019. [본문으로]
  2. Unsupervised Image Super-Resolution
    using Cycle-in-Cycle Generative Adversarial Networks [본문으로]
  3. Bulat, Adrian, Jing Yang, and Georgios Tzimiropoulos. "To learn image super-resolution, use a gan to learn how to do image degradation first." Proceedings of the European conference on computer vision (ECCV). 2018. [본문으로]
  4. Bell-Kligler, Sefi, Assaf Shocher, and Michal Irani. "Blind super-resolution kernel estimation using an internal-gan." Advances in Neural Information Processing Systems. 2019. [본문으로]
  5. Gu, Jinjin, et al. "Blind super-resolution with iterative kernel correction." Proceedings of the IEEE conference on computer vision and pattern recognition. 2019. [본문으로]
  6. Shocher, Assaf, Nadav Cohen, and Michal Irani. "“zero-shot” super-resolution using deep internal learning." Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018. [본문으로]
  7. Wang, Xintao, et al. "Esrgan: Enhanced super-resolution generative adversarial networks." Proceedings of the European Conference on Computer Vision (ECCV). 2018. [본문으로]
  8. Zhu, Jun-Yan, et al. "Unpaired image-to-image translation using cycle-consistent adversarial networks." Proceedings of the IEEE international conference on computer vision. 2017. [본문으로]