任向进 段友祥 孙歧峰
(中国石油大学(华东)计算机科学与技术学院 青岛 266580)
裂缝既为油气储集提供空间,也提高了储层的渗透性,并且还决定着油气藏的产量和勘探开发效果[1],所以对储层裂缝进行准确识别、描述和定量预测变得尤为重要。
早期较为传统的裂缝识别是通过地表露头以及岩芯取样,直观观测裂缝的产状参数,其结果在很大程度上取决于人的经验,而且难以广泛应用于裂缝空间分布特征的研究。
后来陆续研究和提出了纵波各向异性、叠前远近偏移距属性差、叠后融合属性、相对波阻抗反演、递推反演等常规地震裂缝识别方法。例如通过计算测量地震反射连续性的属性来识别裂缝的方法,如曲率属性[2],相干性[3]或反射不连续,如方差[4]和梯度大小[5]。随着组合优化算法的发展,蚁群算法也被应用于裂缝、断层自动识别及分析[6],如2002年Randen[7]等提出了利用“人工蚂蚁”算法以完成对地震断层的自动提取;严哲[8]等提出的一种用于裂缝自动追踪和识别的方向约束蚁群算法。后来许多半自动和自动裂缝检测算法应用于地质裂缝检测识别,杨绪海等[9]提出的算法模型可以有效提取背景噪声,自动识别岩石裂缝特征;薛国新等[10]提出一种基于多数投票规则的计算机裂缝自动识别方法;陆敬安等[11]提出用霍夫变换实现测井中裂缝的自动识别等。但是这些方法存在计算量大、抗噪性差、裂缝空间展布特征难体现等不足。
随着机器学习尤其是深度学习的发展,卷积神经网络在图像识别领域取得了巨大进展和成功,其强大的特征挖掘和建立数据关系的能力使更多的研究者着力于将机器学习新方法应用到地质分析和解释等研究领域。Tingdahi[12]等在2005年将神经网络引入到裂缝识别中,选择多种地震属性输入神经网络进行训练实现裂缝的识别;Zazoun[13]利用不同结构的神经网络对常规测井中携带的裂缝信息进行识别,并利用岩心进行标定,训练后的神经网络在邻近地区也取得了较好的实验效果;Wu[14]等在2018年提出利用人工合成地震数据进行CNN模型训练,并用于实际地震数据以完成裂缝自动预测;Xiong[15]等在2018年设计了CNN模型,该模型将以某一点为中心的局部图像块作为输入,并输出该点为裂缝的概率。以上方法在训练的同一工区中实验效果较好,但是在其他工区的识别精度存在不足,且对数据集的要求较高。
为增强模型的泛化能力和鲁棒性,本文将裂缝识别问题视作特殊的图像分类问题,并基于VGG16模型设计构造了一种新的卷积神经网络模型,基于三维地震成像数据实现储层裂缝识别。
相干体属性分析是通过增强相邻地震道数据的不连续性来对地质现象进行真实的刻画,从而可以从地震图像中定量地识别裂缝。相干数据体技术是利用相邻地震信号的相似性来描述地层和岩性的横向不均匀性[16],当地下存在裂缝时,相邻道之间的反射波在传播时会在振幅、频率和相位等方面产生不同程度的变化,表现为完全不相干,相干值小;而对于横向均匀的地层,理论上相邻道的反射波不发生任何变化,表现为完全相干,相干值大。
到目前为止,相干体技术包括了基于三道相关的第一代相干体算法(C1)[17]、基于多道相关的第二代相干体算法(C2)[18]、基于本征值结构的第三代相干体算法(C3)[19]以及在原有三代相干体基础上发展起来的各种相应的改进算法[20]。与前两代相干体算法相比,第三代相干体算法横向分辨率更高、稳定性及抗干扰能力能强。相干体算法利用地震数据在信噪比低的情况下进行计算,计算快速简单。
蚁群算法最早由Dorigo在1992年提出,是一种模拟蚂蚁在食物与巢穴之间利用生物素移动的这种自然界现象的生物启发式群体智能优化算法[21]。基于蚁群算法提出了用于复杂地震解释的蚂蚁追踪技术,利用该技术可以进行裂缝识别等储层分析和描述。蚂蚁追踪技术用于识别裂缝的基本思想是:将大量的电子“蚂蚁”散播在地震数据体中,当满足预设断裂条件时“蚂蚁”会在该断裂处聚集并留下“信息素”,同时呼唤附近的同伴向该处聚集;而在不满足预设断裂条件的地方,蚂蚁不会聚集,最后通过信息素浓度的不同追踪整个数据体,从而对裂缝完成自动识别。
自蚂蚁追踪技术提出后被广泛用于地震资料解释,并不断优化和改进。李香臣[22]应用蚂蚁算法加强构造特征显示;刘财等利用加权一致性对蚂蚁算法进行改进,提高了蚂蚁算法的抗噪性、稳定性与计算效率[23];隆雨辰等[24]采用蚂蚁体与曲率融合属性进行裂缝综合刻画;张瑞等[25]将分频技术应用于蚂蚁追踪,提高了识别细小裂缝的能力。蚂蚁追踪技术克服了解释的主观性,有效提高了解释的准确性,大幅缩短了人工解释时间。
人工神经网络特有的非线性适应性信息处理能力,在很多领域得到了很好的应用,其中就包括油藏地质分析地岩性、层序、裂缝等。深度学习技术的发展,极大提升了人工神经网络的学习能力,应用深度大大提升。
根据人工神经网络的基本原理,利用人工神经网络进行裂缝识别的一般流程如图1所示。
图1 神经网络用于裂缝识别流程
深度神经网络模型又称为深度学习模型,它是在神经网络的层次(深度)和参数规模上拓展而产生的,即它也一个是由多层次的分析和计算组合而成的、能力更强的非线性映射模型。应用深度学习模型的关键是数据集的获取及模型的搭建和训练,模型搭建和训练的要素包括激活函数,损失函数,优化算法,调参等。
2.3.1 激活函数
激活函数是在神经网络的神经元上运行的重要函数,是神经网络模型的重要函数,它有两大作用:
1)实现信息过滤,即激活有用的信息,抑制无关的数据点。
2)引入非线性因素,提高网络模型的表达能力。
2.3.2 损失函数
损失函数是机器学习模型重要的参数评估要素,用来评价数据集的标签值和预测值不一致的程度,损失函数越小表明模型的鲁棒性越好。损失函数分为分类问题损失函数和回归问题损失函数,本文只涉及分类问题,分类问题常用的损失函数有[26]:对数损失函数、指数损失函数、交叉熵损失函数、Hinge损失函数等。
2.3.3 优化算法
优化算法是为了求出问题的最优解或尽可能地逼近最优解而采用的策略。机器学习通过优化算法对损失函数优化,不断提高模型准确性,最终训练得到优化好的模型。选择合适的优化算法可以保证训练的稳定及模型的准确。常用的优化算法如下所示。
1)梯度下降(SGD、Momentum、Nestrov Momentum),它是沿着梯度的反方向更新参数优化目标函数。优点是算法简单,在函数为凸函数时可以找到全局最优解,是最常用的优化算法,但容易陷入局部最优。
2)牛顿法和拟牛顿法,它是通过不断迭代迭代点处的二阶导数对目标函数进行求解。优点是收敛速度快,常用于求解无约束最优化问题,但是计算比较复杂。
3)自适应方法,如Adam它是通过计算梯度的一阶矩估计和二阶矩估计而为不同的参数设计独立的自适应性学习率[27]。优点是计算高效且调参相对简单。
本文将裂缝识别问题视作特殊的图像二值分类问题,基于VGG16模型建立裂缝识别模型,网络模型结构如图2,模型的结构参数见表1。
表1 本文网络模型结构参数表
图2 本文网络模型结构
与经典的CIFAR-10分类问题[28]相比,本文模型识别的裂缝图像与背景及几何特征密切相关,加上裂缝信息和噪声干扰,因此本文网络模型删除了VGG16模型的最后两层卷积层和池化层,减少了卷积层和全连接层层数,避免了degrade问题;对三层卷积部分的最后一层进行反池化以获得三层输出;添加了一个softmax分类层获得是裂缝的概率,并给出预测输出[29]。每个Conv层都由3×3的卷积核组成,卷积核的个数依次为32、64、128,卷积核个数的逐步增大有利于在图像集中度逐步降低的情况下捕捉到更大面积的特征。
激活函数是影响模型性能的重要因素之一。经过实验,模型在Conv层采用ReLU函数作为激活函数,使用二维filter对输入图像进行卷积,添加偏置参数,然后进行整流线性激活(ReLU);在每个池化层采用softmax函数为激活函数,将图像中每个像素的值在0和1之间归一化,表示该点为裂缝的概率。
损失函数是影响模型性能的又一个重要因素,对于普通图像二值分类学习模型,在正负样本分布基本均衡的情况下,式(1)是一种效果很好的损失函数。但在本文问题中,样本数据中90%以上的样本是非裂缝样本(二进制标签设为0),裂缝样本(标签设为1)非常有限。如果使用此损失函数训练神经网络,则网络很容易收敛到错误的方向并导致识别结果错误,因此该损失函数不适用于地震裂缝分类模型。针对以上问题本文提出用平衡交叉熵损失函数[30]代替一般的二值损失函数,以减小数据集比例不平衡对模型训练的影响。损失函数定义见式(2)。
深度神经网络的训练是对损失函数优化的过程,也就是不断提高模型准确性的过程,选择合适的优化算法可以保证训练的稳定及训练模型的准确。通过实验本文最终选择Adam优化算法优化模型,同时模型还引用Dropout方法有效缓解过拟合的发生,大大增强了网络的泛化能力。
本文模型具有多尺度和多层次的特点,可以从多尺度卷积层中提取局部细节,并且可以通过上采样来控制全局特征,使裂缝检测更加准确。
考虑到裂缝识别问题的特点,保证训练得到的模型有很强的泛化能力,本文的数据集由合成地震数据和真实工区地震数据混合组成。数据集的建立方法是先获得地震切片图像,然后再生成样本数据集。
1)获得切片图像。合成地震切片图像采用的是Wu和Hale[31]于2016年给出的方法,主要步骤如图3所示,具体过程本文不做详述。本文合成了7幅地震切片图像,每张像素尺寸为128×128,如图4是其中一幅。真实工区地震数据来自北海荷兰海上F3区块,选择沿着F3工区inline方向切片,共取80幅完整的地震切片图像,切片参数为951[xline]×462[time],垂直时间采样间隔为0.004s,得到的切片图像像素尺寸为951×1848,图5为其中一幅。为了增强网络的泛化能力,本文对切片图像进行了数据增强。
图3 合成地震图像主要步骤
图4 合成地震切片图像
图5 真实地震切片图像
2)生成样本数据集。在每幅切片图像上以待判断点O为中心,取其附近21×21像素的图像数据块,人工根据是否为裂缝标记为1或0,其中1代表图像块中心位置为裂缝,0为非裂缝。在数据增强后的87幅切片图像中人工任意选取4000个裂缝标签样本和8000个非裂缝标签样本,共计12000个标签样本数据,其中90%用于模型训练,10%用作验证。部分样本标签数据如图6所示。
图6 部分样本标签数据
使用前面得到的训练数据集(共12000×90%=10800个)进行模型训练。考虑到合成数据和真实数据的振幅值会有很大差异,需要对所有训练集中的地震数据进行标准化输入以提高训练的准确性。方法是对训练数据集按式(3)进行归一化的处理,即将原始数据减去其均值μ后,再除以其方差σ。
本文通过初始化所有层的权重开始训练网络,训练样本在每个时期被送入网络之前随机洗牌,这是获得良好网络性能的关键步骤。由于GPU显存限制的原因,需要采用分批的方式将数据集输入到模型中,批大小(batch_size)设置为64,epochs设置为200,学习率初始值为0.0001,并伴随训练的过程进行微调。dropout_ratio设置为0.5,设置输出应用的阈值为0.7,即高于阈值时认为是裂缝,而低于阈值时则认为是非裂缝。
本文实验在CPU为Intel Xeon Gold 6126@2.60GHz,GPU为NVIDIA Tesla P100,显存为16GB的主机上进行。实验平台搭载CentOS 7.0操作系统,深度学习框架TensorFlow 1.12,CUDA 10.0。
1)合成地震数据裂缝识别。合成地震数据中的裂缝是人为添加的,可以比对模型识别输出结果是否正确,从而验证本文模型的正确性。图7(a)是输入的一幅合成地震切片图像,图7(b)为裂缝识别结果,可以看出输出识别与合成前添加的裂缝完全一致。
图7 合成地震裂缝识别结果
2)实际工区数据裂缝识别。为了进一步验证本文模型的有效性,在公开的F3工区上选取一幅切片图像,如图8(151道inline,道采样点为88,采样间隔为0.004s)。将本文模型与相干体、蚂蚁追踪、VGG16模型进行了裂缝识别实验对比,图9~图12是裂缝识别对比结果。
图8 真实地震数据
图9 相干体识别结果
图10 蚂蚁追踪识别结果
图11 VGG16模型识别结果
图12 本文模型识别结果
从对比中可以看出,相比较于相干体、蚂蚁追踪方法,在地震数据响应度低的情况下,本文模型可以减小噪声等对识别精度的干扰,识别结果更清晰;相比较于经典的卷积神经网络模型VGG16,本文模型裂缝特征学习更准确、识别精度更高,可以高效地检测地震裂缝并且对裂缝进行清晰标识。
本文基于VGG16网络设计了一种卷积神经网络模型,采用合成地震数据与真实地震数据混合的策略生成训练样本数据集,增强了模型的泛化能力;采用数据增强技术,选择类平衡的二值交叉熵损失函数,减小了数据不平衡的问题,从而使模型能更深入的学习裂缝特征。在合成地震数据上验证了模型的正确性,同时在真实F3工区地震数据上将本文模型和相干体、蚂蚁追踪、VGG16模型进行了有效性实验对比,结果表明,本文模型基本消除了地震噪声对识别裂缝造成的影响,避免了VGG16模型复杂参数调整的问题,地震裂缝识别的准确度、清晰度更高。本文研究为深度学习技术在油气资源勘探等特定领域的应用进行了有益的探索。