深度卷积网络识别地震断层实战(附程序)

各位同学,前面详细讲解了深度神经网络在地震去噪方向的精彩应用。实际上,神经网络除了在去噪领域效果明显外,在地震的断层识别上也逐步开始大显身手了。

这次我们研究神经网络在断层识别的应用,主要是参考了Augusto Cunha的论文《Seismic fault detection in real data using transfer learning from a convolutional neural network pre-trained with synthetic seismic data》。发表在了行业知名期刊《COMPUTERS & GEOSCIENCES》。

这位作者使用转移学习技术来开发现有的分类器,并将其应用到其他地震数据中。论文的基本模型是一个卷积神经网络(CNN)训练和调整的合成地震数据。作者完整的讲解了断层识别的流程,并与其它方法进行了对比。不管是定性还是定量的结果都比较好。

我根据作者分享的程序进行了简化和改造,接来下给大家结合程序来讲解一下地震断层识别的全过程。

一、断层数据准备

我们准备了两类数据。一是记录地震剖面的CSV数据。二是记录断层位置的ascii数据。

那怎样加载断层并显示出来的呢?这段代码显示了整个加载过程。lines_pair_points这句通过巧妙的运算计算出了x,y坐标对。draw.line这句根据不同的坐标画出了断层线。

画出的断层图效果是这样的。

二、模型训练

1.训练数据准备

训练模型的第一步是准备好训练集和训练标签。这里的训练集就是地震剖面的小块。训练标签就是0或1的二值数据,即标识了对应的地震是断层(为1)或非断层(为0)。

程序是这样写的。这里首先通过循环语句,根据断层位置将整个剖面区分为patches_fault即断层数据和patches_non_faul即非断层数据。

然后生成了训练集X即整个剖面,Y即标识对应的地层是断层1还是非断层0。

2.模型训练

这里的模型训练方法和前面课程讲过的模型训练类似。有几点要特别注意。主要包括最后的激活函数用softmax,loss函数用binary_crossentropy。这样设计的原因是学习的特征0/1值比较简单,所以用逻辑函数来学习就可以了。

三、断层预测

完成了模型学习后,就可以用优化的模型来进行地层剖面的断层预测。

1.定性预测

最直观的预测就是标识出断层的位置。这里的程序加载了训练好的模型结构和权重参数,使用不同的模型进行断层预测。

预测完之后的结果是这样的,就是标识出不同的地震小块是否为断层。

最后加载预测的结果的程序是这样的。通过循环语句将各小块对应的断层标识读取出来,形成了mask二维矩阵,在地层剖面对应位置标识了断层。

预测的结果就是这样的。细的线是人工标识的正确断层,红色的线条是模型预测的断层,感觉正确率不是太高呢。

2.定量预测

定量预测方法,是将模型预测结果与人工标识的结果相对比,计算准确率。

作者写了一个metrics函数,将网络预测的结果与人工识别的结果相对比。计算出了准确率Accuracy,灵敏性Sensitivity,特异性Specificity,F1 Score,AUC等指标。

看看VGG的预测准确率,看起来未达到90%,看来效果不算太好。

好了,以上就是今天的课程。今天讲解了断层识别的主要流程,并进行了实验效果展示。从结果来看,预测精度不算太高,这些问题将在未来的课程来探讨。如果你想获取代码,或有问题讨论,都欢迎联系我交流。下节课再见。

你可能感兴趣的:(深度卷积网络识别地震断层实战(附程序))