【图像分类】CNN + Transformer 结合系列.1

介绍三篇结合使用CNN+Transformer进行学习的论文:CvT(ICCV2021),Mobile-Former(CVPR2022),SegNetr(arXiv2307).

CvT: Introducing Convolutions to Vision Transformers, ICCV2021

论文:https://arxiv.org/abs/2103.15808

代码:https://github.com/leoxiaobin/CvT

解读:CvT | CNN+Vision Transformer会有什么样的火花呢? - 知乎 (zhihu.com)

读论文之transformer系列-CvT:将卷积引入transformer_卷积transformer_dear_queen的博客-CSDN博客

简介

提出了一种新的架构,名为卷积视觉转换器(Convolutional vision Transformer,CvT),通过在视觉转换器(ViT)中引入卷积,以产生两种设计的最佳效果,从而提高了性能和效率。这是通过两个主要修改来实现的:包含新的卷积令牌嵌入的Transformer层次结构,以及利用卷积投影的卷积Transformer块。这些变化将卷积神经网络(cnn)的理想特性引入到ViT架构中(即移动、缩放和失真不变性),同时保持了transformer的优点(即动态关注、全局上下文和更好的泛化)。

做法

CvT设计在ViT架构的2个核心部分引入了卷积:

首先,将Transformer划分为多个阶段,形成一个分层结构的Transformer。每个阶段的开始由一个卷积Token嵌入组成,该卷积Token嵌入在一个二维重塑的Token映射上进行卷积操作(即,将Flattened的Token序列重塑回空间网格),然后是Layer Normalization。这个操作使得模型不仅可以捕获局部信息,而且还可以逐步减少序列长度,同时在不同阶段增加Token特征的维数,实现空间下采样,同时增加特征映射的数量。

其次,将Transformer模块中每个Self-Attention Block之前的线性投影替换为卷积投影,该卷积投影在二维重塑的Token映射上采用s×s深度可分卷积。这使得该模型在注意力机制中能够进一步捕获局部空间语义信息,减少语义歧义。它还允许管理计算复杂度,因为卷积的Stride可以用于对键和值矩阵进行子采样,以提高4倍或更多的效率,同时最小化性能的损失。

相关工作 

与现有工作相比,本文工作的目标是通过引入卷积,在图像域特定的归纳偏差,以达到最好的Transformer结构。表1显示了上述具有代表性作品和本文CvT在位置编码的必要性、Token嵌入类型、映射类型和Backbone中的Transformer结构方面的主要区别。

向CNN引入Self-Attention :Non-Local Network的设计是为了通过全局Attention来捕捉长期依赖关系。Local Relation Networks 根据local windows内像素/特征之间的组成关系(相似度)来进行权值聚合,而卷积层则在空间相邻的输入特征上采用固定的权值聚合。这种自适应权值聚合将几何先验引入到网络中,这对识别任务很重要。

本文则是向Transformer引入CNN:卷积被用来修改Transformer Block,或者用卷积层代替Multi-Head Attentions,亦或是以并行或顺序的方式增加额外的卷积层,以捕获局部关系。

本文推荐在Vision Transformer的2个主要部分引入卷积:

  • 首先,使用卷积投影操作取代现有的Position-wise线性投影;
  • 其次,类似于CNN,使用分层多级结构和不同分辨率的2D Reshaped Token Maps。

CvT 方法

在ViT架构中引入了2种基于卷积的操作,即卷积令牌嵌入(Convolutional Token Embedding)和卷积投影( Convolutional Projection)。如图2(a)所示,本文借鉴了CNN的多阶段层次设计,共采用了3个阶段:

  • 首先,输入图像经过卷积Token嵌入层,卷积层是将重构Token的重叠块卷积到二维空间网格作为输入(重叠程度可通过步长来控制)。对Token应用额外的LN(层归一化)。这允许每个阶段逐步减少Token的数量(即特征分辨率),同时增加Token的宽度(即特征维度),从而实现空间下采样和增加R的丰富度。
  • 然后,叠加一些卷积Transformer Block组成每个阶段的残差部分。图2(b)展示了卷积Transformer Block的架构,其中使用深度可分离的卷积运算,称为卷积映射,分别用于查询、键和值的嵌入,而不是ViT中标准的位置线性映射。
  • 最后,在最后阶段输出的分类标记上使用MLP来预测结果。

卷积令牌嵌入(Convolutional Token Embedding)

CvT中的卷积操作旨在通过一种类似CNNs的多级层次方法从Low-level到High-Semantic模拟局部空间Context。

卷积Token嵌入层允许通过改变卷积运算的参数来调整每个阶段的Token特征维数和数量。通过这种方式,在每个阶段逐步减少Token序列长度,同时增加Token特征维数。这使得Token能够在越来越大的空间上表示越来越复杂的视觉模式,类似于CNN的特征层。

卷积投影( Convolutional Projection)

卷积投影层的目标是实现对局部空间Context的额外建模,并通过允许K和V矩阵的欠采样来提高效率。

本文提出的Transformer块具有卷积映射是对原Transformer块的推广。用具有深度可分离卷积的Multi-Head Self-Attention(MHSA)代替原来的位置线性映射进而形成卷积映射层

图3(b)显示了本文提出的s×s卷积投影。如图3(b)所示,首先将Token重塑为2D Token Map。接下来,使用核大小为s的深度可分离卷积层来实现卷积映射。最后,映射后的Token被平展为1D以供后续处理。

 其中x是第i层Q/K/V矩阵的Token输入,x_i是卷积投影之前的未扰动Token,Conv2d是深度可分离卷积,其实现方式为:Depth-wise Conv2d—>BatchNorm2d—>Point-wise Conv2d,s为卷积核大小。

效率考虑

 本文设计的卷积投影层有2个效率上的好处:

  • 首先,利用了有效的卷积。直接使用标准的s×s卷积进行卷积映射需要s^2C^2个参数和O(s^2C^2T)的FLOPs,其中C是Token通道维数,T是要处理的Token数量。相反,将标准的s×s卷积分解为深度可分离的卷积。这样,与原始的位置线性映射相比每个卷积映射只会引入额外的s^2C个参数和O(s^2CT)的FLOPs,相对于模型的总参数和FLOPs,这些都可以忽略。
  • 其次,利用提出的卷积投影来减少MHSA操作的计算成本。s×s卷积投影允许通过使用大于1的步长来减少Token的数量。图3(c)显示了卷积投影,其中的key和value投影是通过步长大于1的卷积进行下采样的,文章对key和value投影使用步长2,而对query保持不变使用步长1。这样,key和value的token数量减少了4倍,以后的MHSA操作计算成本减少了4倍。这带来了最小的性能损失,因为图像中的邻近像素/补丁往往在外观/语义上有冗余。另外,所提出的卷积投影的局部Context建模可以弥补分辨率降低所带来的信息损失。

删除位置嵌入

对每个Transformer块引入卷积映射结合卷积Token嵌入能够通过网络建模局部空间关系。这个内置属性允许在不影响性能的情况下删除网络中嵌入的位置,从而简化了具有可变输入分辨率的视觉任务的设计。

模型架构

实验

Mobile-Former: Bridging MobileNet and Transformer, CVPR2022

论文:https://arxiv.org/abs/2108.05895

代码:https://github.com/AAboys/MobileFormer

解读:微软提出Mobile-Former | MobileNet和Transformer的并行设计,可以实现局部和全局特征的双向融合,性能远超MobileNetV3等轻量级网络! - 知乎 (zhihu.com)

CVPR 2022 | Mobile-Former来了!微软提出:MobileNet+Transformer轻量化并行网络 - 知乎 (zhihu.com)

CVPR2022 | Mobile-Former:连接MobileNet和Transformer(微软&中科大提出) - 知乎 (zhihu.com)

简介

提出Mobile-Former,一种通过双线桥将MobileNet和Transformer并行的结构。这种方式融合了MobileNet局部性表达能力和Transformer全局表达能力的优点,这个桥能将局部性和全局性双向融合。和现有Transformer不同,Mobile-Former使用很少的tokens(例如6个或者更少)随机初始化学习全局先验,计算量更小。

如何设计有效的网络来有效地编码局部处理和全局交互?一个简单的想法是将卷积和Vision Transformer结合起来。最近的研究表明,将卷积和Vision Transformer串联在一起,无论是在开始时使用卷积,还是将卷积插入到每个Transformer块中都是有益的。

本文将设计范式从串联向并联转变,提出了一种新的MobileNet和Transformer并行化,并在两者之间建立双向桥接,命名为Mobile-Former,其中Mobile指MobileNet, Former指transformer。Mobile以图像为输入堆叠mobile block(或inverted bottleneck)。它利用高效的depthwise和pointwise卷积来提取像素级的局部特征。前者以一些可学习的token作为输入,叠加multi-head attention和前馈网络(FFN)。这些token用于对图像的全局特征进行编码。

Mobile-Former是MobileNet和Transformer的并行设计,中间有一个双向桥接。这种结构利用了MobileNet在局部处理和Transformer在全局交互方面的优势。 并且该桥接可以实现局部和全局特征的双向融合。

结合提出的轻量级交叉注意力对桥接进行建模,Mobile-Former不仅计算效率高,而且具有更强的表示能力,在ImageNet分类上从25M到500MFLOPs的低 FLOPs机制下优于MobileNetV3。

Mobile-Former方法

Mobile-Former将MobileNet和transformer并行化,并通过双向交叉注意力将两者连接起来(见图1)。Mobile-former中,Mobile(简称MobileNet)以一幅图像作为输入(X_0 \in R^{H*W*3}),采用inverted bottleneck block提取局部特征。前者(指transformer)以可学习参数(或token)作为输入,记为Z_0 \in R^{M*d},其中d和M分别为token的维数和数量。这些token被随机初始化,每个token表示图像的全局先验。这与Vision Transformer(ViT)不同,在ViT中,token线性地投射局部图像patch。这种差异非常重要,因为它显著减少了token的数量从而产生了高效的Former。 

低成本双线桥(Low Cost Two-Way Bridge)

Mobile和Former通过双线桥将局部和全局特征双向融合。这两个方向分别表示为Mobile→Former和Mobile←Former。利用cross attention的优势融合局部特性(来自Mobile)和全局token(来自Former)。这里为了降低计算成本介绍了2个标准cross attention计算:

  1. 在channel数较低的MobileNet Bottlneck处计算cross attention;
  2. 在Mobile position数量很大的地方移除预测(W^Q_i,W^Q_i,W^V_i),但在Former中保留。

Mobile-Former块

Mobile-Former由Mobile-Former块组成(见图1)。每个块包含四部分:Mobile子块、Former子块以及双向交叉注意力Mobile←Former和Mobile→Former(如图3所示)。

输入和输出: Mobile-Former块有2个输入:

  1. 局部特征图X_i \in R^{L*C},具有C通道和L空间位置(L=hw,其中h和w为特征图的高度和宽度);
  2. 全局token Z_i \in R^{M*d},其中M和d分别是token的数量和维数。

Mobile-Former块输出更新后的局部特征映射为X_{i+1}和全局tokenZ_{i+1},用作下一个(i+1)块的输入。注意,全局token的数量和维度在所有块中都是相同的。

Mobile sub-block: Mobile子块以feature map X_i为输入。与MobileNet中的inverted bottleneck block略有不同,在第一次pointwise卷积和3×3深度卷积后用dynamic ReLU代替ReLU作为激活函数。

与原来的dynamic ReLU不同,在平均池化特征上使用两个MLP层生成参数,而在前者输出的第一个全局token上使用2个MLP层(图3中的θ)保存平均池化。注意,对于所有块,深度卷积的核大小是3×3。将Mobile sub-block的输出表示为X_i^{hidden},作为Mobile Former的输入(见图3),其计算复杂度为O(2LEC^2 + 9LEC),其中L为空间位置数,E为通道展开比,C为展开前通道数。

Former sub-block: Former子块是一个标准的Transformer块,包括一个多头注意力(MHA)和一个前馈网络(FFN)。在FFN中,膨胀率为2(代替4)。使用post层归一化。Former在Mobile→Former和Mobile←Former之间处理(见图3)。其复杂性为O(M^2d + Md^2)。

Mobile→Former:文章提出的轻量级交叉注意力(式1)用于将局部特征X融合到全局特征 tokens Z。与标准注意力相比,映射矩阵的键W^K和值 W^V(在局部特征X上)被移除以节省计算(见图3)。

Mobile←Former:这里的交叉注意力(式2) 与Mobile→Former的方向相反,其将全局tokens融入本地特征。局部特征是查询,全局tokens是键和值。因此,我们保留键W^K和值W^V中的映射矩阵,但移除查询W^Q的映射矩阵以节省计算,如图3所示。

计算复杂度:Mobile-Former块的四个核心部分具有不同的计算成本。给定输入大小为HW×C的特征图,以及尺寸为d的M个全局tokens,Mobile占据了大部分的计算量O(HWC^2)。Former和双线桥是重量级的,占据不到总计算成本的20%。具体而言,Former的自注意力和FFN具有复杂度 O(M^2d+Md^2)。 Mobile→Former和Mobile←Former共享交叉注意力的复杂度O(MHWC+MdC)

架构

表1显示了一个Mobile-Former架构,图像大小为224×224,294M FLOPs,以不同的输入分辨率堆叠11个Mobile-Former块。所有块都有6个维度为192的全局tokens。它以一个3×3的卷积作为stem和第一阶段的轻量瓶颈块,首先膨胀,然后通过3×3 depth-wise卷积和point-wise卷积压缩通道数。第2-5阶段包括 Mobile-Former块。每个阶段的下采样,表示为Mobile - Former↓ 。分类头在局部特征应用平均池化,首先和全局tokens concat到一起,然后经过两个全连接层,中间是h-swish激活函数

 Mobile-Former用于目标检测:

Mobile-Former变体:

实验

SegNetr: Rethinking the local-global interactions and skip connections in U-shaped networks, arXiv2307

论文:https://arxiv.org/abs/2307.02953

代码:暂未开源

解读:SegNetr来啦 | 超越UNeXit/U-Net/U-Net++/SegNet,精度更高模型更小的UNet家族 - 知乎 (zhihu.com)

SegNetr: Rethinking the local-global interactions and skip connections in U-shaped networks - 知乎 (zhihu.com)

简介

近年来,U型网络因其结构简单、易于调整而在医学图像分割领域占据主导地位。然而,现有的U形分割网络

  • 多集中于设计复杂的自注意模块来弥补基于卷积运算的长期依赖性的不足,这增加了网络整体的参数数量和计算复杂度;
  • 简单地融合编码器和解码器的特征,忽略了它们空间位置之间的联系。

论文对上述问题进行了反思,构建了一种轻量级医学图像分割网络SegNetr,具体来说,

  • 作者引入了一种新型的SegNetr块,它可以在任何阶段动态地执行局部-全局交互,并且只需线性复杂度。
  • 同时,作者设计了一种通用的信息保留远跳连接Information Retention Skip Connection(IRSC),以保留编码器特征的空间位置信息并实现与解码器特征的精确融合。

在四个主流医学图像分割数据集上验证了SegNetr的有效性,其参数和GFLOPs分别比普通U-Net少59%和76%,同时获得了与最先进方法相当的分割性能

作者重新设计了基于窗口的局部全局交互,并将其插入到纯卷积框架中,以弥补卷积在捕捉全局特征方面的不足,并降低自注意力操作产生的高计算成本。

通过改进以下两个方面来提高U-shaped网络的效率和性能:

  • 局部-全局交互。网络通常需要处理医学图像中不同大小的目标,而局部全局交互可以帮助网络更准确地理解图像的内容。
  • 编码器-解码器之间的空间连接。使用编码器-解码器之间的空间信息可以获得语义上更强和位置上更准确的特征。

基于以上分析,本文对U-shaped网络的设计进行了重新思考。具体来说,作者构建了轻量级的SegNetr(带Transformer的分割网络)块,以在non-overlapping的窗口上动态学习局部全局信息,并保持线性复杂性。作者提出了Information Retention Skip Connection(IRSC),它专注于编码器和解码器空间位置之间的连接,保留更多的原始特征,以帮助在上采样阶段恢复特征图的分辨率。

本文的贡献可以总结如下:

  • 作者提出了一种计算成本更低、分割性能更好的轻量级U-shaped SegNetr分割网络;
  • 作者研究了传统的U-shaped Skip Connection框架的潜在缺陷,并改进了具有信息保留的Skip Connection;
  • 当作者将本文提出的分量应用于其他U-shaped方法时,分割性能得到了一致的提高。

SegNetr方法

SegNetr是一个分层的U-shaped网络,其重要组成部分包括SegNetr块和IRSC。SegNetr块通过并行的局部-全局分支进行交互。IRSC保留了编码器特征的位置信息,并实现了与解码器特征的精确融合。

为了使网络更加轻量级,作者使用MBConv作为基础卷积构建模块。SegNetr块在编码器和解码器阶段实现了动态的局部-全局交互。Patch合并用于在不丢失原始图像信息的情况下将分辨率降低两倍。

IRSC用于融合编码器和解码器特征,随着深度的加深减少网络丢失的详细信息。

SegNetr Block

受窗口注意力方法的启发,作者构造了只需要线性复杂性就能实现局部全局交互的SegNetr块。设输入特征图为X \in R^{H*W*C}。作者首先使用MBConv提取特征X_{MBConv} \in R^{H*W*C},与通常的卷积层相比,它提供了非显式的位置编码。

局部交互可以通过计算non-overlapping的patch的注意力矩阵(P表示patch大小)来实现。

  • 首先,作者使用无计算成本的局部分区(LP)操作将X_{MBConv}划分为一系列空间连续的Patch( \frac{H*W}{P*P},P,P,C)(图1显示了P=2的Patch大小)。
  • 然后,作者对通道维度的信息进行平均,并对空间维度进行flatten,以获得(\frac{H*W}{P*P},P*P),将其输入到FFN中进行线性计算。由于通道方面的重要性在MBConv中进行了权衡,因此作者在执行局部交互时重点关注空间注意力的计算。
  • 最后,作者使用Softamx来获得空间维度的概率分布,并对输入特征X_{MBConv}进行加权。这种方法不仅有利于并行计算,而且更纯粹地关注局部空间的重要性。

考虑到局部交互是不够的,并且可能存在不足的问题,作者还设计了并行的全局交互分支。首先,作者使用全局分区(GP)操作来聚合空间上的非连续Patch。GP将窗口位移的操作添加到LP中,目的是改变特征在空间中的总体分布(图中的全局分支1显示了位移后Patch空间位置的变化)。对于水平方向上的奇数patch,位移规则为向左一个窗口(对于向右的偶数patch,反之亦然),对于垂直方向上的奇patch,向上一个窗口,向下一个窗口。请注意,patch的位移不具有任何计算成本,并且仅发生内存变化。

与Swin Transformer的滑动窗口操作相比,作者的方法在本质上更具全局性。然后,作者将空间移位的特征图分解为2P(\frac{H*W}{P*P},2P,2P,C)块,并执行全局注意力计算(类似于局部交互分支)。尽管相对于局部交互操作,全局交互在更大的窗口上计算注意力矩阵,但所需的计算量远小于标准自注意力模型的计算量。

局部和全局分支最终通过加权求和进行融合,在此之前,需要通过LP和GP反转操作(即局部反转(LR)和全局反转(GR))来恢复特征图形状。此外,作者的方法还采用了 Transformer 的有效设计,如范数、前馈网络(FFN)和残差连接。

大多数Transformer模型使用固定大小的Patch,但这种方法限制了它们在早期阶段关注更广泛的区域。本文通过应用动态大小的Patch来缓解这个问题。在编码器阶段,作者依次使用(8,4,2,1)的Patch来计算局部注意力,全局分支将Patch扩展到(16,8,4、2)的大小。为了减少超参数设置,解码器的Patch与相应级的编码器Patch具有相同的大小。

Information Retention Skip Connection (IRSC)

 图2显示了3种不同类型的Skip Connection。U-Net在编码器和解码器的相应阶段拼接通道维度,允许解码器在执行上采样时保留更高分辨率的细节信息。SegNet通过在编码器中保留下采样过程的位置信息来帮助解码器恢复特征图分辨率。

作者设计IRSC以考虑这两个特征,即在实现浅特征和深特征融合的同时保留编码器特征的位置信息。具体地说,编码器中的Patch合并(PM)操作将输入特征图X_{in} \in R^{H*W*C}的分辨率降低到原始分辨率的2倍,而通道维度扩展到原始维度的4倍,以获得X_{PM} \in R^{H/2*W/2*4C}。PM操作的本质是在没有任何计算成本的情况下将空间维度上的信息转换为通道表示,并保留输入特征的所有信息。

IRSC中的Patch反向(PR)用于恢复编码器的空间分辨率,它是与PM的倒数运算。作者交替选择XPM的一半通道数(即H/2*W/2*4C)作为PR的输入,一方面可以减少编码器中的冗余特征,另一方面可以对齐解码器中的特征通道数。与传统的上采样方法相比,PR在很大程度上减少了信息丢失的问题,同时提供了准确的位置信息。最后,将PR的输出特征X_{PR} \in R^{H*W*C/2}与解码器的上采样特征融合,用于下一阶段的学习。

实验

 局部-全局交互作用的影响:通过添加局部或全局交互,提高了网络对不同类别的分割性能。

 patch size的影响 和 IRSC的影响:

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

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

相关文章

Windows bat 查找文件被哪个进程占用,并终止该进程

一、背景 我有个批处理脚本如下: echo off chcp 936 & cls cd /D F:\Chen\python3\ExciseC set fdate%date:~0,4%%date:~5,2%%date:~8,2% python main.py >> crawl_record_%fdate%.log 2>&1 for /F %%f in (dir crawl_record_*.log /B ^| find /…

机器学习——异常检测

异常点检测(Outlier detection),⼜称为离群点检测,是找出与预期对象的⾏为差异较⼤的对象的⼀个检测过程。这些被检测出的对象被称为异常点或者离群点。异常点(outlier)是⼀个数据对象,它明显不同于其他的数据对象。异…

Linux工具【1】(编辑器vim、编译器gcc与g++)

vim详解 引言vimVim的三种模式及模式切换普通模式下操作底行模式下操作 gcc与ggcc的使用(g类似)预编译编译汇编链接静态库与动态库 总结 引言 vim(vi improved)编辑器是从 vi 发展出来的一个文本编辑器。 代码补全、编译及错误跳…

opencv python 训练自己的分类器

源码下载 一、分类器制作 1.样本准备 收集好你所需的正样本,和负样本,分别保存在不同文件夹 在pycharm新建项目,项目结构如下:has_mask文件夹放置正样本,no_mask文件夹放置负样本 安装opencv,把opencv包…

Day.4 刷题练习(自守数)

题目: 例子: 分析题目: 主要目的:给定一个范围小于等于N,在这个范围中找自守数(自身等于平方后的尾部数据如5:5 ^ 2 25 , 然后 5 与 平方的后的尾部相等) 思路&#x…

ancos注册中心、网关和静态化freemarker、对象存储服务MinIO

1、docker安装ancos ①:docker拉取镜像 docker pull nacos/nacos-server:1.2.0②:创建容器 docker run --env MODEstandalone --name nacos --restartalways -d -p 8848:8848 nacos/nacos-server:1.2.0③:访问地址:http://192…

Qt : day4

1.思维导图 2.服务器 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化空间server new QTcpServer(this);}Widget::~Widget() {delete ui;…

下级平台级联视频汇聚融合平台EasyCVR,层级显示不正确的原因排查

视频汇聚平台安防监控EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、WebRTC等…

【计算机网络】第 3 课 - 计算机网络体系结构

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、常见的计算机网络体系结构 2、计算机网络体系结构分层的必要性 2.1、物理层 2.2、数据链路层 2.3、网路层 2.4、运输层 2…

Sentinel nacos spring cloud 持久化配置---分布式/微服务流量控制

文章目录 sentinel控制台安装目标实现代码地址版本说明maven spring-cloud-starter-alibaba-sentinel依赖yml文件Nacos业务规则配置看源码配置规则SentinelProperties 总配置加载DataSourcePropertiesConfiguration 配置标准的nacos配置注册具体sentinel配置 外传 sentinel控制…

Chrome 115 有哪些值得关注的新特性?

今天带大家一起来了解一下 Chrome 115 值得关注的新特性。 滚动动画 用滚动驱动的动画是网站上非常常见的用户体验模式,比如当页面向前或向后滚动时,对应的动画也会向前或向后移动。 比如下面图中这种比较常见的,页面顶部的进度条随着滚动…

华为OD机试真题 Java 实现【数字涂色】【2022Q4 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷)》。 刷的越多&…

Flowable-UI

title: Flowable-UI date: 2023-7-23 12:19:20 tags: - Flowable Flowable-UI 安装 手把手教大家画了这样一个流程图,虽然说它不是特别好用,但是也不是不能用,也能用。好了,那么接下来的话,我们这个就先告一个段落&…

客户方数据库服务器CPU负载高优化案例

客户方数据库服务器CPU负载高优化案例 背景 上周线上服务出现一个问题,打开某个页面,会导致其它接口请求响应超时,排查后发现数据库响应超400s,之前1s就可查到数据。 具体原因是有个大屏统计页面,会实时查看各业务服…

Netty学习(三)

文章目录 三. Netty 进阶1. 粘包与半包1.1 粘包现象服务端代码客户端代码 1.2 半包现象服务端代码客户端代码 1.3 现象分析粘包半包缘由滑动窗口MSS 限制Nagle 算法 1.4 解决方案方法1,短链接方法2,固定长度方法3,固定分隔符方法4&#xff0c…

QT之QMediaPlayer使用播放音频

简介 使用QMediaPlayer播放MP3格式音乐。 播放相关状态流程简述 操作:m_pMediaPlayer->setMedia(); (初始化加载,为play()) 状态: __onMediaChanged QUrl(“qrc:/sounds/Sounds/Big.mp3”) __onMediaStatusChang…

【javaSE】初识Java

目录 Java是什么 Java语言发展简史 初识Java的main方法 运行Java程序 JDK、JRE、JVM之间的关系 Java中的标识符 Java是什么 Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义. 不仅如此,Java还是一个有一系列计算机软件和规…

Psim 2022仿真软件的安装--Psim电力仿真实战教程

文章目录 Psim 2022 仿真软件安装及使用教程软件介绍1.下载psim 2022安装软件,有需要的亲请联系作者。2.点击安装文件3.点击进行安装:4.安装完成,打开软件,开始仿真5.仿真模型介绍5.1.单相全控整流电路仿真5.2 三相PFC可控整流电路…

红黑树深入剖析【C++】

目录 一、红黑树概念 二、红黑树节点结构设计 三、插入操作 处理情况1 处理情况2 处理情况3 插入总结: 四、插入操作源码 五、红黑树验证 一、红黑树概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色&#xff0…

Selenium+Java环境搭建(测试系列6)

目录 前言: 1.浏览器 1.1下载Chrome浏览器 1.2查看Chrome浏览器版本 1.3下载Chrome浏览器的驱动 2.配置系统环境变量path 3.验证是否成功 4.出现的问题 结束语: 前言: 这节中小编给大家讲解一下有关于Selenium Java环境的搭建&…