深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪

python tensorflow1.14实现
卷积降噪自动编码器用于图像去噪,这个博客主要是借鉴了DnCNN用于图像去噪的方式,论文可以直接搜到(https://arxiv.org/pdf/1608.03981.pdf),也有很多人对于这个论文的中文讲解(https://www.jianshu.com/p/3687ffed4aa8,https://blog.csdn.net/weixin_42296533/article/details/85171512?ops_request_misc=&request_id=&biz_id=&utm_source=distribute.pc_search_result.none-task),有需要的同学可以去看看。
话不多说,直接说一下我的内容。DnCNN的结构简单来说是这样的:含噪图像被输入到设计的DCNN中,相应的输出是预测的噪声图像,然后用含噪图像减去预测的噪声图像,就能得到纯净的图像,如图1所示。
深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

图1
DnCNN结合了ResNet的residual learning,不同的是DnCNN并非每隔两层就加一个shortcut connection,而是将网络的输出直接改成residual image(残差图片),设纯净图片为x,带噪音图片为y,假设y=x+v,则v是残差图片。即DnCNN的优化目标不是真实图片与网络输出之间的MSE(均方误差),而是真实残差图片与网络输出之间的MSE。(这段话参考的链接:https://www.jianshu.com/p/3687ffed4aa8,来源:简书,若原作者对于本博客的引用存在不妥,可联系我删除)。
上述方法作者将其命名为基于残差学习的深度卷积神经网络图像去噪,基于此思想,本文提出一个基于噪声学习的卷积降噪自动编码器的图像去噪(总感觉这个方式学习的是噪声分布,因此取这么个名字),主题结构和原作者的不一样,取消了BN,因为我实际编程时发现加了BN层之后,测试集的要比不好,其结构如图2所示,图3是普通的卷积降噪自动编码器。
深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

图2 基于噪声学习的卷积降噪自动编码器
深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

【深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪】图3 普通的卷积降噪自动编码器
主要的框架为上图2,骨干网络是卷积降噪自动编码器,在MNIST手写字体数据下,进行训练,训练时是对数据中加[0 0.1]的正态随机噪声,即np.random.normal(0,0,1),得到的loss曲线如图4所示。
深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

图4 loss曲线对比
从图4可以看出,改进后的卷积降噪自编码(图2结构)的loss要比一般的卷积降噪自编码(图3结构)下降的更快,而且最终的loss更低,这呼应了DnCNN的结果,说明了对噪声学习,要比直接输入纯净图像的效果好。下面是MNIST测试集部分效果,训练时是对数据中加[0 0.1]的正态随机噪声,测试时我们加入不同等级的看看效果。
深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片


深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片
可以看出,这种方式基于噪声学习的卷积降噪自动编码器应该是能够学习到噪声分布,刚才说过训练时是对数据中加[0 0.1]的正态随机噪声,而测试时我们加入不同等级的噪声,可以看出,当噪声为[0 0.4]时,依旧能够较好的消噪,直到噪声增强到[0 0.4]时,效果才变得比较差。因为加入的正态分布的随机数,那么是不是可以认为此方法能够能够学习到这个噪声分布规律,因为已经学到了这种分布规律,所以即使噪声增强了,此方法依旧具有不错的泛化性能呢?后面的工作可以有兴趣的同学接着研究。
接着我们再来看看,训练时是对数据中加[0 0.1]的正态随机噪声,而测试时我们加入其他类型的噪声,比如均匀分布np.random.uniform,来看看效果
深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

从上面结果可以看出,采用正态分布随机数训练,测试时添加均匀分布随机数,效果依旧还可以,能够清晰的分辨出降噪前后的数据。
为了对比,我们对图3的一般的卷积降噪自编码,进行上述操作, 首先是正态随机数训练,正态随机数测试。
深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

然后是正态随机数训练,均匀分布随机数测试
深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

深度学习|基于噪声学习的卷积降噪自动编码器用于图像去噪
文章图片

从上面结果可以看出,一般的卷积降噪自编码的效果较差,当采用正态分布随机数测试时,在[0 0.2]的时候就出现较大的失真。而泛化到均匀分布随机数测试时,在[0 0.1]的时候就出现了较大的失真,随着噪声程度的增加,失真更为严重。因此一般的卷积降噪自编码泛化性能相比基于噪声学习的卷积降噪自编码效果差,泛化能力低。
上述结果表明了本博客所提方法的有效性。



    推荐阅读