百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

去噪深度卷积网络实战扩展(三)——DnCNN网络实战讲解

toyiye 2024-06-06 22:12 22 浏览 0 评论

在近几年深度学习领域,有一类去噪神经网络非常出名,这就是DnCNN网络。英文是:Feed-forward denoising convolutional neural networks (DnCNNs)。


这个网络强调了residual learning(残差学习)和batch normalization(批量标准化)在信号复原中相辅相成的作用,可以在较深的网络的条件下,依然能带来快的收敛和好的性能。这个算法可以解决处理未知噪声水平的高斯去噪、超分辨率、JPEG去锁等多个领域的问题。


一、算法来源和介绍


哈尔滨工大的张凯教授,在2016年发表的《Beyond a Gaussian Denoiser Residual Learning of Deep CNN for Image Denoising》论文中,首次论述DnCNN网络的原理。



这张图就清晰的说明了整个的主要结构。主要包括了:


第1层Conv + ReLU:输入为35x35xc的图像,经过64个3x3x3的卷积核卷积,输出为64张35x35的特征图,即35x35x64的图像。(因为加了padding,所以大小没有变)。

第(2~(d-1))层Conv + BN + ReLU:,有64个3x3x64的卷积核,所以这些层的输入输出都为35x35x64的图像。在卷积和激活函数间添加批量归一化。

最后一层Conv:通过c个3x3x64的卷积核,重建c维图像,作为输出。

每一层都zero padding,使得每一层的输入、输出尺寸保持一致。以此防止产生人工边界(boundary artifacts)。


二、主要原理介绍


1.主要原理



DnCNN结合了ResNet的residual learning,即残差学习。不同的是DnCNN并未在神经网络层之间增加连接,而是将网络学习过程中的输出直接改为残差。


DnCNN的残差是什么意思呢?假设干净图片为x,含噪声图片为y,那有y=x+n,这里的n就是残差,也就是噪声。在DnCNN的学习过程中,优化的目标不再是干净图片与网络输出之间的误差(loss),而是残差与网络输出之间的误差。


就这么一个改变会带来哪些好处呢?

第一:在特定的噪声水平下训练比最先进的方法如BM3D,WNNM和TNRD有更好的高斯去噪效果。

第二:对于盲高斯去噪,比为特定噪声水平训练的BM3D和TNRD表现的更好。

第三:当被延伸到一些一般的图像去噪任务时,也能获得很好的结果。

第四:一个DnCNN模型对于三个一般图像去噪任务的高效性,即高斯去噪,有着多重升级因子的SISR和有着不同质量因子的JPEG去块问题。


2. 网络深度


DnCNN有个特点就是网络深度较大。作者参考《Very deep convolutional networks for large-scale image recognition》的标准,将DnCNN的卷积核大小设置为3 * 3,并且去掉了所有的池化层。


作者处理高斯去噪的DnCNN的深度为17,通用去噪任务的DnCNN的深度为20。到底需要多深的网络,这和感受野有关。作者为了和补丁大小为36x36的EPLL作比较,选择了和它差不多的感受野,35x35。因此,对应的网络深度即为17((2x17+1)x(2x17+1))。


这么深的网络结构,处理起来其实是比较慢的。所以读者可以自己在性能和效果之间折中选择网络的深度。


3. 批量归一化(BN)


DnCNN有比较深的网络训练,怎么保证训练过程中稳定和快速就非常重要。这里用到了批量归一化层。归一化处理的原理就是归一化至:均值0、方差为1。


BN的主要作用包括了:

1)改善流经网络的梯度

2)允许更大的学习率,大幅提高训练速度:

3)减少对初始化的强烈依赖

4)改善正则化策略:作为正则化的一种形式,轻微减少了对dropout的需求


简单说,就是提高了训练的速度,增强了学习的能力。


三、程序分析


说了这么多,到底程序是啥样子的呢?张凯教授很慷慨,公布了源程序,包括了matlab版和python版本的。


matlab版本的网络结构是这样的:



python版本是这样的:



python版本比matlab版本要简洁很多,但训练网络的速度却比matlab慢很多。


为了测试DnCNN在地震去噪处理的效果如何,我使用前面课程的训练数据,自己写了一个程序。



经过CPU训练了近1个小时后,最后测试结果是这样的。似乎效果并不太好,这也需要以后进一步优化。



好了,以上就是今天的课程。相信你掌握了DnCNN后,去噪研究能力又上了一个台阶。如果你想获取代码,或有问题讨论,都欢迎联系我交流。下节课再见。

相关推荐

python数据预处理技术(python 数据预处理)

在真实世界中,经常需要处理大量的原始数据,这些原始数据是机器学习算法无法理解的。为了让机器学习算法理解原始数据,需要对数据进行预处理。我们运行anaconda集成环境下的“jupyternotebo...

【Python可视化系列】一文教你绘制不同类型散点图(理论+源码)

这是...

OpenCV-Python 特征匹配 | 四十四

目标在本章中,我们将看到如何将一个图像中的特征与其他图像进行匹配。我们将在OpenCV中使用Brute-Force匹配器和FLANN匹配器Brute-Force匹配器的基础蛮力匹配器很简单。它使用第一...

实战python中Random模块使用(python中的random模块)

一、random模块简介Python标准库中的random函数,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等。要在Python中使用random模块,只需要...

Python随机模块22个函数详解(python随机函数的应用)

随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。平时数据分析各种分布的数据构造也会用到。random模块,用于生成伪随机数,之所以称之为伪随机数,是...

说冲A就冲A,这个宝藏男孩冯俊杰我pick了

爱奇艺新上架了一部网剧叫《最后一个女神》。有个惊人的发现,剧里男三居然是《青春有你》的训练生冯俊杰。剧组穷,戏服没几件,冯俊杰几乎靠一件背背佳撑起了整部剧。冯俊杰快速了解一下。四川人,来自觉醒东方,人...

唐山打人嫌犯陈继志去医院就医的背后,隐藏着三个精心设计的步骤

种种迹象表明,陈继志这帮人对处理打人之后的善后工作是轻车驾熟的,他们想实施的计划应该是这样的:首先第一步与伤者进同一家医院做伤情鉴定,鉴定级别最好要比对方严重,于是两位女伤者被鉴定为轻伤,他们就要求医...

熬夜会造成神经衰弱,别再熬夜了(熬夜会加重神经衰弱吗)

长时间熬夜会出现神经衰弱,皮肤受损,超重肥胖,记忆力下降等现象……熬夜了能补回来吗?每天少睡一两个小时算熬夜吗?必须上夜班怎么办?如何减少熬夜伤害?戳图转给爱熬夜的TA!via央视新闻来源:河北省文...

落叶知秋的图片爬取(落叶知秋的图片有哪些?)

importrequestsfrombs4importBeautifulSoupimporttimeimportjsonpathimportjsonfromurllib.parsei...

小心有毒!长沙海关查获藏匿在“巧克力威化涂层”中的大麻

来源:海关发布近日,长沙黄花机场海关对一票申报为“巧克力威化涂层”的进境快件进行机检查验时,在包裹内查获封装于各独立威化饼干包装袋中的大麻230克。另从其他申报为“巧克力、儿童早餐谷物”的快件中查获藏...

钧正平:编造传播这种谣言,荒谬(钧正公司)

来源:钧正平工作室官方微博【钧评编造传播这种谣言,荒谬!】目前,乌克兰安全形势还在迅速变化之中,各方面安全风险上升。相关事件网上热度极高,倍受瞩目。然而,有一些人却借机大肆制造散播一些低级谣言,比如...

幸运角色过去了,谈一谈DNF起源的元素

总的来说伤害比上个版本强太多了,打卢克每日和团本明显能感觉的到。目前打团B套+圣耀稍微打造下应该都能随便二拖了。组队基本上都是秒秒秒(以前得强力辅助,现在随便带个毒奶都行)。单刷除了王座和顶能源阿斯兰...

DNF元素超大凉打桩测试(把括号的伤害加起来好像比较正常)

最近修练场的二觉老是很奇怪,发现以前都是习惯性先减抗然后丢二觉,结果伤害。。。直接丢二觉就正常了下面是其他技能伤害,没达到BUG线,估计问题不大。装备打造方面:全身红字加起来353(41*5+74*2...

ANSYS接触和出图技巧(ansys rough接触)

1.ANSYS后处理时如何按灰度输出云图?1)你可以到utilitymenu-plotctrls-style-colors-windowcolors试试2)直接utilitymenu-plotctr...

ANSYS有限元使用经验总结-后处理(4)

28.求塑性极限荷载时,结构的变形应该较大,建议把大变形打开。...

取消回复欢迎 发表评论:

请填写验证码