【医学图像分割 2024】VM-UNet

文章目录

  • 【医学图像分割 2024】VM-UNet
    • 摘要
    • 1. 介绍
    • 2. 预备知识
    • 3. 方法
      • 3.1 VM-UNet
      • 3.2 VSS Block
      • 3.3 损失函数
    • 4. 实验
      • 4.1 数据集
      • 4.2 实现细节
      • 4.3 主要结果
      • 4.4 消融实验
    • 5. 结果

【医学图像分割 2024】VM-UNet

论文题目:VM-UNet Vision Mamba UNet for Medical Image Segmentation

中文题目:VM-UNet:医学图像分割的Mamba视觉UNet

论文链接:https://arxiv.org/abs/2402.02491

论文代码:JCruan519/VM-UNet: This is the official code repository for “VM-UNet: Vision Mamba UNet for Medical Image Segmentation”. (github.com)

论文团队:上海交通大学

发表时间:

DOI:

引用:

引用数:

摘要

在医学图像分割领域,基于cnn和基于transformer的模型都得到了广泛的探索。然而,CNN在远程建模能力方面表现出局限性,而Transformer则受到二次计算复杂性的阻碍。最近,以Mamba为例的状态空间模型(SSMs)作为一种很有前途的方法出现了。它们不仅在远程相互作用建模方面表现优异,而且保持了线性计算复杂度。本文利用状态空间模型,提出了一种用于医学图像分割的Ushape架构模型,命名为视觉MambaUNet (VM-UNet)。具体来说,引入了视觉状态空间(VSS)块作为基础块来捕获广泛的上下文信息,并构造了一个非对称的编码器-解码器结构。我们在ISIC17, ISIC18和Synapse数据集上进行了全面的实验,结果表明VM-UNet在医学图像分割任务中具有竞争力。据我们所知,这是第一个基于纯ssm模型构建的医学图像分割模型。我们的目标是建立一个基线,并为未来更高效和有效的基于ssm的细分系统的发展提供有价值的见解。我们的代码可在https://github.com/JCruan519/VM-UNet上获得。

1. 介绍

自动医学图像分割技术帮助医生更快地进行病理诊断,从而提高患者护理的效率。近年来,基于CNN的模型和基于Transformer的模型在各种视觉任务中表现出了显著的性能,特别是在医学图像分割方面。UNet作为基于CNN的模型的代表,以其结构简单、可扩展性强而闻名,后续的许多改进都是基于这种U型架构。TransUNet是基于Transformer的模型中的先驱,它在编码阶段首先使用Vision Transformer (ViT)[13]进行特征提取,在解码阶段使用CNN,显示出重要的全局信息获取能力。随后,TransFuse[36]采用了ViT的并行架构和CNN,同时捕捉本地和全球特征。此外,SwinUNet[9]将Swin-Transformer[21]与U型架构相结合,首次引入了纯基于Transformer的U型模型。

然而,基于CNN的模型和基于Transformer的模型都有固有的局限性。基于CNN的模型受到其局部接受域的限制,极大地阻碍了它们捕捉远程信息的能力。这通常会导致提取不充分的特征,从而导致次优分割结果。尽管基于transformer的模型在全局建模方面表现出优异的性能,但自注意机制在图像大小方面要求二次复杂度,导致计算负担很高[31,13],特别是对于需要密集预测的任务,如医学图像分割。目前这些模型的缺点迫使我们开发一种新的医学图像分割架构,能够捕获强远程信息并保持线性计算复杂度。

近年来,状态空间模型(SSM)引起了研究人员的极大兴趣。在经典SSM[18]研究的基础上,现代SSM(如Mamba[16])不仅建立了长距离依赖关系,而且在输入大小方面表现出线性复杂性。此外,基于SSM的模型在许多领域都得到了大量的研究,包括语言理解[17,16]、通用视觉[38,20]等。特别是,U-Mamba[24]最近引入了一种新的SSM-CNN混合模型,这标志着它在医学图像分割任务中的首次应用。segamba[35]在编码器部分采用SSM,而在解码器部分仍然使用CNN,提出了一种SSM-CNN混合模型用于三维脑肿瘤分割任务。虽然上述工作已经将SSM用于医学图像分割任务,但纯粹基于SSM的模型的性能还有待探索。

受VMamba[20]在图像分类任务中取得成功的影响,本文首次引入了Vision Mamba UNet (VM-UNet),这是一种纯粹基于ssm的模型,旨在展示其在医学图像分割任务中的潜力。具体来说,VM-UNet由三个主要部分组成:编码器、解码器和跳过连接。编码器由VMamba的VSS块组成,用于特征提取,以及用于下采样的补丁合并操作。相反,解码器包括VSS块和补丁扩展操作,以恢复分割结果的大小。对于跳跃连接组件,为了突出最原始的纯ssm模型的分割性能,我们采用了最简单的加法运算形式。

在器官分割和皮肤病变分割任务上进行了全面的实验,以证明纯ssm模型在医学图像分割中的潜力。具体来说,我们在Synapse[19]、ISIC17[8]和ISIC18[12]数据集上进行了大量的实验,结果表明VM-UNet可以达到有竞争力的性能。此外,重要的是要注意VM-UNet代表了纯基于ssm的分段模型的最基本形式,因为它不包括任何专门设计的模块

本文的主要贡献如下:1)提出了VM-UNet,首次探索了纯粹基于ssm的模型在医学图像分割中的潜在应用。2)在三个数据集上进行了综合实验,结果表明VM-UNet具有相当的竞争力。3)我们为纯ssm模型在医学图像分割任务中建立了基线,为开发更高效、更有效的基于ssm的分割方法提供了有价值的见解。

2. 预备知识

在现代基于SSM的模型中,即结构化状态空间序列模型(S4)和Mamba都依赖于一个经典的连续系统,该系统通过中间隐式状态 h ( t ) ∈ R N h(t)\in\mathcal{R}^N h(t)RN将一维输入函数或序列映射为 x ( t ) ∈ R , x(t)\in\mathcal{R}, x(t)R,到输出 y ( t ) ∈ R y(t)\in\mathcal{R} y(t)R。上述过程可以表示为线性常微分方程(ODE):
h ′ ( t ) = A h ( t ) + B x ( t ) y ( t ) = C h ( t ) \begin{aligned}h'(t)&=\mathbf{A}h(t)+\mathbf{B}x(t)\\y(t)&=\mathbf{C}h(t)\end{aligned} h(t)y(t)=Ah(t)+Bx(t)=Ch(t)
其中, A ∈ R N × N \mathbf{A}\in\mathcal{R}^{N\times N} ARN×N表示状态矩阵, B ∈ R N × 1 , C ∈ R N × 1 \mathbf{B}\in\mathcal{R}^{N\times1},\mathbf{C}\in\mathcal{R}^{N\times1} BRN×1,CRN×1表示投影参数。

S4和Mamba将这个连续系统离散化,使其更适合深度学习场景。具体来说,他们引入一个时间尺度参数 Δ \boldsymbol{\Delta} Δ,并使用固定的离散化规则将 A A A B B B转换为离散参数 A ‾ \overline{\mathrm{A}} A B ‾ \overline{\mathrm{B}} B。通常采用零阶保持器(ZOH)作为离散化规则,其定义如下:
A ‾ = exp ⁡ ( Δ A ) B ‾ = ( Δ A ) − 1 ( exp ⁡ ( Δ A ) − I ) ⋅ Δ B \begin{aligned}\overline{\mathbf{A}}&=\exp(\boldsymbol{\Delta}\mathbf{A})\\\overline{\mathbf{B}}&=(\boldsymbol{\Delta}\mathbf{A})^{-1}(\exp(\boldsymbol{\Delta}\mathbf{A})-\mathbf{I})\cdot\boldsymbol{\Delta}\mathbf{B}\end{aligned} AB=exp(ΔA)=(ΔA)1(exp(ΔA)I)ΔB
离散化后,基于ssm的模型可以通过线性递归或全局卷积两种方式进行计算,分别定义为式3和式4。
h ′ ( t ) = A ‾ h ( t ) + B ‾ x ( t ) y ( t ) = C h ( t ) \begin{aligned}h'(t)&=\overline{\mathbf{A}}h(t)+\overline{\mathbf{B}}x(t)\\y(t)&=\mathbf{C}h(t)\end{aligned} h(t)y(t)=Ah(t)+Bx(t)=Ch(t)
公式4
K ‾ = ( C B ‾ , C A B ‾ , … , C A ‾ L − 1 B ‾ ) y = x ∗ K ‾ \begin{aligned}&\overline{K}=(\mathbf{C}\overline{\mathbf{B}},\mathbf{C}\overline{\mathbf{AB}},\ldots,\mathbf{C}\overline{\mathbf{A}}^{L-1}\overline{\mathbf{B}})\\&y=x*\overline{\mathbf{K}}\end{aligned} K=(CB,CAB,,CAL1B)y=xK
式中, K ‾ ∈ R L \overline{\mathbf{K}}\in\mathcal{R}^L KRL表示一个结构化卷积核,L表示输入序列x的长度。

3. 方法

在本节中,我们首先介绍VM-UNet的总体结构。随后,我们详细阐述了核心组件VSS模块。最后,我们描述了在训练过程中使用的损失函数。
image-20240216104015783

图1所示。(a)虚拟机- unet的总体结构。(b) VSS区块是VM-UNet的主要构建区块,SS2D是VSS区块中的核心操作。

3.1 VM-UNet

如图1 (a)所示,展示了VM-UNet的总体架构。具体来说,VM-UNet包括补丁嵌入层、编码器、解码器、最终投影层和跳过连接。与以往的方法[9]不同,我们没有采用对称结构,而是采用了不对称设计。

Patch Embedding层将输入图像 x ∈ R H × W × 3 x\in\mathcal{R}^{H\times W\times3} xRH×W×3划分为大小为4 × 4的不重叠的Patch,随后将图像的维数映射为C, C默认为96。此过程得到嵌入图像 x ′ ∈ R H 4 × W ˙ 4 × C x^{\prime}\in\mathcal{R}^{\frac{H}{4}\times\frac{\dot{W}}{4}\times C} xR4H×4W˙×C。最后,我们使用Layer Normalization对 x ′ x^{\prime} x进行归一化[7],然后将其输入编码器进行特征提取。编码器由四个阶段组成,在前三个阶段的末尾应用补丁合并操作,以降低输入特征的高度和宽度,同时增加通道数量。我们在四个阶段使用 [ 2 , 2 , 2 , 2 ] [2,2,2,2] [2,2,2,2]个VSS区块,每个阶段的通道计数为 [ C , 2 C , 4 C , 8 C ] \mathrm{[C,~2C,~4C,~8C]} [C, 2C, 4C, 8C]

同样,解码器被组织成四个阶段。在最后三个阶段的开始,采用斑块扩展操作来减少特征通道的数量,增加特征通道的高度和宽度。在四个阶段中,我们使用[2,2,2,1]VSS块,每个阶段的通道计数为[8C, 4C, 2C, C]。在解码器之后,使用Final Projection层来恢复特征的大小以匹配分割目标。具体来说,通过patch expansion进行4次上采样来恢复特征的高度和宽度,然后通过投影层来恢复通道的数量。

对于跳跃式连接,采用直接的加法操作,不需要附加参数,因此不会引入任何额外参数。

3.2 VSS Block

vamaba[20]衍生的VSS块是VM-UNet的核心模块,如图1 (b)所示。经过Layer Normalization后,输入被分成两个分支。在第一个分支中,输入经过一个线性层,然后是一个激活函数。在第二个分支中,输入通过线性层、深度可分离卷积和激活函数进行处理,然后输入到2d选择性扫描(SS2D)模块中进行进一步的特征提取。随后,使用Layer Normalization对特征进行规范化,然后使用第一个分支的输出执行逐元素的生产,以合并两条路径。最后,使用线性层混合特征,并将此结果与残差连接相结合,形成VSS块的输出。本文默认采用SiLU[14]作为激活函数

image-20240216104345012

SS2D由三个部分组成:扫描扩展操作、S6块操作和扫描合并操作。如图2(a)所示,扫描展开操作沿着四个不同的方向(左上到右下、右下到左上、右上到左下、左下到右上)将输入图像展开成序列。然后通过S6块对这些序列进行特征提取,确保各个方向的信息被彻底扫描,从而捕获不同的特征。随后,如图2(b)所示,扫描合并操作求和并合并来自的序列四个方向,将输出图像恢复到与输入图像相同的大小。源自Mamba[16]的S6块在S4[17]之上引入了一种选择机制,通过根据输入调整SSM的参数。这使模型能够区分并保留相关信息,同时过滤掉不相关的信息。算法1给出了S6块的伪代码。

Algorithm1Pseudo-codeforS6blockinSS2D ‾ \overline{\text{Algorithm1Pseudo-codeforS6blockinSS2D}} Algorithm1Pseudo-codeforS6blockinSS2D Input: x , thefeaturewithshape[B,L,D](batch size, token length, dimension) ‾ \overline{\text{Input:}x,\text{thefeaturewithshape[B,L,D](batch size, token length, dimension)}} Input:x,thefeaturewithshape[B,L,D](batch size, token length, dimension)
Params: A \mathbf{A} A, the nn.Parameter; D \mathbf{D} D, the nn.Parameter
Operator: Linear(.), the linear projection layer
Output: y y y, the feature with shape [ B , L , D ] [\mathbb{B},\mathbb{L},\mathbb{D}] [B,L,D]
$1{: }\underline {\boldsymbol{\Delta}}, \mathbf{B} , \mathbf{C} = L i n e a r Linear Linear( x) , $ Linear$( x) , $ Linear$( x) $

2 : A ‾ = exp ⁡ ( Δ A ) {2:}{{\overline{\mathbf{A}}}}=\exp(\boldsymbol{\Delta A}) 2:A=exp(ΔA)

3 : B ‾ = ( ‾ Δ ‾ A ) − 1 ( exp ⁡ ‾ ( Δ A ) − I ) ⋅ Δ B 3{:}\:\overline{\mathbf{B}}=\underline{(}\underline{\boldsymbol{\Delta}}\mathbf{A})^{-1}(\underline{\exp}(\boldsymbol{\Delta}\mathbf{A})-\mathbf{I})\cdot\boldsymbol{\Delta}\mathbf{B} 3:B=(ΔA)1(exp(ΔA)I)ΔB
4 ⁣ : h t = A ‾ h t − 1 + B ‾ x t 4\colon h_{t}=\overline{\mathbf{A}}h_{t-1}+\overline{\mathbf{B}}x_{t} 4:ht=Aht1+Bxt
5 ⁣ : y t = C h t + D x t 5\colon\:y_t=\mathbf{C}h_t+\mathbf{D}x_t 5:yt=Cht+Dxt 6 ⁣ : y = [ y 1 , y 2 , ⋯ , y t , ⋯ , y L ] 6\colon\:y=[y_1,y_2,\cdots,y_t,\cdots,y_L] 6:y=[y1,y2,,yt,,yL]

7 : return y 7{: }\textbf{return}y 7:returny

3.3 损失函数

VM-UNet的引入旨在验证纯ssm模型在医学图像分割任务中的应用潜力。因此,我们专门利用最基本的二元交叉熵和骰子损失(BceDice loss)和交叉熵和骰子损失(CeDice loss)分别作为二元和多类分割任务的损失函数,如公式5和6所示。
L B c e D i c e = λ 1 L B c e + λ 2 L D i c e L C e D i c e = λ 1 L C e + λ 2 L D i c e \begin{aligned}L_{\mathrm{BceDice}}&=\lambda_1L_{\mathrm{Bce}}+\lambda_2L_{\mathrm{Dice}}\\\\L_{\mathrm{CeDice}}&=\lambda_1L_{\mathrm{Ce}}+\lambda_2L_{\mathrm{Dice}}\end{aligned} LBceDiceLCeDice=λ1LBce+λ2LDice=λ1LCe+λ2LDice

{ L B c e = − 1 N ∑ i = 1 N [ y i log ⁡ ( y ^ i ) + ( 1 − y i ) log ⁡ ( 1 − y ^ i ) ] L C e = − 1 N ∑ i = 1 N ∑ c = 1 C y i , c log ⁡ ( y ^ i , c ) L D i c e = 1 − 2 ∣ X ∩ Y ∣ ∣ X ∣ + ∣ Y ∣ \left.\left\{\begin{array}{l}L_{\mathrm{Bce}}=-\dfrac{1}{N}\sum_{i=1}^N\left[y_i\log(\hat{y}_i)+(1-y_i)\log(1-\hat{y}_i)\right]\\\\L_{\mathrm{Ce}}=-\dfrac{1}{N}\sum_{i=1}^N\sum_{c=1}^Cy_{i,c}\log(\hat{y}_{i,c})\\\\L_{\mathrm{Dice}}=1-\dfrac{2|X\cap Y|}{|X|+|Y|}\end{array}\right.\right. LBce=N1i=1N[yilog(y^i)+(1yi)log(1y^i)]LCe=N1i=1Nc=1Cyi,clog(y^i,c)LDice=1X+Y2∣XY
式中,N为样本总数,C为类别总数。 y i , y ^ i y_i,\hat{y}_i yi,y^i分别表示真实标签和预测。 y i , c y_{i,c} yi,c是一个指标,如果样本 i i i属于c类,则等于1,否则等于0。 y ^ i , c \hat{y}_{i,c} y^i,c为模型预测样本i属于类别c的概率。|X|和|Y|分别代表真实值和预测值。 λ 1 \lambda_1 λ1 λ 2 \lambda_2 λ2为损失函数的权值,默认值均为1。

4. 实验

在本节中,我们对VM-UNet进行皮肤病变和器官分割任务的综合实验。具体来说,我们在ISIC17、ISIC18和Synapse数据集上评估了VM-UNet在医学图像分割任务上的性能。

4.1 数据集

ISIC17和ISIC18数据集:国际皮肤成像协作2017年和2018年挑战数据集(ISIC17和ISIC18)[8,1,12,2]是两个公开可用的皮肤病变分割数据集,分别包含2,150和2,694张带有分割面具标签的皮肤镜图像。根据之前的工作[28],我们将数据集以7:3的比例分割作为训练集和测试集。具体来说,对于ISIC17数据集,训练集由1500张图像组成,测试集由650张图像组成。对于ISIC18数据集,训练集包含1886张图像,而测试集包含808张图像。对于这两个数据集,我们提供了几个指标的详细评估,包括平均交联(mIoU),骰子相似系数(DSC),准确性(Acc),灵敏度(Sen)和特异性(Spe)。

Synapse多器官分割数据集(Synapse): Synapse[19,3]是一个公开的多器官分割数据集,包含30例腹部CT病例3,779张轴向腹部临床CT图像,包括8种腹部器官(主动脉、胆囊、左肾、右肾、肝脏、胰腺、脾脏、胃)。按照之前作品[10,9]的设置,训练用18个案例,测试用12个案例。对于这个数据集,我们报告了骰子相似系数(DSC)和95%豪斯多夫距离(HD95)作为评估指标。

4.2 实现细节

根据之前的工作[28,9],我们将ISIC17和ISIC18数据集中的图像调整为256×256,将Synapse数据集中的图像调整为224×224。为了防止过拟合,采用了随机翻转和随机旋转等数据增强技术。ISIC17和ISIC18数据集采用BceDice损失函数,Synapse数据集采用CeDice损失函数。我们将批大小设置为32,并使用AdamW[23]优化器,初始学习率为1e-3。使用CosineAnnealingLR[22]作为调度程序,最大迭代次数为50次,最小学习率为1e-5。训练周期设置为300。对于VM-UNet,我们使用在ImageNet-1k上预训练的vamba - s[20]的权重初始化编码器和解码器的权重。所有实验均在单个NVIDIA RTX A6000 GPU上进行。

4.3 主要结果

我们将VM-UNet与一些最先进的模型进行比较,给出了表1和表2中的实验结果。对于ISIC17和ISIC18数据集,我们的VM-UNet在mIoU, DSC和Acc指标方面优于其他模型。对于Synapse数据集,VM-UNet也取得了具有竞争力的性能。例如,我们的模型超过swin-unet,这是第一个纯基于变压器的模型,在DSC和HD95指标上分别高出1.95%和2.34mm。结果证明了基于ssm的模型在医学图像分割任务中的优越性。

image-20240216110233984

image-20240216110241434

4.4 消融实验

在本节中,我们使用ISIC17和ISIC18数据集对VMUNet的初始化进行消融实验。我们分别用vamba - t和vamba - s预训练的权值初始化VM-UNet。1实验结果如表3所示,预训练的权值越强,VM-UNet的下游性能就越好,说明预训练的权值对VM-UNet的影响很大。

image-20240216110333500

5. 结果

结论:在本文中,我们首次以VM-UNet为基线,引入了一个纯粹基于ssm的医学图像分割模型。为了利用基于ssm的模型的功能,我们使用VSS块构建VM-UNet,并使用预训练的vamba - s初始化其权重。在皮肤病变和多器官分割数据集上进行的综合实验表明,纯ssm模型在医学图像分割任务中具有很强的竞争力,值得未来深入探索。

未来的工作:1)基于ssm的机制,设计更适合分割任务的模块。2) VM-UNet的参数数约为30M,为通过手工设计或其他压缩策略精简ssm提供了机会,从而增强了ssm在现实医疗场景中的适用性。3)考虑到ssm在捕获长序列信息方面的优势,进一步研究ssm在更高分辨率下的分割性能是有价值的。4)探索ssm在其他医学成像任务中的应用,如检测、配准、重建等。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Junit测试套件(Test Suite)

0. 什么是测试套件 对多个测试类的统一执行 只有一个测试类 点击一下执行就好有 5个测试类 分别打开 挨个点执行有100个测试类 ??分别点开执行 为100个测试类创建一个测试套件,然后再执行一次测试套件 √ 一个测试套件“囊括“三个测试类…

[嵌入式系统-16]:RT-Thread -2- 主要功能功能组件详解与API函数说明

目录 一、RT-Thread主要功能组件 二、内核组件 2.1 概述 2.2 API 三、设备驱动 3.1 概述 3.2 API 四、通信组件 4.1 概述 4.4 API 五、网络组件 5.1 概述 5.2 API 5.3 补充:MQTT协议 六、文件系统 6.1 概述 6.2 API 七、GUI 组件 7.1 概述 7.2 …

[office] Excel CHITEST 函数 使用实例教程 #媒体#知识分享#其他

Excel CHITEST 函数 使用实例教程 提示 此函数已由 CHISQ.TEST 函数替换,新函数可以提供更好的精确度,其名称更好地反映其用法。旧函数仍可用于与早期版本Excel 的兼容。但是,如果不需要向后兼容,那么应考虑直接使用新函数&…

【AIGC】Stable Diffusion的模型微调

为什么要做模型微调 模型微调可以在现有模型的基础上,让AI懂得如何更精确生成/生成特定的风格、概念、角色、姿势、对象。Stable Diffusion 模型的微调方法通常依赖于您要微调的具体任务和数据。 下面是一个通用的微调过程的概述: 准备数据集&#xf…

平时积累的FPGA知识点(6)

平时在FPGA群聊等积累的FPGA知识点,第六期: 1 万兆网接口,发三十万包,会出现掉几包的情况,为什么? 原因:没做时钟约束,万兆网接口的实现,本质上都是高速serdes&#xf…

MinGW下载安装教程 傻瓜式操作【超详细】

一、下载 下载地址:MinGW - Minimalist GNU for Windows - Browse Files at SourceForge.net 点击“Download Latest Version”即可 注意:小伙伴儿们也可以私信我要安装包。 二、安装 下载完成后,会得到一个名为 mingw-get-setup.exe 的安…

机器学习网格搜索超参数优化实战(随机森林) ##4

文章目录 基于Kaggle电信用户流失案例数据(可在官网进行下载)数据预处理模块时序特征衍生第一轮网格搜索第二轮搜索第三轮搜索第四轮搜索第五轮搜索 基于Kaggle电信用户流失案例数据(可在官网进行下载) 导入库 # 基础数据科学运…

系统架构27 - 软件架构设计(6)

基于架构的软件开发方法 基于架构的软件开发方法(ABSD)概述概念与术语开发模型体系结构需求体系结构设计体系结构文档化体系结构复审体系结构实现体系结构的演化 基于架构的软件开发方法(ABSD) 基于体系结构的软件设计 (Architec…

【JavaEE】_文件与IO

目录 1.文件概述 1.1 文件的概念 1.2 文件的存储 1.3 文件的分类 1.4 目录结构 1.5 文件操作 1.5.1 文件系统操作 1.5.2 文件内容操作 2. Java文件系统操作 2.1 File类所处的包 2.2 构造方法 2.3 方法 2.3.1 与文件路径、文件名有关的方法 2.3.2 文件是否存在与普…

openGauss学习笔记-221 openGauss性能调优-确定性能调优范围-分析作业是否被阻塞

文章目录 openGauss学习笔记-221 openGauss性能调优-确定性能调优范围-分析作业是否被阻塞221.1 操作步骤 openGauss学习笔记-221 openGauss性能调优-确定性能调优范围-分析作业是否被阻塞 数据库系统运行时,在某些业务场景下查询语句会被阻塞,导致语句…

【MySQL】操作库 —— 表的操作 -- 详解

一、增加表 1、创建表 mysql> create database [if not exists] table_name ( -> field1 datatype, -> field2 datatype, -> field3 datatype -> ) character set 字符集 collate 校验规则 engine 存储引擎; 注意 :最后一行也可以写成&#x…

Vue源码系列讲解——模板编译篇【二】(整体运行流程)

目录 1. 整体流程 2. 回到源码 3. 总结 1. 整体流程 上篇文章中我们说了&#xff0c;在模板解析阶段主要做的工作是把用户在<template></template>标签内写的模板使用正则等方式解析成抽象语法树&#xff08;AST&#xff09;。而这一阶段在源码中对应解析器&…

c语言操作符(上)

目录 ​编辑 原码、反码、补码 1、正数 2、负数 3、二进制计算1-1 移位操作符 1、<<左移操作符 2、>>右移操作符 位操作符&、|、^、~ 1、&按位与 2、|按位或 3、^按位异或 特点 4、~按位取反 原码、反码、补码 1、正数 原码 反码 补码相同…

STM32 HAL库 STM32CubeMX -- IWDG(独立看门狗)

STM32 HAL库 STM32CubeMX -- IWDG 一、IWDG简介二、独立看门狗的工作原理三、驱动函数初始化函数HAL IWDG Init()初始化函数HAL IWDG Init()其他宏函数 四、超时时间计算第一种办法第二种办法&#xff08;推荐&#xff09; 一、IWDG简介 看门狗(Watchdog)就是MCU上的一种特殊的…

【AIGC】Stable Diffusion的模型入门

下载好相关模型文件后&#xff0c;直接放入Stable Diffusion相关目录即可使用&#xff0c;Stable Diffusion 模型就是我们日常所说的大模型&#xff0c;下载后放入**\webui\models\Stable-diffusion**目录&#xff0c;界面上就会展示相应的模型选项&#xff0c;如下图所示。作者…

计算机网络——多媒体网络

前些天发现了一个巨牛的人工智能学习网站 通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c; 跳转到网站 小程一言 我的计算机网络专栏&#xff0c;是自己在计算机网络学习过程中的学习笔记与心得&#xff0c;在参考相关教材&#xff0c;网络搜素…

保育员考试怎么搜题找答案?9个不限次的公众号和软件分享啦! #经验分享#学习方法

学会运用各类学习辅助工具和资料&#xff0c;是大学生培养自主学习能力和信息获取能力的重要途径之一。 1.粉鹿搜题 这是一个公众号 使用方法也很简单&#xff0c;将题目发送至公众号后台&#xff0c;即可得到题目答案~ 下方附上一些测试的试题及答案 1、下列哪项是聚合式联…

DS Wannabe之5-AM Project: DS 30day int prep day18

Q1. What is Levenshtein Algorithm? Levenshtein算法&#xff0c;也称为编辑距离算法&#xff0c;是一种量化两个字符串之间差异的方法。它通过计算将一个字符串转换成另一个字符串所需的最少单字符编辑操作次数来实现。这些编辑操作包括插入、删除和替换字符。Levenshtein距…

掌握Go并发:Go语言并发编程深度解析

&#x1f3f7;️个人主页&#xff1a;鼠鼠我捏&#xff0c;要死了捏的主页 &#x1f3f7;️系列专栏&#xff1a;Golang全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…

第三讲 数据存储

面向磁盘的架构 DBMS 假定数据库的主要存储位置位于非易失性磁盘【non-volatile disk】上。 DBMS 的组件管理非易失性【non-volatile】和易失性【volatile】存储之间的数据移动。 为了理解来回移动数据的影响&#xff0c;我们首先要先理解存储层次结构是什么样的。 存储层次【…