【图像分类】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的影响:

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

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

相关文章

SpringMVC 拦截器详解

目录 一、介绍 二、过滤器与拦截器的简单对比 三、自定义拦截器 四、注册拦截器 五、案例演示-登录拦截器 5.1 自定义拦截器 5.2 注册拦截器 编写的初衷是为了自己巩固复习,如果能帮到你将是我的荣幸❣️ 一、介绍 SpringMVC提供的拦截器类似于JavaWeb中的过…

C++网络编程 TCP套接字基础知识,利用TCP套接字实现客户端-服务端通信

1. TCP 套接字编程流程 1.1 概念 流式套接字编程针对TCP协议通信,即是面向对象的通信,分为服务端和客户端两部分。 1.2 服务端编程流程: 1)加载套接字库(使用函数WSAStartup()),创建套接字&…

MySQL Windows版本下载及安装时默认路径的修改

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、MySQL 下载二、默认路径修改1、安装前准备【非常重要】2、启动安装程序总结1、MySQL下载2、MySQL默认路径修改前言 MySQL 被Oracle收购后,各种操作规范及约束也相应的跟着来了,这不,只…

【前端实习评审】对小说详情模块更新的后端接口压力流程进行了人群优化

大家好,本篇文章分享一下【校招VIP】免费商业项目“推推”第一期书籍详情模块 前端同学的开发文档周最佳作品。该同学来自安徽科技学院土木工程专业。本项目亮点难点: 1.热门书籍在更新点的访问压力; 2.书籍更新通知的及时性和有效性&#xf…

重学C++系列之友元

一、什么是友元 在C中,为了提高程序的效率,在一些场景下,引入友元,但同时类的封装性就会被破坏。 二、怎么实现友元 友元关键字(friend) // 在类中声明另一个类的成员函数来做为友元函数 // 以关键字&…

Centos部署Springboot项目详解

准备启动jar包,app.jar放入指定目录。 一、命令启动 1、启动命令 java -jar app.jar 2、后台运行 nohup java -jar app.jar >/dev/null 2>&1 & 加入配置参数命令 nohup java -Xms512M -Xmx512M -jar app.jar --server.port9080 spring.profiles…

基于鲸鱼优化算法的5G信道估计(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑…

Unity 工具之 NuGetForUnity 包管理器,方便在 Unity 中的进行包管理的简单使用

Unity 工具之 NuGetForUnity 包管理器,方便在 Unity 中的进行包管理的简单使用 目录 Unity 工具之 NuGetForUnity 包管理器,方便在 Unity 中的进行包管理的简单使用 一、简单介绍 二、NuGetForUnity 的下载导入 Unity 三、NuGetForUnity 在 Unity 的…

Jetbrains idea 代码关闭 注释自动渲染 导致换行不生效

方法1 关闭注释自动渲染 取消勾选 方法2 结尾使用 <br> 强制换行

vector使用

文章目录 vector的介绍vector的使用vector的初始化vector iterator迭代器的使用vector 空间增长问题vector的增删改查 迭代器失效总结 vector的介绍 文档介绍 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着…

【雕爷学编程】MicroPython动手做(02)——尝试搭建K210开发板的IDE环境3

4、下载MaixPy IDE&#xff0c;MaixPy 使用Micropython 脚本语法&#xff0c;所以不像 C语言 一样需要编译&#xff0c;要使用MaixPy IDE , 开发板固件必须是V0.3.1 版本以上&#xff08;这里使用V0.5.0&#xff09;, 否则MaixPy IDE上会连接不上&#xff0c; 使用前尽量检查固…

宝塔设置云服务器mysql端口转发,实现本地电脑访问云mysql

环境&#xff1a;centos系统使用宝塔面板 实现功能&#xff1a;宝塔设置云服务器mysql端口转发&#xff0c;实现本地电脑访问mysql 1.安装mysql、PHP-7.4.33、phpMyAdmin 5.0 软件商店》搜索 mysql安装即可 软件商店》搜索 PHP安装7.4.33即可&#xff08;只需要勾选快速安装&…

iOS开发-实现快速登录弹窗与微信微博QQ三方登录切换控件

iOS开发-实现快速登录弹窗与微信微博QQ三方登录切换控件。 之前开发中实现快速登录弹窗与微信微博等了切换控件。 一、效果图 二、实现代码 实现背景渐变UIBlurEffect self.blurEffect [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; self.effectView [[UIVisu…

linux上适用的反汇编调试软件(对标od)

ubuntu下类似于od软件 经过搜索&#xff0c;在Ubuntu上选用edb-debugger进行动态调试&#xff0c; 下载链接: https://github.com/eteran/edb-debugger 但是依赖反汇编引擎: https://github.com/capstone-engine/capstone 安装 先安装capstone 先下载release的版本&#xf…

基于量子同态加密的安全多方凸包协议

摘要安全多方计算几何(SMCG)是安全多方计算的一个分支。该协议是为SMCG中安全的多方凸包计算而设计的。首先&#xff0c;提出了一种基于量子同态加密的安全双方值比较协议。由于量子同态加密的性质&#xff0c;该协议可以很好地保护量子电路执行过程中数据的安全性和各方之间的…

组合模式-树形结构的处理

A公司需要筛选出年龄35岁及以上(如果是领导&#xff0c;年龄为45岁及以上)的人。其组织架构图如下。 图 A公司部分组织架构图 图 传统解决方案 public class Development {private String name;public Development(String name) {this.name name;}List<Employee> emplo…

需求分析案例:消息配置中心

本文介绍了一个很常见的消息推送需求&#xff0c;在系统需要短信、微信、邮件之类的消息推送时&#xff0c;边界如何划分和如何设计技术方案。 1、需求 一个系统&#xff0c;一般会区分多个业务模块&#xff0c;并拆分成不同的业务系统&#xff0c;例如一个商城的架构如下&am…

flutter(01) windows桌面版 编译环境安装指南

1 flutter环境安装 flutter官网参考&#xff1a;Install | Flutter 先下载flutter SDK>&#xff1a;flutter sdk下载--官网&#xff0c;之后解压到C:\Users\XXX\data&#xff08;这里以该路径为例&#xff0c;但可以为其他自定义路径&#xff09;目录下&#xff0c;在这里…

栈和队列模拟实现(C++)

文章目录 0.码云完整代码1.deque的认识1.1介绍1.2图析1.3性能比较 2.stack的学习2.1模拟实现2.2测试函数 3.queue的学习3.1模拟实现3.2测试函数 4.优先级队列的学习4.0仿函数的引入4.1介绍4.2例题4.3模拟实现 5.测试函数 0.码云完整代码 点击 栈 队列 优先级队列 跳转码云获取…

鸿鹄协助管理华为云与炎凰Ichiban

炎凰对华为云的需求 在炎凰日常的开发中&#xff0c;对于服务器上的需求&#xff0c;我们基本都是采用云服务。目前我们主要选择的是华为云&#xff0c;华为云的云主机比较稳定&#xff0c;提供的云主机配置也比较多样&#xff0c;非常适合对于不同场景硬件配置的需求&#xff…