2023年12月16日~12月22日(自适应反馈机制下基于卷积神经网络的高清晰反射波反演算法:CNN-RWI)

标题:Adaptive Feedback Convolutional-Neural-Network-Based High-Resolution Reflection-Waveform Inversion

        全波形反演(FWI)是一种非线性拟合观测地震记录从而获得高清晰速度模型的最优化算法。FWI能够通过拟合浅层初至波和反射波获得较准确的浅层速度模型,并通过拟合观测到的反射波数据来更新界面。但是,FWI通常无法通过拟合深层反射波获得较准确的深层速度模型(包括背景速度和反射界面信息),因为模型梯度中的反射界面信息(偏移成分)比背景速度信息(层析成像成分)更加显著。因此,FWI主要更新深层反射界面而不是深层背景速度,而背景速度的误差会降低反射界面准确性。因此,FWI很难为地震资料解释和油气储藏分析提供准确的深层速度模型。

        随着深度学习在计算机视觉等领域获得重大突破,利用深度学习预测速度模型(包括浅层和深层背景速度以及界面信息)成为了地震参数反演领域的研究热点之一。当有代表性的速度模型库可供深度学习训练和验证时,深度学习可以有效基于先验信息(比如观测地震记录或偏移图像)预测真实速度模型。然而,目前地震勘探领域并没有能够广泛代表各种不同构造的速度模型库。

        中国科学院地质与地球物理研究所油气资源研究院重点实验室吴毓朗博士后与合作导师王彦飞研究员,以及美国得克萨斯大学达拉斯分校George A. McMechan教授展开合作,提出一种自适应反馈机制下基于卷积神经网络(CNN)的高清晰反射波反演算法(CNN-RWI),反复应用迭代更新的卷积神经网络(CNN)从平滑的初始速度模型(层析成像分量)和高分辨率偏移图像(偏移分量)预测真实速度模型。该算法既不需要拟合地震记录也不依赖广泛代表各种不同构造的速度模型库,而是通过自适应地聚类切割先验速度模型构建训练样本,利用不断改进的CNN,准确预测高清晰速度模型(包括浅层和深层的背景速度以及反射界面信息)。CNN由更具代表性的训练数据集迭代更新,该训练数据集是通过所提出的空间约束分裂分层k-means分组方法从最新的CNN预测速度模型中获得的。训练速度模型越有代表性,CNN预测的速度模型就越准确。使用Marmousi 2 P波速度模型的不同部分的合成实例表明,CNN-RWI反演速度模型的较浅和较深部分比共轭梯度FWI(CG-FWI)更准确。CNN-RWI和CG-FWI都对起始速度模型的准确性和未知真实速度模型的复杂性敏感。

        本文提出利用卷积神经网络(CNN)从通过地震数据预处理(即,先前的初始速度模型和相应的偏移图像)。为了克服缺乏代表性速度模型作为训练标签,实现自适应反馈机制以从最新获得的先验速度模型(在第一次迭代时的较不准确的先验开始速度模型和在随后的迭代时的逐渐更准确的CNN预测的速度模型)迭代地构建越来越多的代表性训练速度模型。我们还建议迭代地和自适应地将最新获得的先验速度模型划分为许多块特征,以获得其相对较低维的随机扰动来构建训练速度模型。合成实例表明,提出的基于CNN的反射波形反演(CNN-RWI)与传统的共轭梯度全波形反演(CG-FWI)一样,基于相同的先验起始速度模型来估计速度模型,但CNN-RWI对速度模型的反演精度高于CG-FWI。

一、Introduction—介绍

        全波形反演(FWI)是一种强大的算法,用于执行最小二乘非线性数据拟合优化以估计高分辨率速度模型。通过对源波场和剩余波场进行零滞后互相关而获得的常规FWI梯度可以分为三个分量:(a)从直达波、折射波和潜水波获得的低波数分量,(b)与反射相关联的低波数(层析成像)分量,以及(c)与反射相关联的高波数(偏移)分量。由于直达波、折射波和潜水波(相对于反射波)的穿透深度较浅,并且由于它们在源波场和剩余波场中的波径重叠,如果走时误差在半个周期内(Virieux & Operto,2009年),梯度的这一分量可以有效地主要更新较浅的背景速度模型。由于初始模型通常是光滑的,在FWI的第一次迭代中,梯度主要由震源波场与界面处反射主导的剩余波场的相互作用给出。因此,在第一次迭代中,反射波主要提供界面处FWI梯度的高波数分量(偏移分量)。在下面的迭代中,源和反射相关的剩余波场在界面处创建相应的散射波。然后,从反射波获得FWI梯度的低波数(层析)分量,因为源和反射相关的剩余波场的波径与在界面处散射的波重叠。界面处的反射相关的高波数(迁移)分量通常比界面上方的反射相关的低波数(层析成像)分量高一个数量级。因此,在平滑的起始速度模型下,常规FWI主要通过拟合观测到的反射数据来更新更深的界面,而不是更深的背景速度模型。

        为了有效地通过层析分量更新背景速度模型,主要有三种类型的反射波形反演(RWI)被提出来保留层析分量,但从梯度中去除偏移分量。第一种策略是基于入射波场和反射波场分别向下和向上传播的假设来分离上行波场和下行波场(Chi等人,2017; Fei等人,2015; Hu和McMechan,1987; Lian等人,2018年; Liu等人,2011; Wang等人,2013年)。然而,如果一个层具有较大的倾角,偏移分量不能被完全去除,因此它导致背景速度模型在错误的方向上被更新。为了分离垂直和水平方向上的入射波场和反射波场,Barbor和Warner(2016)提出使用一对1D双向波动方程来分别模拟垂直和水平波传播。第二种策略是应用散射角滤波,基于层析成像分量对应于接近180°的散射角的假设(Alkhalifah,2014; Khalil等人,2014; Wu & Alkhalifah,2015,2017; Yao等人,2018年,2019年)。第三种策略是应用Born建模来分离层析成像和偏移分量(Sun等人,2017; Wu & Alkhalifah,2017; Xu等人,2012; Yao & Wu,2017)。Ma等人(2012)提出利用图像引导插值及其伴随算子从偏移图像获得稀疏模型,并将反演约束为从稀疏模型插值的块状模型。Wang等人(2021年)提出了一种基于广义内部多次成像的RWI(GIMI-RWI),将数据残差与为每个源-接收器对存储的反射核进行卷积,以更新层析成像速度。因此,GIMI-RWI避免了Born模型的反偏移,也是源独立的更新速度沿着波路径。我们参考Yao等人(2020)对RWI的概述。

        卷积神经网络(CNN)首先在计算机视觉领域中被开发用于图像分类(福岛& Miyake,1982; Krizhevsky等人,2012; LeCun等人,1989年、1990年、1998年)。CNN在计算机视觉中的成功部分归功于许多开放访问的大型数据集,例如ImageNet数据集(Deng et al.,2009)和Microsoft COCO数据集(Lin等人,2014年)。这些图像数据集包含数千个随机选择和标记的代表性图像(例如,人、动物、物体等)。然后,这些代表性的图像数据集被分为训练、测试和验证数据集,用于CNN应用。由于CNN在计算机视觉中的成功,它迅速成为直接从原始地震数据或偏移图像预测速度模型的流行工具(Araya-Polo等人,2018; Lin & Wu,2018; Liu等人,2021; Wang & Ma,2020; Yang & Ma,2019; Zhang & Gao,2021)。预测速度模型的这些CNN应用取代了传统的波动方程引导过程(例如,计算FWI和RWI中的模型梯度以拟合地震数据),通过训练CNN来近似训练数据集中的映射关系。因此,传统FWI和RWI中的关键问题(例如,更新速度模型、循环跳跃等)转换为训练速度模型的选择偏差和CNN的过拟合。过度拟合是一种现象(Chicco,2017),即CNN训练中最小化的性能误差不会导致CNN更准确地预测未知的真实速度模型。因此,训练速度模型是否代表未知的真实速度模型(或者未知的真实速度模型是否在训练模型的分布范围内),成为应用CNN预测速度模型的有效关注点和关键问题。

        不像具有相对小种类的目标的类型、形状和轮廓的图像数据集(例如,人、动物、物体等),地球包含现实的、复杂的地质模型,其具有许多随机形状的各种层、盐和断层。更糟糕的是,大多数地质模型要么是未知的,要么不是开放的。为了弥补缺乏代表性的真实速度模型,许多CNN应用程序依赖于训练速度模型,这些模型是根据特定规则生成或选择的,而不是目标区域中真实地质结构的先验信息。Araya-Polo等人(2018)生成了具有随机断层和盐体的速度模型。Lin和Wu(2018)以及Zhang和Gao(2021)生成了具有随机平坦地下层和具有断层的弯曲地下层的速度模型。Yang和Ma(2019)生成了具有平滑界面曲率和随深度增加的速度值的随机速度模型。然后,将具有随机形状和位置的盐体嵌入到每个随机模型中。Wang和Ma(2020)将自然图像(例如,从Microsoft COCO数据集),其结构和细节丰富,到速度模型。Liu等人(2021)通过应用多个随机三角和线性方程生成连续、波动和复杂的曲线,生成致密层、断层和盐体模型。因此,以这些方式创建的随机速度模型或多或少地受到选择偏差的影响(即,速度模型不能合理地表示目标区域,因为它们不是从相同的分布绘制的)。因此,将随机速度模型划分为训练、验证和测试数据集来训练和测试CNN,由于随机速度模型的选择偏差,不能保证准确预测目标区域中的真实速度模型。

        Kazei等人(2021年)提出通过应用复杂的图像处理程序(翻转、裁剪、失真等)从引导模型生成随机速度模型。然后,训练CNN以近似从完整地震波形到1D垂直速度剖面的映射,与2D速度模型相比,1D垂直速度剖面更随机地采样和选择(具有更少的选择偏差)。因此,他们的方法可以有效地训练一个过拟合程度较低的CNN来反演速度模型剖面。基于给定的起始速度模型而不是随机速度模型集来训练CNN的另一种方法是将CNN应用为函数逼近器以重新参数化,然后替换给定的起始速度模型以自动捕获其显著特征作为CNN域FWI中的先验信息(He & Wang,2021; Wu & McMechan,2018,2019; Zhu等人,2022年)。然后,CNN域FWI迭代地将反演主要约束到CNN隐藏层中的这些捕获的特征,作为隐式正则化,以最小化数据残差。在反演之后,CNN准确地预测速度模型。尽管CNN域FWI不需要代表性的训练速度模型集,但需要起始速度模型,如传统的FWI和RWI所做的那样,起始速度模型中不太显著的特征(其在预训练步骤中不由CNN自动捕获)不能被CNN域FWI准确地反演。因此,CNN域FWI比FWI或RWI更适合于针对具有显著特征(例如,盐体)。

        在本文中,我们提出了一个基于卷积神经网络的反射波形反演(CNN-RWI),迭代应用CNN预测速度模型从原始的起始速度模型和相应的原始偏移图像,这两者形成的先验信息顺序地通过地震预处理获得。CNN-RWI主要包含两个循环。内循环是CNN训练步骤,其迭代地训练CNN以从对应的训练起始速度模型和训练迁移图像近似训练速度模型。提出的CNN-RWI和传统的CNN应用程序之间的主要区别是预测速度模型的外循环。预测速度模型的传统CNN应用程序仅遵循三个连续的主要步骤:训练模型准备,CNN训练和CNN预测。相比之下,CNN-RWI的外循环迭代地遵循这三个顺序步骤,直到CNN-RWI收敛(例如,数据或传播时间误差被最小化)。具体地,在CNN-RWI的外循环中,通过应用所提出的分组方法来划分在先前迭代中获得的CNN预测的速度模型以生成随机训练速度模型,来准备训练速度模型。然后,在对最新生成的随机训练速度模型进行CNN训练之后,应用CNN从原始起始速度模型和对应的原始偏移图像再次预测未知的真实速度模型。然后,在下一次迭代中,将对CNN预测的速度模型进行分区以准备训练速度模型。双循环机制使CNN-RWI能够动态调整选择偏置训练速度模型,以从原始起始速度模型和相应的原始偏移图像逐渐预测更准确的速度模型。因此,CNN-RWI不是像FWI或RWI那样最小化数据残差,而是以迭代深度学习的方式将训练速度模型以及CNN预测的速度模型的分布动态地移向未知的真实速度模型,以隐式地减少选择偏差。

        CNN-RWI与FWI、RWI、预测速度模型的CNN应用和参数CNN域FWI相比具有以下优点。首先,对于更深的速度模型的反演,FWI和RWI主要更新界面和背景速度,分别,而CNN-RWI有效地更新它们。其次,FWI和RWI都依赖于较低频率的数据,使得走时误差在半个周期内,以避免在数据拟合过程中的周期跳跃,而CNN-RWI更喜欢较高频率的数据,以获得较高分辨率的偏移图像作为CNN输入数据,因为CNN-RWI不需要数据拟合过程。第三,用于预测速度模型的常规CNN应用可以被视为CNN-RWI的特殊情况,其在外循环中仅具有一次迭代,以训练CNN以准确地近似训练模型,其通常不能表示目标区域中的未知真实的速度模型(并且因此表现出选择偏差)。最后,参数CNN域FWI更准确地反演了起始速度模型中的显著先验特征,但未能有效地应用具有显著反射主导界面的FWI梯度来更准确地更新速度模型的更深部分。相比之下,基于CNN的RWI结合了起始速度模型和偏移图像中的先验信息,以准确预测所有深度的速度模型。

        本文的结构如下。我们首先介绍了CNN-RWI算法的流程图。然后在合成实施例部分中,将CNN-RWI与由PySIT工具提供的共轭梯度FWI(CG-FWI)进行比较(Hewett等人,2020),以反演Marmousi 2 P波速度模型的三个不同部分(Martin等人,2006年)。在这些裁剪的Marmousi 2模型上的合成实例表明,CNN-RWI优于CG-FWI来反演速度模型。合成的例子还表明,CG-FWI的第二遍,需要帮助CNN-RWI进一步反演的速度模型的较浅的部分,这是部分省略的CNN-RWI在第一遍。

二、Methodology of CNN-RWI—CNN-RWI方法

        CNN-RWI是一种迭代反演,利用CNN从初始速度模型和相应的原始偏移图像重复预测速度模型。假设初始速度模型是通过反射层析成像或基于偏移速度分析(MVA)从观测数据中获得的。通过(RTM)可以得到相应的原始偏移图像I(x),其中图像由下式给出:

I(x)=\int_{0}^{T}\bigcup_{s}^{}(x,t)\bigcup_{r}^{}(x,t)dt

        其中,\bigcup_{s}^{}(x,t)\bigcup_{r}^{}(x,t)分别是在x的位置和时间t处传播到起始速度模型的源波场和接收器波场。T是最大时间。

        图1显示了CNN-RWI的工作流程,其中包含外部和内部循环。

        内部循环是CNN训练,迭代更新CNN以适应训练速度模型(图1中的红框)。

        其中外循环(见图1桔色箭头)又可分为五个部分:

  • (1)准备随机速度模型作为训练标签(见图1紫色框);
  • (2)CNN训练(即内循环;见图1红色框);
  • (3)CNN预测(见图1黑色框);
  • (4)误差估计(见图1 Error evaluation);
  • (5)动态调整训练样本集(见图1向上的桔色箭头)。

        在CNN-RWI开始时,一旦计算出初始速度模型和对应的原始偏移(RTM)图像,将其固定,并在每次迭代时反复输入到CNN中,,在CNN的预测部分(黑框)中预测未知的真实速度模型。由于CNN预测的CNN输入数据在每次迭代时都是固定的,所以CNN-RWI的主要任务是动态调整选择偏差较小的训练速度模型来更新CNN。因此,CNN-RWI的核心思想是,训练速度模型对未知真实速度模型的表达越好,CNN训练部分的过拟合就越少,CNN对未知真实速度模型的预测就越好。

图1 CNN-RWI算法流程图。右侧红框和黑框内子流程图为相应左边红框和黑框的细节部分

2.1 Preparation of the Training Velocity Models—训练速度模型的准备

        CNN—RWI的一个关键是从先验速度模型(紫色框)中准备训练模型。对于CNN-RWI的第一次迭代,最佳先验速度模型是初始速度模型,它通常通过对观测到的地震速度进行预处理(如:走时层析成像或MVA)来预估未知的真实速度模型。在接下来的CNN-RWI迭代中,最佳先验速度模型成为最新的CNN预测速度模型。

        训练速度模型的准备包括两个主要过程:从先验模型生成模型基础,从模型基础生成训练速度模型。通过将先验速度模型分割成空间相关和连通的特征来创建模型基础。然后,利用模型基础建立训练速度模型。

2.1.1. Generation of the Model Basis From a Prior Velocity Model—从先验速度模型生成模型基础(未完)

        文章提出了一种空间约束的分层K-means分割方法,将速度模型分割为空间相关和连接的特征,作为模型的基础。McMechan(1983a)提出了区分图像并寻找局部最大值以包裹偏移的公共中点剖面。因此,该方法分割的特征数量取决于图像的梯度。传统的k-means方法(Forgy,1965; Lloyd,1982; MacQueen,1967)也不适用于分割,因为传统的k-means方法不能保证空间连续性。所提出的parcellation方法结合了k-means与区域增长,在分裂(自上而下)的层次结构。

        一个临界超参数是最小特征尺寸的阈值,它是决定特征是否需要进一步细分的标准。该阈值在衡量每个特征的均匀性和最小尺寸方面起着关键作用。阈值应设置为最大化特征的数量,而不会产生无意义的小的散射区域。本文所提出的分割方法的数学解释被分成以下七个步骤,并且在算法1的伪代码中描述。

  • 步骤一:K-mean聚类的应用

         应用k-means聚类方法,k = 2,将先验速度模型V划分为两个不相交的聚类C1和C2,其中:

V=C_1{}\cup C_2{},C_1{}\cap C_2{}=\varnothing

        通过最小化损失函数,获得两个不相交的聚类C1和C2。

算法1:空间约束分裂层次k-means
procedure 当模型的大小(网格点数量)小于阈值时,设置一个阈值作为停止标准。
空间约束k-means(模型)
    if 模型大小≥阈值,则:
        1.根据速度分布,应用k=2时的k-means将模型划分为两个聚类簇a和b

        2.分别找出聚类a和b最大区域x和y

        3.让区域x和y竞争合并模型中的其它区域
        4.根据区域x和y将模型拆分为子模型A和子模型B
        5.空间约束k-means(子模型A)
        6.空间约束k-means(子模型B)
     end if
        7.将模型保存为叶子节点(模型基础中的一个组件)
end procedure

D(V)=\sum_{i=1}^{2}\sum_{p\in C_{i}}\left \|v(p)-\mu _{i} \right \|^{2}

         其中,v(p)表示模型网格点p处的速度,而ui表示Ci中速度的平均值。K-means聚类方法基于速度分布将速度模型V划分为聚类C1和C2,而不考虑空间关系和连接。因此,集群C1和C2可以包括许多空间上不相关和不连通的小区域,应当避免这些小区域在相应的地震数据中产生不想要的散射伪影。

  • 步骤二:找出最大的区域

        通过独立地计算每个聚类C1和C2中的每个空间上不相交的区域中的网格点的数量,相应的最大空间上连接的区域被分别选择为S1和S2。

  • 步骤三:应用区域增长

        速度模型V被重新划分为三个不相交的簇V={S0,S1,S2},其中S_{1}\subseteq C_{1}S_{2}\subseteq C_{2}是步骤二中选择的区域,并且S_{0}=V\cap S_{1} \cup S_{2},然后,基于曼哈顿距离D_{m},将每个模型网格点p\in S_{0}合并到S_{1}S_{2}中,使用:

p\in \begin{Bmatrix} S_{1},if D_{m}(p,S_{1})\leq D_{m}(p,S_{2}) \\ S_{2},if D_{m}(p,S_{1})> D_{m}(p,S_{2}) \end{Bmatrix}

        其中,D_{m}(p,S_{i})(对于i\in \begin{Bmatrix} 1,2 \end{Bmatrix})被定义为(对于2-D模型):

D_{m}(p,S_{i})=min_{s\in S_{i}}\left | x_{p}- x_{s}\right |+\left | y_{p}- y_{s}\right |

        其中,x和y是水平和垂直坐标,S表示簇S_{i}中的网格点(对于i\in \begin{Bmatrix} 1,2 \end{Bmatrix})。

        区域生长步骤通过迭代合并分别与聚类S_{1}S_{2}中的每一个相邻的模型网格点(p\in S_{0})来数值地实现。

  • 步骤四:将速度模型拆分为两个子模型

        在区域生长完成之后,速度模型V最终被分割为两个空间相关且连接不相交的子模型(S1和S2)。

V=S_1{}\cup S_2{},S_1{}\cap S_2{}=\varnothing

  • 步骤五和六:递归地包裹子模型 

         然后,空间相关且连接的不相交子模型S1和S2被分别递归地分割,直到子模型大小(待分割的子模型中的网格点的数量)小于阈值(最小容许特征大小)。

  • 步骤七:保存特征作为模型基础的元件

        如果子模型大小(要分割的子模型中的网格点的数量)小于阈值(最小容许特征大小),则子模型将不会被递归地分割。相反,它将被保存为模型基础的组件(即,它变成分层树中的叶节点)。通过步骤1-7中的递归分块,速度模型V必然被分块为许多空间相关且连接的不相交特征(子模型)作为模型基础:

V={S0,S1,...,Sn}

        其中n是特征的数量。

 S_{i}\cap S_j{}=\phi,if i≠j

2.1.2. Generation of the Training Velocity Models From the Model Basis—从模型基础生成训练速度模型

        在获得模型基{S1,S2,...,Sn}之后,可以基于模型基的每个分量中的速度的平均值E(Si)和方差Var(Si)创建训练速度模型,如:

E(S_{i})=\frac{1}{N_{i}}\sum_{s\in S_{i}}^{}s

         和:

Var(S_{i})=E\begin{Bmatrix} \left [ S_{i}-E(S_{i})^{2} \right ] \end{Bmatrix}=\frac{1}{N_{i}}\sum_{s\in S_{i}}^{}\left [ s-E(S_{i})^{2} \right ]

         其中Ni是每个组件(地块)Si中的网格点的数量。然后,通过将从模型基础中的组件的速度分布中提取的随机值分配给它们自身,获得随机训练速度模型集:

        每个特征分配随机值(等式11)不仅增加了训练速度模型的多样性,而且还创建了具有许多不同均匀层(每个均匀层具有均匀速度)的训练速度模型。任意两个相邻的均匀层之间的速度对比在训练速度模型中产生具有不同反射率的反射体,这确保了对应的训练地震数据包含反射同相轴,就像观测数据一样。 

2.2. CNN Training—CNN训练

        在准备阶段(第2.1小节)中创建训练速度模型之后,从对应的速度模型集合中计算地震数据。然后还要经过一致的预处理(比如,反射层析成像或基于偏移速度分析MVA)得到初始训练速度模型集合。因此,以与从观测数据获得初始速度模型V0和RTM图像I0相同的方式,从合成数据获得初始训练速度模型集合和训练RTM图像集合。

2.3. CNN Prediction—CNN预测

        在CNN预测中(图1中的黑框),原始起始速度模型V_{0}和对应的RTM图像I_{0}的组合被输入到经训练的CNN以预测未知的真实速度模型:

V_{p}=G(V_{0},I_{0};w^{*})

        其中,Vp是CNN预测的速度模型。

2.4. Error Evaluation—误差评定

        在通过CNN预测速度模型Vp之后,需要进行正演建模以获得用于误差评估的相应合成地震数据(例如,计算最小二乘数据残差)。与通过在每次迭代时最小化数据误差来更新速度模型的常规FWI不同,CNN-RWI计算用于CNN预测的速度模型Vp的准确性的间接评估的数据误差。如果从CNN预测的速度模型Vp获得的数据误差不满足收敛标准(例如,最小数据误差的阈值),则CNN预测的速度模型Vp将成为最新生成的先验模型,其将被分组以生成训练速度模型集(子部分2.1),用于下一次迭代。

2.5. Dynamic Adjustment of the Training Data Set—训练数据集的动态调整(未完)

        上文第2.1-2.4小节介绍了CNN-RWI外环中的四个主要部分(图1)。除了从先验速度模型生成训练速度模型(第2.1小节)中固有的新奇之外,CNN-RWI的另一个关键新颖性是在外部循环中的每次迭代时基于最新的先验速度模型对训练数据集进行动态调整(由图1中的橙子箭头指示)。最新的先验速度模型被定义为第一次迭代时的原始起始速度模型V0,或者在随后的每次迭代中获得的CNN预测的速度模型Vp。

三、Numerical Examples—数值算例

图2 Marmousi2 P波速度模型。Marmousi2速度模型的三个不同部分(黑色、红色和青色框中)是测试1和2中使用的三个真实速度模型(A-C)。 

         在本节中,Marmousi2 P波速度模型的三个部分,网格256×256,用作真实速度模型A、B和C(图2中黑色、红色和青色的区域)。对三个真实速度模型A、B和C的合成测试被分为测试1和测试2,分别由3×3高斯滤波器平滑400和1600次迭代的初始速度模型,以减轻预处理(如,走时成析成像或MVA)。测试1和2比较了CNN-RWI与CG-FWI的性能和灵敏度,CG-FWI由PySIT公司提供(Hewett等人,2020年),以不同的精度的启动速度模型。模型的垂直和水平范围为3.2 km,空间采样增量为0.0125 km。将原始Marmousi 2 P波速度模型裁剪为三个平方速度模型A、B和C的原因是为了评估CNN-RWI和CG-FWI的性能,以有效且高效地更新来自反射数据的速度模型的较深部分。为了模拟观测数据,每隔0.125 km设置25个主频率为20 Hz(CG-FWI为7 Hz作为参考组)的爆炸Ricker小波源,每隔0.0125 km设置256个接收器。所有的信号源和接收器都在地面上。记录时间为3.5 s,时间采样增量为1.0 ms。

        在这里,本文使用U-net CNN(图3)(Ronneberger等人,2015)来预测速度模型,经验表明,该模型是用于生成任务的强大且有效的CNN架构(Ronneberger等人,2015; Yang & Ma,2019)。CNN架构(图3)中的下采样和上采样分别通过卷积和转置卷积操作实现,步幅为2。

        由于本文的主要贡献是CNN-RWI算法(第2节中的方法和图1中的工作流程),而不是CNN架构的进步,因此也可以使用其他CNN架构,只要它们可以准确预测CNN训练中的训练速度模型(第2.2小节)。

图3 U-net卷积神经网络架构。黑色层是输入层,其中起始速度模型和逆时偏移图像被连接为两个通道。红色层是输出层,它在卷积神经网络(CNN)训练(公式13)或CNN预测(公式14)中输出速度模型。下采样和上采样分别由卷积和转置卷积实现,步幅=2。 

       为了在每次迭代时准备具有24个样本的训练模型集,应用空间约束、分割、分层k均值分组方法(第2.1.1小节),以分别从第一次迭代的初始速度模型或从后续迭代的CNN预测速度模型构建模型基础。这种分割方法的阈值设置为655,即模型网格点总数(256 × 256 = 65536)的1%。阈值应设置为最大化模型基础中的组件数量(分层树中的叶节点的数量),并限制不创建无意义的小散射区域。这个阈值的另一个考虑因素是计算成本。 阈值越小,分层树的深度就越大,因此以指数方式增加了将子模型进一步打包成更小特征作为模型基础的组件的计算时间。所以,我们将阈值设置为655,即模型网格点总数(65536)的百分之一,以平衡模型基础的质量和计算成本。对于包含大规模盐体或储层的速度模型,CNN域FWI(He & Wang,2021; Wu & McMechan,2018,2019; Zhu等人,2022)以将反演主要集中到初始速度模型中的先验特征(例如,盐体、储层等)因为正则化可能比CNN-RWI更合适。CNN域FWI和基于CNN的RWI之间的比较超出了本文的范围,因此留待将来比较。

         CNN-RWI的快速收敛性在 16 次迭代中,从原始起始速度迭代预测速度模型及其对应的原始迁移图像。然后,使用这些速度模型作为 CG-FWI 的起始速度模型,在第二次中再进行 39 次迭代。因此,基于与CNN-RWI相同的初始速度模型,通道一中的CNN-RWI和通道二中的CG-FWI(55次迭代)的总迭代次数是CG-FWI(110次迭代)的一半。

3.1. Test 1: Synthetic Tests on the More Accurate Starting Velocity Models

        图4直观地比较了两遍CNN-RWI(图4d-4i)和一遍CG-FWI(图4j-4o)反演的速度模型,通过使用初始速度模型(图4a-4c),通过400次3 × 3高斯滤波器的应用获得,以平滑图2中黑色、红色和青色框中的真实速度模型A、B和C。图4d-4f是第16次迭代时的CNN-RWI反演速度模型,基于主频为20 Hz的震源,使用初始模型(图4a-4a)作为第1遍中的起始速度模型。图4g-4i显示了第39次迭代时的CG-FWI反演速度模型,基于主频为20 Hz的震源,使用CNN-RWI反演速度模型(图4d-4f)作为第2遍中的起始速度模型。图4j-4l和4m-4o显示了第110次迭代时的CG-FWI反演速度模型,分别基于主频为20和7Hz的震源,使用初始模型(图4a-4a)作为起始速度模型。图5显示了图4中的模型与相应的真实速度模型A、B和C(图2)之间的相应模型残差。图6d-6o使用图4d-4o中的反演速度模型与初始速度模型(图4a-4c)之间的模型残差来视觉分析初始速度模型的哪些部分分别由CNN-RWI和CG-FWI主要更新。图7直观地比较了图4中速度模型的RMS速度模型误差,测试1中每个深度的所有位置。

        图4和图5直观地证明了两遍CNN-RWI对速度模型的反演(第一遍为图4d-4f和5d-5fd,第二遍为图4g-4 i和5g-5i)比CG-FWI更准确(图4j-4o和5j-5o分别为20和7Hz的结果),尤其是在速度模型的较深部分。图6d-6f显示出了第1遍中的CNN-RWI在几乎所有深度处将速度模型(图4d-4f)中的背景速度和界面显著地更新到正确的方向。通过比较,CG-FWI主要更新较浅的背景速度以及所有深度的界面(图6a-6c和6j-6o),这与FWI梯度的理论和数值分析一致(Alkhalifah,2014; Wu & Alkhalifah,2015; Xu等人,2012; Yao等人,2020年)。图7定量地说明了在通道1中由CNN-RWI反演的速度模型(图7中的红线)在几乎所有深度处具有比由CG-FWI反演的速度模型(图7中的黑色和洋红色线)相对更低的RMS模型误差。通道1中CNN-RWI反演速度模型的模型误差相对较低(图7中的红线),导致通道2中CG-FWI反演速度模型的RMS模型误差最小(图7中的蓝线)。

        图8基于均方根模型误差和归一化数据误差,定量比较了CNN-RWI和CG-FWI。与通道1(图8a-8c中的红线)中由CNN-RWI反演的速度模型(急剧减少和快速收敛)相比,对于20和7赫兹数据(图8a-8c中的黑色和洋红色线),由CG-FWI反演的速度模型逐渐减小并缓慢收敛到相对更高的均方根模型误差。图8a-8c中的青色点对应于在CNN-RWI的前16次迭代中的24个训练速度模型的均方根模型误差。它验证了CNN预测的速度模型在每一次迭代中都比训练速度模型更准确的假设,这是CNN-RWI迭代预测越来越准确的速度模型的关键动机。图8a和8d示出了用于7赫兹情况的CG-FWI(图8a和8d中的洋红色线)在第46次迭代(由图8a和8d中的洋红色圆圈指示)处陷入坏的局部最小值,以通过错误地增加位于图4m中深度2.1公里以上和以下的两个突出层中的速度来继续最小化数据误差(图8d中的洋红色线)。因此,随着CG-FWI(图8a和8d中的洋红线)中数据误差的减少,模型误差从第46次增加到第110次。与之相反,用CNN-RWI-反速度模型作为初始速度模型,在PASS 2中由CG-FWI反演的速度模型逐渐变得更精确,因此RMS模型误差和归一化数据误差在每次迭代(8a和8d中的蓝线)都减小了。

        图8显示CNN-RWI(图8a-8c中的红线)的RMS模型误差在最初的几次迭代中急剧减少,然后以轻微的波动收敛,而CNN-RWI(图8d-8f中的红线)的归一化数据误差急剧减少,但随后以严重的波动收敛。这些波动行为不一致的主要原因是CNN-RWI应用了在每次迭代(子节2.5)从动态可调整的训练数据集中逐渐学习的近似空间映射来预测速度模型,而不是像FcWI那样稳定地最小化数据误差。当CNN预测的速度模型不太准确时,训练数据集中的空间映射(第2.2小节)有效地指导CNN预测更准确的速度模型,这对应于RMS模型误差和归一化数据误差(图8中前几次迭代中的红线)的急剧减少。这些更精确的速度模型仍然包含局部区域速度的一些变化,由于高度非线性的CNN对速度的预测不完善,这些变化的速度和位置在每次迭代中都可能改变。随着CNN预测速度模型的平均精度显著提高,这些局部速度误差和相应的数据误差不再占主导地位,因此均方根模型误差和归一化数据误差在最初的几次迭代中都不会波动。然而,当CNN预测的速度模型收敛时,CNN预测的速度模型的平均精度不会大幅提高。因此,CNN预测速度模型中局部误差的方差(轻微起伏)在影响数据误差(剧烈起伏)中起主导作用。由于地震数据对模型误差非常敏感,数据误差的波动要比模型误差大得多。

        比较了CNN-RW I和CG-FW I在不同模型(图4-8)上的性能,结果表明,对于几乎所有深度的速度模型(特别是背景速度模型),CNN-RW I在速度模型(尤其是背景速度模型)上的性能都优于CG-FW I。相比之下,CG-FWI有效地更新了沿俯冲和折射波较浅的背景速度模型。深部速度模型中的背景速度和界面可以通过CG-FWI进行更新,但精度较低,甚至可能被错误的方向更新。通过在PASS 2中应用CG-FWI继续对速度模型进行反转,而PASS 1中的CNN-RWI可以更好地恢复速度模型,CG-FWI可以有效地更新界面,但不能更新背景速度模型(图6a-6c)。因此,对于几乎所有深度的所有速度模型,CNN-RW I比CG-FW I更准确地反演速度模型(图4-8)。

3.2. Test 2: Synthetic Tests on the Less Accurate Starting Velocity Models—试验2:不太精确的初始速度模型的综合试验

       为了分析CNN-RWI和CG-FWI的性能对起始速度模型的准确性的灵敏度,使用较不准确(较平滑)的初始速度模型(图9a-9 c)并遵循与测试1中完全相同的测试和比较程序,对两种方法进行测试以反演速度模型。初始速度模型(图9a-9 c)通过1600次应用3 × 3高斯滤波器来平滑图2中黑色、红色和青色框中的真实速度模型A、B和C而获得。与测试1中包含显著特征的更准确的起始速度模型(图4a-4c)相比,测试2中的初始速度模型(图9a-9 c)过于平滑,无法包含显著特征。

        类似于测试1中的结果,CNN-RWI优于CG-FWI(在20和7 Hz两者下)来反演速度模型(比较图9d-9 f与图9 j-9 o)。然而,测试2(图9)中的所有反演结果都不如测试1(图4)中相应的反演结果准确。图4和图9的比较表明,CNN-RWI和CG-FWI都对起始速度模型的准确性敏感。

        图10 d中的残差模型显示,CNN-RWI在正确的方向上稍微更新了位于2.1 km深度以上和以下的两个突出层。相比之下,图10 j和10 m显示CG-FWI错误地更新了速度模型中的这些突出层(图9 j和9 m)。每个深度所有位置的RMS模型误差(图11 a)定量验证了20和7 Hz CG-FWI的RMS模型误差与其他参数相比最高(比较图11中箭头1-4所示的RMS误差)。相比之下,在通道1中由CNN-RWI反转的这两个突出层以及在通道2中由CG-FWI反转的这两个突出层(分别为图11 a中的红线和蓝线)是最低的。实际上,图9-11说明了在测试2中,在第1遍中由CNN-FWI反演的速度模型以及在第2遍中由CG-FWI反演的速度模型是几乎所有深度处的最准确结果。

        图12显示了测试2中CNN-RWI和CG-FWI的RMS模型误差和归一化数据误差与测试1(图8)中的趋势相似,但测试2中的所有模型和数据误差水平均高于测试1。CG-FWI反演的速度模型的速度模型误差增加(20和7 Hz情况),而相应的数据误差减小,就像测试1中的那些一样(比较图8a和12 a以及图8d和12 d中的黑色和洋红线)。与CNN-RWI对应的RMS模型误差和归一化数据误差显著降低,并收敛到高于测试1的误差水平(比较图8和图12中的红线)。模型和数据误差曲线的波动分别与测试1中的波动相似(比较图8和图12)。模型和数据误差曲线趋势方向相反的根本原因已在前一小节中分析,因此此处省略。

        使用不同的初始速度模型(测试1中的图4a-4c和测试2中的图9a-9 c)对Marmousi模型的三个部分(图2)进行的合成测试表明,CNN-RWI和CG-FWI的性能对真实速度模型的复杂性和相应初始速度模型的准确性都很敏感。合成试验1和2还表明,CNN-RWI反演速度模型比CG-FWI更准确,几乎在所有深度。

四、Discussion—讨论

        我们说明了CNN-RWI如何从原始起始速度模型和相应的偏移图像迭代地预测越来越准确的速度模型,而不需要传统FWI中的数据拟合过程(例如,CG-FWI)。CNN预测的速度模型的最高精度部分地受到原始起始速度模型的精度的限制,原因有两个。首先,所使用的原始起始速度模型越精确,原始偏移图像将越精确。它们都减少了从自身到未知真实速度模型的空间映射的不适定性,这使得CNN能够更准确地预测速度模型(第2.3小节)。第二,更精确的原始起始速度模型包含更丰富和精确的用于生成模型基础的先验信息,这增加了准确性(即,减少选择偏差)。因此,CNN-RWI显然取代了传统FWI中的数据拟合过程,通过CNN训练和预测。然而,CNN-RWI需要起始速度模型中的准确先验信息来减少映射的不适定性,并为CNN训练生成更准确的模型基础,就像传统FWI需要更好地解决循环跳跃问题一样。在合成试验1和2中,通过应用3 × 3高斯滤波器分别对真实速度模型进行400次和1600次迭代来平滑,以模拟预处理,从而获得起始速度模型。综合测试1和2清楚地表明,无论是传统的FWI和CNN-RWI是敏感的起始速度模型的准确性,以及未知的真实速度模型的复杂性。CNN-RWI与现有技术的FWI(诸如正则化FWI(Esser等人,2018; Guitton,2012; Peters & Herrmann,2017),超出了本文的范围。因此,留待今后研究。

        在从先验速度模型生成模型基础的过程中(第2.1.1小节),所提出的空间约束的划分分层k均值分割方法与常规k均值聚类之间的主要差异之一在于:所提出的分割方法保留了以下之间的结构关系以及每个特征内的连通性,更合理、更适合于训练速度模型的建立。相比之下,传统的k-means聚类方法(Forgy,1965; Lloyd,1982; MacQueen,1967)可能包含许多空间上不相关和不连通的区域,这些区域成为不需要的散射点。另一个主要区别是分组的目的。传统的k-means聚类旨在通过最小化稀疏模型和密集模型之间的差异,将密集模型(具有相对大量的参数)聚类并压缩为稀疏模型(具有相对较少的参数)。因此,稀疏模型,压缩传统的k-means聚类方法,仍然是一个精确的近似和替代密集参数模型。相比之下,CNN-RWI中聚类的目标是将先验速度模型分割成小特征作为模型基础,以创建具有不同均匀特征和尖锐边界的随机训练速度模型,作为先验速度模型的相对低维随机扰动。然后,这些训练速度模型用于表示CNN训练的未知真实速度模型。因此,训练速度模型,所提出的分割方法创建,被认为是极其有损和不可接受的稀疏模型在其重建和压缩方面,因为训练速度模型没有被优化以适应先验速度模型,而是根据先验速度模型创建随机扰动。

        在传统的FWI(例如,CG-FWI),由于数据失配在每次迭代时被最小化,归一化数据误差曲线通常减小。相比之下,CNN-RWI不需要像FWI那样最小化(数据)错拟合函数来更新速度模型。相反,初始速度模型(层析成像分量)和原始高分辨率偏移图像(偏移分量)被重复输入到CNN作为先验信息,以约束CNN基于这些先验信息以及从动态调整的训练数据集学习的空间映射来预测速度模型(第2.5小节)。然而,数据不拟合以及其他验证工具(例如,时间不匹配等)可以用作质量指标来分析CNN-RWI在每次迭代时的性能。

        所提出的空间约束的、分裂的、分层的k-means分割方法的计算成本可以被忽略,因为在每次迭代中,分割先前的速度模型以生成随机训练速度模型是非常快的。因此,CNN-RWI的计算成本主要取决于小训练数据集中的样本数量(例如,以上示例中的24个样本)以及获得训练速度模型和训练迁移图像以及CNN训练的效率。在使用合成数据的测试(测试1和2)中,24个样本被实验证明对于GPU环境中的CNN训练是足够的并且非常有效。如果在并行编程环境中获得训练偏移图像,则训练偏移图像的计算时间将近似等于一个偏移图像的计算时间,这将使偏移处理在每次迭代中效率最高。CNN-RWI最不确定的部分是用于在每次迭代中获得训练初始速度模型的过程。应用原始处理(例如,时间层析成像或MVA)以在每次迭代时获得训练初始速度模型是非常准确的,但耗时。相反,平滑训练速度模型以模仿原始处理以获得训练速度模型是非常快的,但不太准确。因此,开发一种更好的方法来平衡精度和计算成本以获得训练起始速度模型是一个关键问题,这需要解决将CNN-RWI应用于现场数据的问题,但超出了本文的范围。因此,留待今后研究。

        假设通过平滑训练速度模型获得用于训练的初始速度模型,则CNN-RWI(T_{CNNRWI})的计算时间为:

T_{CNNRWI}=(T_{migration}+T_{train})\times N_{samples}\times N_{iterations}

        其中,T_{migration}T_{train}分别是一个训练样本的偏移和CNN训练的平均时间;N_{samples}N_{iterations}分别是训练样本的数量和外循环中的迭代次数。在迁移和CNN训练的理想并行编程环境中,计算时间变为:

T_{CNNRWI}=(T_{migration}+T_{train})\times N_{iterations}

        其近似等于FWI(T_{FWI})的计算成本。

T_{FWI}=(T_{gradient}+T_{search})\times N_{iterations}

        其中,T_{gradient}是用于计算FWI梯度的计算时间,T_{search}是用于步长搜索的计算时间,其涉及多次正演建模以最小化合成地震数据与观测地震数据之间的数据残差;N_{iterations}是反演中的迭代次数。因此,在理想的并行编程环境中,CNN-RWI的计算时间近似等于FWI的计算时间。随着CNN-RWI收敛得更快(即,由于CNN-RWI的迭代次数更少),并且比FWI更准确地预测了速度模型(比较图8和图12),因此可以合理地假设CNN-RWI的计算时间相对小于FWI的计算时间。

五、Conclusion—结论

        本文提出了一种新的CNN-RWI方法来迭代预测更精确的速度模型。CNN-RWI包含内循环和外循环。内循环训练CNN,以根据训练初始速度模型和相应的偏移图像准确地预测训练速度模型。外循环迭代地使用CNN训练后CNN预测的最新先验速度模型,为下一次迭代的CNN训练创建更具代表性的训练数据集。从先前的速度模型的训练速度模型的创建是通过所提出的空间约束的、分裂的、分层的k-means分割方法来实现的。外循环迭代地改进训练速度模型,使CNN能够逐步预测更准确的速度模型。使用Marmousi 2 P波速度模型的三个部分的合成实例表明,CNN-RWI预测速度模型的浅部和深部比CG-FWI更准确。CNN-RWI和CG-FWI都对起始速度模型的准确性敏感。

Data Availability Statement—数据可用性声明

  • 数据:https://doi.org/10.5281/zenodo.6578811
  • 代码:https://github.com/YulangWu/CNN-RWI

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/268273.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

1.数字反转

题目 AC import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();if(n>0) {StringBuilder str new StringBuilder();str.append(n);StringBuilder str1 str.reverse();String st…

视频号小店无货源怎么做?难不难?一篇文章告诉你答案!

大家好,我是电商糖果 视频号从去年开始做电商,就有朋友问过糖果可以做无货源模式吗? 糖果做无货源电商已经七年了,做过天猫,京东,闲鱼,抖音小店。 根据糖果这些年做电商总结出来的经验&#…

机密计算容器前沿探索与 AI 场景应用

作者:壮怀、朱江云 企业与个人对数据隐私保护日益关切,从数据,网络的可信基础设施扩展到闭环可信的计算基础设施,可信的计算,存储, 网络基础设施必定成为云计算的标配。 机密计算技术应运而生,…

EFCore8分析类图映射到代码和数据库的示例

借用微软EFCore8官方的示例,我画了张类图: blog(博客)与Post(文章)是1对多的关系,显式表达出两者间是双向导航:双方都可见。 Post(文章)与Tag(标…

python(上半部分)

第一部分 1、input()语句默认结果是字符串 2、type()可以判断变量的类型 3、input()输出语句 (默认为字符串类型) 4、命名规则:中文、英文、数字、_,数字不可开头,大小写敏感。 5、 %s:将内容转换成…

Java期末复习题之选择题理论综合

点击返回标题->23年Java期末复习-CSDN博客 选择题考察内容为—— 构造函数的描述,在文件中写入字符而不是字节选用什么类,java源文件import, class定义以及package的顺序,静态成员变量作用域,非抽象子类的接口实现,…

实现打印一个数字金字塔。例如:输入5,图形如下图所示

1*12**123***1234**** 12345*****#include<stdio.h> void main() {int i,j,l,n,k;scanf("%d",&n);/**********Program**********//********** End **********/ } 当我们拿到这个题目的时候可以看见题目给了我们五个变量&#xff0c;其中n是我们输入的数…

Elasticsearch 写入优化探索:是什么影响了refresh 耗时?

1、问题背景&#xff1a; 数据写入后&#xff0c;refresh耗时过长&#xff0c;能达到1s-5s。 想通过测试&#xff0c;探索确认影响refresh的因素&#xff0c;比如&#xff1a;写入操作是新增还是更新&#xff0c;deleted文档占比是否有影响&#xff0c;是否有其他索引配置&…

一、网络ensp安装

一、网络ensp安装https://blog.csdn.net/G_GUi/article/details/135176493 文章目录 一、下载4个软件安装二、工具栏常用图标 一、下载4个软件安装 前面3个软件必须要安装&#xff0c;不然用不了ensp https://pan.baidu.com/s/1kV7cL–BEbgANwSrZJ5t1Q?pwdqqqq 二、工具栏常…

【XML】TinyXML 详解(一):介绍

【C】郭老二博文之&#xff1a;C目录 1、简介 优点&#xff1a; TinyXML 是一个简单、小型的 C XML 解析器&#xff0c;可以轻松集成到项目中。 TinyXML 解析 XML 文档&#xff0c;并根据该文档构建可读取、修改和保存的文档对象模型 (DOM) TinyXML 是在 ZLib 许可下发布的&a…

AI一键注释代码、阅读整个项目、转换编程语言。已开源!

获取github源码地址和国内url、key方式&#xff1a;在文章底部 大家好今天给大家介绍一款开源项目&#xff0c;这个项目是由渡码维护的&#xff0c;这个项目支持自己的大模型和使用openai两种方式&#xff0c;本文章介绍使用openai的方式&#xff01; 使用过程中发现两个问题…

Java 第16章 坦克大战1-2 思路整理

文章目录 1 绘制坦克坦克画板Panel画框Frame 2 让坦克动起来画板Panel 3 本章作业 1 绘制坦克 坦克 不同坦克有共同属性&#xff0c;可以先提取共同特征&#xff08;坐标位置&#xff09;作为父类&#xff0c;然后其他坦克类继承它。 画板Panel 有坦克在画板上显示&#xf…

四. 基于环视Camera的BEV感知算法-PETR

目录 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比5. PETRv2总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章——基…

[MySQL binlog实战] 增量同步与数据搜索~从入门到精通

学习基础知识&#xff0c;并落实到实际场景&#xff08;增量同步数据搜索&#xff09; 对基础知识不感兴趣的&#xff0c;可以直接跳到应用场景 文章目录 binlog是什么简介产生方式文件格式statementrowmixed 怎么办开启 binlog查看 binlog其他查看相关命令运维查看 binlog设置…

mysql8.x版本_select语句源码跟踪

总结 源码基于8.0.34版本分析&#xff0c;函数执行流程含义大致如下&#xff1a; do_command 方法从连接中读取命令并执行&#xff0c;调用 dispatch_command 对命令进行分发。dispatch_command 调用 mysql_parse 对命令进行解析&#xff0c;如果遇到一条语句用 ; 分隔多条命…

猫头虎带您探索Go语言的魅力:GoLang程序员必备的第三方库大盘点 ‍ ‍

猫头虎带您探索Go语言的魅力&#xff1a;GoLang程序员必备的第三方库大盘点 ‍ &#x1f680;&#x1f431;‍&#x1f4bb; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#x…

Netty Review - 深入探讨Netty的心跳检测机制:原理、实战、IdleStateHandler源码分析

文章目录 概述心跳检测Code模拟心跳超时正常情况 IdleStateHandler源码分析channelReadchannelActiveinitialize 概述 心跳检测 Netty 的心跳检测机制是一种用于保持网络连接活跃的机制&#xff0c;它通过定期发送和接收特定的消息&#xff08;心跳包&#xff09;来确保客户端…

Java复习二—CH3-Exception 、CH4-I/O

CH3 Java Exception (异常) 3.1 Exception&#xff08;异常&#xff09;和 Error&#xff08;错误&#xff09; 异常能被程序本身可以处理&#xff0c;错误是无法处理 大多数错误与代码编写者执行的操作无关&#xff0c;而表示代码运行时 JVM 出现的问题 异常发生的原因有很…

电子科大软件系统架构设计——软件建模详细设计

文章目录 软件建模详细设计概述软件建模详细设计目标软件建模详细设计原则开闭原则里氏 (Liskov) 替换原则依赖倒置原则接口分离原则单一职责原则最少知识原则&#xff08;迪米特法则&#xff09;高内聚原则松耦合原则可重用原则 软件建模详细设计内容 UML 软件静态结构视图建模…

现代控制理论-李雅普诺夫

现代控制理论-李雅普诺夫 单输入单输出系统&#xff08;BIBO&#xff09;的系统函数如下&#xff1a; 则&#xff0c;该系统的能控标准型&#xff08;能空性&#xff09;为&#xff1a; 能观性&#xff1a; 李雅普诺夫下的稳定性&#xff1a; 李雅普诺夫下的渐进稳定性&a…
最新文章