文献阅读 Image Super-Resolution Using Deep Convolutional Networks

更新于

论文信息:http://arxiv.org/abs/1501.00092

介绍

单图像超分辨率(SR)是一个图像处理领域的经典问题,即从低分辨率图像(LR)中重建高分辨率图像(HR)。显然该问题方案不唯一,需要先验信息来约束。主要的超分辨率方法有三类,基于插值的、重建的、基于示例的。当前主流的方法是基于示例的,利用给定的样例来学习高频细节。其中又分为两个类别,一种是基于内部相关性的,另一个是基于外部数据集的。

基于外部示例方法之中,代表性的稀疏编码方法需要多个步骤,首先把图像分割成小块,然后用低分辨率字典编码,再把得到的系数用高分辨率字典还原。该方向主要研究优化字典和高效的映射函数。

本文展示了上述流程等价于一个 Deep CNN。本文直接设计了一个从低分辨率图像到高分辨率图像的端到端网络,没有显式的字典学习,也没有显式的补丁提取和聚合,是直接学习得到的,几乎没有前后处理。

该方法有以下几个优点:

  1. 虽然很简单,但效果出众,完全前馈的,跑的很快。
  2. 可以很方便的在大型数据集上训练,得到更好的效果。
  3. 可以在 RGB 通道上同时处理,效果还能提。

相关工作

SR 方法可以分成四类:预测模型、边缘算法、图像统计方法、基于块(示例)的方法,当前基于示例的方法最好。基于示例的方法利用自相似特性,并从输入图像。基于外部的方法,主要研究怎么让字典或者流形更紧凑,以及如何在这些空间上表示 patch。

Freeman 2000 的工作最早指出,字典就是高分辨率和低分辨率对,匹配即低分辨率空间中最近邻。后面还有更复杂的稀疏编码公式,有流形嵌入技术、随机森林等等,意在提高映射精度和速度。这些方法主要研究怎么提取 patch,进行多步的预处理和后处理。

很多工作专注于单通道和灰色图像,彩色图像就转化 YCbCr,并仅在亮度上使用 SR;部分结果考虑了 RGB 多通道,但也没有分析不同通道的性能和恢复三个通道的必要性。

ReLU 和 GPU 训练的技术使得更深的 CNN 得以实现,在图像分类上大获成功。

已经有一些深度学习的图像恢复研究,主要是全连接的 MLP 网络,主要用于自然图像降噪和雨水污垢降噪,也有基于内部示例的方法中有应用神经网络,但是并不是端到端的。本论文创新的使用端到端的 CNN 来训练,取得速度和质量上的双重进步。

CNN 超分辨率

对于低分辨率图像,使用双三次插值将其放大,使其与输出图片对齐,这是唯一的预处理。(本文提到双三次插值也是卷积,但好像当年 cuda 不好跑这个,所以是预处理,现在 pytorch 可以直接跑)。

接下来我们需要三个步骤:patch 提取,非线性映射,重建。本文将依次说明这都是卷积。

patch 提取

传统提取 patch 就是把图片切成密集的小块,然后用预训练的基来表示他们(如 PCA、DCT、Haar),因此可以被看作一个滤波器的卷积

F1(Y)=max(0,W1Y+B1)F_1(Y) = \max(0, W_1 \ast Y + B_1)

其中 W1W_1 是一个 c×f1×f1c \times f_1 \times f_1n1n_1 个滤波器,其中 cc 是图片通道数,f1f_1 是滤波器的空间大小,卷积核大小为 c×f1×f1c \times f_1 \times f_1。输出 n1n_1 个特征图,也就是 n1n_1 维度的向量。

非线性映射

第一层给每个图像块提取 n1n_1 维度特征,第二步我们把它映射为 n2n_2 维度的向量。

F2(Y)=max(0,W2F1(Y)+B2)F_2(Y) = \max(0, W_2 \ast F_1(Y) + B_2)

其中,W2W_2n2n_2n1×f2×f2n_1 \times f_2 \times f_2 个参数的滤波器。

重建

在传统方法中,是根据预测出的重叠高分辨率补丁进行平均,这也可以看作一个卷积。

F3(Y)=W3F2(Y)+B2F_3(Y) = W_3 \ast F_2(Y) + B_2

这里 W3W_3 对应于大小为 n2×f3×f3n_2 \times f_3 \times f_3cc 个滤波器。

对比系数编码方案

稀疏编码方案也差不多,求出特征向量,然后用尽量少的基向量表示。一般这是一个优化问题

minαxDα22+λα1\min_{\alpha} \| x - D \alpha\|_2^2 + \lambda \| \alpha\|_1

最好情况下是选取 α0\|\alpha\|_0,而这是一个 NP-hard 的问题,所以退而求其次的选择 l1l_1 范数。求解需要梯度法、匹配法等迭代方法。

训练

学习端到端映射函数 FF 需要估计网络参数 Θ={W1,W2,W3,B1,B2,B3}\Theta = \{W_1, W_2, W_3, B_1, B_2, B_3\},因此本文采用均方误差 MSE 作为损失函数

L(Θ)=1ni=1nF(Y;Θ)Xi2L(\Theta) = \frac{1}{n} \sum_{i=1}^n \| F(Y;\Theta) - X_i \|^2

使用 MSE 有利于获得更高的 PSNR,不过 SSIM 指标也不错。

训练采用随机裁剪 fs×fsf_s \times f_s 并使用高斯模糊降低分辨率的方法。另外,由于经过滤波器边界会变小,所以仅对中心图片算 Loss。

评估

训练数据

分别 使用 91 张小训练集,和 ImageNet 的 395909 张图片作为大训练集上进行训练。基线 SC 的指标是 31.42dB,小训练集上得到 32.39 dB,ImageNet 上得到 32.52 dB。

使用大训练集能提高网络的指标,但是没有那么有用。另一方面网络参数只有 8032 个参数,甚至对比 91 个图片都是不会过拟合的。

超分辨率滤波器

作者似乎观察到了每个滤波器的用途,有 Laplacian/Gaussian 滤波器,有边缘及纹理提取滤波器。

模型以及性能权衡

模型采用 f1=9,f2=1,f3=5,n1=64,n2=32f_1 = 9, f_2 = 1, f_3 = 5, n_1 = 64, n_2 = 32,PSNR 是 32.52 dB,运行时间 0.18s。

参数 n1,n2n_1, n_2 扩大一倍,运行时间在 0.60s,PSNR = 32.60。缩小一倍则仅需 0.05s,PSNR = 32.26。

如果增大滤波器大小 ff,也能获得相似的效果提升,但是比起性能降低太多了。

当前的网络是 9-1-5,作者尝试了更深的网络 9-1-1-5,其收敛更慢,但是效果没有显著改进。

关于通道数,同时在 YCbCr 上训练还不如双三次插值。RGB 三通道略微比默认方法仅 Y 通道好一点。总的来说仅 Y 通道可以在性能和效果上取得平衡。