1、Beyond a Gaussian Denoiser: Residual Learning
of Deep CNN for Image Denoising

摘要

图像去噪的判别模型学习(良好的去噪性能)近来备受关注。在本文中,我们通过研究前馈去噪卷积神经网络 (DnCNN) 以拥抱非常深的架构(17层)、学习算法和正则化方法进入图像去噪。具体来说,残差学习和批量归一化用于加速训练过程以及提高去噪性能。不同于现有的判别去噪模型(通常为加性高斯白噪声在一定的噪声水平下训练特定模型),我们的 DnCNN 模型能够处理具有未知噪声水平的高斯去噪(即高斯盲噪)。使用残差学习策略,DnCNN 隐式地删除隐藏层中的潜在干净图像。这个性质激励我们训练单个 DnCNN 模型来处理多个一般图像去噪任务,例如高斯去噪,单图像超分辨率和JPEG图像去块。我们的大量实验表明我们的 DnCNN 模型可以不仅在几种通用图像中表现出高效率去噪任务,还可以通过GPU被高效执行。

1、介绍

图像去噪的目标是从嘈杂的观察 y 中恢复干净的图像 x,遵循图像退化模型

y = x + v。

一种常见的假设是 v 是标准偏差为 σ 的加性高斯白噪声 (AWGN)。 

尽管它们的去噪质量很高,但大多数去噪方法通常存在两个主要缺点。 首先,这些方法通常在测试阶段涉及复杂的优化问题,使得去噪过程耗时。 因此,大多数方法在不牺牲计算效率的情况下很难实现高性能。 其次,这些模型通常是非凸的,并且涉及几个手动选择的参数,为提高去噪性能提供了一些余地。

为了克服上述缺点,最近开发了几种判别学习方法来学习图像截断推理过程中的先验模型。生成的模型能够摆脱测试阶段的迭代优化过程。施密特等人提出了级联收缩场(CSF)方法,将基于随机场的模型和展开的半二次优化算法统一到一个学习框架中。陈等人提出了一种可训练的非线性反应扩散 (TNRD) 模型,该模型通过展开固定数量的梯度下降推理步骤来学习。

尽管 CSF 和 TNRD 在缩小计算效率和去噪质量之间的差距方面显示出了可喜的结果,但它们的性能本质上受限于特定形式的先验。具体来说,CSF和TNRD采用的先验是基于分析模型的,它在捕捉图像结构的全部特征方面是有限的。另外,参数是通过阶段性贪心训练加上所有阶段之间的联合微调来学习的,以及许多手工的参数参与其中。另一个不可忽略的缺点是它们针对特定噪声水平训练特定模型,并且在盲图像去噪方面受到限制。

在本文中,我们不是学习具有显式图像先验的判别模型,而是将图像去噪视为一个普通的判别学习问题,即通过前馈卷积神经网络 (CNN) 将噪声与噪声图像分离。

 使用 CNN 的原因有三个。 首先,具有非常深架构的 CNN 在增加利用图像特征的能力和灵活性方面是有效的。 其次,在训练 CNN 的正则化和学习方法方面取得了相当大的进展,包括整流器线性单元 (ReLU) [27]、批量归一化 [28] 和残差学习 [29]。 这些方法可以在 CNN 中采用以加快训练速度并提高去噪性能。 第三,CNN 非常适合在现代强大的 GPU 上进行并行计算,可以利用它来提高运行时性能。

事实证明,残差学习和批量归一化可以相互受益,并且它们的集成对于加速训练和提高去噪性能是有效的。

2、相关工作

2.1 用于图像去噪的深度神经网络

2.2 残差学习和批量归一化

残差学习

不同的是DnCNN并非每隔两层就加一个shortcut connection,而是将网络的输出直接改成residual image(残差图片),设纯净图片为x,带噪音图片为y,假设y=x+v,则v是残差图片。即DnCNN的优化目标不是真实图片与网络输出之间的MSE(均方误差),而是真实残差图片与网络输出之间的MSE。(与使用许多残差单元(即身份快捷方式)的残差网络 [29] 不同,我们的 DnCNN 使用单个残差单元来预测残差图像。)

通过这种残差学习策略,可以轻松训练极深的 CNN,并提高图像分类和目标检测的准确性。与使用许多残差单元(即身份快捷方式)的残差网络不同,我们的 DnCNN 使用单个残差单元来预测残差图像。

批量归一化

批量归一化被提议通过在每一层的非线性之前结合归一化步骤和缩放和移位步骤来减轻内部协变量偏移。

我们凭经验发现,残差学习和批量归一化的结合可以带来快速稳定的训练和更好的去噪性能。

3、提出的去噪CNN模型

3.1 网络的深度

我们将卷积滤波器的大小设置为 3 × 3,但移除所有池化层。因此,深度为d的DnCNN的感受野应该是(2d+1)×(2d+1)。增加感受野大小可以利用更大图像区域中的上下文信息。

高噪声水平通常需要更大的有效补丁大小来捕获更多的上下文信息以进行恢复。

去噪神经网络的感受野大小与去噪方法的有效补丁大小相关。此外,高噪声水平通常需要更大的有效补丁大小来捕获更多的上下文信息以进行恢复。

对于具有一定噪声水平的高斯去噪,我们将 DnCNN 的感受野大小设置为 35 × 35,对应的深度为 17。对于其他一般图像去噪任务,我们采用更大的感受野并将深度设置为 20 。

3.2 网络的架构

神经网络如何加噪 神经网络去噪原理_图像去噪

对于 DnCNN,我们采用残差学习公式来训练残差映射 R(y) ≈ v,然后我们有 x = y - R(y)。

神经网络如何加噪 神经网络去噪原理_神经网络如何加噪_02

(1)

这里

神经网络如何加噪 神经网络去噪原理_深度学习_03

表示了N个干净—噪声训练图像(补丁)对。

(1) 深度的架构

给定深度为D的DnCNN,共有三种类型的层,如图1所示,三种不同的颜色。 (i) Conv+ReLU:对于第一层,使用 64 个大小为 3 × 3 × c 的滤波器生成 64 个特征图,然后使用整流线性单元 (ReLU, max(0,·)) 进行非线性处理。这里 c 表示图像通道的数量,即 c = 1 用于灰度图像,c = 3 用于彩色图像。(ii) Conv+BN+ReLU:对于第 2 ∼ (D − 1) 层,使用 64 个大小为 3×3×64 的滤波器,并在卷积和 ReLU 之间添加批量归一化 [28]。 (iii) Conv:对于最后一层,使用大小为 3 × 3 × 64 的 c 个滤波器来重建输出。

(2) 减少边界伪影

通常要求输出图像大小应与输入图像大小保持一致。 这可能导致边界伪影(?)。与上述不同
方法,我们在卷积之前直接填充零(边界填充为0),以确保中间层的每个特征图与输入图像具有相同的大小。 我们发现简单的零填充策略不会导致任何边界伪影。 这种良好的特性可能归功于 DnCNN 的强大能力。

3.3 在图像去噪中将残差学习与批量归一化结合

所示的网络可用于训练原始映射 F(y) 来预测 x 或残差映射 R(y) 来预测 v。当原始映射更像是一个恒等式时映射,残差映射将更容易优化。请注意,噪声观察 y 比残差图像 v 更像潜在的干净图像 x(尤其是当噪声水平较低时)。因此,F(y) 将比 R(y) 更接近恒等映射,残差学习公式更适合图像去噪。

在高斯去噪中,残差图像和批量归一化都与高斯分布相关联。对于高斯去噪,残差学习和批量归一化相互受益:通过残差学习,DnCNN 通过隐藏层中的操作隐式地删除了潜在的干净图像。这使得每一层的输入都是类高斯分布的,相关性较低。因此,残差学习也可以帮助批量标准化以减少内部协变量偏移。

3.4 与TNRD的联系

3.5 延拓到一般图像去噪

在未知噪声的高斯去噪中,一种常用的方法是先估计噪声水平,然后使用相应噪声水平训练的模型。这使得去噪结果受到噪声估计精度的影响。此外,这些方法不能应用于非高斯噪声分布的情况,如SISR和JPEG去块。

在训练阶段,我们使用来自各种噪声水平(例如,

神经网络如何加噪 神经网络去噪原理_神经网络如何加噪_04

)的噪声图像来训练单个DnCNN模型。对于噪声级属于范围内的测试图像,利用学习的单DnCNN模型可以在不估计噪声级的情况下进行降噪。

 5、实验结果

5.1 实验设置

为了捕获足够的空间信息进行去噪,我们将 DnCNN-S 的网络深度设置为 17,将 DnCNN-B 和 DnCNN-3 的网络深度设置为 20。损失函数为(1)式。在 50 个 epoch 中,学习率从

神经网络如何加噪 神经网络去噪原理_神经网络如何加噪_05


神经网络如何加噪 神经网络去噪原理_深度学习_06

呈指数衰减。在 GPU 上分别训练 DnCNN-S、DnCNNB/CDnCNN-B 和 DnCNN-3 大约需要 6 小时、1 天和 3 天。

5.2 与其他方法的比较

我们将提出的 DnCNN 方法与几种最先进的去噪方法进行比较,包括两种基于非局部相似性的方法(即 BM3D [2] 和 WNNM [15]),一种生成方法(即 EPLL [40] ),三种基于判别训练的方法(即 MLP [31]、CSF [17] 和 TNRD [19])。 请注意,CSF 和 TNRD 通过 GPU 实现非常高效,同时提供了良好的图像质量。 实现代码是从作者的网站下载的,我们的实验中使用了默认参数设置。 我们的 DnCNN 模型的训练和测试代码可以在 https://github.com/cszn/DnCNN 下载。
 

5.3 定量和定性评价

非局部均值法通常对结构规律性和重复性的图像效果较好,而基于判别训练的方法通常对纹理不规则的图像效果较好。实际上,这在直观上是合理的,因为具有规则和重复结构的图像与非局部相似先验很好地满足;反之,纹理不规则的图像会削弱这种特定先验的优势,导致较差的结果。

可以看出,BM3D、WNNM、EPLL和MLP容易产生过于光滑的边缘和纹理。在保留锐利边缘和细节的同时,TNRD可能会在平滑区域生成伪影。相比之下,DnCNN-S和DnCNN-B不仅可以恢复锐利的边缘和精细的细节,而且在平滑区域也能产生视觉上令人愉悦的效果。

5.4 运行时间

例如,它可以在60ms内对具有未知噪声水平的512×512大小的图像进行去噪,这是相对于TNRD的明显优势。

5、总结

本文提出了一种用于图像去噪的深度卷积神经网络,利用残差学习将噪声从噪声观测中分离出来。将批量归一化和残差学习相结合,加快训练过程,提高去噪性能。与传统的针对特定噪声水平训练特定模型的判别模型不同,我们的单一DnCNN模型能够处理未知噪声水平的盲高斯去噪。

强调了residual learning(残差学习)和batch normalization(批量标准化)在图像复原中相辅相成的作用,可以在较深的网络的条件下,依然能带来快的收敛和好的性能。

问题:

1、什么是判别模型

判别模型:根据训练集,找到一个两种动物的一个差别(决策边界),然后根据输入的特征(比如重量,鼻子长度等)看这个特种落在决策边界的哪一边。

生成模型:根据大象的特征,学习一个大象的模型(总结一个大象长什么样的规律),然后也学习一个狗的模型,为了分类一个新的物种,我们看这个物种和哪个模型更加匹配。

2、前馈神经网络和反馈神经网络

抛开输入数据的位置关系仅仅关注特征就变得不可取了。这个时候还需要考虑输入数据之间的位置关系。因为位置关系影响了词语之间的语义和理解。而让前馈神经网络代表之一的例如CNN网络来学习到上下文位置信息是一件很麻烦的事情,需要用到海量的参数,因此,提出了反馈神经网络与前馈神经网络相结合的概念,即循环神经网络。反馈在前馈的基础上,利用前馈过程中,将当前位置输出的数据,反馈给网络,即反馈单元在当前位置做的决策,都是基于之前的全部信息,所以可以更好的帮助网络在下一个位置做出决策判断。而前馈神经网络只是单纯的将上一层的输出作为下一层的输入,如此迭代下次,不能基于之前的全部信息,没有反馈的过程。因为有了反馈的操作,所以反馈神经网络往往需要工作上一段时间之后才能变的稳定。

3、加性高斯白噪声

加性噪声:叠加在信号上的一种噪声,而且有无信号,噪声都是存在的。

白噪声:噪声的功率谱密度在所有的频率上均为常数,则称这样的噪声为白噪声。如果白噪声取值的概率分布服从高斯分布,则称这样的噪声为高斯白噪声。

加性高斯白噪声为一种便于分析的理想噪声信号,实际的噪声信号往往只在某一频段内可以用高斯白噪声的特性来进行近似处理。由于AWGN信号易于分析、近似,因此在信号处理领域,对信号处理系统(如滤波器、低噪音高频放大器、无线信号传输等)的噪声性能的简单分析(如:信噪比分析)中,一般可假设系统所产生的噪音或受到的噪音信号干扰在某频段或限制条件之下是高斯白噪声。加性高斯白噪声只是白噪声的一种,另有泊松白噪声等。

4、什么是图像的先验特征

直观的理解就是你这做图像task之前你对你要处理的图像的了解,对应的就是bayes里面的先验概率。比如对于自然图像,我们知道一个图像通常可以表示为W*H*C的矩阵,每一个位置在8bit下取值可以0-255,但是并不是随机生成的这样的矩阵就是一个自然图像,还需要满足很多约束,比如局部平滑,patch自相似等。这些约束实际上就是人们对自然图像的经验总结得到的,也就是先验。这些先验在很多图像task中可以作为loss中的正则化项,来迫使处理后的图像不会太离谱。通常的mse是很难保证这一点。另外,现在流行的gan的D loss很多时候也会作为图像处理的先验loss,就是因为它在给定图像集后,能够学习到先验分布,可以作为实际task的先验约束。

所以为什么要进行残差学习,是因为噪声的分布已知,比图像的先验更加简单。

5、批量归一化

当我们用一些数据做一个预测系统时,我们首先需要对数据进行预处理,例如标准化、正则化、滑动窗口等,这些标准化方法在浅层神经网络中已经足够使用,效果已经很不错。但是在深度学中,网络越来越深,使用这些标准化方法就难以解决相应的问题。

在训练过程中,参数的变化导致每一层的输入分布会发生改变,这使得下一层需要不断的去适应新的数据分布,在深度神经网络中,这让训练变得非常复杂而且缓慢。对于这样,往往需要设置更小的学习率、更严格的参数初始化。由于网络中参数变化而引起内部结点数据分布发生变化的这一过程被称作Internal Covariate Shift。简言之,即a+1层要不停适应a层这种数据分布的变化。

SGD(随机梯度下降法)广泛应用于CNN的训练方法中,但是训练的性能却很大程度受内部协变量移位这一问题所影响。BN就是在每一层的非线性处理之前加入标准化、缩放、移位操作来减轻内部协变量的移位。

通过使用批量归一化( BN),在模型的训练过程中利用小批量的均值和方差调整神经网络中间的输出,从而使得各层之间的输出都符合均值、方差相同高斯分布(不是说能处理不同的噪声水平?),这样的话会使得数据更加稳定,无论隐藏层的参数如何变化,可以确定的是前一层网络输出数据的均值、方差是已知的、固定的,这样就解决了数据分布不断改变带来的训练缓慢、小学习率等问题。

在卷积神经网络中卷积层和全连接层都可以使用批量归一化。

神经网络如何加噪 神经网络去噪原理_去噪_07

在tensorflow中可以直接调用批量归一化对数据进行处理,它的函数为,

tf.nn.batch_normalization(x, mean, variance, offset, scale, variance_epsilon, name=None)

来解释一下函数中参数的含义:

  • x:输入的数据,可以是卷积层的输出,也可以是全连接层的输出
  • mean:输出数据的均值
  • variance:输出数据的方差
  • offset:偏移,就是前面提到的beta
  • scale:缩放,前面提到的gamma
  • variance_epsilon:一个极小的值,避免分母为0

6、残差学习

为什么不能简单的增加网络层数

对于传统的CNN网络,简单的增加网络的深度,容易导致梯度消失和爆炸。针对梯度消失和爆炸的解决方法一般是正则初始化(normalized initialization)中间的正则化层(intermediate normalization layers),但是这会导致另一个问题,退化问题,随着网络层数的增加,在训练集上的准确率却饱和甚至下降了。这个和过拟合不一样,因为过拟合在训练集上的表现会更加出色。

按照常理更深层的网络结构的解空间是包括浅层的网络结构的解空间的,也就是说深层的网络结构能够得到更优的解,性能会比浅层网络更佳。但是实际上并非如此,深层网络无论从训练误差或是测试误差来看,都有可能比浅层误差更差,这也证明了并非是由于过拟合的原因。导致这个原因可能是因为随机梯度下降的策略,往往解到的并不是全局最优解,而是局部最优解,由于深层网络的结构更加复杂,所以梯度下降算法得到局部最优解的可能性就会更大

7、patch size、Batch Size

在CNN学习训练过程中,不是一次来处理一整张图片,而是先将图片划分为多个小的块,内核 kernel (或过滤器或特征检测器)每次只查看图像的一个块,这一个小块就称为 patch,对这小块做卷积处理,然后过滤器移动到图像的另一个patch,以此类推。

所谓Batch就是每次送入网络中训练的一部分数据,而Batch Size就是每个batch中训练样本的数量

8、感受眼

特征图上一点,相对于原图的大小,也是卷积神经网络特征所能看到输入图像的区域。我们将卷积滤波器的大小设置为 3 × 3,但移除所有池化层。因此,深度为 d 的DnCNN的感受野应该是(2d+1)×(2d+1)。增加感受野大小可以利用更大图像区域中的上下文信息。为了更好地权衡性能和效率,架构设计中的一个重要问题是为 DnCNN 设置适当的深度。