LSKA(大可分离核注意力):重新思考CNN大核注意力设计

文章目录

  • 摘要
  • 1、简介
  • 2、相关工作
  • 3、方法
  • 4、实验
  • 5、消融研究
  • 6、与最先进方法的比较
  • 7、ViTs和CNNs的鲁棒性评估基准比较
  • 8、结论

摘要

https://arxiv.org/pdf/2309.01439.pdf
大型可分离核注意力(LSKA)模块的视觉注意力网络(VAN)已被证明在各种基于视觉的任务上提供了卓越的性能,超过了视觉转换器(ViTs)。然而,这些LSKA模块中的逐深度卷积层随着卷积核尺寸的增加,计算和内存占用呈二次增长。为了缓解这些问题,并使VAN的注意力模块能够使用极大的卷积核,我们提出了一种大型可分离核注意力模块,称为LSKA。LSKA将深度卷积层的2D卷积核分解为级联的水平1D和垂直1D内核。与标准LKA设计不同,提出的分解使得可以直接使用注意力模块中的深度卷积层的大内核,而不需要任何额外的块。我们证明,与标准LKA模块相比,VAN中的提议LSKA模块可以获得相当的性能,并降低计算复杂性和内存占用。我们还发现,随着内核尺寸的增加,提议的LSKA设计使VAN更加偏向于对象的形状而不是纹理。此外,我们对LKA和LSKA在VAN、ViTs和最近的ConvNeXt上的鲁棒性进行了基准测试,这些基准测试在以前的工作中很大程度上没有被探索过。我们的实验结果表明,当内核尺寸增加时,VAN中的提议LSKA模块显著降低了计算复杂性和内存占用,同时超过了ViTs、ConvNeXt,并与VAN中的LKA模块在对象识别、对象检测、语义分割和鲁棒性测试上提供了类似的性能。代码可在https://github.com/StevenLauHKHK/Large-Separable-Kernel-Attention获得。

1、简介

在过去的十年里,卷积神经网络(CNN)的结构和优化技术得到了迅速发展。这种演变来自于激活函数的设计[1] - [3],提出了CNN参数的正则化方法[4] - [6],构建了新的优化方法[7] - [9],代价函数[10] - [12],以及新的网络结构[13] - [17]。CNN中的大多数突破都围绕着人类认知过程,特别是人类视觉系统。

由于平移等变性(translational equivariance)和局部性(locality)属性,CNN是各种基于视觉的任务的特征编码器的常见选择,包括图像分类[13] - [15]、语义分割[18] - [21]和目标检测[22][25]。通过使用注意力机制,可以进一步提高CNN在这些基于视觉的任务中的性能。例如,作者在[26] - [30]中表明,注意力机制通过产生与人类眼睛和大脑一致的显著区域来提高CNN的性能。虽然带有注意力机制的CNN正在取得成效,但最近在视觉领域对自注意力网络的适应性的增加,例如视觉转换器(ViT)及其变体[31][32],在图像分类、目标检测和语义分割方面已经超过了CNN。与CNN相比,ViT的优越性能归因于Multi-Head-Self-Attention(MHSA)作为其关键组件的更好的缩放行为[33]。然而,ViT在视觉领域中的有效性是以高分辨率输入图像时计算和内存占用呈二次增长为代价的。尽管如此,像Swin-Transformer这样的ViT的有效性[32]重新打开了重新探索自VGG网络引入以来一直处于阴影下的CNN的设计选择的大门[33]。

与CNN相比,ViT在图像分类方面取得成功的其中一个主要原因是其能够模拟输入图像的长程依赖性。CNN中可以通过使用具有注意力机制的大感受野来模拟这种长程依赖性[34]。CNN中的大感受野可以通过堆叠许多卷积操作[28]或使用较大的内核大小[35]获得。虽然前者可能导致模型大小的增加,但后者由于其内存和计算需求而被认为成本过高。然而,在最近的一项研究中,作者表明,CNN中的大内核可以通过连接级联的深度卷积和扩张深度卷积来模拟,而不会导致计算和内存使用量的二次增加[34]。他们提出的视觉注意力网络(VAN)使用具有简单注意力机制的一组内核,称为大核注意力(LKA),如2c所示。LKA模块采用具有小感受野内核的标准深度卷积来捕捉局部依赖性并补偿网格问题[36],然后是具有大感受野内核的扩张深度卷积来模拟长程依赖性。这种深度卷积和扩张深度卷积的组合相当于所提出的大规模CNN内核[33][35]。扩张深度卷积的输出馈送到1×1卷积以推断注意力图。然后将输出注意力图乘以输入特征以进行自适应特征细化。
在这里插入图片描述

带有LKA的VAN已被证明在图像分类、目标检测和语义分割方面优于最先进的ViTs和CNN。然而,如[35]所指出的,大尺度深度卷积核的朴素设计仍然会引起高计算量和内存使用量,降低模型效率随着核大小的增加。我们的初步结果如图1所示,与[35]的初步结果相符,我们发现VAN的LKA模块中深度卷积的设计(不使用深度膨胀卷积)对于大到35×35和53×53的核大小来说计算效率低下。

在本文中,我们首先研究了带有简单注意力模块的深度卷积在VAN中对大核大小的效果。我们将这种带有大核和注意力模块的深度卷积设计称为LKA-trivial。其次,我们提出了VAN中的分离式深度卷积版本。分离式深度卷积将给定的k×k卷积核均匀地分为1×k和k×1个可分离的卷积核,这些卷积核在输入特征上以级联方式起作用。在其他因素保持不变的情况下,VAN中LKA-trivial模块的提出的分离式深度卷积显著减少了随着核尺寸增加的参数数量的二次增长。我们将这种修改后的设计称为LSKA-trivial。此外,这种内核分解类型还与深度膨胀卷积兼容,允许我们在VAN中提出LKA模块的完全可分离版本。我们将这种提出的LKA模块的可分离版本称为LSKA。我们发现,即使在更大的核大小下,提出的LSKA版本的LKA也能在VAN中获得类似的性能,同时计算效率更高。此外,在更大的核大小下,提出的LSKA模块增强了输入图像的长程依赖性,而不会引起高昂的计算和内存使用量。

为了正式说明提出的LSKA在VAN中的有效性,我们对一系列下游任务进行了广泛的评估,并将LSKA与LKA在VAN中进行对比。我们还调查了所提出的LSKA和其他基线模型(如VAN中的LKA、ViTs [32]、[37]–[39]和ConvNeXt [33])在各种失真数据集(如常见杂质、语义转移和未在先前工作中探索的分布自然对抗性示例)上的鲁棒性。我们工作的贡献可以总结如下:

  • 1)我们解决了深度卷积核随着核大小的增加在LKA-trivial和LKA in VAN中的计算效率问题。我们通过将k×k卷积核替换为级联的1×k和k×1卷积核,有效降低了LKA-trivial和LKA in VAN中随着核尺寸增加而产生的参数数量的二次增长,同时没有性能下降。
  • 2)我们在各种基于视觉的任务(包括图像分类、目标检测和语义分割)上实验验证了LSKA在VAN中的有效性。我们证明,与原始LKA中的小核相比,LSKA可以从大核中受益,同时保持相同的推理时间成本。
  • 3)我们对包含各种图像扰动的5个多样化ImageNet数据集进行基准测试,其中包括LKA-based VAN、LSKA-based VAN、ConvNeXt和最先进的ViTs。我们的结果表明,与先前的大的卷积核CNN和ViTs相比,LSKA-based VAN是一个鲁棒的学习器。
  • 4)我们提供的定量证据表明,与ViTs和以前的大核cnn相比,基于lska的VAN中由大核学习的特征编码了更多的形状信息和更少的纹理。此外,在特征表示中编码的形状信息的数量与对不同图像失真的鲁棒性之间存在高度相关性。这一证据有助于我们解释为什么基于lska的VAN是一个健壮的学习器。

本文的其余部分组织如下。在第二节中,我们介绍了在大型内核设计和关注网络方面所做的最新工作。第3节介绍了我们提出的用于VAN的LSKA设计,第4节给出了实验结果。第5节提供了不同大核分解方法和核尺寸的消融研究。第六节与最先进的模式作了比较。第七节展示了LSKA-VAN、cnn和ViTs之间的鲁棒性比较。最后,我们在第八节结束我们的工作。

2、相关工作

A.带有大核的CNN

在过去的十年中,为了改进卷积神经网络(CNN)架构以适应一般的图像识别任务,已经做了大量的研究工作。除了AlexNet [13]和Inception [14]网络之外,这些CNN架构中的核设计主要局限于3×3(例如VGG [40]、ResNet [15]、MobileNets [41]),这是因为它具有随着权重层深度的增加而提高的计算效率。为了尝试使用较大的核大小,文献[42]中的作者提出了一个由相对较大的7×7核组成的局部关系网络(LR-Net)。尽管其性能优于传统的ResNets(具有相同的核大小),但当核大小进一步增加时,LR-Net的性能下降了。为了弥补层次变换器和CNN之间的性能差距,ConvNeXt [33]通过逐渐将Transformer的设计引入ResNet来进行实证研究。他们发现了几个关键组件,可以改善CNN的性能,例如改变训练过程(如Swin Transformer)、改变阶段计算比率、使用更少的激活和归一化层以及使用更大的核大小。与LR-Net类似,他们发现当核大小超过7×7时,性能会趋于饱和。

最近,[35]中的作者重新审视了长期以来被忽视的大型核CNN设计。他们证明,在MobileNetV2中,通过将一组小型权重核替换为少数重新参数化的大型权重核,可以获得大型的有效感受野(ERFs),并部分模拟人类对物体形状的理解。他们提出的大型核网络(ReplkNet)具有31×31的大型核大小,在ImageNet分类上比Swin Transformer高出0.3%,在MS-COCO检测上比ResNet-101高出4.4%。然而,ReplkNet会产生高昂的计算开销,从而限制了其在其他领域(如分割)的有效性。例如,[43]的作者表明,原始的大型核卷积会损害分割任务的性能,因为随着核大小的增加,参数大小增加导致模型出现过度拟合问题。为了解决这个问题,他们提出了具有大型1×k和k×1卷积核的全局卷积网络(GCN) [43],以提高语义分割性能。

最近的一项工作,SLaK [44],观察到随着核大小增加到31、51和61以上,ReplkNet [35]的性能开始趋于平稳。为了解决大型核的可训练性问题,SLaK将大型核分解为两个矩形核(即51×5和5×51),并使用动态稀疏技术来减少可学习参数。与这些方法不同,我们在基于CNN的视觉注意力网络(VAN)中采用可分离核进行深度卷积和深度膨胀卷积,并引入注意力模块,以进一步提高其计算效率。

B.大核注意机制

注意力机制被用于选择图像中最重要区域。通常,它们可以分成四类:空间注意力 [26]、[28]、[29]、[31],通道注意力 [26]、[27]、[45],时间注意力 [46]、[47] 和分支注意力 [48]、[49]。在这里,我们更关注通道注意力和空间注意力,因为它们与我们的工作更相关。通道注意力关注模型层的“什么”语义属性。由于特征图的每个通道都是一个检测器的响应图,也称为滤波器 [50],通道注意力机制允许模型关注跨通道的特定对象属性 [27]。与通道注意力不同,空间注意力关注模型应该关注“在哪里”语义相关的区域。STN [29]、GENet [51] 和非局部神经网络 [28] 是涉及不同类型空间注意力方法的一些代表性作品。

自注意力[52]是一种空间注意力,已应用于CNN和ViTs [31],[32]。视觉注意力网络(VAN) [34]提出了一种新的CNN主干网络,该网络结合了CNN的属性和自注意力模块。作者采用了具有大型核注意力(LKA)模块的CNN网络架构,以实现CNN的局灶性、长程依赖性和自注意力模块的空间适应性特性,类似于ViTs。此外,LKA模块具有通道适应性,这在标准的CNN和变压器中的自注意力模块中并不自然存在。为了提高计算效率,LKA采用具有深度卷积的膨胀卷积[53](DW-D-Conv)来实现更大的有效感受野(ERFs)。

即使VAN在图像分类、目标检测和语义分割方面比一系列transformer网络(如PVT-V2 [37]、Swin Transformer [32]和Twins-SVT [54])取得了更好的性能,我们的工作表明,LSKA可以进一步降低VAN的计算复杂性,同时不损失任何性能。

3、方法

在本节中,我们首先讨论如何通过使用1D卷积核来设计LSKA模块来重构LKA模块(使用和不使用扩展深度卷积)。然后总结了LSKA模块的几个关键特性,并分析了LSKA模块的复杂度。
A.制定

在这里插入图片描述

我们首先设计基本的LKA块,不使用膨胀深度卷积,如图2a所示。给定一个输入特征图 F ∈ R C × H × W F \in \mathbb{R}^{C \times H \times W} FRC×H×W,其中C是输入通道数,H和W分别表示特征图的高度和宽度,设计LKA的简单方法是在2D深度卷积中使用大的卷积核。使用等式1-3可以获得LKA的输出。
Z C = ∑ H , W W k × k C ∗ F C (1) Z^{C}=\sum_{H, W} W_{k \times k}^{C} * F^{C} \tag{1} ZC=H,WWk×kCFC(1)

A C = W 1 × 1 ∗ Z C (2) A^{C} =W_{1 \times 1} * Z^{C} \tag{2} AC=W1×1ZC(2)

F ˉ C = A C ⊗ F C (3) \bar{F}^{C} =A^{C} \otimes F^{C} \tag{3} FˉC=ACFC(3)

其中 * 和 ⊗ \otimes 分别代表卷积和哈达玛积。 Z C Z^{C} ZC 是通过将大小为 k × k k \times k k×k 的核 W 与输入特征图 F 进行卷积获得的深度卷积的输出。值得注意的是,F 中的每个通道 C 都按照 [41] 中的方式与核 W 中的相应通道进行卷积。等式1中的 k 也代表核 W 的最大感受野。然后使用 1 × 1 1 \times 1 1×1 的卷积核进行卷积以获得注意力图 A C A^{C} AC 。LKA 的输出 F ˉ C \bar{F}^{C} FˉC 是注意力图 A C A^{C} AC 和输入特征图 F C F^{C} FC 的哈达玛积。可以发现,LKA 模块中的深度卷积将导致计算复杂度随着核大小的增加而呈二次方增长。我们称这种设计为 LKA-trivial,以区别于 [34] 中提到的实际设计。可以很快发现,在 VAN 中,增加 LKA-trivial 中的核大小将导致计算复杂度呈二次方 ( k 2 k^{2} k2) 增长(参见图 3)。

为了减轻LKA-trivial中大核大小深度卷积的计算成本高的问题,作者在[34]中提出将大核大小的深度卷积分解为小核大小的深度卷积,然后是具有相当大核大小的膨胀深度卷积(图2c)。这种大核分解有助于减轻深度卷积单独使用大核大小而导致的计算成本二次方增加的问题。如[34]所述,LKA的输出可以如下所示获得。

Z ˉ C = ∑ H , W W ( 2 d − 1 ) × ( 2 d − 1 ) C ∗ F C (4) \bar{Z}^{C}=\sum_{H, W} W_{(2 d-1) \times(2 d-1)}^{C} * F^{C} \tag{4} ZˉC=H,WW(2d1)×(2d1)CFC(4)

Z C = ∑ H , W W ⌊ k d ⌋ × ⌊ k d ⌋ C ∗ Z ˉ C (5) Z^{C}=\sum_{H, W} W_{\left\lfloor\frac{k}{d}\right\rfloor \times\left\lfloor\frac{k}{d}\right\rfloor}^{C} * \bar{Z}^{C} \tag{5} ZC=H,WWdk×dkCZˉC(5)

A C = W 1 × 1 ∗ Z C (6) A^{C}=W_{1 \times 1} * Z^{C} \tag{6} AC=W1×1ZC(6)

F ˉ C = A C ⊗ F C (7) \bar{F}^{C}=A^{C} \otimes F^{C} \tag{7} FˉC=ACFC(7)

其中d是扩张率。等式4中的 Z ˉ C \bar{Z}^{C} ZˉC表示深度卷积的输出,其核大小为 ( 2 d − 1 ) × ( 2 d − 1 ) (2d-1) \times (2d-1) (2d1)×(2d1),捕获了局部空间信息,并对后续深度卷积的网格效应进行了补偿(参见等式5)。深度卷积的核大小为 ( ⌊ k d ⌋ × ⌊ k d ⌋ ) \left(\left\lfloor\frac{k}{d}\right\rfloor \times\left\lfloor\frac{k}{d}\right\rfloor\right) (dk×dk),其中 ⌊ . ⌋ \lfloor . \rfloor .表示向下取整操作。扩张深度卷积负责捕获深度卷积输出的全局空间信息。尽管LKA设计在很大程度上改进了LKA-trivial,但当核大小超过 23 × 23 23 \times 23 23×23时,它仍然在VAN中引起高计算复杂度和内存占用(参见图3)。

B.大可分离核与注意力

通过将深度卷积和深度扩展卷积的二维权核拆分为两个级联的一维可分离权核,可以得到等效的改进LKA结构。我们将LKA模块的这种修改后的配置称为LSKA,如图2d所示。在[34]之后,LSKA的输出如下所示。
Z ˉ C = ∑ H , W W ( 2 d − 1 ) × 1 C ∗ ( ∑ H , W W 1 × ( 2 d − 1 ) C ∗ F C ) \bar{Z}^{C}=\sum_{H, W} W_{(2 d-1) \times 1}^{C} *\left(\sum_{H, W} W_{1 \times(2 d-1)}^{C} * F^{C}\right) ZˉC=H,WW(2d1)×1C H,WW1×(2d1)CFC

Z C = ∑ H , W W ⌊ k d ⌋ × 1 C ∗ ( ∑ H , W W 1 × ⌊ k d ⌋ C ∗ Z ˉ C ) Z^{C}=\sum_{H, W} W_{\left\lfloor\frac{k}{d}\right\rfloor \times 1}^{C} *\left(\sum_{H, W} W_{1 \times\left\lfloor\frac{k}{d}\right\rfloor}^{C} * \bar{Z}^{C}\right) ZC=H,WWdk×1C H,WW1×dkCZˉC

A C = W 1 × 1 ∗ Z C A^{C}=W_{1 \times 1} * Z^{C} AC=W1×1ZC

F ˉ C = A C ⊗ F C \bar{F}^{C}=A^{C} \otimes F^{C} FˉC=ACFC

LKA-trivial的可分离版本可以用类似的方式获得,我们将其命名为LKA-trivial,如图2b所示。从图3可以看出,与LKA-trivial和LKA相比,LSKA-trivial和LSKA都显著降低了VAN的计算复杂度。在接下来的小节中,我们报告了LSKA区别于一般卷积、自关注和LKA的特性。
在这里插入图片描述

C. LSKA的性质

通过回顾之前的注意机制[27]、[28]、[31]、[32],与一般卷积、自注意和LKA模块相比,LSKA模块成功的四个重要特性如表I所示。
在这里插入图片描述

长距离依赖。如第II-B节所述,自注意力机制[52]是一个关键组件,使转换器能够模拟长程依赖。然而,最近的工作[33],[35]表明大核是捕捉全局信息的另一种方法。为了实现这一目标,我们遵循[34]中的LKA设计,将大核分解为两个小核,而不是使用[33],[35]中的简单大核设计,因为它具有高计算足迹和优化难度[43]。为了验证我们提出的LSKA的长距离依赖性,我们利用有效感受野(ERF)生成方法,如[?],[35],[44]所述,生成VAN-LSKA-Tiny的ERF图,如图4所示。热图中分布的更大程度的暗区表示更大的ERF。从图4a到4f,我们观察到暗区从核大小7扩展到65,这表明LSKA方法可以有效地捕获图像中的长距离依赖。
在这里插入图片描述

空间和信道适应性。如第II-B节所述,空间注意和通道注意是基于上下文依赖关系自适应地重新校准特征权重的两种常见策略。我们的工作继承了LKA的设计,与自关注相比,LKA包含了更低参数和计算复杂度的属性。LKA与LSKA的不同之处在于,我们采用了水平和垂直级联的内核,进一步降低了内存和计算复杂度,如图2d所示。

对于极大型核的可扩展性。如图3所示,VAN中的LKA-trivial会导致计算成本随着核大小的增加而呈二次方增长。LKA设计显著降低了计算足迹,但是当核大小超过23 \times 23时,模型参数的数量会随着核大小的增加而增加。当最近最先进的SLaK-Decomposed和SLaK-Sparse Decomposed方法[44]被引入VAN时,当核大小超过100时,它们比LKA具有更低的参数数量和计算足迹。请注意,图3中的结果是为VAN-Small网络报告的。令人惊讶的是,与LKA和SLaK相比,所提出的LKA-trivial和LKA的LSAKA-trivial和LSAKA版本不仅降低了计算成本,而且保持了VAN的模型参数数量相对恒定。请注意,核大小也指最大感受野(MRF)。

关于精度性能,如表VIII所示,随着核大小从23增加到53,LSKA-Base显示出持续增长。相反,LKA-Base在核大小超过23后开始饱和。这些结果表明,就参数大小、FLOPs和精度而言,LSKA在极大型核上具有可扩展性。

D. LSKA的复杂性分析

在本小节中,我们计算了图3中提出的LSKA-Trivial、LSKA、LKA-Trivial和LKA注意力模块的浮点运算次数(FLOPs)和参数数量。请注意,在以下分析中忽略了偏置项以简化计算。我们还假设LSKA和LKA的输入特征图大小和输出特征图大小相同(即H×W×C)。为了简洁起见,我们只提供用于计算LSKA和LKA的FLOPs和参数数量的方程。然而,同样的方程可以用来计算LKA-Trivial和LSKA-Trivial的参数和FLOPs。原始LKA的参数和FLOPs可以按如下方式计算:
 Param  = ( 2 d − 1 ) 2 × C + ⌊ k d ⌋ 2 × C + C × C (12) \text { Param }=(2 d-1)^{2} \times C+\left\lfloor\frac{k}{d}\right\rfloor^{2} \times C+C \times C \tag{12}  Param =(2d1)2×C+dk2×C+C×C(12)

F L O P s = ( ( 2 d − 1 ) 2 × C + ⌊ k d ⌋ 2 × C + C × C ) × H × W (13) F L O P s=\left((2 d-1)^{2} \times C+\left\lfloor\frac{k}{d}\right\rfloor^{2} \times C+C \times C\right) \times H \times W \tag{13} FLOPs=((2d1)2×C+dk2×C+C×C)×H×W(13)

其中k是核大小,d是膨胀率。LSKA关注模块的flop总数和参数计算方法如下:
 Param  = ( 2 d − 1 ) × C × 2 + ⌊ k d ⌋ × C × 2 + C × C (14) \text { Param }=(2 d-1) \times C \times 2+\left\lfloor\frac{k}{d}\right\rfloor \times C \times 2+C \times C \tag{14}  Param =(2d1)×C×2+dk×C×2+C×C(14)
F L O P s = ( ( 2 d − 1 ) × C × 2 + ⌊ k d ⌋ × C × 2 + C × C ) × H × W (15) F L O P s=\left((2 d-1) \times C \times 2+\left\lfloor\frac{k}{d}\right\rfloor \times C \times 2+C \times C\right) \times H \times W \tag{15} FLOPs=((2d1)×C×2+dk×C×2+C×C)×H×W(15)
通过将第14式和第12式的第一个项相等,我们注意到提出的LSKA可以在原始LKA设计的逐点卷积层中节省 2 d − 1 2 \frac{2d-1}{2} 22d1 参数。同样,通过比较第14式和第12式的第二个项,我们注意到提出的LSKA可以在原始LKA设计的膨胀逐点卷积层中节省 1 2 ⌊ k d ⌋ \frac{1}{2}\left\lfloor\frac{k}{d}\right\rfloor 21dk 参数。在FLOPs方面节省的数量与参数的数量相同。还可以看出,LSKA在计算上比LSKA-Trivial更有效。因此,除非另外说明,在与LKA和现有最先进方法进行比较时,我们报告的是LSKA的性能。

E.模型体系结构

在这项工作中,我们遵循VAN[34]的架构设计,如表II所示。模型的超参数如下:

  • S i S_{i} Si:输入主干中卷积层的步长和第i阶段的下采样;
  • K i K_{i} Ki:输入主干中第i阶段卷积层的核大小和下采样;
  • C i C_{i} Ci:第i阶段中输出通道的数量;
  • E i E_{i} Ei:第i阶段卷积前馈层的扩展比;
  • L i L_{i} Li:第i阶段中的块数;
    在这里插入图片描述

根据VAN的设计,我们的模型由一个输入主干层和四个后续阶段组成。输入主干的第一层包含一个7x7卷积层,步长为4,后面跟着一个批量归一化层。该层将输入分辨率降低4倍,并将通道数增加到32或64,具体取决于模型容量。
在这里插入图片描述

除了第1阶段之外,每个阶段都以一个3x3卷积开始,步长为2,下采样层紧随其后。接着是一个卷积块,其中包含批量归一化、LSKA模块和一个卷积前馈网络(CFFN)如图5所示。 我们的模型包括在深度卷积之前和之后的1x1卷积用于通道交互,这是在[17]、[33]、[35]、[57]中的常见做法。为了提供更多的非线性,在LSKA之前和CFFN内部附加了GELU激活层。VAN中的LKA和我们的工作之间的主要区别在于,我们用LSKA层替换了每个卷积块的LKA层。

为了提供更多讨论实例,我们设计了三种不同容量的VAN-LSKA,即VAN-LSKA Tiny、VAN-LSKA-Small和VAN-LSKA-Base。这些模型包含与VAN中LKA相同的卷积块数量、通道数和CFFN的扩展比,以便在第4节中对这两种注意力模块进行公平比较。

4、实验

为了验证我们提出的大型可分离核注意力(LSKA)的有效性,我们在图像分类、目标检测、语义分割和鲁棒性评估方面对比带有LSKA的VAN与带有LKA的基准VAN [34]的性能。需要注意的是,VAN网络的首篇论文没有提供关于输入数据不同版本扰动的任何鲁棒性评估。此外,我们还对基于LKA的VAN、基于LSKA的VAN、ConvNeXt [33]以及最先进的ViTs [32]、[37]–[39]进行了鲁棒性评估基准测试。

A.图像分类

设置。我们在ImageNet-1K数据集[58]上进行图像分类实验,该数据集由1.2M张1000个类别的训练图像和50K张验证图像组成。为了公平的比较,所有模型都在相同的设置中进行了训练,我们报告了验证集上的前1精度。以VAN-LKA训练设置为基线,从图像中随机裁剪出224×224训练样本。我们采用随机水平翻转、标签平滑[59]、混合[60]、cutmix[61]和随机擦除[62]进行数据增强。在训练过程中,我们使用动量为0.9的AdamW[63],权值衰减为5 × 10−2,批大小为64。我们以1 ×10−6的学习率训练了5个热身时期的模型,然后进行了正常的300个时期的训练,初始学习率为5×10−4,并随着余弦衰减计划而递减。我们还在注意层和前馈层使用了LayerScale[34]的变体,初始对角线值为0.01。

为了与VAN中的LKA模块进行公平比较,我们使用与VAN相同的核大小和膨胀率设置(即k = 23和d = 3)。在测试阶段,我们在验证集上对图像大小为224×224的中心裁剪进行应用,并报告了top-1准确率、参数数量和推理速度(示例/秒)。所有模型的推理速度都是以批量大小64和图像大小224×224在1080Ti GPU上测试的。我们首先将50个批次送入硬件进行预热,然后记录50个批次的平均运行时间。
在这里插入图片描述

结果。在表III中,我们展示了我们的LSKA在保持与VAN中的LKA相似的性能的同时,参数数量和计算浮点数更少。例如,与VAN-LKA-Tiny相比,VAN-LSKA-Tiny节省了2.4%的参数和11.1%的计算浮点数,同时性能略有提高。与VAN-LKA-Small相比,VAN-LSKA-Small的参数和计算浮点数分别降低了1.4%和4%,同时精度相当。另一方面,与VAN-LKA-Base相比,VAN-LSKA-Base保持相同的精度,同时参数和计算浮点数分别降低了1.5%和2%。在V-A部分,我们进一步证明LSKA比LKA实现更好的速度-精度权衡。

B. COCO上的目标检测

设置。我们在COCO 2017基准[64]上进行目标检测和实例分割,该基准包括11.8万张训练图像和5000张验证图像。我们将VAN-LKA和VAN-LSKA作为两个标准检测器Mask R-CNN [65]和RetinaNet [66]的后端进行比较。为了公平比较,所有模型采用与[34]中报告的相同的训练设置。按照惯例,在训练之前,我们使用ImageNet上预训练的权重来初始化主干网络和新添加的层,而Xavier [67]分别初始化新添加的层。在训练期间,我们使用AdamW优化器,初始学习率为1 × 10−4,权重衰减为5 × 10−2,批量大小为16,1×调度(即12个epoch)。训练图像的较短尺寸调整为800,而长边最大为1333。在测试阶段,我们使用与训练阶段相同的图像重缩放方案,然后将图像输入到网络中。所有实现都基于MMDetection [68]。
在这里插入图片描述

结果。如表IV所示,提出的LSKA设计作为Mask R-CNN和RetinaNet的后端,减少了模型参数和模型FLOPS的数量,同时提供了与LKA相当的性能。例如,当使用Mask R-CNN作为目标检测器时,VAN-LSKA-Base节省了30万参数和2 GFLOPs的计算量,同时与VAN-LKA-Base相比,性能下降了仅0.3%(46.3 vs 46.6)。当我们将目标检测器更改为RetinaNet时,VAN-LSKA-Base节省了30万参数和1 GFLOPs的计算量,与VAN-LKA-Base相比,性能相似(45.0 vs 44.5)。在其他模型容量中发现了类似的结果。例如,当使用Mask R-CNN时,VAN-LSKA-Small有3340万参数和221 GFLOPs的计算时间,比VAN-LKA-Small多出33.4万和1 GFLOPs。

C.语义分割

设置。在ADE20K[69]上进行语义分割实验,ADE20K包含150个细粒度语义类别,20K个训练图像,2K个验证图像,3K个测试图像。我们比较了语义FPN的VAN-LSKA和VAN-LKA主干[70]。在训练之前,我们在ImageNet上用预训练的权重初始化主干,剩下的新层用Xavier初始化。按照惯例[34],[37],[38],[70],在训练过程中,我们使用AdamW优化器,初始学习率为1 × 10−4,权值衰减为1 × 10−4,批处理大小为16,迭代次数为40K。学习率按照幂为0.9的多项式衰减函数进行衰减。所有的训练图像被调整为2048×512,比例范围为0.5到2.0,然后随机裁剪它们,大小为512×512。在测试过程中,图像沿较短的一面调整为512,较长的一面调整为最多2048。所有的实现都基于MMSegmentation[71]。
在这里插入图片描述

结果。如表V所示,在使用Semantic FPN进行语义分割时,我们发现结果与图像分类和目标检测是一致的。例如,与VAN-LKA-Base相比,VAN-LKA-Base节省了0.2M参数,降低了1.05%的GLOPS,同时获得了略好的性能。同样,我们发现VAN-LSKA- tiny和VAN-LSKA small节省了0.1M参数,GFLOPS分别降低了0.49%和0.36%,而性能分别与VAN-LKA-Tiny和VAN-LKA-Small相当。

D.鲁棒性评价
在这里插入图片描述

设置。 鲁棒性实验在五个不同的ImageNet数据集上进行,这些数据集具有不同的视角,包括常见的腐败、自然对抗性示例、语义转变、域外分布和感知差异与常见腐败。 表VII显示了这些数据集的摘要及其相应的目的。 在实验中,我们报告了在ImageNet-C [72]、ImageNet A [73]、ImageNet-R [74]和ImageNet-SK数据集上的top-1准确率 [75]。 按照 [72],我们报告了ImageNet-C和ImageNet-¯ C的平均腐败误差 (mCE) (更低的值更好)。 我们还报告了ImageNet-C的保留率(RetR) (更高的值更好),这是按照 [76]来量化模型对腐败的抵抗力。RetR定义如下:
 Ret  R =  ImageNet-C Top-1 Accuracy   ImageNet-  1 K  Top-1 Accuracy  (16) \text { Ret } R=\frac{\text { ImageNet-C Top-1 Accuracy }}{\text { ImageNet- } 1 K \text { Top-1 Accuracy }} \tag{16}  Ret R= ImageNet- 1K Top-1 Accuracy  ImageNet-C Top-1 Accuracy (16)

结果。 如表VI所示,我们观察到VAN-LSKA在不同参数设置下的表现与VAN LKA相当,仅相差0.1%-0.6%。 同时,VAN-LSKA分别在Tiny、Small和Base模型中节省了2.5%、1.4%和1.5%的参数。 与此同时,VAN-LSKA分别在Tiny、Small和Base模型中减少了11.1%、4%和2%的计算时间。 这些结果与之前在图像分类、目标检测和语义分割中的结果一致。
在这里插入图片描述

5、消融研究

A.不同大核分解方法的评估

首先,我们进行了一项实验,以探索不同大核分解方法的效果。在此,我们将LKA、LSKA-trivial、LSKA与LKA-trivial进行比较,以增加核大小。为此,我们按照第IV-A节所述的设置,在ImageNet-1K分类任务上训练Tiny模型。我们将核大小k不等间隔地从7到65变化。我们将膨胀率d设置为k=7,11,23,35,53,65时的2,2,3,3,3,3。LKA-trivial、LSKA-trivial、LKA和LSKA的具体设置可以在图2中找到。值得注意的是,LKA和LSKA的核大小是最大感受野,因为这两个模块将大核分解成两个相对较小的核。我们在图6中报告了所有方法在top-1准确率、模型参数、模型FLOPs和推理速度方面的结果。我们还将在附录表XVII中列出图6的数值结果。
在这里插入图片描述

从图6中可以看出,我们提出的方法LSKA-trivial和LSKA在显著减少了模型参数和模型FLOPs的同时,实现了与LKA-trivial和LKA相当的性能。 还可以从图6d中看出,当我们从7×7变化到65×65时,我们提出的LSKA-trivial和LSKA显示出比LKA-trivial和LKA更低的推理速度退化。 此外,比较图6a和图6d,我们可以看到LSKA-trivial和LSKA可以提供比LKA-trivial和LKA更好的速度-精度权衡。与LKA-trivial和LKA相比,LSKA-trivial和LSKA在保持较低的计算时间的同时,能够实现更大的感受野。
在这里插入图片描述

此外,我们观察到随着核大小从23增加到65,LSKA的性能表现出轻微下降并开始饱和,如图6a所示。我们还可视化了LKA和LSKA的有效感受野,以说明超过23的核大小后性能开始饱和。相应的图可以在A中的图8中找到。这一发现与ReplkNet [35]和SLaK [44]中报告的结果相矛盾,其中分别从25增加到31和从31增加到51时观察到性能提高。我们推测这种饱和是由于网络宽度和深度不足造成的。为了验证这一假设,我们在Base模型上对LKA和LSKA进行了类似的实验。如表VIII所示,我们观察到LKA在超过23的核大小时达到饱和点。相比之下,从23到53的核大小,LSKA表现出更好的性能。这一发现与ReplkNet和SLaK一致,证明更大的感受野增强了长距离依赖性。

B. 在各种下游任务上变化 L S K A 和 L K A 的核大小

在Section IV-B,IV-C,和IV-D的实验中,我们探索了增加核大小对下游任务的影响。在执行目标检测和语义分割的训练以及鲁棒性测试之前,我们使用Section \mathrm{V}-\mathrm{A}中提到的相应核大小的ImageNet-1K预训练来初始化主干模型。其他训练设置和评估方法遵循Section IV-B,IV-C,IV-D中提到的相应任务。

从表IX、表XI和表X中分别展示的对象检测、语义分割和鲁棒性评估的结果中,我们可以观察到,当核大小从7×7增加到35×35时,VAN-LKA-Tiny和VAN-LSKA-Tiny获得了更高的精度。

例如,表IX显示,将VAN-LSKA-Tiny的核大小从7×7增加到35×35,对于Mask R-CNN,平均精度(mAP)提高了1.6%。同样,我们发现,将核大小从7×7增加到35×35,一般来说会提高语义分割的性能,如表XI所示。对于常见的损坏情况下的图像分类也存在类似的趋势,如表X所示。
在这里插入图片描述

在这里插入图片描述

C. 纹理和形状偏见随着核大小的增加

有趣的是,从表X中我们注意到,具有较大核大小的VAN-lkATiny和VAN-LSKA-Tiny模型在引入损坏数据时提供了更好的性能,这表明具有较大核的VAN模型更具鲁棒性。类似的观察结果可以在[79]和[35]中找到。我们推测,出现这种现象的原因是随着核大小的增加,VAN模型对形状的偏见比对对象的纹理的偏见更大。在[79]中也提到,由于真实标签(即边界框和分割图)与目标形状对齐,因此基于形状的表示比基于纹理的表示在下游任务中更有益。
在这里插入图片描述

为了验证增加核大小会使VAN模型更加偏向形状而不是纹理,我们遵循[80]中的方法来评估VAN-LKA-Tiny和VAN-LSKA-Tiny模型的潜在表示中包含的形状和纹理信息量。主要思想是,如果模型捕获了相似的语义属性(例如形状、纹理、颜色等),则两个图像之间的互信息将在潜在表示中保留。计算细节可以在A中找到。在本实验中,我们使用了由样式转换[81]生成的1280个纹理-形状线索冲突图像组成的纹理-形状线索冲突数据集,以形成一对图像,它们共享相似的语义属性形状,或纹理,用于估计两种信息的维度。如表XII所示,随着核大小的增加,VAN-LKA-Tiny和VAN-LSKA-Tiny编码了更多的形状信息,同时编码了更少的纹理信息。这个结果表明核大小与编码的形状信息的量之间存在相关性。
在这里插入图片描述

为了研究LSKA和LKA对图像纹理分析的影响,我们使用包含47个类别的5640个图像的Describable Textures Dataset (DTD) [78]进行了纹理分类实验。我们在具有K=1的VAN-LKA-Tiny和VAN-LSKA-Tiny主干上执行纹理分类任务,并使用KNN分类器进行分类,并报告了验证集上的top-1准确率。如表XIII所示,随着核大小从7增加到53,LSKA和LKA的性能都下降了。值得注意的是,当核大小从35增加到53时,L S K A的性能下降幅度比L K A小。

6、与最先进方法的比较

在本节中,我们将VAN-LSKA与最先进的基于CNN的模型(即ConvNeXt [33]、ReplkNet [35]、SLaK [44]和VAN-LKA [34])和基于转换器的模型(即DeiT [39]、PVT [38]、PVTv2 [37]和Swin Transformers [32])进行比较,在ImageNet [58]分类、ImageNet-C [72]鲁棒性测试、COCO [64]对象检测和ADE20K [69]语义分割方面进行比较。为了与其他ViT和CNN公平比较,我们将ReplkNet-31B模型从79M参数缩放到具有29.7M参数的ReplkNet-31T模型。这种小型化涉及将模型前4个阶段的通道大小分别减少到64、128、320和512。

在这里插入图片描述

如表XIV所示,我们提出的VAN-LSKA网络的Tiny、Small和Base版本在ImageNet分类、对象检测、语义分割和鲁棒性评估方面优于ViTs。例如,该方法在分类上的准确率比Swin Transformer(Swin-T)高出1.5%,同时节省了7.4%的参数。这种性能差距在鲁棒性评估和对象检测上进一步扩大到6.4%和2.2%。与大型卷积神经网络ConvNeXt相比,我们的方法在ImageNet分类上的准确率高出0.7%,同时在ImageNet-C鲁棒性评估上的准确率高出2.3%,同时节省了8.4%的参数。与最近的state-of-the-art方法ReplkNet和SLaK相比,我们的方法在ImageNet分类上的准确率高出0.3%。此外,在ImageNet-C数据集上,我们的方法比ReplkNet和SLaK分别提高了2.2%和1.4%。值得注意的是,我们的方法可以节省11.7%和12.6%的参数大小。我们推测,提出的VAN-LSKA方法与state-of-the-art ViTs和CNN架构之间的性能差异是由于VAN中的LSKA模块使大接收域(例如35×35)。使用这样大的核大小改善了形状偏差,同时降低了纹理偏差,如第V-C部分所述,并已在[35]和[79]中提到。我们在表XV中报告了VAN-LSKA、VAN-LKA、ViTs和CNN-based架构的纹理和形状维数。从表XV可以看出,与VAN-LKA、ConvNeXt、ReplkNet、SLaK和ViTs相比,VAN-LSKA(具有35×35的核大小)具有较高的形状和较低的纹理维数,这支持了大核尺寸带来更好性能的证据。

在这里插入图片描述

与VAN-LKA相比,该方法在分类、鲁棒性评估、目标检测和语义分割任务上的性能相当。但是,与VAN-LKA相比,VAN-LSKA具有更低的参数大小和GFLOPs。

7、ViTs和CNNs的鲁棒性评估基准比较

我们进一步提供了ViTs和CNNs之间的鲁棒性比较,如表XVI所示。我们遵循第IV-D部分的评估步骤,并直接在ImageNet-C [77]、ImageNet-A [73]、ImageNet-R [74]和ImageNet-SK [75]上测试预训练的ImageNet 1k模型。与ViTs相比,VAN-LSKA在所有数据集上都优于所有最先进的基于转换器的模型。这一结果与我们在前面的VI部分中的发现一致。与CNN相比,VAN-LSKA在大多数数据集上的性能优于ConvNeXt、ReplkNet和SLaK,同时节省了8.4%、11.7%和12.6%的参数。与VAN-LKA模型相比,我们的模型具有相当的性能,同时具有更低的参数大小和GFLOPs。
在这里插入图片描述

8、结论

本文解决了在LKA模块中增加核大小时深度卷积的计算效率问题。为了缓解这些问题,我们提出了一种简单的策略,使用级联的水平(横向)和垂直(纵向)一维深度卷积,这有效地减少了深度卷积在LKA-trivial和VAN中的LKA中产生的参数数量和计算量的二次增长。实验结果表明,VAN中的提出的LSAKA可以在核大小、参数大小和速度之间取得良好的权衡,同时保持与LKA-trivial和LKA相当或更好的性能,在各种计算机视觉任务中。我们进一步研究了LSAKA的鲁棒性,并证明与以前的大的核CNN和ViT相比,LSAKA是一个鲁棒的学习器。我们提供了定量证据表明,增加LSAKA的核大小使模型在表示中编码更多的形状信息而纹理更少。由于表示中编码的形状信息数量与鲁棒性之间存在高度相关性,这有助于我们理解为什么基于LSAKA的VAN是一个鲁棒的学习器。另一方面,我们的工作可能为未来探索LSAKA在其他领域(如视频任务或声学任务)的好处开辟了新的方向。

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

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

相关文章

SpringDoc API文档工具集成SpringBoot - Swagger3

1、引言 之前在Spring Boot项目中一直使用的是SpringFox提供的Swagger库,发现已经超过3年没出新版本了!SpringDoc是一款可以结合Spring Boot使用的API文档生成工具,基于OpenAPI 3,是一款更好用的Swagger库!值得一提的是…

高速下载b站视频的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

JAVA 链式编程和建造者模式的使用(lombok的使用)

0.说明 0.1 链式编程 链式编程的原理是返回一个this对象,也就是返回对象本身,从而达到链式效果。这样可以减少一些代码量,是java8新增的内容。 此处主要介绍在新建对象使用链式编程更加方便的创建对象。链式编程的一些常见用法可以看这个&a…

C++笔记之初始化二维矩阵的方法

C笔记之初始化二维矩阵的方法 —— 2023年5月20日 上海 code review! 文章目录 C笔记之初始化二维矩阵的方法一.常见方法1. 使用数组2. 使用向量3. 使用数组的动态分配4. 使用嵌套的 std::vector 并使用resize方法5. 初始化固定大小的 std::array 二.C中使用vector初始化二维矩…

CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)

CSS3是用于为HTML文档添加样式和布局的最新版本的层叠样式表(Cascading Style Sheets)。下面是一些常用的CSS3属性及其详细解释: border-radius:设置元素的边框圆角的半径。可以使用四个值设置四个不同的圆角半径,也可…

基于Java的新闻发布管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

华为云HECS云服务器docker环境下安装nacos

华为云HECS云服务器,安装docker环境,查看如下文章。 华为云HECS安装docker-CSDN博客 一、拉取镜像 docker pull nacos/nacos-server二、宿主机创建挂载目录 执行如下命令: mkdir -p /usr/local/nacos/logs mkdir -p /usr/local/nacos/con…

基于指数分布优化的BP神经网络(分类应用) - 附代码

基于指数分布优化的BP神经网络(分类应用) - 附代码 文章目录 基于指数分布优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.指数分布优化BP神经网络3.1 BP神经网络参数设置3.2 指数分布算法应用 4.测试结果…

模型保存和加载

1、sklearn模型的保存和加载API from sklearn.externals import joblib 保存:joblib.dump(rf, ‘test.pkl’)加载:estimator joblib.load(‘test.pkl’) 2、决策树的模型保存加载案例 保存: import joblib from sklearn.model_selectio…

OpenCV #以图搜图:感知哈希算法(Perceptual hash algorithm)的原理与实验

1. 介绍 感知哈希算法(Perceptual Hash Algorithm,简称pHash) 是哈希算法的一种,主要用来做相似图片的搜索工作。 2. 原理 感知哈希算法(pHash)首先将原图像缩小成一个固定大小的像素图像,然后…

【模式识别】贝叶斯决策模型理论总结

贝叶斯决策模型理论 一、引言二、贝叶斯定理三、先验概率和后验概率3.1 先验概率3.2 后验概率 四、最大后验准则五、最小错误率六、最小化风险七、最小最大决策八、贝叶斯决策建模参考 一、引言 在概率计算中,我们常常遇到这样的一类问题,某事件的发生可…

MobileNetV3

相对重量级网络而言,轻量级网络的特点是参数少、计算量小、推理时间短。更适用于存储空间和功耗受限的场景,例如移动端嵌入式设备等边缘计算设备。因此轻量级网络受到了广泛的关注,其中MobileNet可谓是其中的佼佼者。MobileNetV3经过了V1和V2…

iOS 配置通用链接(Universal Link)服务端和开发者后台都配置好了,还是跳转不到App

目录 一、什么是 Universal Link? 1.背景介绍 2.特点 3.运行机制原理&流程图 二、配置教程 1.第一步:开启 Associated Domains 服务 1.1 开通 Associated Domains 2.第二步:服务器配置 apple-app-site-association(AAS…

RISC-V架构——中断处理和中断控制器介绍

1、ARM架构中断机制介绍 本文不是从零开始讲解中断,对于中断的基本知识不再赘述,对中断不是很了解可以先学习ARM中断的文章。参考博客:《ARM架构的外部中断介绍(S5PV210芯片)》; 2、RIAC_V架构的中断控制器架构 (1&…

Qt之自定义事件QEvent

在Qt中,自定义事件的步骤大概如下: 1.创建自定义事件,自定义事件需要继承QEvent 2.使用QEvent::registerEventType()注册自定义事件类型,事件的类型需要在 QEvent::User 和 QEvent::MaxUser 范围之间,在QEvent::User之前是预留给系统的事件 3.使用sendEvent() 和 postEv…

【软件安装】Linux系统中安装MySQL数据库服务

这篇文章,主要介绍如何在Linux系统中安装MySQL数据库服务。 目录 一、Linux安装MySQL 1.1、下载MySQL安装包 1.2、解压MySQL安装包 1.3、更改存放目录 1.4、创建用户组和用户 1.5、创建数据目录data 1.6、创建my.cnf配置文件 1.7、初始化数据库 1.8、添加m…

C# 基于腾讯云人脸核身和百度云证件识别技术相结合的 API 实现

目录 腾讯云人脸核身技术 Craneoffice.net 采用的识别方式 1、活体人脸核身(权威库): 2、活体人脸比对: 3、照片人脸核身(权威库): 调用成本 百度云身份证识别 调用成本 相关结合点 核心代码 实现调用人脸核身API的示例 实现调用身…

微信小程序设置 wx.showModal 提示框中 确定和取消按钮的颜色

wx官方提供的 showModal 无疑是个非常优秀的选择提示工具 但是 我们还可以让他的颜色更贴近整体的小程序风格 cancelColor 可以改变取消按钮的颜色 confirmColor 则可以控制确定按钮的颜色 参考代码如下 wx.showModal({cancelColor: #0000FF,confirmColor: #45B250,content:…

行业追踪,2023-10-25

自动复盘 2023-10-25 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

如何构建一个外卖微信小程序

随着外卖行业的不断发展,越来越多的商家开始关注外卖微信小程序的开发。微信小程序具有使用方便、快速上线、用户覆盖广等优势,成为了商家们的首选。 那么,如何快速开发一个外卖微信小程序呢?下面就让我们来看看吧! 首…
最新文章