论文原文:http://papers.nips.cc/paper/4686-image-denoising-and-inpainting-with-deep-neural-networks.pdf

一、简介

论文主要介绍了一种解决盲图像去噪和图像复原问题的新方法SSDA(叠加稀疏去噪自动编码器,Stacked Sparse Denoising Auto-encoders),它将稀疏编码深度网络训练结合起来,不仅可以处理像素随机丢失式的简单噪声,还可以处理叠加文本类型的复杂模式。

图像去噪两种最常见的方法:

  1. 将图像信号转换到复域(傅里叶变换等),使得更容易将噪声分离出来。
  2. 直接从图像域中捕获统计信息。稀疏编码方法从完备字典的稀疏线性组合中重建图像,字典是从数据中学习的,而不是人工编造的,这一学习步骤显着地提高了稀疏编码的性能。

图像修复方法可分为非盲修复盲修复两类,在非盲修复中,需要修复的区域需要预先告诉算法;而在盲修复中,不给出损坏像素位置的信息,算法必须自动识别需要修复的像素。

论文指出虽然稀疏编码模型在实际应用中表现良好,但它们都具有较浅的线性结构,故提出将稀疏编码的优势“稀疏”和深度网络的“深度”相结合,解决图像去噪和盲修复问题。

二、模型介绍





图像去噪算法代码python 图像去噪算法研究_编码器


image


由于拥有很多隐藏层的深度神经网络训练起来很困难,所以一般的做法是在传统的反向传播训练前,采用 贪心分层预训练,从而给正式训练的较好的初始化参数,论文使用DA(去噪自动编码器,denoising auto-encoder)对模型进行预训练,因为DA有助于去噪和修复。DA是一个两层的神经网络,它试图从含噪声的图像输入中重建原始输入;SDA(stacked denoising auto-encoders)是一系列DA的叠加表示,前一层的输出经过激活函数作为下一层的输入,SDA广泛用于非监督预训练和特征学习。

2.1.问题公式

y为原始没有噪声的纯净图像,x为噪声图像,η是假设的图像被噪音污染的函数:


图像去噪算法代码python 图像去噪算法研究_去噪_02


image


图像去噪的目标函数,找到f使复原的图像尽量逼近原清晰图像,f是η的反函数:


图像去噪算法代码python 图像去噪算法研究_去噪_03


image


2.2.DA(去噪自动编码器,Denoising Auto-encoder)


图像去噪算法代码python 图像去噪算法研究_编码器_04


image


图像去噪算法代码python 图像去噪算法研究_编码器_05


image


上图即是DA的网络模型,非常简单,σ(x) = (1+ exp(-x))-1 是sigmoid激活函数。



图像去噪算法代码python 图像去噪算法研究_编码器_06


image


可以使用各种优化方法对DA进行培训,以最大限度地减少重建损失。

在完成一个DA的训练之后,我们可以使用前一层的隐层激活(即^Y(X))作为下一层的输入来训练下一层。这称为叠加去噪自动编码器(SDA)。

2.3.SSDA(叠加稀疏去噪自动编码器,Stacked Sparse Denoising Auto-encoders)

由于直接处理整个图像是很难的,所以从图像中抽取重叠的子图像块(patches)作为数据对象。将(xi,yi)子图像对送入模型进行训练,经过训练后,SSDA将能够在任何噪声观测的情况下重建相应的干净图像。

预训练:结合稀疏编码和神经网络的优点,同时为了避免过拟合,首先训练了一个DA,对最小化重建损失提供了一个稀疏诱导项来进行调整:


图像去噪算法代码python 图像去噪算法研究_稀疏编码_07


image


其中KL距离也叫做相对熵,用来衡量两个概率分布的距离:



图像去噪算法代码python 图像去噪算法研究_稀疏编码_08


image


通过选择比较小的ρ将隐藏层的表示调整稀疏,以便KL散度项促使隐藏单元的平均激活变得比较小。因此,隐藏单元将在大多数情况下为零,并实现稀疏。

微调:当训练完第一层DA时,将h(yi)和h(xi)分别作为第二层DA的纯净和噪声输入对。然后用k层叠加DA的权重初始化一个深度网络。网络有一层输入层,一层输出层,和2K-1个隐藏层。整个网络使用标准的BP算法进行训练来最小化目标函数:


图像去噪算法代码python 图像去噪算法研究_稀疏编码_09


image


在这里没有使用稀疏正则化,因为预训练的权重将用来调整网络。无论在在预训练阶段还是微调阶段,都采用了L-BFGS算法(拟牛顿法)对损失函数进行了优化,可以达到最快的收敛速度。

三、实验

实验评价图像修复的标准是PSNR(峰值信噪比),公式如下:



图像去噪算法代码python 图像去噪算法研究_编码器_10


image



图像去噪算法代码python 图像去噪算法研究_图像去噪算法代码python_11


image


实验过程比较简单了,分两组,一组做去高斯白噪音,实验横向对比了KSVD和BLS-GSM,实验结果如下表:



图像去噪算法代码python 图像去噪算法研究_图像去噪算法代码python_12


image


可以看出,三种算法效果差别不大,但是在实际还原图像观感上,作者认为SSDA在复杂区域和细节表现更好。

另一组做去重叠文本,实验发现SSDA可以完全消除小字体的文本,但是较大字体的文本的消除相较KSVD效果较差。但是论文指出SSDA是盲修复方法,即使KSVD是一种非盲算法,盲修复要困难的多。