Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation论文解读

news2024/11/24 23:05:32

Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TRR298cP-1673942843099)(Swin-Unet Unet-like Pure Transformer for Medical Image Segmentation.assets/image-20230117101934015.png)]

论文:[2105.05537] Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation (arxiv.org)

代码:HuCaoFighting/Swin-Unet: The codes for the work “Swin-Unet: Unet-like Pure Transformer for Medical Image Segmentation” (github.com)

期刊/会议:ECCV2021

摘要

在过去的几年中,卷积神经网络(CNN)在医学图像分析方面取得了里程碑式的进展。特别是基于U型结构和跳跃连接的深度神经网络在各种医学图像任务中得到了广泛的应用。然而,尽管CNN已经取得了优异的性能,但由于卷积运算的局部性,它不能很好地学习全局和长程的语义信息交互。在本文中,我们提出了Swin-Unet,它是一个类Unet的纯Transformer,用于医学图像分割。Token化的图像patch被输入到基于transformer的U型编码器-解码器架构中,并具有跳跃连接,用于局部全局语义特征学习。具体来说,我们使用带有移位窗口(shifted windows)的分层Swin Transformer作为编码器来提取上下文特征。设计了一种基于对称Swin Transformer的patch expanding层解码器,对特征图进行上采样操作,恢复特征图的空间分辨率。在输入输出直接下采样和上采样4倍的情况下,对多器官和心脏分割任务的实验表明,纯基于Transformer的U型编码器-解码器网络优于全卷积或Transformer与卷积结合的方法。

1、简介

得益于深度学习的发展,计算机视觉技术已广泛应用于医学图像分析。图像分割是医学图像分析的重要组成部分。特别是,准确而鲁棒的医学图像分割在计算机辅助诊断和图像引导临床手术中起着至关重要的作用。

现有的医学图像分割方法主要依靠U型结构的全卷积神经网络(FCNN)。典型的U型网络U-Net由一个具有跳跃连接的对称编码器-解码器组成。在编码器中,使用一系列卷积层和连续下采样层来提取具有大感受野的深度特征。然后,解码器将提取的深度特征上采样到输入分辨率进行像素级语义预测,并将来自编码器的不同尺度的高分辨率特征进行跳跃连接融合,以缓解下采样造成的空间信息丢失。凭借如此优雅的结构设计,U-Net在各种医学成像应用中取得了巨大的成功。按照这一技术路线,已经开发了3D U-Net、Res-UNet、U-Net++和UNet3+等算法,用于各种医学成像方式的图像和体积分割(volumentric segmentation)。这些基于FCNN的方法在心脏分割、器官分割和病变分割方面的优异表现证明了CNN具有较强的特征学习辨别能力。

目前,基于CNN的方法虽然在医学图像分割领域取得了优异的性能,但仍不能完全满足医学应用对分割精度的严格要求。图像分割仍然是医学图像分析中的一个具有挑战性的任务。由于卷积运算固有的局部性,基于CNN的方法很难学习显式的全局和远程语义信息交互。一些研究试图通过使用atrous卷积层、自注意机制和图像金字塔来解决这个问题。然而,这些方法在建模长期依赖关系时仍有局限性。最近,受Transformer在自然语言处理(NLP)领域的巨大成功的启发,研究人员试图将Transformer引入视觉领域。在VIT论文中,提出了视觉转换器(ViT)来执行图像识别任务。以带有位置嵌入的二维图像patch为输入,在大型数据集上进行预训练,其性能与基于CNN的方法相当。此外,DeiT中提出了数据高效图像转换器(data-efficient image transformer, DeiT),这表明transformer可以在中等规模的数据集上进行训练,并将其与蒸馏方法相结合,可以获得更鲁棒的transformer。在Swin transformer论文中,开发了一个分层的Swin Transformer。[19]以Swin Transformer为视觉骨干网络,在图像分类、目标检测和语义分割等方面取得了最先进的性能。ViT、DeiT和Swin Transformer在图像识别任务中的成功证明了Transformer在视觉领域的应用潜力。

在Swin Transformer的成功的激励下,我们提出Swin-Unet在这项工作中利用Transformer的强大功能进行2D医学图像分割。据我们所知,Swin-Unet是第一个纯基于transformer的U型架构,由编码器、瓶颈(bottleneck)、解码器和跳跃连接(skip connection)组成。编码器、瓶颈和解码器都是基于Swin Transformer区块构建的。将输入的医学图像分割成不重叠的图像patch。每个patch都被视为一个token,并输入到基于transformer的编码器中,以学习深度特征表示。解码器利用patch expanding层对提取的上下文特征进行上采样,并与编码器的多尺度特征进行跳跃连接融合,恢复特征映射的空间分辨率,进而进行分割预测。在多器官和心脏分割数据集上的大量实验表明,该方法具有良好的分割精度和鲁棒的泛化能力。具体来说,我们的贡献可以概括为:(1)基于Swin Transformer块,我们构建了一个具有跳跃连接的对称编码器-解码器架构。在编码器中,实现了从局部到全局的自注意力机制;在解码器中,全局特征被上采样到输入分辨率,用于相应的像素级分割预测。(2)设计了一种patch expanding层,在不使用卷积和插值运算的情况下实现上采样和特征维的增加。(3)在实验中发现,对于Transformer,跳跃连接也是有效的,因此最终构造了一个纯基于Transformer的带有跳跃连接U型编码器-解码器架构,命名为Swin-Unet。

2、相关工作

基于CNN的方法: 早期的医学图像分割方法主要是基于轮廓和传统的基于机器学习的算法。随着深度CNN的发展,提出了U-Net用于医学图像分割。由于U型结构简单、性能优越,各种类Unet方法不断涌现,如Res-UNet、Dense-UNet、U-Net++、UNet3+等。并将其引入到三维医学图像分割领域,如3D-Unet[和V-Net。目前,基于CNN的方法由于其强大的表示能力在医学图像分割领域取得了巨大的成功。

Vision Transformer:Transformer最初是在机器翻译任务提出的。在自然语言处理领域,基于transformer的方法在各种任务中都取得了最先进的性能。在Transformer成功的推动下,研究人员在中引入了一个开创性的视觉Transformer(ViT),它在图像识别任务中实现了令人印象深刻的速度-精度权衡。与基于CNN的方法相比,ViT的缺点是需要在自己的大型数据集上进行预训练。为了减轻训练ViT的困难,Deit描述了几种训练策略,使ViT在ImageNet上训练得很好。近年来,基于ViT的一些优秀工作已经完成。值得一提的是,提出了一种高效有效的分层视觉转换器Swin Transformer作为视觉主干网络。基于移动窗口机制,Swin Transformer在图像分类、目标检测和语义分割等各种视觉任务上都取得了最先进的性能。在这项工作中,我们尝试使用Swin Transformer块作为基本单元来构建一个U型编码器-解码器为医学图像分割提供了具有跳跃式连接的架构,从而为Transformer在医学图像领域的发展提供了基准比较。

self-attention/transformer对比CNN:近年来,研究人员尝试在CNN中引入自注意机制,以提高网络的性能。在一些工作中,采用U型结构集成了带有附加注意门的跳跃连接,用于医学图像分割。然而,这仍然是基于CNN的方法。目前,一些人正在努力将CNN和Transformer结合起来,以打破CNN在医学图像分割中的主导地位。在一些工作中,研究者将Transformer与CNN相结合,构成了用于二维医学图像分割的强编码器,也有研究学者利用Transformer和CNN的互补性来提高模型的分割能力。目前,Transformer与CNN的各种组合应用于多模态脑肿瘤分割和三维医学图像分割。与上述方法不同,我们尝试探索纯Transformer在医学图像分割中的应用潜力。

3、方法

3.1 模型架构总览

我们所提出的Swin-Unet的总体架构如图1所示。Swin-Unet由编码器、瓶颈(bottleneck)、解码器和跳过连接组成。Swin-Unet的基本单元是Swin Transformer block。编码器将医学图像分割成不重叠的patch, patch大小为4 × 4,将输入信息转换为序列嵌入。通过这种划分方法,每个patch的特征维数为4 × 4 × 3 = 48。将投影的特征维度线性嵌入层转化为任意维度(表示为C),转换后的patch token通过多个Swin Transformer块和patch合并层生成分层的特征表示。其中,patch merge层负责降采样和增维,Swin Transformer块负责特征表示学习。以U-Net为灵感,设计了一种基于对称transformer的解码器。该解码器由Swin Transformer block和patch expanding层组成。通过跳跃式连接将提取的上下文特征与编码器的多尺度特征融合,弥补了下采样造成的空间信息丢失。与patch merge层相比,patch expanding层被专门设计来执行上采样。patch expanding层将相邻维度的特征图重新塑造为分辨率为2倍上采样的大特征图。最后使用最后一层patch展开层进行4×上采样,将特征图的分辨率恢复到输入分辨率(W × H),然后对这些上采样的特征进行线性投影层,输出像素级分割预测。我们将在下面详细说明每个区块。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SSd7EkWu-1673942843101)(Swin-Unet Unet-like Pure Transformer for Medical Image Segmentation.assets/image-20230117151939130.png)]

3.2 Swin Transformer block

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h34PXh4j-1673942843102)(Swin-Unet Unet-like Pure Transformer for Medical Image Segmentation.assets/image-20230117152654396.png)]

与传统的多头自注意(MSA)模块不同,Swin Transformer block是基于shifted window构造的。在图2中,给出了两个连续的Swin Transformer block。每个Swin Transformer block由LayerNorm (LN)层、多头自注意模块、残差连接和具有GELU非线性的2层MLP组成。基于窗口的multi-head self-attention (W-MSA)模块和基于移位窗口的multi-head self-attention (SW-MSA)模块分别应用于这两个transformer block。基于这种窗口划分机制,连续swin transformer block可以表示为:
z ^ l = W − M S A ( L N ( z l − 1 ) ) + z l − 1 \hat z^l=W-MSA(LN(z^{l-1}))+z^{l-1} z^l=WMSA(LN(zl1))+zl1

z l = M L P ( L N ( z ^ l ) ) + z ^ l z^l=MLP(LN(\hat z^l))+\hat z^l zl=MLP(LN(z^l))+z^l

z ^ l + 1 = S W − M S A ( L N ( z l ) ) + z l \hat z^{l+1}=SW-MSA(LN(z^l))+z^l z^l+1=SWMSA(LN(zl))+zl

z l + 1 = M L P ( L N ( z ^ l + 1 ) ) + z ^ l + 1 z^{l+1}=MLP(LN(\hat z^{l+1}))+\hat z^{l+1} zl+1=MLP(LN(z^l+1))+z^l+1

其中 z ^ l \hat z^l z^l z ^ l \hat z^l z^l代表(S)W-MSA和MLP模块在第 l l l个block的输出。和先前的工作类似,self-attention计算计算如下所示:
A t t e n t i o n ( Q , K , V ) = S o f t M a x ( Q K T d + B ) V Attention(Q,K,V)=SoftMax(\frac{QK^T}{\sqrt{d}}+B)V Attention(Q,K,V)=SoftMax(d QKT+B)V
Q , K , V ∈ R M 2 × d Q,K,V \in \R^{M^2 \times d} Q,K,VRM2×d指的是query,key,value向量。 M 2 , d M^2,d M2,d分别指的是patch在窗口中的数量和query/key的向量维度。 B B B是偏置,来自偏置矩阵 B ^ ∈ R ( z M − 1 ) × ( 2 M + 1 ) \hat B\in \R^{(zM-1) \times (2M+1)} B^R(zM1)×(2M+1)

3.3 Encoder

在编码器中,分辨率为 H 4 × H 4 \frac{H}{4} \times \frac{H}{4} 4H×4H C C C维标记化输入被输入到两个连续的Swin Transformer block中进行表示学习,其中特征维度和分辨率保持不变。同时,patch merge层将减少token数量(2× downsampling),并将特征维数增加到原始维数的2×。这个过程将在编码器中重复三次。

Patch merge layer:输入的patch被分成4个部分,并通过patch合并层连接在一起。通过这样的处理,特征分辨率将降低2倍。由于级联操作导致特征维数增加4倍,因此在级联后的特征上加线性层,使特征维数统一为原始维数的2倍。

3.4 Bottleneck

由于Transformer深度太深,无法收敛,因此只用两个连续的Swin Transformer块构造瓶颈来学习深度特征表示。在瓶颈区,特征维数和分辨率保持不变。

3.5 Deccoder

与encoder相对应的是基于Swin Transformer block的对称decoder。为此,与编码器中使用的patch merge layer相比,我们在encoder中使用patch expand layer对提取的深层特征进行上采样。patch expand layer将相邻维度的特征图重塑为更高分辨率的特征图(2×上采样),并相应地将特征维数降低到原维数的一半。

patch expand layer:以第一个patch expand layer为例,在上采样前,对输入特征( W 32 × W 32 × 8 C \frac{W}{32} \times \frac{W}{32} \times 8C 32W×32W×8C)施加线性层,将特征维数增加到原维数( W 32 × W 32 × 16 C \frac{W}{32} \times \frac{W}{32} \times 16C 32W×32W×16C)的2倍。然后,我们使用重排操作将输入特征的分辨率扩大到输入分辨率的2倍,并将特征维数减小到输入维数的四分之一( W 32 × W 32 × 16 C → W 16 × W 16 × 4 C \frac{W}{32} \times \frac{W}{32} \times 16C \to \frac{W}{16} \times \frac{W}{16} \times 4C 32W×32W×16C16W×16W×4C)。我们将在4.5节中讨论使用patch expand layer执行上采样的影响。

3.6 skip connection

类似于U-Net,跳跃连接用于融合编码器的多尺度特征与上采样特征。我们将浅层特征和深层特征拼接在一起,减少了下采样造成的空间信息损失。接着是线性层,连接特征的维数保持与上采样特征的维数相同。在4.5节中,我们将详细讨论跳过连接的数量对模型性能的影响。

4、实验

4.1 数据集

Synapse multi-organ segmentation dataset (Synapse):数据集包括30例病例3779张轴向腹部临床CT图像。将18个样本分为训练集,12个样本分为测试集。并以Dice-similarity coefficient(DSC)和average Hausdorff Distance(HD)作为评价指标,对8个腹部器官(主动脉、胆囊、脾脏、左肾、右肾、肝脏、胰腺、脾脏、胃)进行了评价。

Automated cardiac diagnosis challenge dataset (ACDC):ACDC数据集是使用MRI扫描仪从不同的患者中收集的。对于每个患者的MR图像,左心室(LV),右心室(RV)和心肌(MYO)被标记。数据集分为70个训练样本,10个验证样本和20个测试样本。仅使用平均DSC来评估此数据集上的方法。

4.2 实施细节

Swin-Unet是基于Python 3.6和Pytorch 1.7.0实现的。对于所有训练案例,数据增强(如翻转和旋转)用于增加数据多样性。输入图像大小设置为224×224, patch大小设置为4。我们用32GB内存的Nvidia V100 GPU训练我们的模型。在ImageNet上预训练的权重用于初始化模型参数。在训练期间,batch size为24,使用动量为0.9,权重衰减为1e-4的SGD优化器来优化我们的反向传播模型。

4.3 在Synapse数据集上的实验结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HKxPv9bh-1673942843103)(Swin-Unet Unet-like Pure Transformer for Medical Image Segmentation.assets/image-20230117155759544.png)]

所提出的Swin-Unet与之前Synapse多器官CT数据集上最先进的方法的比较如表1所示。与TransUnet不同,我们在Synapse数据集上添加了我们自己实现的U-Net和Att-UNet的测试结果。实验结果表明,本文提出的类Unet纯transformer方法具有最佳的分割精度,分割精度分别为79.13%(DSC↑)和21.55%(HD↓)。与Att-Unet和最近的TransUnet方法相比,虽然我们的算法在DSC评价指标上没有太大的改进,但在HD评价指标上的精度提高了约4%和10%,这表明我们的方法可以实现更好的边缘预测。不同方法在Synapse多器官CT数据集上的分割结果如图3所示。从图中可以看出,基于CNN的方法容易出现过分割的问题,这可能是由于卷积运算的局部性造成的。在这项工作中,我们证明了通过将Transformer与具有跳过连接的U型架构集成在一起,没有卷积的纯Transformer方法可以更好地学习全局和远程语义信息交互,从而获得更好的分割结果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0yaDP9fH-1673942843104)(Swin-Unet Unet-like Pure Transformer for Medical Image Segmentation.assets/image-20230117160030129.png)]

4.4 在ACDC数据集上的实验结果

与Synapse数据集类似,所提出的Swin-Unet在ACDC数据集上进行训练,以执行医学图像分割。实验结果如表2所示。使用MR模式的图像数据作为输入,SwinUnet仍然能够取得优异的性能,准确率达到90.00%,说明我们的方法具有良好的泛化能力和鲁棒性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7WwVOMgQ-1673942843105)(Swin-Unet Unet-like Pure Transformer for Medical Image Segmentation.assets/image-20230117160043659.png)]

4.5 消融实验

为了探究不同因素对模型性能的影响,我们对Synapse数据集进行了消融研究。具体地说,上采样,跳过连接的数量,输入大小和模型尺度将在下面讨论。

上采样效果:与编码器中的patch merge layer相对应,我们在解码器中专门设计了patch expand layer来进行上采样和特征维的增加。为了探索所提出的patch expand layer的有效性,我们在Synapse数据集上进行了双线性插值、转置卷积和补丁扩展层的Swin-Unet实验。表3的实验结果表明,本文提出的Swin-Unet结合patch展开层可以获得更好的分割精度。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NxDTuXCy-1673942843106)(Swin-Unet Unet-like Pure Transformer for Medical Image Segmentation.assets/image-20230117160318052.png)]

跳跃连接数量的影响:我们的SwinUNet的跳跃连接被添加在1/4、1/8和1/16分辨率尺度的地方。通过将跳过连接数分别更改为0、1、2和3,我们探索了不同的跳过连接对所提出模型分割性能的影响。在表4中,我们可以看到,随着跳过连接数的增加,模型的分割性能有所提高。因此,为了使模型更具鲁棒性,本文将跳过连接数设置为3。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eQC2DRS5-1673942843107)(Swin-Unet Unet-like Pure Transformer for Medical Image Segmentation.assets/image-20230117160345995.png)]

输入尺寸的影响:以224 × 224,384 × 384的输入分辨率作为输入,所提出的Swin-Unet的测试结果如表5所示。当输入大小从224 × 224增加到384 × 384, patch大小保持为4时,Transformer的输入token序列会变大,从而提高模型的分割性能。然而,虽然模型的分割精度略有提高,但整个网络的计算负荷也明显增加。为了保证算法的运行效率,本文实验以224 × 224分辨率尺度作为输入。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GPT8BG5i-1673942843108)(Swin-Unet Unet-like Pure Transformer for Medical Image Segmentation.assets/image-20230117160432807.png)]

模型尺度的影响:,我们讨论了网络深化对模型性能的影响。从表6可以看出,模型规模的增加并没有提高模型的性能,反而增加了整个网络的计算成本。考虑到精度和速度的平衡,我们采用基于tiny的模型进行医学图像分割。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0FPhTHjW-1673942843108)(Swin-Unet Unet-like Pure Transformer for Medical Image Segmentation.assets/image-20230117160503236.png)]

4.6 讨论

众所周知,基于transformer的模型的性能受到模型预训练的严重影响。在这项工作中,我们直接使用ImageNet上Swin Transformer的训练权值来初始化网络编码器和解码器,这可能是一种次优方案。这种初始化方法很简单,未来我们将探索如何对Transformer进行端到端的预训练,以用于医学图像分割。此外,由于本文的输入图像为2D图像,而医学图像数据大多为3D图像,因此我们将在接下来的研究中探索Swin-Unet在三维医学图像分割中的应用。

5、总结

本文介绍了一种新型的基于纯Transformer的U形编解码器用于医学图像分割。为了充分发挥Transformer的强大功能,我们将Swin Transformer块作为特征表示和远程语义信息交互学习的基本单元。广泛在多器官和心脏分割任务上的实验表明,所提出的Swin-Unet具有良好的性能和泛化能力。

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

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

相关文章

LiveNVR监控流媒体Onvif/RTSP功能功能-支持GB35114接入国标流媒体平台接入说明

LiveNVR监控流媒体Onvif/RTSP功能功能-支持GB35114接入国标流媒体平台接入说明1、GB35114注册2、LiveNVR通过GB35114接入LiveGBS2.1、开启LiveGBS 35114功能2.2、 获取设备端证书给平台2.3、LiveGBS白名单中添加需要接入的国密设备2.4、导出LiveGBS平台端证书给设备&#xff08…

管理学实验的设计与实践结课作业

一、不同组织结构类型对组织的沟通效率会带来影响,这也是在组织结构设计过 程需要考虑的重要内容,但对于两者的关系无法准确界定。如在直线职能制的组织结构中,管理幅度和深度是影响是影响沟通效率的主要因素。请设计实验来验证分析直线职能制…

手动部署SQL审计平台Archery(连接mysql8.x)

安装Python和virtualenv从1.9.0版本开始,将不再支持python3.7及以下版本,手动安装也将使用3.9版本作为样例,移除yum安装方式# 安装依赖 yum install libffi-devel wget gcc make zlib-devel openssl openssl-devel ncurses-devel openldap-de…

分享81个PHP源码,总有一款适合您

PHP源码 分享81个PHP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 81个PHP源码下载链接:https://pan.baidu.com/s/18jo0nrQ6tCf-e1PAylItmQ?pwd3rxz 提取码&#xff…

Mysql之多表查询

简单测试 由于我们之前没学过多表查询 我们简单测试一下初学者认为的多表查询 SELECT * FROM emp,dept这是我们的输出结果 其实不难发现 1.返回的结果就是,第一张表一个个数据取出然后和第二张表所有组合 最后返回的是含有两张表的所有列 2.一共返回的记录数第一章…

【ES6篇新语法】(1)ES6介绍及常量声明、对象数组,附实例详解

【写在前面】 应一些粉丝的要求,整理一些ES6相关的文章,因此借这个岁末之际,给大家整理一篇ES6的相关的博客,不管是面试还是在实际的编程上,我们都常提到ES6这个词,可能前几年比较热门,希望大家…

焊接变形的原因以及防止焊接变形的措施

焊接变形的原因   在焊接过程中对焊件进行了局部的、不均匀的加热是产生焊接应力及变形的原因。焊接时焊缝和焊缝附近受热区的金属发生膨胀,由于四周较冷的金属阻止这种膨胀,在焊接区域内就发生压缩应力和塑性收缩变形,产生了不同程度的横向…

喜报!西门子低代码连续四年获评Gartner企业低代码应用平台魔力象限领导者

点击下载最新发布的Gartner魔力象限图™https://www.mendix.com/resources/gartner-magic-quadrant-for-low-code-application-platforms/?utm_mediumpr&utm_campaignMQ&utm_sourceMQ#formWrapper 想象一下,一个为持续数字化转型做好准备的组织会是什么样…

EXTI中断以及系统滴答定时器SysTick的配置和使用

前言 EXTI中断来判断按键按下 EXTI即外部中断/事件控制器,总共支持19个中断/事件请求。每一条中断线都有独立的使能和产生中断后的标志位。 上图可见,中断/时间线0-15,总共16条线分配给了IO,通过设置AFIO的AFIO_EXTICR1、AFIO_…

内核调试之Kdump的原理及配置

术语介绍生产内核(production kernel):产品或者线上服务器当前运行的内核。捕获内核(capture kernel):系统崩溃时,使用kexec启动的内核,该内核用于捕获生产内核当前内存中的运行状态…

【windows terminal】普通用户免密ssh登录阿里云linux服务器

创建用户 [rootxxx~]# adduser linuxcool创建密钥 使用如下命令创建密钥 [rootxxx~]# ssh-keygen -t rsa创建的密钥路径 Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. 将公钥导入authorized_keys&…

《Go 并发数据结构和算法实践》学习笔记 Day 2

系列文章目录 这是本周期内系列打卡文章的所有文章的目录 《Go 并发数据结构和算法实践》学习笔记 Day 1_jahentao的博客-CSDN博客 文章目录系列文章目录前言一、Skiplist是什么?(What)Skiplist的基本接口查找元素插入元素删除元素二、并行化改造1.并发查找2.并发删…

struts漏洞总结

目录 概述 struts2漏洞 S2-001 漏洞原理 复现 struts2漏洞 S2-005 原理 分析一下003 复现 struts2漏洞s2-007 struts2漏洞 S2-008 原理 复现 struts2漏洞 S2-009 原理 复现 struts2漏洞 S2-012 原理 复现 struts2漏洞 S2-013 原理 复现 struts2漏洞 S2-0…

闭包中的内存泄漏

一.闭包的内存泄漏 1.为什么有些AO对象就不会被销毁? 1)普通函数中 上述代码在执行foo函数的时候,内存中的过程。 执行完foo函数之后,foo的函数上下文被销毁了,那么就不会指向foo的AO对象了。 那么AO对象也会被销毁…

格创东智蝉联入选工信部工业互联网APP优秀解决方案名单

1月13日,工信部发布《2022年工业互联网APP优秀解决方案名单公示》,由格创东智研发的 “基于深度学习技术的 AI智能检测(天枢AI)APP 应用解决方案”、“面向泛半导体行业的设备自动控制(EAP)APP解决方案”入…

一文详解SPI通信原理

首先我们先了解一下单工、半双工、全双工是什么概念 概念:(Serial Peripheral Interface,串行外设接口),是一种全双工协议的外设总线,同步串行通信 单工:电视 半双工:呼叫机 全双工:电话 SPI是单主设备(Single Master)通信协议&#xff…

商业智能 BI 赋能年底的财务分析

职场中总有些不能说的秘密,比如月底和年底的时候,千万不要去惹财务!尤其是年底,财务部门需要统计分析一整年的费用支出和经营收入,各种结算分析,还有新一年的预算,数据量庞大、业务系统分散、报…

【SpringCloud14】SpringCloud Bus消息总线

1.概述(对于Config的加深和扩充) 1.1 分布式自动刷新配置功能 SpringCloud Bus配合SpringCloud Config使用可以实现配置的动态刷新 Spring Cloud Bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架,它整合了Java的事件处理机制和…

Web(八)

XML概念&#xff1a;Extensible Markup Language 可扩展标记语言可扩展&#xff1a;标签都是自定义的。 <user> <student>功能* 存储数据1. 配置文件2. 在网络中传输xml与html的区别1. xml标签都是自定义的&#xff0c;html标签是预定义。2. xml的语法严格&#xf…

使用 npm 包

小程序对 npm 的支持与限制 目前&#xff0c;小程序中已经支持使用npm 安装第三方包&#xff0c;从而来提高小程序的开发效率。但是&#xff0c;在小程序中使用npm包有如下3个限制: ① 不支持 依赖于Node.js内置库 的包 ② 不支持 依赖于浏览器内置对象 的包 ③不支持 依赖于C插…