遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(1)

01 什么时候需要切割?

1.需要化整为零处理数据。

地震勘探数据常常有一个重要的特点就是数据量很大,大到直接对整个资料进行处理不太现实,而且计算效率也比较低。比如在深度学习的过程中,每个批次训练一般都是用的小块数据。各位聪明的同学肯定想到了一个方法,就是化整为零。在实际资料的处理过程中,我们常常需要把大块数据切小,处理完之后再组合回去。

这类需求常常在使用深度学习模型预测的时候使用,一般流程是这样的:即对于一个大工区的数据块,先将数据拆分为小块数据,然后分别使用神经网络模型进行预测,再将预测结果组合回原数据尺寸,得到整体的预测效果。

2.生成训练集数据。

搞深度学习的同学都知道我们需要准备训练集,而且训练集的数量一般都希望比较大,数据的形态希望比较丰富。如果每个训练数据都手工准备,显然太费时间。这个时候一个自动生成训练数据的方案成为了刚需。

有一种比较高效的生成训练数据集的流程是这样的:一是生成或找一些形态丰富的大尺寸数据。二是使用程序将所有的大尺寸数据切割为小块。三是对小块进行尺度变换、翻转等操作丰富形态。四是整合所有小块形成训练数据集。

切割和组合的思路听起来很简单,但是在实际操作过程中会遇到一些问题,比如怎样切分小块的数量保证是整数,怎样实现小块组合的边缘能够连续等等问题。下面我们将给大家讲解用Python来做怎样实现。还是以前面课程使用的数据为示范,分别给大家讲解二维剖面和三维数据体的切割和组合的方法。

02 二维剖面切割和组合。

1.首先,我们考虑生成训练集的场景。

假如我们找到了一个1000*1200的剖面数据,想生成10000个小块数据,怎样来操作呢?可以使用如下的程序:

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(2)

这里用datagenerator函数生成了小块数据,其中参数的含义包括:

一是data_dir,程序将读取指定文件夹里面所有的地震数据来形成训练集。

二是patch_size,指定切割的小块尺寸。对于深度学习来说,一般小块尺寸从32开始,不大于128。

三是stride,指移动的步长。

四是train_data_num,指想生成训练小块的数量。

五是aug_times,指定随机翻转的次数。

六是scales,指定数据缩放的比例,可以指定很多个,程序将从中选择。

七是verbose,显示处理进度。

八是jump,指定随机跳跃地震道。

处理完之后,我们随机选几个小块看看啥样,就可以发现小块的形态是非常丰富的。

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(3)

2.现在我们考虑为预测数据而进行的切割和组合。

比如我们的大块数据尺寸是1000*1200,原始数据剖面看起来是这样的:

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(4)

现在想切割为40*40的小块,可以这样做:

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(5)

这里的参数需要指定输入的数据源,输入数据的尺寸,切割小块的尺寸,切割标志1。slice2D函数将自动切割小块数据。

这里为了保障切割时不出错,一定要注意(大块-小块)÷步长是整数。切割结果就是这样的:

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(6)

切割的小块看起来是这样的:

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(7)

要将小块组合回原始数据,程序这样写:

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(8)

参数与切割的程序相比基本没有区别,就是把标志指定为0。组合后的数据剖面看起来是这样的:

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(9)

与原数据剖面图没啥区别,证明了程序的可靠性。

03 三维剖面切割和组合。

三维体的切割和组合与二维剖面相比,基本原理都是不变的,区别就是复杂度增高,计算资源要求更高。

1.准备数据集的场景。

假如我们找的是一个200*500*500的数据体,要想生成1000个32*32*32的小数据体,程序可以这样写:

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(10)

这段程序中关键的函数是datagenerator3D,有几点要说明一下:

一是程序整体设计思路和datagenerator二维切割程序差不多,但是由于增加了一个维度,生成小块数据耗费的时间和存储空间都是指数倍上升,建议生成的小块三维体数量不要太多。

二是在三维体的切割的计算程序中,维度计算,逻辑运算,尺度缩放等程序都要改造,这些部分与二维剖面计算程序还是有比较大的差别。

现在我们来看其中的一个小块,是这样的:

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(11)

2. 预测数据的场景。

比如我们的三维数据体尺寸是200*500*500,我们指定inline为100来进行切片,二维剖面看起来是这样的 :

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(12)

现在想切割为30*30*30的小块,可以这样做:

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(13)

参数的设置和二维数据体切割的方法差不多。但是由于多了一个维度,函数slice3D的内部程序进行了比较复杂的改动。

切割的小块的一个剖面看起来是这样的:

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(14)

要将小块组合回原始数据,程序这样写:

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(15)

对于恢复的三维体,也看看inline为100的二维剖面。可以看到与原数据剖面图没啥区别,证明程序是比较可靠的。

遥感数据深度学习(深度学习必备教你切割和组合二维和三维地震数据)(16)

今天的课程就到这里。这节课给大家讲解了在不同需求场景下,怎样对二维和三维地震数据进行切割和组合,这些技巧在深度学习研究中非常有用。详细程序可以联系我获取,欢迎关注我交流,再见。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页