张利霞,高俊涛,马 强,杨润湉,王志宝,李 菲
(1.东北石油大学 计算机与信息技术学院,黑龙江 大庆 163318;2.黑龙江八一农垦大学 信息与电气工程学院,黑龙江 大庆 163319)
断层是地下岩层沿破裂面或破裂带发生位移而形成的一种地质构造。它是油气运移和聚集的主要通道。在油气勘探开发过程中,断层解释是地震资料解释的关键,弄清断层的位置及分布对于油气勘探有着十分重要的作用,断层解释的结果直接关系到储层预测的精度。因此,如何从变化多样的地震剖面数据中准确高效地识别断层成为了一项难题,对此,许多国内外学者进行了大量研究。
传统断层解释由解释人员手工拾取地震剖面上的同相轴不连续点,将这些点连接成断层线,逐个地震剖面解释完毕后,将断层线在三维空间中进行组合,得到断层面。人工解释的结果准确度虽然高,但是比较耗时费力,并且主观性强,非常依赖于解释人员的经验。为了解决传统断层识别方法存在的不足,相关学者提出了利用相干体、曲率、方差等地震属性来识别断层的方法,Bahorich等人[1]在1995年提出C1相干体技术,此方法的计算速度很快,但易受噪声的干扰。为了弥补C1相干体技术存在的不足,Marfurt等人[2]在1998年提出了C2相干体技术,不仅保证了计算速度,同时提高了抗噪性,但是对于小断层的识别效率比较低。Gersztenkorn等人[3]在1999年提出了C3相干体技术,提高了断层识别的精度,但是计算量较大。印兴耀等人[4]在2014年提出了一种基于离心窗的倾角扫描方法,降低了地震噪声的影响,提高了计算的效率。杨国权等人[5]在2015年提出了使用不同网格提取曲率的方法,但是曲率易受人为因素影响,主观性大,识别准确率较低。汪杰和汪锐[6]在2016年提出了方差相干体技术,改善了噪声影响,对较大断层识别效果较好,但小断层的识别效果较差。马艺璇等人[7]在2020年提出了基于匹配追踪频谱分解的分频相干体技术,改进蚂蚁追踪流程,提高断裂刻画精度。谢清惠等人[8]在2021年根据工区实际情况,引进蚂蚁追踪技术来进行裂缝预测,并通过降噪、增强连续性、突出断层边界、剔除假构造等手段提高裂缝预测的精度。基于地震属性的断层识别算法在不断的优化与改进,但是依赖于算法参数的设置,许多参数需要经过多次测试才能得到理想效果,并且对于地质构造复杂的断层仍然很难有效识别。
近年来,深度学习被广泛应用于各个领域,深度学习通过多层网络可以自动提取图像特征,因其高效、便捷,许多学者提出基于深度学习的断层识别方案。Huang等人[9]在2017年将多种地震属性作为CNN的输入,应用于断层识别。Guo等人[10]在2018年从三维地震数据中提取出带有断层标签的二维图像用于卷积神经网络模型的训练,再用此模型进行高精度断层自动识别。H.Di等人[11]在2018年将MLP和CNN的实验结果进行对比分析,发现CNN在断层识别效率与准确率方面均优于MLP,证明了CNN比传统的机器学习方法好。Chang等人[12]在2019年提出了用UNet网络识别断层,利用合成数据与实际数据相结合,尝试解决泛化能力低的问题。Di等人[13]在2020年以新西兰塔拉纳基盆地为例用深度卷积神经网络(CNN),高效完成断层的自动解释工作。Augusto Cunha等人[14]在2020年提出在合成地震数据上利用卷积神经网络(CNN)进行训练和调整,并利用迁移学习预测F3地震数据的方法。Liu等人[15]在2020年提出了UNet结合ResNe-34的方法,进一步提高了断层自动识别的精度。张政等人[16]在2020年提出了深度残差网络与迁移学习相结合的方法,利用人工合成的样本加上少量的实际样本进行迁移学习,提高了实际数据中断层识别能力。席英杰等人[17]在2021年提出了一种改进的SPD-UNet模型,并利用空洞卷积扩大了感受野,更加有效地提高了断层识别的能力。
已有的利用深度学习来识别断层的方法取得了很大的进步,但仍然存在一些不足,如断层识别的结果连续性不足,存在错误识别、漏识别的现象,导致无法较为精准地分割出断层。针对该问题,提出基于CBAM-UNet++的断层识别方法,在UNet++模型的跳跃连接处添加注意力模块,提高UNet++对断层的特征提取能力,从通道和空间两个维度抑制非断层信号的干扰。使用DropBlock防止网络过拟合。最终对连续性不足的断层实现准确识别,提高断层识别的准确率。
图像分割是将图像分割成不同的连续像素点的集合,按照图像中如像素值、纹理、颜色等对图像有意义的特征进行识别。在地质勘探中,断层识别可以将地震数据中的断层和非断层看作不同的区域,用图像分割方法提取断层。
UNet++是一种基于深度学习的图像分割方法,使用UNet++可以直接对地震数据进行特征提取。UNet++[18]由Zhou等人提出,该网络是对UNet网络模型的改进,解决了随着UNet[19]网络深度的增加,识别效果不一定越好的局限。UNet++由不同层级UNet叠加组成,其解码器利用重新设计的跳跃连接以相同的分辨率密集连接,其结构如图1所示。在UNet++中,由浅到深将2、3、4、5深度的UNet依次叠加,各层互不孤立,通过跳跃连接,依次被连接起来。由于不同层级UNet最后得到的特征维度不同,所以在每个UNet的右端模块与1*1卷积核的卷积层连接,降低维度并监督各层训练,最后将每层特征图相加,得到相加特征。UNet++能够提取到来自不同深度的特征,学习到不同深度的特征的重要程度。地震剖面图像中同时存在局部小断层和全局大断层,UNet++具有考虑不同深度图像特征的特点,因此非常适用于同时识别地震图像中的小断层以及大断层。
2018年,WOO等人[20]提出了CBAM(Convolutional Block Attention Module),它同时结合了通道注意力和空间注意力,是一种简单且有效的卷积神经网络注意力模块。CBAM模块如图2所示。CBAM的运算分为两个部分,首先将通道注意力Mc(F)与输入F相乘,得到特征图F';然后将空间注意力Ms(F')与F'按元素相乘,得到特征图F'',具体流程如图2,CBAM的过程可描述为:
图2 CBAM 模块示意图
F'=Mc(F)⊗F
(1)
F''=Ms(F')⊗F'
(2)
其中,F'为输入特征图;F''为输出特征图;Mc(F)为通道注意力模块;Ms(F')为空间注意力模块。
(1)通道注意力模块。
通道注意力主要关注哪些特征为有意义的特征。通道注意力计算过程为:
Mc(F)=σ(MLP(AvgPool(F))+
MLP(MaxPool(F)))
(3)
其中,F为输入特征图;Mc(F)为通道注意力模块;σ为sigmoid 激活函数;MLP为多层感知器;AvgPool为平均池化;MaxPool为最大池化。
它将输入F分别通过最大值池化和平均池化得到两个特征图;然后将这两个特征图输入到多层感知器中做降维、升维处理;之后将从多层感知器中得到两个特征图进行加和;同时经过sigmoid激活函数处理后,得到通道注意力Mc(F),如图3所示。
图3 通道注意力示意图
(2)空间注意力模块。
空间注意力主要关注哪些地方特征为有意义的特征,是对通道注意力的补充。空间注意力计算过程可描述为:
Ms(F')=σ(f([AvgPool(F');MaxPool(F')]))
(4)
其中,Ms(F')为空间注意力模块;f为卷积层运算;σ为sigmoid 激活函数;AvgPool为平均池化;MaxPool为最大池化。
首先,将输入F'分别通过最大值池化和平均池化,并将它们连接起来;然后,利用卷积网络将其降维为一通道;之后,经过sigmoid激活函数得到空间注意力模块,如图4所示。
图4 空间注意力示意图
为了便于理解该文的整体思路,图5展示了完整的工作流程,分为四个步骤。第一步是样本准备阶段,在三维地震图像中裁剪出一定的切片作为训练样本和预测样本。第二步是断层识别网络构建阶段,针对目前断层识别存在的问题,构建CBAM-UNet++模型。第三步,利用训练后获得的最佳预测模型对预测数据集进行预测。第四步,将预测后的输出图像进行霍夫变换、膨胀腐蚀、骨架提取等后处理,得到最终的预测结果。
图5 总体流程
针对深度学习方法在断层识别时存在的断层识别结果连续性不足、地震资料中非断层样本高于断层样本的问题,在UNet++网络的基础上,提出CBAM-UNet++模型,用于地震图像的断层识别,CBAM-UNet++模型整体结构如图6所示。在UNet++跳跃连接处添加CBAM注意力模型,提高断层区域的关注度,同时抑制无关区域的干扰,以提高标签预测的准确性。它从通道和空间两个维度抑制干扰,增强地震断层的检测能力。同时,采用了Dropout卷积块,即每个卷积层后面都有一个DropBlock,一个批处理归一化(BN)层和一个ReLU激活单元,如图7所示,来达到防止神经网络过拟合的目的。在神经网络中引入注意力机制可以提高模型的特征表达能力[21]。
图6 CBAM_UNet++结构
图7 添加DropBlock后的卷积单元
为避免原始UNet++训练过程中出现的过拟合问题,在网络模型中加入DropBlock[22]来规范卷积架构。DropBlock从一个层的特征图中丢弃连续的区域,它是dropout的一种结构化形式[23]。DropBlock有两个参数,分别为block_size和γ。
block_size为DropBlock的长宽,当block_size为1时,DropBlock类似于dropout。
γ为伯努利函数的概率,控制要删除的特征数,计算公式如下:
(5)
在地震剖面图像中,断层线像素区域面积较小,会导致正负样本不平衡,最终影响模型识别效果。采用Dice损失函数[24]缓解样本的不平衡问题。
Dice系数的计算公式如下:
(6)
其中,P为断层预测结果,G为断层标签,N为断层图像的总数,pi为P中的某一像素,gi为相同位置中G的某一像素。Dice损失函数公式如下:
(7)
基于CBAM-UNet++的断层识别模型可以准确提取地震剖面中的断层线,相较于其他深度学习模型,对不连续断层的识别精度更高。但是,由于地震剖面中的断层存在反射特征不明显但属于同一断层的问题以及破裂面破碎严重的问题,因此模型的输出中不可避免有部分不连续断层。
从图像分割的角度看,断层中存在的不连续的现象是正常的,但是模型输出的直接结果降低了应用性,不能真正地被应用于地震解释处理中,需要对输出的初步识别结果进行后处理。方法如下:
首先对断层预测结果进行霍夫变换,连接断开的断层。霍夫变换根据图像空间中共线的点对应在参数空间里相交的线的关系把在图像空间中的直线检测问题转换到参数空间里,在参数空间里进行累加统计完成直线检测任务。
然后对霍夫变换处理后的断层图像进行膨胀、腐蚀、骨架提取处理,填充断层区域,同时将断层细化成一条线。
在地震断层识别实验中,数据集的制作主要通过两种方法,一种是利用人工合成的地震数据及其标签进行训练和测试,另一种是采用真实的地震数据及人工标注的断层标签进行训练。
为了避免不正确的标注数据对网络的学习造成误导的问题,采用Wu等人[25]提出的合成地震断层数据的方法,将合成地震断层数据作为样本集。人工合成的方法可以快速且大量地生成实验数据,有利于实验研究,同时避免手动标记耗时且断层位置主观性大的问题。
合成地震断层数据是由地震正演模拟得到,合成过程如下:
(1)创建一维反射模型;(2)应用高斯函数在模型中增加褶皱构造;(3)添加平面剪切构造;(4)添加断层;(5)同雷克子波褶积;(6)添加随机噪声。
通过此方法生成7 819张分辨率为128*128的合成地震数据和断层标签数据用于模型训练,同时生成3 150张用于验证,1 150张用于预测,生成的合成地震数据及其断层标签如图8所示,其中(a)(c)(e)(g)为合成地震数据,(b)(d)(f)(h)分别为(a)(c)(e)(g)对应的断层标签。
图8 合成地震数据及其断层标签
提出的模型在Pytorch神经网络框架中完成,使用的硬件环境为AMD Ryzen 9 3950X 16-Core Processor~3.49 GHz,搭载了英伟达2080 Ti GPU。实验过程中batch_size设置为20,epoch设置为60,使用学习率1×10-4的Adam 优化器对模型训练过程进行优化。模型的输入尺寸为128*128*3像素。训练平台配置见表1。
表1 训练平台配置
地震断层的分割任务主要是将断层从地震数据中提取出来,将二值黑白图与断层标签做对比,计算出混乱矩阵中的各个数据,用于分割断层的混乱矩阵分布,如表2所示。
表2 混乱矩阵
地震断层识别的结果实质上是二分类的结果,同时也是一个不平衡分类问题,可以采用机器学习中分类器的评价指标来对地震断层识别进行评价。为了评价提出方法的有效性,采用IOU、ACC、Dice、Precision、Specificity多个指标进行综合的比较和分析,每个评估指标计算公式如下:
(8)
(9)
(10)
(11)
(12)
其中,TP代表实际是断层且识别结果也为断层的像素点数量,TN为实际不是断层且识别结果也不是断层的像素点数量,FP为实际不是断层但是被识别成断层部分的像素点数量,FN为实际是断层但是没被识别成断层部分的像素点数量。
将设计的CBAM-UNet++与UNet++、UNet、SegNet进行比较。由表3可以看出,CBAM-UNet++算法相比于UNet++方法在IOU、ACC、Dice、Precision、Specificity分别提高了0.73、0.35、0.6、5.5、0.67百分点,相比于UNet方法在ACC、Precision、Specificity分别提高了0.18、3.87、0.5百分点,这说明加入CBAM注意力机制后,新的算法有利于断层的分割,这说明提出的模型具有一定的优越性。
表3 CBAM-UNet++与UNet、UNet++、SegNet的结果比较 %
不同算法的分割效果如图9所示,其中,(a)表示地震断层原始图像;(b)表示地震断层实际标注;(c)表示用SegNet模型进行断层识别的结果;(d)表示用UNet模型进行断层识别的结果;(e)表示用UNet++模型进行断层识别的结果;(f)表示加入CBAM注意力模型的CBAM-UNet++识别结果。从实验结果中可以看出,SegNet在断层中部位置存在漏识别的现象,同时在断层顶部有部分错误识别;UNet、UNet++同样在断层中部位置存在漏失别的现象,但是相对于SegNet,在中部位置漏识别的区域减少,识别效果有明显提高;CBAM-UNet++识别的断层相对于以上三种模型,连续性有明显提升,与实际标注的地震断层形状及位置更接近。
图9 合成地震数据不同算法对断层识别效果对比
为了验证CBAM-UNet++断层识别方法在实际工区地震数据中的有效性,将提出的方法应用于北海荷兰地区F3的某工区地震数据。从图10中可以看出,SegNet漏识别的情况比较严重;UNet、UNet++同样在剖面的中间位置存在漏识别的现象,但是相对于SegNet识别效果有明显提高;而CBAM-UNet++与其他三种方法对比,在断层连续性方面较好,错误识别率较低,能够有效识别出绝大多数断层线,证明了所提方法的有效性。
图10 F3区块不同算法的断层识别效果对比
从表4中可以看出,CBAM-UNet++算法在IOU、ACC、Dice、Precision、Specificity这几个评价指标上优于UNet++,同时与其他两个算法相比CBAM-UNet++获得了较大的提升,得到了更好的识别效果。CBAM-UNet++不仅在合成地震数据中有较好的效果,在实际地震工区中也同样具备较好的效果。
表4 4种语义分割模型在F3地震工区中的断层识别效果比较 %
用CBAM-UNet++网络对F3地震数据检测断层,断层检测效果如图10(f)所示,图中断层仍存在少部分断层断裂,此检测结果降低了应用性,所以对CBAM-UNet++网络检测的断层结果进行进一步处理。通过霍夫变换、膨胀、腐蚀、骨架提取等方法进行后处理,连接断层断裂的部分。最终后处理的断层效果(图11)与地震断层标签(图10(a))进行对比,可以看出所提方法最终的预测效果与地震断层标签基本一致。
图11 F3区块地震数据后处理效果
从地震数据中自动提取断层是地震解释工作中的难点。针对人工标注断层效率低、传统断层识别方法对实际地震断层预测效果不理想的问题,将注意力机制融入到UNet++算法中,建立CBAM-UNet++模型,并将其应用地震断层识别中,抑制无关特征的干扰,同时采用DropBlock有效地抑制网络中产生的过拟合问题,通过引入Dice Loss损失函数以减轻地震断层识别任务中的数据不均衡问题。该方法在合成地震数据集上进行训练和预测,其中,IOU、ACC、Dice、Precision和Specificity指标分别达到了55.09%、96.08%、71.04%、75.51%、98.32%。CBAM提高了特征提取能力,为地震断层识别提供了一种很好的识别效果。同时,将该方法应用于真实地震数据F3区块进行检验,实验结果表明该网络能够对断层进行精准的提取。该研究展示了从二维的角度解释断层线,在未来的工作中,将应用深度学习方法进行三维断层解释的研究,直接提取三维断层面并自动连接不连续断层面。