智能地震相预测深入学习:教你用3个武器优化项目(附程序)

上一节课,我们讲解了用深度学习进行工区地震相预测的全过程。

但相比真实工程项目,前面使用的算法比较简单,处理的结果也太让人满意。

这次课程我们介绍几个真实项目中常用的优化方法,进一步提升深度学习处理的能力。

01 项目概况

我们还是使用上节课的项目,使用荷兰F3的数据。

下面介绍一下项目的地质情况。项目工区在荷兰北海区域,富含碳氢化合物沉积物。北海大陆架位于荷兰海岸附近,被划分为不同的地理区域,用不同字母来描述;在这些区域内是标有数字的较小区域。其中一个区域是尺寸为16km x 24km的矩形,称为F3区块,见图。

根据区块的层位和断层解释情况,对该区块进行了三维建模,最终的3D地质模型如图所示:

基本网络模型情况

整个网络的基本架构是一个类似自编码的卷积神经网络结构。其中编码部分使用了卷积层Conv2d、批正则化层BatchNorm2d,激活函数Relu,2×2的最大池化层MaxPool2d。解码部分使用了反卷积ConvTranspose2d,批正则化层BatchNorm2d,激活函数Relu,2×2的上采样层MaxUnpool2d。

上节课使用的是Keras框架,这种框架使用简单,容易理解,方便快速上手运行。但本节课选用了Pytorch深度学习架构。Pytorch对比Keras要繁杂一些,但是在深入到网络更细粒度的研究时,如网络调试、非标准结构编写等,Pytorch成为了更好的选择。

另外,在大规模数据运算场景下,GPU运行是必不可少的。本程序强烈建议在GPU环境下运行,如果使用CPU运行,漫长的训练过程会让你失去耐心。比如本次实验运行,如果使用GPU的话可能需要1天,但换为CPU至少需要1个月。建议大家配置好显卡的CUDA驱动后,下载安装GPU版本的Pytorch库文件来运行。

02 武器1,数据增强

数据增强是一种人为增加训练集复杂性的技术,有助于网络更好地泛化测试数据。当使用有限的训练数据训练大型网络时,这招非常有用。

我们使用简单的增强方法,包括将小块数据随机旋转一定角度,进行水平或垂直随机翻转,添加高斯噪声、拉伸、改变尺寸等方法。

使用数据增强方法,对于小尺寸数据(比如尺寸在128以下的数据)的训练集尤其有效。经过统计分析,对复杂模型的精度提升在10%以上。

数据增强3个常用方法的程序如下所示:

比如旋转:

水平翻转:

增加随机噪声:

03 武器2,网络跳跃

对于神经网络模型,添加跳过连接可以改善结果,并加快训练速度。

在深度神经网络中,某一层网络层的输出通常作为输入传递给网络中的下一层。跳过连接允许将网络层的输出作为输入传递到网络后面的层,从而跳过中间层。这些连接是通过直接将反褶积网络编码器部分中各层的输出,添加到解码器中相应层的输入来实现的。跳过连接通过为计算梯度传播到网络的较低层提供“快捷方式”,帮助网络克服消失梯度问题。

网络跳跃在基于小块的模型中提升效果尤其明显。经过统计,在基于小块的模型中,添加跳过连接可提高识别精度约1-2%。

更明显的效果是这个方法还可以加快训练过程。使用跳过连接模型的收敛速度是基本模型的四倍。

主要的代码是在建立网络运行流程中进行了改造。通常情况网络传输代码是这样的:

增了网络跳跃的代码后,是这样的:

04 武器3,基于截面训练

传统构造训练集都会把大的训练数据切割为小块,对于非常大的地震体数据,这种方法比使用整个剖面进行训练更可行。切割小块数据的好处是对内存压力比较小,缺点是训练数量较多,耗时较久,数据多样性容易缺乏。

另外一种训练方式是基于截面的训练。基于截面的训练方式是使用整个数据体的截面进行训练。

这种方法对于储层预测的优点有两个。

首先,由于训练数据是一个完整的剖面,模型可以很容易地了解不同岩石地层单元之间的关系,并且在标记剖面时可以考虑深度信息。

其次,同时训练和测试整个剖面意味着可以非常快速地训练网络,因为只有相对较少的地震主测线和联络测线。

网络使用全卷积架构的一个优点是:网络输入的大小不必固定。网络的输出大小随着其输入大小的变化而变化。因此,不同大小的主测线和联络测线不会对该网络的训练造成任何问题。

当然,基于截面的方法对内存要求比较高。建议切割的训练数据体的剖面尺寸,不要超过内存容量的极限。

05 实验效果

为了检验上述提出方法的先进性,我们通过定量和定性的实验来展示效果。

1.定量实验

量化指标选择:

为了客观地评估两个测试集上不同模型的性能,我们使用以下指标:像素精度(PA)、每个类别的类别精度(CA)、所有类别的平均类别精度(MCA)以及联合上的频率加权交叉(FWIU)。

以上指标是来源于计算机视觉文献中常用的一组评估指标。如果我们将标签定义属于i类的像素集表示为Gi,将实际计算结果中属于i类的像素集表示为Fi。然后,实际计算结果中正确分类的像素集是Gi∩Fi。我们用|.|来表示一个集合中元素的数目。现在,我们可以定义以下指标:

像素精度 (PA)是所有类别中正确分类的像素百分比。

每个类别的类别精度 (CAi):是在i类中正确分类的像素百分比。

所有类别的平均类别精度 (MCA):所有类别的CA平均值。nc是类别的数量。

并集上的交点(IUi)是定义为Gi和Fi的交集的元素数与其并集的元素数之和:

该参数度量了两个集合之间的重叠,当且仅当所有像素都正确分类时,该度量应为1。此外,当我们对所有类别的IU求平均值时,我们就得到了并集的平均交点(平均IU)。

为了防止这个指标对小类过于敏感,通常会根据每个类的大小来衡量它们。得到的度量称为联合上的频率加权交点(FWIU)。

下表展示了在两个测试集上测试的所有模型的量化指标结果。

综合各类指标来看,基于截面和网络跳跃的方法取得了较好的效果。

2.定性实验

接下来通过图片来观察模型识别的精度。我们构建了来自测试集#1的主测线200线上不同模型的识别结果。

同样可以明显地看出来,基于截面和网络跳跃的方法取得了最好的识别效果。

这次课程通过真实的工程案例,给大家介绍了3个比较实用的武器,相信有助于大家在实际工程项目中更好地发挥。如果对程序感兴趣,欢迎联系我交流,再见。

相关阅读:

如何在地震勘探研究更上一层楼?带你一起深度学习识别断层

怎样轻松入门地震勘探研究:先从地震数据处理开始

深度学习地震去噪实战:教你如何从0开启地震深度学习科研之路

你可能感兴趣的:(智能地震相预测深入学习:教你用3个武器优化项目(附程序))