深度学习地震去噪入门(附程序)
去噪技术在图像处理最先使用,并不断丰富成熟。图像去噪技术在20世纪下半叶已经成为研究热点。例如:用非局部相似性来优化稀疏方法能提高去噪的性能。字典学习有助于快速移除噪声。先验知识通过平滑噪声图像来恢复潜在干净图像的细节。更多竞争去噪方法包括MRF 、WNNM 、LSSC、CSF 、TNRD和GHEP能被利用。虽然这些大部分方法在图像去噪上能达到好的性能,但是他们有以下缺点:(1) 在测试阶段涉及复杂优化方法,(2) 手动设置参数,(3) 一个固定的模型来处理单个去噪任务。
进入到20世纪末期,拥有更灵活的结构,更强的自学习能力的深度学习技术能用来解决这些不足。
一、深度学习去噪发展情况概述
第一阶段:
1989年Chiang提出使用一个同时具有平移不变特性的模糊函数和加性噪声的神经网络来恢复潜在的干净图像。然后,利用加权因子去除复杂噪声。为了降低高计算量,Tamura在同年提出了一种前馈网络,在去噪效率和性能之间进行折中。1990年,Bedini提出将最大熵和原对偶拉格朗日乘子相结合来提高神经网络的表达能力,是一种很好的图像去噪工具。
为了进一步在快速执行和去噪性能之间进行折衷,1992年Paik在神经网络中采用了贪婪算法和异步算法。1997年Zamparelli提出了梯度下降方法,解决了手动配置参数的问题,取得了很好的去噪效果。以上的网络发展有个问题就是不容易添加新的结构,这限制了它们在现实世界中的应用。
第二阶段:
Lo等人在1995年提出了卷积神经网络,很好的解决了网络结构改变问题,CNN和LeNet在手写体数字识别中都有实际应用。但刚诞生的CNN有不少问题,主要包括:一是深度CNN可以产生消失梯度。其次,sigmoid和tanh等激活函数导致了较高的计算成本。三是硬件平台不支持复杂网络。后来在2012年的ImageNet大规模视觉识别挑战赛(ILSVRC)中,AlexNet改变了这一状况。之后,深度网络架构(如VGG和GoogLeNet)被广泛应用于图像处理多个领域的实际应用。
第三阶段:
2008年,Viren Jain等提出用CNN处理自然图像的去噪问题,得到了与常规方法(如小波变换和马尔可夫随机场)相近或更优的结果,并说明了特定形式的CNN可以被视为图像去噪的马尔可夫模型推断的结果的一种近似,但是神经网络模型可以避免了马尔可夫模型在概率学习和推断过程中的计算困难,从而降低了计算的复杂度。此后,深度网络被广泛应用于语音、视频和图像恢复。2012年,Xie等利用栈式去噪自编码器(stacked denoising auto-encoder)进行图像去噪以及图像修复(image inpainting),其网络结构为多层的全连接网。2016年Mao等人使用多次卷积和反卷积来抑制噪声并恢复高分辨率图像。为了通过一个模型处理多个低维度任务,2017年张凯等人提出了一种由卷积、批处理归一化(BN)、校正线性单元(ReLU)和残差学习(RL)组成的去噪CNN(DnCNN)来处理图像去噪、超分辨率和JPEG图像去模糊。考虑到去噪性能和速度之间的折衷,2017年Lefkimmiatis提出将彩色非局部网络(CNLNet)、非局部自相似(NLSS)和CNN结合起来,有效地去除彩色图像噪声。
在盲去噪方面,在2018年由张凯等提出了一种快速灵活的去噪CNN(FFDNet)架构,将不同的噪声水平和噪声图像块作为去噪网络的输入,以提高去噪速度和进行盲去噪。为了处理未配对的噪声图像,在2018年陈等人提出了生成对抗网络(GAN)CNN盲去噪器(GCBD),首先生成地面真值,然后将得到的地面真值输入GAN训练去噪器,从而解决了这个问题。另外,2019年郭等提出了卷积盲去噪网络(CBDNet),通过两个子网络从给定的真实噪声图像中去除噪声,一个子网络负责估计真实噪声图像的噪声,另一个子网络用于获得潜在的干净图像。针对更复杂的受损图像,2019年张凯等提出了一种深度即插即用超分辨率(deep-plug-and-play super-resolution,DPSR)方法来估计模糊核和噪声,恢复高分辨率图像。
最后给大家一张概要图,主要包括四个部分,包括基本框架、分类、性能比较、挑战和潜在方向。具体而言,分类包括加性白噪声图像、真实噪声图像、盲去噪和混合噪声图像。
二、全连接神经网络去噪实战
这一部分,我们给大家讲解一个神经网络处理地震噪声的实战案例,通过全流程讲解一个自编码全连接神经网络去噪的处理方法,帮助大家迅速掌握深度学习对地震去噪的操作方法。
(1)数据集准备
首先我们准备了多个训练数据,看起来是这样的。
我们也准备了一个干净的测试数据,最后将增加随机噪声,用于去噪的效果验证。
现在为了给神经网络准备训练地震数据,我们就需要自己来准备训练集了。这里我们自己写了一个getPatchNoise.py的程序,用来生成训练集。这个程序的主要思想就是将128×128的多个地震数据整合为一个N个64×64的小数据块。这个程序比较复杂就不细讲了,最后结果就是生成了10200个64×64的地震训练数据。
(2)深度全连接网络构建和训练
这里我们给大家构建了一个深度自编码学习网络,共包括了11层全连接层,构成了深度自编码学习网络。
程序是这样来构建的:
这里有几个要点要说明一下:
一是数据的尺寸是4096,大小为64×64的图片在一维空间的展开就是4096。
二是中间的网络结构深度较大,这是因为输入图片尺寸较大,需要更多网络来学习特征。
三是最后一层的激活函数为tanh。因为地震数据比较复杂,需要使用线性函数来学习。
四是损失函数使用绝对均方差,也是为了复杂的深度学习需要。
最后我们训练了100个周期,是为了尽量多的学习信号的特征。
(3)结果检验
首先,我们找到了训练集之外的另外一个工区的仿真数据,增加15%的噪声。把数据进行归一化,并在一维进行展开。
然后,我们把测试数据放入到训练好的模型进行预测处理。并把处理结果还原到二维空间。
最后我们使用matplotlib来画出地震数据处理的效果图。
左图是测试原图,中间是加噪声的图,右图是模型去噪处理的结果。
从图上来看,模型处理后的信号基本还原了原来特征,但效果不算好。
这里主要原因包括:一是训练样本的数量较少,还不到20000个。二是训练图片的尺寸较大,一般是32左右较好。这些问题都不利于神经网络有效的学习到信号的特征。
以上就是今天的全部内容,我们详细给大家讲解了深度学习去噪的技术发展过程和一个完整的去噪流程。如果你想获取代码,或有问题讨论,都欢迎联系我交流。