视频教你用CNN、UNet神经网络模型识别地震断层(附程序)
各位同学,大家好。前期科技州推出了课程《深度学习断层实战(二)——CNN神经网络模型识别断层》和《深度学习断层实战(三)——UNet神经网络模型建立》受到大家广泛关注,也提出了一些学习问题,主要集中在环境配置和程序运行方面。今天我们就通过视频讲解,全流程给大家演示运行程序的方法。
01 环境的配置
1.基本程序环境
我们的课程主要都是在Python环境下运行的,所以大家需要配置Python相关运行环境。我们常用Anacoda 的Spider作为集成编辑器。这款软件既是免费软件,也具有较好的调试功能。
另外我们的课程涉及深度学习的内容比较多,我们会用到tensorflow和keras,这也请大家自行安装。
以下是我们推荐的程序和引用库版本。
Python 3.8
keras 2.3.1
tensorflow 2.2.0 或 tensorflow-gpu 2.2.0
另外特别提示:
强烈建议大家配置具有独立NVIDIA显卡的运行环境,并装好CUDA驱动和Python的tensorflow-gpu版本,充分使用GPU加速计算。
后续我们课程中有关深度学习的处理,特别是断层和储层的处理,使用GPU加速比CPU会快很多个数量级。
2.本课程用到的引用库
这本次课程中,我们还会用到几个引用库。
一是cupy库,主要功能是NumPy兼容多维数组在CUDA上的实现。
简单介绍一下CuPy:
CuPy是一个开源矩阵库,使用NVIDIA CUDA加速。CuPy使用Python提供GPU加速计算。CUPY使用CUDA相关库,包括 CuBLAS、CUDNN、Curand、CuoSver、CuPaSeSE、Cufft和NCCL,以充分利用GPU架构。CuPy加速了一些超过100倍的操作。
安装这个引用库的前提是必须要安装CUDA驱动,只能在GPU环境下运行。使用这个库的原因是三维地震数据生成计算量巨大,需要GPU来加速。因此安装cupy库需要查看相关文档,安装对应的CUDA驱动环境。
有如下的对应关系:
二是bruges库,主要功能是用于地震反射数据的建模和后处理,包含几个常见的地球物理功能。
安装方法
pip install bruges
三是matplotlib库,主要功能是用于绘制各种图像的模块,用于数据的分析和展示。
安装方法
pip install matplotlib
四是scipy库,这是一个专用于科学计算中常见问题的工具箱。其不同的子模块对应不同的应用,如插值、积分、优化、图像处理、统计、特殊函数等。在课程中可以用来生成不同的地震结构。
安装方法
pip install scipy
本次课程这几个引用库的推荐版本是:
cupy-cuda102 9.1.0
bruges 0.4.2
matplotlib 3.3.2
scipy 1.4.1
02 程序运行
1.程序结构
本次课程运行的结构如图所示:
首先是两个文件夹。一是dataset文件夹,放置了数据集,包括训练数据和验证数据,参考前期生成断层数据的课程。二是model文件夹,包括了call_back,weights等文件夹,放置了训练的模型和配套文件。
其次有几个函数程序。一是CNN3D.py和UNET3D.py,这是我们构造的CNN自编码神经网络和UNet神经网络模型。二是metrics.py,这是构造了一个cross_entropy_balanced的损失函数,用于优化神经网络对断层的识别。三是datagen.py,这是通过提取数据集,供神经网络训练。
最后就是我们的主程序。分别是faultSeg-cnn.py和faultSeg-unet.py,实现了CNN网络和unet网络的全过程训练。
2.程序运行
本次程序运行环境为:
Python 3.8
Anaconda 3 Spyder 4.1.5
接下来就详细讲解程序运行。
(1)faultSeg-cnn.py
为了讲解CNN神经网络对断层数据训练详细过程,我们编写了程序。
一是参数的初始化,这里定义了地震体数据的初始参数和存放文件夹位置。
二是进行神经网络模型训练。包括加载网络模型,训练网络模型,保存网络模型。
以上部分我们先运行程序,完成神经网络模型的训练和保存。
三是查看模型效果。我们导入训练好的模型,可以看到模型中卷积层学习到的特征。至于对断层数据的识别和查看,大家可以学习《教你用Python自动识别地震断层》这节课程。
(2)faultSeg-unet.py
这段程序讲解了Unet神经网络对断层数据训练的详细过程。
程序结构与CNN类似。不过网络结构差别比较大,训练的时间更长,断层识别的效果更好。
运行方式同样是先运行网络训练部分程序,完成神经网络模型的训练和保存。然后再加载模型来查看学习的特征。
通过以上的讲解,大家就可以轻松自己使用CNN和UNET神经网络进行断层数据训练,结合后续断层识别的课程,相信对大家智能断层识别的研究有比较大的帮助。如果大家对程序感兴趣,请联系我交流讨论。
我是科技州,用心分享智能地震勘探干货,带你一同进步。再见。
相关阅读: