视觉网络的有效调制

摘要

链接:https://arxiv.org/pdf/2403.19963
在这项工作中,我们提出了高效调制(EfficientMod),这是一种用于高效视觉网络的新型设计。我们重新审视了调制机制,该机制通过卷积上下文建模和特征投影层处理输入,并通过逐元素乘法和多层感知机(MLP)块融合特征。我们证明了调制机制特别适用于高效网络,并通过提出高效调制(EfficientMod)块来进一步定制调制设计,该块被视为我们网络的基本构建块。得益于调制机制的卓越表示能力和所提出的高效设计,我们的网络能够在准确性和效率之间实现更好的权衡,并在高效网络领域中树立了最新的性能标准。当将EfficientMod与普通的自注意力块集成时,我们获得了混合架构,该架构在保持效率的同时进一步提高了性能。我们进行了全面的实验来验证EfficientMod的性能。在参数更少的情况下,我们的EfficientMod-s在准确性上比EfficientFormerV2-s2高出0.6%,在GPU上快25%,并且在相同的GPU延迟下比MobileViTv2-1.0高出2.9%。此外,我们的方法在下游任务中表现出显著改进,在ADE20K基准测试上比EfficientFormerV2-s高出3.6 mIoU。代码和检查点可在https://github.com/ma-xu/EfficientMod上获得。

1、引言

视觉Transformer(Vision Transformers, ViTs)(Dosovitskiy等,2021;Liu等,2021;Vaswani等,2017)在广泛的视觉任务上取得了令人瞩目的成就,并为视觉网络设计提供了创新思路。得益于自注意力机制,ViTs以其动态特性和长距离上下文建模能力区别于传统的卷积网络。然而,由于视觉标记数量的二次复杂性,自注意力机制在参数和计算上都不高效。这阻碍了ViTs在边缘设备、移动设备以及其他实时应用场景中的部署。为此,一些研究尝试在局部区域内应用自注意力(Liu等,2021;Chen等,2022a),或选择性地计算信息丰富的标记(Rao等,2021;Yin等,2022),以减少计算量。同时,还有一些研究(Mehta & Rastegari,2022;Chen等,2022b;Graham等,2021)尝试将卷积和自注意力结合起来,以实现理想的有效性与效率之间的权衡。

最近,一些工作(Liu等,2022b;Yu等,2022a;Trockman & Kolter,2022)表明,与自注意力机制相比,纯卷积网络也能取得令人满意的结果。其中,FocalNet(Yang等,2022)和VAN(Guo等,2023)在计算上高效且易于实现,展现了前沿性能,并显著优于ViT同类模型。一般来说,这两种方法都考虑使用大核卷积块进行上下文建模,并通过逐元素乘法(后跟MLP块)调制投影后的输入特征,如图1b所示。不失一般性,我们将这种设计称为调制机制,该机制展现出令人期待的性能,并得益于卷积的有效性和自注意力的动态性。尽管调制机制提供了令人满意的性能,且在理论上高效(就参数和浮点运算次数而言),但在计算资源有限时,其推理速度却不尽如人意。原因有两方面:i)冗余且功能相似的操作,如连续的深度卷积和冗余的线性投影占据了大量的操作时间;ii)上下文建模分支中的碎片化操作显著提高了延迟,这违反了ShuffleNetv2(Ma等,2018)中的指导原则G3。
在这里插入图片描述

在本文中,我们提出了有效调制(Efficient Modulation)这一简单而有效的设计,它可以作为高效模型的基本构建块(见图1c)。与FocalNet(Yang等,2022)和VAN(Guo等,2023)背后的调制块相比,有效调制块更为简单,并继承了所有优点(见图1b和图1c)。与Transformer块相比,我们的EfficientMod的计算复杂度与图像大小呈线性关系,我们强调大但局部的交互,而Transformer与标记数量呈立方关系,并直接计算全局交互。与仍然是许多有效网络事实上的基本构建块的倒置残差(MBConv)块(Sandler等,2018)相比,我们的解决方案使用了更少的深度卷积通道,并融入了动态性(见表6中的比较)。通过分析我们的设计与这些设计之间的联系和差异,我们深入探讨了我们的有效性和效率来源。通过考察相似性和差异性,我们获得了对我们方法效率的有价值见解。

借助我们的有效调制(Efficient Modulation)块,我们为高效网络引入了一种新架构,称为EfficientMod网络。EfficientMod是一种基于纯卷积的网络,并展现出令人期待的性能。同时,我们提出的块与传统的自注意力块正交,并与其他设计具有良好的兼容性。通过将注意力块与我们的EfficientMod集成,我们获得了一种混合架构,该架构可以产生更好的结果。无需使用神经网络搜索(NAS),我们的EfficientMod在各种任务中均表现出令人鼓舞的性能。与之前的最新方法EfficientFormerV2(Li等,2023b)相比,EfficientMod-s在top-1准确率上比EfficientFormerV2-S2高出0.3%,并且在GPU上的速度快了 25 % 25\% 25%。此外,我们的方法在下游任务上大幅超越了EfficientFormerV2,在模型复杂度相当的情况下,在ADE20K语义分割基准测试上比其高出3.6 mIoU。大量实验结果表明,所提出的EfficientMod既有效又高效。

2、相关工作

高效卷积神经网络设计。最深刻的高效网络之一是MobileNet(Howard等,2017),它将传统卷积分解为逐点卷积和深度卷积。通过这种方式,参数数量和浮点运算次数(FLOPs)大幅度减少,推理速度显著提升。随后,MobileNetV2(Sandler等,2018)通过引入倒置瓶颈块(也称为MBConv块)进一步推动了该领域的发展,该块现已成为大多数高效网络的基本构建块(Tan & Le, 2019; Guo等,2022; Li等,2021; Peng等,2021; Tu等,2022)。此外,其他一些贡献也值得注意。网络架构搜索(NAS)可以提供更好的网络设计,如MobileNetv3(Howard等,2019)、EfficientNet(Tan & Le, 2019; 2021)和FBNet(Wu等,2019; Wan等,2020; Dai等,2021)等。ShuffleNet(Zhang等,2018)利用组操作和通道混洗来节省计算量。ShuffleNetv2(Ma等,2018)、FasterNet(Chen等,2023)和GhostNet(Han等,2020a)则强调特征重用的有效性。就高效设计而言,我们的模型与MBConv块相似,但其背后的内部操作和机制有所不同。就设计理念而言,我们的模型与FocalNet(Yang等,2022)和VAN(Guo等,2023)相似,但效率更高且更优雅。我们在第3.5节和表6中讨论了这些联系和差异。
Transformer在高效网络中的应用。Transformer在视觉领域引起了广泛关注,这无疑也包括了高效网络。一些方法,如MobileFormer(Chen等,2022b),考虑将自注意力添加到卷积神经网络(ConvNets)中,以同时捕获局部和全局交互。然而,自注意力由于视觉标记数量的二次复杂性而承受较高的计算成本。为了避免过高的计算量,EfficientFormerV2和EdgeNeXt(Maaz等,2023)考虑在早期阶段使用MBConv块,并在后期阶段(当标记数量或特征分辨率较小时)采用自注意力。与早期将自注意力和MBConv块相结合以实现效率和有效性之间权衡的努力不同,我们提炼了自注意力的固有属性,包括动态性和大感受野,并将这些属性引入到了我们的EfficientMod中。我们还探索了结合自注意力和EfficientMod的混合架构,以获得更好的性能。

关于高效网络的讨论。尽管参数数量和浮点运算次数(FLOPs)被广泛用作评估模型理论复杂度的指标,但它们并不反映网络的实时成本,这一点在ShuffleNetv2(Ma等,2018)中得到了认可。设计高效网络的实际指导原则至关重要,如减少网络碎片(Ma等,2018)和保持特征维度一致(Li等,2022)等。FasterNet(Chen等,2023)也表明,由于每秒浮点运算次数较低且效率低下,较低的FLOPs并不一定会导致较低的延迟。在本工作中,我们提出了EfficientMod,并将先前的观察结果融入设计中,以实现实际的高效性。

3、方法

3.1、重新审视调制设计

我们首先从VAN和FocalNet中推导出调制机制的一般概念。

视觉注意力网络(Visual Attention Networks, VAN)。VAN(Guo等,2023)采用了一种简单而有效的卷积注意力设计。具体来说,给定输入特征 x ∈ R c × h × w x \in \mathbb{R}^{c \times h \times w} xRc×h×w,我们首先使用全连接(FC)层(带激活函数) f ( ⋅ ) f(\cdot) f() x x x投影到一个新的特征空间,然后将其送入两个分支。第一个分支 c t x ( ⋅ ) ctx(\cdot) ctx()提取上下文信息,第二个分支是恒等映射。我们使用逐元素乘法来融合两个分支的特征,并随后添加一个新的线性投影 p ( ⋅ ) p(\cdot) p()。详细来说,一个VAN块可以表示为:
Output  = p ( ctx ⁡ ( f ( x ) ) ⊙ f ( x ) ) , ctx ⁡ ( x ) = g ( DWConv ⁡ 7 , 3 ( DWConv ⁡ 5 , 1 ( x ) ) ) , \begin{array}{c} \text { Output }=p(\operatorname{ctx}(f(x)) \odot f(x)), \\ \operatorname{ctx}(x)=g\left(\operatorname{DWConv}_{7,3}\left(\operatorname{DWConv}_{5,1}(x)\right)\right), \end{array}  Output =p(ctx(f(x))f(x)),ctx(x)=g(DWConv7,3(DWConv5,1(x))),
其中 ⊙ \odot 表示逐元素乘法, DWConv ⁡ k , d \operatorname{DWConv}_{k, d} DWConvk,d表示核大小为 k k k且扩张率为 d d d的深度卷积, g ( ⋅ ) g(\cdot) g()是上下文分支中的另一个FC层。遵循MetaFormer(Yu等,2022a)的设计哲学,VAN块被用作标记混合器,并且一个两层MLP块(带深度卷积)被相邻连接作为通道混合器。

FocalNets。FocalNets(Yang等人,2022)引入了Focal Modulation,它替代了自注意力机制,但保持了动态性和大感受野的特点。FocalNet还考虑了一种并行双分支设计,其中一个上下文建模分支 ctx ⁡ ( ⋅ ) \operatorname{ctx}(\cdot) ctx()自适应地聚合不同层次的上下文信息,而另一个线性投影分支 v ( ⋅ ) v(\cdot) v()则将 x x x投影到一个新的空间。类似地,这两个分支通过逐元素乘法进行融合,并使用了一个全连接层 p ( ⋅ ) p(\cdot) p()。正式地,FocalNet中的分层调制设计可以表示为(为清晰起见,忽略了全局平均池化层):

ctx ⁡ ( x ) = g ( ∑ l = 1 L act ⁡ ( DWConv ⁡ k l ( f ( x ) ) ⊙ z ( f ( x ) ) ) ) , \operatorname{ctx}(x)=g\left(\sum_{l=1}^{L} \operatorname{act}\left(\operatorname{DWConv}_{k_{l}}(f(x)) \odot \mathrm{z}(f(x))\right)\right), ctx(x)=g(l=1Lact(DWConvkl(f(x))z(f(x)))),

其中, ctx ⁡ \operatorname{ctx} ctx包含了 L L L个层次的上下文信息,这些信息通过具有核大小 k l k_{l} kl的深度卷积层分层次地提取; z ( ⋅ ) z(\cdot) z() c c c通道的特征投影为门控值; act ⁡ ( ⋅ ) \operatorname{act}(\cdot) act()是每个卷积层之后的GELU激活函数。

抽象调制机制。Vision Attention Network(VAN)和FocalNet都展示了出色的表征能力和令人满意的性能。通过回顾上述内容,我们发现这两种方法都共享一些不可或缺的设计,这些设计极大地促进了它们的进步。首先,两个并行分支独立操作,从不同的特征空间中提取特征,类似于自注意力机制(如图1a所示)。其次,在上下文建模方面,两者都考虑了大的感受野。VAN通过膨胀操作堆叠了两个大核卷积,而FocalNet则引入了分层上下文聚合以及全局平均池化来实现全局交互。第三,这两种方法都通过逐元素乘法融合了两个分支的特征,这在计算上是高效的。最后,在特征融合之后都采用了线性投影。我们认为,这两个模型令人满意的性能可以归功于上述关键组件。同时,也存在一些独特的设计,如上下文建模的具体实现和特征投影分支的设计(共享或独立投影)。综合上述相似点并忽略具体差异,我们抽象出如图1b所示的调制机制,并正式定义其公式为:

Output = p ( ctx ⁡ ( x ) ⊙ v ( x ) ) . \text{Output} = p(\operatorname{ctx}(x) \odot v(x)) . Output=p(ctx(x)v(x)).

抽象的调制机制继承了卷积和自注意力机制的优良特性,但在理论上以卷积的方式运行,具有令人满意的效率。具体来说,由于逐元素乘法,式4(Eq. 4)具有类似于自注意力的动态性。上下文分支也引入了局部特征建模,但通过大核尺寸也实现了大感受野(这不会对效率造成瓶颈)。继VAN和FocalNet之后,在调制设计之后总是引入一个两层的多层感知机(MLP)块,如图1c所示。除了使调制机制适合高效网络的上述优点外,我们还在附录第K节中尝试性地引入了一个新的视角,即调制具有将输入特征投影到非常高维空间的独特潜力。

3.2、高效调制

尽管比自注意力更高效,但抽象的调制机制在理论复杂度和推理延迟方面仍未能满足移动网络的效率要求。在这里,我们介绍了高效调制(Efficient Modulation),它专为高效网络设计,但保留了调制机制的所有优良特性。

瘦身调制设计。一般的调制块包含许多碎片化的操作,如图1b所示。这里引入了四个全连接(FC)层,而没有考虑上下文建模实现的具体细节。如ShuffleNetv2(Ma et al., 2018)中的指南G3所述,过多的碎片化操作会显著降低速度,即使可以通过调整通道数来降低计算复杂度。为此,我们将多层感知机(MLP)和调制块中的全连接层进行了融合,如图1c所示。我们考虑使用 v ( ⋅ ) v(\cdot) v()通过扩展因子 r r r来扩展通道维度,并利用 p ( ⋅ ) p(\cdot) p()来压缩通道数。即,MLP块以灵活的扩展因子融入我们的调制设计中,形成了一个类似于MBConv块的统一块(我们将在表6中讨论差异并展示我们的优势)。

简化上下文建模。接下来,我们针对效率定制上下文建模分支。给定输入 x x x,我们首先通过线性投影 f ( x ) f(x) f(x) x x x投影到新的特征空间。然后,采用带有GELU激活的深度可分离卷积来建模局部空间信息。我们将卷积核大小设置为7,以在效率和大感受野之间取得平衡。最后,采用线性投影 g ( x ) g(x) g(x)进行通道间的通信。请注意,在整个上下文建模分支中,通道数保持不变。简而言之,我们的上下文建模分支可以表示为:

ctx ⁡ ( x ) = g ( act ⁡ ( DWConv ⁡ 7 , 1 ( f ( x ) ) ) ) .  \operatorname{ctx}(x)=g\left(\operatorname{act}\left(\operatorname{DWConv}_{7,1}(f(x))\right)\right) \text {. } ctx(x)=g(act(DWConv7,1(f(x))))

这种设计比VAN和FocalNet中的上下文建模要简单得多。我们通过一个大核的深度可分离卷积来丢弃了同功能的多个小核深度可分离卷积。我们承认,这可能会稍微降低性能,以换取效率上的提升。消融研究表明,我们上下文分支中的每个操作都是不可或缺的。

3.3、网络架构

通过上述修改,我们得到了如图1c所示的高效调制块。接下来,我们实例化我们的高效网络。更多详情请参阅附录第B节。

首先,我们引入了一个仅基于EfficientMod块的纯卷积网络。遵循常见做法(Li等人,2023b;Yu等人,2022a),我们采用了4个阶段的分层架构;每个阶段由一系列具有残差连接的EfficientMod块组成。为了简化,我们使用重叠的块嵌入(通过卷积层实现)将特征尺寸分别缩小4倍、2倍、2倍和2倍。对于每个块,我们使用层归一化(Layer Normalization)(Ba等人,2016)对输入特征进行归一化,并将归一化后的特征输入到EfficientMod块中。我们采用随机深度(Stochastic Depth)(Huang等人,2016)和层缩放(Layer Scale)(Touvron等人,2021b)来提高模型的鲁棒性。请注意,我们的EfficientMod块与自注意力机制是正交的。根据最近将卷积和注意力结合以获得更好性能的研究进展(Li等人,2023b;Mehta & Rastegari,2022;Chen等人,2022b;Pan等人,2022),接下来我们将EfficientMod与注意力块结合,以获得新的混合设计。我们考虑了ViT(Dosovitskiy等人,2021)中未经任何修改的原始注意力块。注意力块仅在最后两个阶段引入,此时特征尺寸相对较小。我们通过改变宽度和深度来匹配基于纯卷积的EfficientMod对应物的参数,以便进行公平比较。我们引入了三个规模,参数范围从400万到1300万不等,分别对应EfficientMod-xxs、EfficientMod-xs和EfficientMod-s。

3.4、计算复杂度分析

我们还研究了设计方案的理论计算复杂度和实际准则。

给定输入特征 x ∈ R C × H × W x \in \mathbb{R}^{C} \times H \times W xRC×H×W,一个EfficientMod块的总参数数量为 2 ( r + 1 ) C 2 + k 2 C 2(r+1) C^{2}+k^{2} C 2(r+1)C2+k2C,计算复杂度为 O ( 2 ( r + 1 ) H W C 2 + H W k 2 C ) \mathcal{O}\left(2(r+1) H W C^{2}+H W k^{2} C\right) O(2(r+1)HWC2+HWk2C),其中 k k k 是卷积核大小, r r r v ( ⋅ ) v(\cdot) v() 中的扩展比。为了简化,我们忽略了可学习层中的激活函数和偏置。与注意力机制相比,我们的复杂度与输入分辨率呈线性关系。与MBConv相比,我们通过因子 r r r 降低了深度可分离卷积的复杂度,这在表6中得到验证,对于有效性至关重要。

除了理论上的计算复杂度外,我们还为我们的设计提供了一些实用指南。I) 我们通过将更多参数移至特征分辨率较小的后期阶段来减少浮点运算次数(FLOPs)。背后的原因是EfficientMod的FLOPs基本上等于输入分辨率乘以参数数量。遵循这一指南,我们可以在后期阶段添加更多块或显著增加宽度。请注意,这一指南不仅适用于我们的EfficientMod,还可应用于所有全连接(FC)和卷积层。II) 我们仅在最后两个阶段引入注意力块,这是许多工作中(Li等人,2023b;Mehta & Rastegari,2022;Yu等人,2022b;Mehta & Rastegari,2023)的常规做法,考虑到自注意力的计算复杂度。III) 我们使用重复操作来匹配通道数以节省CPU时间,同时GPU的开销较小。EfficientFormer观察到,Reshape操作往往是许多模型的瓶颈。在这里,我们介绍更多细节。Reshape操作在CPU上相当缓慢,但对GPU友好。同时,重复操作在CPU上速度很快,但在GPU上很耗时。如图2所示,Repeat和Reshape两种解决方案可用于EfficientMod中的交互,我们选择Repeat以获得最佳的GPU-CPU延迟折衷。

在这里插入图片描述

3.5、与其他模型的关系

最后,我们讨论EfficientMod块与其他著名设计之间的联系和差异,以强调我们方法的独特性质。

MobileNetV2通过引入移动倒置瓶颈(简称MBConv)块,在高效网络领域开创了一个新时代。与顺序排列全连接(FC)层的MBConv块相比,我们的EfficientMod块将深度可分离卷积层分离出来,并通过逐元素乘法将其从侧面插入到两层FC网络的中间。我们将在表6中展示,由于深度可分离卷积的通道数减少,我们的设计是更高效的操作,并且由于调制操作而实现了更好的性能。

SENet通过提出通道注意力机制(Hu等人,2018),为卷积神经网络(ConvNets)引入了动态性。SE块可以表示为 y = x ⋅ sig ⁡ ( W 2 ( act ⁡ ( W 1 x ) ) ) y=x \cdot \operatorname{sig}\left(\mathrm{W}_{2}\left(\operatorname{act}\left(\mathrm{W}_{1} x\right)\right)\right) y=xsig(W2(act(W1x)))。许多最近的工作(Tan & Le, 2019; Zhang等人, 2022; Liu等人, 2022a)通过结合SE块来实现更高的精度,同时在理论上保持较低的复杂度。然而,由于SE块中的碎片化操作,它会显著增加GPU上的推理延迟。相反,我们的EfficientMod块通过 y = ctx ⁡ ( x ) ⋅ q ( x ) y=\operatorname{ctx}(x) \cdot \mathrm{q}(x) y=ctx(x)q(x) 本质上涉及了通道注意力,其中 q ( x ) \mathrm{q}(x) q(x) 自适应地调整 ctx ⁡ ( x ) \operatorname{ctx}(x) ctx(x) 的通道权重。

4、实验

在本节中,我们在四个任务上验证了EfficientMod的有效性:ImageNet1K(Deng等人,2009)上的图像分类、MS COCO(Lin等人,2014)上的目标检测和实例分割,以及ADE20K(Zhou等人,2017)上的语义分割。我们使用PyTorch实现了所有网络,并在两种不同的硬件上将它们转换为ONNX模型:

  • GPU:我们选择P100 GPU进行延迟评估,因为它能够模拟近年来大多数设备的计算能力。其他GPU可能会产生不同的基准测试结果,但我们观察到趋势是相似的。

  • CPU:某些模型在不同类型的硬件上可能会以不可预测的延迟运行(主要是由于内存访问和碎片化操作)。为了进行全面比较,我们还提供了所有模型在Intel® Xeon® CPU E5-2680 CPU上的测量延迟。

对于延迟基准测试,我们将GPU和CPU的批量大小都设置为1,以模拟现实世界的应用程序。为了抵消方差,我们对每个模型重复运行4000次,并报告平均推理时间。我们遵循常见做法,使用了四个线程。有关更多设备(例如,不同的GPU、iPhone等)的详细信息,请参阅补充材料。

4.1、ImageNet-1K上的图像分类

我们在ImageNet-1K上评估了EfficientMod网络的分类性能。我们的训练方案遵循DeiT(Touvron等人,2021a)中的标准做法,具体细节见附录第5节。为了进行公平比较并确保所有性能均源自我们的EfficientMod设计,我们没有使用强大的训练技巧(如重参数化和蒸馏)。
在这里插入图片描述

我们将EfficientMod与其他高效设计进行了比较,并在表1中展示了结果。显然,我们的方法在分类精度和在不同硬件上的推理延迟方面都表现出色。例如,我们的EfficientMod-s与EdgeViT性能相当,但在GPU上快了15毫秒(约73%),在CPU上快了11毫秒(约32%)。此外,我们的模型需要的参数更少,计算复杂度也更低。EfficientMod-s还比EfficientFormerV2-S2高出0.6个百分点的提升,并在GPU上快了1.8毫秒(约25%)。我们的方法在不同规模下均表现出色。请注意,一些高效设计(如MobileNetV2和FasterNet)优先考虑低延迟,而其他模型(如MobileViTv2和EdgeViT)则优先考虑性能。相比之下,我们的EfficientMod在GPU和CPU上都保持了一致的高速运行,同时提供了最先进的性能。
在这里插入图片描述

为了更好地理解我们方法的改进之处,我们以EfficientMod-s为例,概述了每个修改带来的具体改进。从纯卷积版本到混合模型,我们EfficientMod的结果如表2所示。我们注意到,即使是EfficientMod的纯卷积版本也已经产生了令人印象深刻的80.5%的结果,显著超过了相关的基于卷积的网络。通过采用混合架构,我们进一步将性能提升至81.0%。

同时,一些方法采用了强大的训练策略,如MobileOne中的重参数化(Ding等人,2021)和EfficientFormerV2中的蒸馏(Hinton等人,2015)。在采用蒸馏训练(遵循(Li等人,2023b)中的设置)后,我们将EfficientMod-s从81.0%提升至81.9%,如表3所示。除非另有说明,否则以下所有结果均未采用蒸馏。
在这里插入图片描述

4.2、消融研究

与其他调制模型的比较。我们将EfficientMod-xxs与FocalNet和VAN-B0进行了比较,它们具有相似数量的参数。为了进行公平比较,我们通过减少通道数或块数来自定义FocalNet_Tiny_lrf。我们测试了三个变体,选择了最佳的一个,并将其命名为FocalNet@4M。由于Conv2Former(Hou等人,2022)的代码尚未完全发布,因此我们在比较中未考虑它。从表4中可以看出,EfficientMod在准确性和延迟方面都优于其他调制方法。

在这里插入图片描述
每个组件的消融实验。我们首先研究了我们设计中每个组件的贡献。实验在卷积EfficientMod-s上进行,没有引入注意力和知识蒸馏。表5展示了在上下文建模分支中消除每个组件的结果。显然,这些组件对我们的最终结果都至关重要。引入所有组件后,我们达到了80.5%的Top-1准确率。同时,我们还进行了一项实验来验证逐元素乘法(element-wise multiplication)的有效性。我们用求和(相同的计算和相同的延迟)替换它,以融合两个分支的特征,并将结果展示在表格的最后一行。正如预期的那样,性能下降了1%的Top-1准确率。显著的性能下降揭示了我们的调制操作的有效性,尤其是在高效网络中。

与MBConv块的联系。为了验证EfficientMod块的优越性,我们分别将我们的设计与基本的MBConv块进行了比较,包括等长和分层架构。详细的设置请参见附录B。在参数数量和浮点运算次数几乎相同的情况下,表6中的结果表明,我们的EfficientMod在GPU和CPU上的运行速度都显著快于MBConv块。最可能的解释是我们的深度可分离卷积比MBConv的更轻(通道数分别为c和rc,其中r设置为6)。除了更快的推理速度外,我们的设计在经验结果上也始终优于MBConv块。有关可扩展性的更多研究,请参见附录G。
在这里插入图片描述

每个组件的消融实验。我们首先研究了我们设计中每个组件的贡献。实验在卷积EfficientMod-s上进行,没有引入注意力和知识蒸馏。表5展示了在上下文建模分支中消除每个组件的结果。显然,这些组件对我们的最终结果都至关重要。引入所有组件后,我们达到了80.5%的Top-1准确率。同时,我们还进行了一项实验来验证逐元素乘法(element-wise multiplication)的有效性。我们用求和(相同的计算和相同的延迟)替换它,以融合两个分支的特征,并将结果展示在表格的最后一行。正如预期的那样,性能下降了1%的Top-1准确率。显著的性能下降揭示了我们的调制操作的有效性,尤其是在高效网络中。

与MBConv块的联系。为了验证EfficientMod块的优越性,我们分别将我们的设计与基本的MBConv块进行了比较,包括等长和分层架构。详细的设置请参见附录B。在参数数量和浮点运算次数几乎相同的情况下,表6中的结果表明,我们的EfficientMod在GPU和CPU上的运行速度都显著快于MBConv块。最可能的解释是我们的深度可分离卷积比MBConv的更轻(通道数分别为c和rc,其中r设置为6)。除了更快的推理速度外,我们的设计在经验结果上也始终优于MBConv块。有关可扩展性的更多研究,请参见附录G。

4.4、ADE20K数据集上的语义分割

接下来,我们在ADE20K(Zhou等人,2017)数据集上进行语义分割任务的实验。由于Semantic FPN(Kirillov等人,2019)设计简单且高效,我们将其作为分割头。遵循先前的工作(Yu等人,2022a;Li等人,2023b;2022;Wang等人,2021),我们在8个A100 GPU上以总批量大小为32训练了我们的模型40k次迭代。我们使用AdamW(Loshchilov&Hutter,2019)优化器来训练我们的模型。采用Cosine Annealing调度器(Loshchilov&Hutter,2017)将学习率从初始值2e-4衰减。
在这里插入图片描述

表7中的结果表明,EfficientMod在性能上大幅优于其他方法。在没有注意力机制的帮助下,我们的卷积EfficientMod-s已经比PoolFormer高出6.3 mIoU。此外,纯卷积的EfficientMod甚至取得了比配备注意力机制的方法更好的结果。在这方面,我们的卷积EfficientMod-s比先前的SOTA高效方法EfficientFormerV2高出1.1 mIoU(42.4 vs. 43.5)。EfficientMod块的设计是这些令人愉悦的改进的唯一来源。当引入Transformer块以获得混合设计时,我们使用相同数量的参数甚至更少的FLOPs,将性能进一步提升至46.0 mIoU。混合EfficientMod-s的性能明显优于其他混合网络,分别比PvTv2和EfficientFormerV2高出3.5和3.6 mIoU。我们得出两个结论:1)EfficientMod设计取得了重大进展,证明了我们的方法的价值和有效性;2)大感受野特别有助于像分割这样的高分辨率输入任务,而普通的注意力块(实现全局范围)可以成为高效网络的现成模块。请查看附录F,以分析MS COCO和ADE20K之间的改进差距。

5、结论

我们提出了Efficient Modulation(EfficientMod),这是一个统一的基于卷积的构建块,它融合了卷积和注意力机制的有利特性。EfficientMod同时提取空间上下文并投影输入特征,然后使用简单的逐元素乘法将它们融合。EfficientMod的优雅设计满足了效率要求,而其固有的设计理念则保证了强大的表示能力。利用EfficientMod,我们构建了一系列高效模型。广泛的实验验证了我们的方法的有效性和效率。EfficientMod在实证结果和实际延迟方面均优于之前的SOTA方法。当应用于密集预测任务时,EfficientMod取得了令人印象深刻的结果。综合研究表明,我们的方法对于高效应用具有巨大的潜力。

局限性和更广泛的影响。高效设计的可扩展性是一个有趣但研究不足的话题,如表6中所示的巨大延迟差距。此外,使用大内核尺寸或引入注意力块可能不是扩大感受野的最有效方式。我们尚未观察到EfficientMod产生任何负面社会影响。相反,我们鼓励研究减少计算量并简化计算资源有限的实际应用。

A 代码与模型

代码可以在补充材料中找到。我们提供了预训练的检查点和日志的匿名链接。ReadME.md文件中包含了进行实验的详细指南。提交后,我们将公开我们的代码和预训练的检查点。

B 详细配置

在这里插入图片描述

详细的框架配置

我们在表8中提供了EfficientMod的详细配置。EfficientMod采用分层架构,通过传统的卷积层逐步将输入分辨率缩小4,2,2,2倍。对于包含EfficientMod和注意力块的阶段,我们首先使用EfficientMod块,然后利用注意力块。通过改变通道数和块数,我们引入了EfficientModxxs、EfficientMod-xs、EfficientMod-s以及EfficientMod-s的纯卷积版本。
在这里插入图片描述

详细的消融实验配置

对于表6中的等距设计,我们使用14x14的块大小对输入图像进行划分,从而得到16x16的分辨率。我们调整深度和宽度以故意匹配EfficientMod-xs和EfficientMod-s的参数数量。我们还改变扩展比率以匹配MBConv和EfficientMod对应物的参数数量和浮点运算次数(FLOPs)。我们选择256和196作为通道数,13和11作为深度。与EfficientMod-s和EfficientMod-xs类似,生成的模型将分别有12.5M和6.4M的参数。这样做可以确保任何性能差异纯粹来自于MBConv和EfficientMod块的设计。对于分层网络,我们将EfficientMod块替换为MBConv块,并改变扩展比率以匹配参数数量。
在这里插入图片描述

训练细节

详细的训练超参数如表5所示。

C 调制可视化**

我们在图6中提供了调制设计的完整可视化。我们展示了投影输入 v v v、上下文建模输出 c t x ctx ctx以及相应的调制结果 c t x ∗ v ctx * v ctxv。最后展示了块的输出。可视化实现与第4.2节中的设置相同。当输入特征通过因子 r r r(例如图6中的6)进行扩展时,我们沿着通道维度将特征分成 r r r个块,并接着可视化每个块及其对应的调制结果。有趣的是,随着通道数的增加,不同的块通常显示出相似的结果 v v v。然而,在相同的上下文调制后,差异变得显著,这表明调制机制的成功。

D 延迟比较**

我们还在图7中展示了不同方法的准确率与GPU和CPU延迟的对比。为了更好的可视化,我们排除了运行显著较慢(如GPU上的EdgeViT)或准确率大幅降低(如MobileNetV2)的特定模型。我们的方法一致地以明显的优势超越了相关工作,特别是在GPU上。在相同的GPU延迟下,我们的EfficientMod在ImageNet上的top-1准确率比MobileViTv2高出2.8%。与之前的最新方法EffcientFormerv2相比,我们以25%的速度优势获得了相似或略优(0.3%)的结果。在CPU上,我们也实现了有希望的延迟-准确率权衡,表明我们的EfficientMod可以在不同设备上作为一般方法使用。

E 蒸馏改进**

我们对每个模型进行了详细的蒸馏实验。我们的教师模型是广泛使用的RegNetY-160(Radosavovic等人,2020),与EfficientFormerV2中的教师模型相同,以便进行公平比较。尽管其他模型可能提供更显著的改进,但本研究的主要目标并非寻找一个更好的教师模型。右表显示,知识蒸馏是一种有效提高我们方法top-1准确率约 1 % 1\% 1%的方法,同时在推理过程中不会引入任何计算开销。
在这里插入图片描述

F 对象检测与语义分割改进差距的分析**

为什么ModelMod在ADE20K上有显著提升,而在MS COCO上提升却相对有限?除了数据集和评估指标上的差异外,我们将这种差异归因于检测或分割头中的参数数量。请注意,EfficientMod仅引入了12M参数。当配备Mask RCNN时,额外的参数超过20M(占总参数的 60 % 60\% 60%以上),主导了最终的检测网络。因此,主干网络的影响在很大程度上被抑制了。相反,在ADE20K上进行语义分割时,Semantic FPN仅引入了4-5M参数(占总参数的约 25 % 25\% 25%)。因此,EfficientMod的能力得到了充分利用。

G EfficientMod的可扩展性**

输入分辨率对延迟的影响。我们首先验证了输入分辨率的可扩展性。我们将输入分辨率从224变化到512,步长为32。我们将EfficientMod的卷积和混合变体与一些强大的基线进行比较,包括MobileFormer(Chen等人,2022b)、MobileViTv2(Mehta & Rastegari,2023)和EfficientFormerV2(Li等人,2023b)。为了公平比较,我们考虑所有模型的大小在10-15M参数范围内。从图8可以看出,与MobileFormer和MobileViTv2相比,我们的方法和EfficientFormerV2在输入分辨率方面显示出良好的可扩展性。与EfficientFormerV2相比,我们的方法(无论是卷积还是混合)在分辨率较小时也表现出更低的延迟。
在这里插入图片描述

与MBConv的比较。我们还研究了EfficientMod在宽度和卷积核大小方面的可扩展性。我们使用第B节中描述的相同设置,将EfficientMod与MobileNetV2中常用的MBConv进行比较。为了匹配计算复杂度和参数数量,EfficientMod和MBConv的扩展比分别设置为6和7。如图9所示,无论宽度或卷积核大小如何,我们的EfficientMod始终比MBConv块运行得更快。当增加宽度或卷积核大小时,EfficientMod的延迟趋势比MBConv更加平稳,这表明EfficientMod具有巨大的潜力,可以推广到更大的模型中。
在这里插入图片描述

H 在更多GPU上的基准测试结果**

除了表1中给出的P100 GPU的结果外,我们还对其他几个GPU实例进行了延迟基准测试,包括T4、V100-SXM2和A100-SXM4-40GB。我们观察到,即使GPU类型相同,也可能存在一些差异。因此,我们从服务器中随机分配了GPU,并进行了三次独立的基准测试。表10报告了平均值和标准差。
在这里插入图片描述

如表所示,我们的EfficientMod在不同GPU设备上始终表现出较快的性能。一个有趣的发现是,A100的结果比V100具有更高的延迟。首先,我们表明这几乎是所有模型的普遍现象,如表所示。其次,我们观察到A100的GPU利用率始终较低,一直低于 40 % 40\% 40%,这表明A100的强大性能没有得到充分利用。第三,我们评估了批量大小为1的情况,以模拟现实世界场景。当扩大批量大小时,GPU利用率增加,导致A100的延迟降低,如上所述(我们以EfficientMod-s为例)。最后,我们强调,延迟可能受到难以调试的复杂因素的影响,包括GPU架构、GPU核心数量、CUDA版本、操作系统等。

I 下游任务的延迟基准测试

除了在第G节中研究EfficientMod的可扩展性之外,我们还探索了EfficientMod在现实世界下游任务中的延迟表现。我们直接在一张A100 GPU上(无需转换为ONNX格式)对表7中的方法进行了基准测试,并将延迟结果报告在表11中。
在这里插入图片描述

显然,我们的EfficientMod在这些任务上也展现出了令人满意的效率。一个有趣的现象是,PoolFormer-S12表现出了最高的延迟。考虑到该网络中的核心操作是池化操作,这一点尤其引人注目。我们认为,这一现象可能由以下两个因素导致:1) PoolFormer的网络架构可能未针对效率进行优化。2) 池化操作在CUDA中的优化程度可能不如卷积操作(这也是我们在主干网络设计中注意到的一个现象)。
在这里插入图片描述

此外,我们还观察到,随着输入分辨率的增加,Hybrid EfficientMod-s与Conv EfficientMod-s之间的延迟差距会扩大。这归因于我们混合版本中引入的注意力机制的计算复杂性。一个潜在的解决方案是,通过减小注意力块的分辨率来减少计算量,这与EfficientFormerV2中采用的方法类似。然而,与EfficientFormerV2-s2和其他替代方法相比,我们的Hybrid EfficientMod-s仍然保持了具有竞争力的且令人满意的延迟结果。

J 移动设备优化

如前面结果所示,我们的EfficientMod主要关注GPU和CPU设备。接下来,我们探索针对移动设备的优化。我们使用coremltools将PyTorch模型转换为Core ML模型。然后,我们利用MobileOne的iOS应用程序(Chen等人,2022b)并在iPhone 13(iOS版本16.6.1)上进行延迟基准测试。
在这里插入图片描述

我们采用了一个基于纯卷积的EfficientMod-xxs(没有注意力模块,达到了 75.3 % 75.3\% 75.3%的top-1准确率),并将其与表12中的其他网络进行比较。基于我们在CoreML模型中观察到置换操作特别耗时的现象,我们用卷积层替换了置换+线性层,这在数学上是等价的。我们的模型能够在iPhone 13上以1.2毫秒的延迟达到 75.3 % 75.3\% 75.3%的top-1准确率。受EfficientFormer中归一化层分析(Li等人,2022)的启发,我们进一步移除了所有层归一化,并在每个卷积层后添加了一个批量归一化层(在推理过程中可以自动融合),然后重新训练模型。这样做之后,我们将延迟降低到了0.9毫秒,并达到了 74.7 % 74.7\% 74.7%的top-1准确率,这已经是一个很有前景的结果。我们进一步微调了块和通道的数量,最终在1.0毫秒的延迟下达到了 75.2 % 75.2\% 75.2%的准确率。这一强劲表现表明,我们提出的构建块在移动设备上也能表现出色。

K 调制机制在高效网络中优越性的初步解释

已有研究表明,调制机制可以在几乎不增加额外开销的情况下提升性能,如在Yang等人(2022)、Guo等人(2023)的工作以及表5中所示。然而,其背后的原因尚未完全探明。在此,我们尝试解释调制机制的优越性,并表明调制机制尤其适合高效网络。

回顾方程4中调制机制的抽象公式 y = p ( ctx ⁡ ( x ) ⊙ v ( x ) ) y=p(\operatorname{ctx}(x) \odot v(x)) y=p(ctx(x)v(x)),它可以简单地重写为 y = f ( x 2 ) y=f\left(x^{2}\right) y=f(x2),其中 f ( x 2 ) = ctx ⁡ ( x ) ⊙ v ( x ) f\left(x^{2}\right)=\operatorname{ctx}(x) \odot v(x) f(x2)=ctx(x)v(x),并且我们忽略了 p ( ⋅ ) p(\cdot) p(),因为它是一个可学习的线性投影。因此,我们可以递归地给出带有残差的第 l l l 层调制块的输出:
x 1 = x 0 + f 1 ( x 0 2 ) , x 2 = x 1 + f 2 ( x 1 2 ) , = x 0 + f 1 ( x 0 2 ) + f 2 ( x 0 2 ) + 2 f 2 ( x 0 ∗ f 1 ( x 0 2 ) ) + ( f 1 ( x 0 2 ) ) 2 , x l = a 1 g 1 ( x 0 1 ) + a 2 g 2 ( x 0 2 ) + a 3 g 3 ( x 0 3 ) + ⋯ + a l g l ( x 0 2 l ) , \begin{aligned} x_{1} & =x_{0}+f_{1}\left(x_{0}^{2}\right), \\ x_{2} & =x_{1}+f_{2}\left(x_{1}^{2}\right), \\ & =x_{0}+f_{1}\left(x_{0}^{2}\right)+f_{2}\left(x_{0}^{2}\right)+2 f_{2}\left(x_{0} * f_{1}\left(x_{0}^{2}\right)\right)+\left(f_{1}\left(x_{0}^{2}\right)\right)^{2}, \\ x_{l} & =a_{1} g_{1}\left(x_{0}^{1}\right)+a_{2} g_{2}\left(x_{0}^{2}\right)+a_{3} g_{3}\left(x_{0}^{3}\right)+\cdots+a_{l} g_{l}\left(x_{0}^{2^{l}}\right), \end{aligned} x1x2xl=x0+f1(x02),=x1+f2(x12),=x0+f1(x02)+f2(x02)+2f2(x0f1(x02))+(f1(x02))2,=a1g1(x01)+a2g2(x02)+a3g3(x03)++algl(x02l),
其中 l l l 表示层索引, a l a_{l} al 是每个项的权重, g l g_{l} gl 表示第 l l l 个项的组合函数,我们不对 g l g_{l} gl 的细节做过多强调。仅通过几个块,我们就可以轻松地将输入投影到非常高维的特征空间,甚至是无限维空间。例如,仅使用10个调制块,我们就可以得到一个 2 10 2^{10} 210维的特征空间。因此,我们可以得出结论:i) 调制机制能够减少对通道数量的需求,因为它能够以一种独特的方式自然地将输入特征投影到非常高的维度;ii) 调制机制不需要非常深的网络,因为几个块就能够实现高维空间。然而,在大型模型的情况下,这些模型的大量宽度和深度在很大程度上抵消了调制的好处。因此,我们强调,抽象的调制机制特别适合于高效网络的设计。

请注意,上面提出的初步解释并不是高度形式化的证明。我们未来的努力将集中在全面而深入的调查上。

L 各个设计的详细分析

瘦身调制设计的效率 我们已经在EfficientMod块中集成了一个额外的MLP层,以验证瘦身调制设计的效率。这一修改旨在评估瘦身对性能和计算效率的影响。值得注意的是,这导致GPU和CPU延迟都有显著减少,而对准确性的影响微乎其微。这凸显了我们瘦身方法在提高模型效率的同时不损害准确性的有效性。
在这里插入图片描述

简化上下文建模的效率

为了进一步验证我们在简化上下文建模方面的效率,我们将我们的单内核大小(7x7)实现与具有不同内核大小的多层卷积进行了比较,类似于FocalNet的实现。实验基于EfficientMod-s-Conv变体进行。我们的发现再次证明了使用单一、优化的内核大小的优越性。这种策略不仅简化了模型,还实现了更好的精度-延迟权衡,证明了我们的设计选择的实际性和有效性。
在这里插入图片描述

在EfficientMod中集成注意力机制

在EfficientMod的最后两个阶段引入普通注意力机制,旨在改善全局表示。我们调整了块和通道的数量,以确保EfficientMod-s-Conv和EfficientMods之间的参数数量保持相当。结果强调,EfficientMod-s不仅表现出改进的性能,还减少了延迟,从而验证了我们通过集成注意力机制来提高效率的方法。
在这里插入图片描述

如上所述,额外的实验和分析证实了模型中每个设计元素的独特贡献和有效性,表明我们的EfficientMod能够实现有前景的延迟-精度权衡。

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

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

相关文章

Java并发(三)Java并发核心机制

J.U.C 简介 Java 的 java.util.concurrent 包(简称 J.U.C)中提供了大量并发工具类,是 Java 并发能力的主要体现(注意,不是全部,有部分并发能力的支持在其他包中)。从功能上,大致可以…

Spring Boot 日志 (初级)

什么是日志呢?其实就是一条条的打印语句,我们就可以根据打印出来的日志,去分析程序存在的问题等。虽然作为后端开发人员,日志并不是那么重要,但是在学习的过程中,也是比较重要的,可以使用在我们…

[Spring] Spring配置文件

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

主流大数据调度工具DolphinScheduler之数据采集

今天继续给大家分享主流大数据调度工具DolphinScheduler,以及数据的ETL流程。 一:调度工具DS 主流大数据调度工具DolphinScheduler, 其定位:解决数据处理流程中错综复杂的依赖关系 任务支持类型:支持传统的shell任…

数据结构之字符串的最长公共子序列问题详解与示例(C,C++)

文章目录 1、最长公共子序列定义2、动态规划解法3、状态转移方程初始化构建最长公共子序列 4、C 和 C 实现示例C 语言实现C 语言实现 5、总结 字符串的最长公共子序列(Longest Common Subsequence, LCS)是计算机科学中的一个经典问题,属于动态…

接口开发:Orcal数据库的批量新增sql

场景:在日常的CURD中一定会用到批量新增。在我们的项目中,使用的数据库是Orcal,由于之前基本都是使用Mysql的,使用的sql语句也基本都是用mysql的。但是在这次的接口编写时用mysql的批量新增出了问题,刚开始我还以为是写…

[MySQL]02 存储引擎与索引,锁机制,SQL优化

Mysql存储引擎 可插拔式存储引擎 索引是在存储引擎底层上实现的 inno DB MySQL默认存储引擎: inno DB高可靠性和高性能的存储引擎 DML操作遵循ACID模型支持事务行级锁,提高并发访问性能支持外键 约束,保证数据完整性和可靠性 MySAM MySAM是MySQL的早期引擎 特点: 不支持事…

安装 VMware vSphere vCenter 8.0

安装 VMware vSphere vCenter 8.0 1、运行安装程序 2、语言选择中文 3、点下一步 4、接受许可协议,点下一步 5、填写部署vCenter服务的ESXI主机IP地址以及对应ESXI主机的账号密码,这里将vCenter服务部署在192.168.1.14这台ESXi主机上 6、接受证书警告 7…

自动化测试中如何应对网页弹窗的挑战!

在自动化测试中,网页弹窗的出现常常成为测试流程中的一个难点。无论是警告框、确认框、提示框,还是更复杂的模态对话框,都可能中断测试脚本的正常执行,导致测试结果的不确定性。本文将探讨几种有效的方法来应对网页弹窗的挑战&…

21k star 开源项目,让模糊图像秒变高清!

不知道大家有没有遇到这样的需求:电脑里有一些很久之前保存的好看的图片,但是因为分辨率不高,当做壁纸使用会变得模糊。或者是从网上下载的需要使用的图片,找不到更高清的版本导致使用效果不好。之前分享过基于 Real-ESRGAN 算法修…

Redis中的哨兵(Sentinel)

上篇文章我们讲述了Redis中的主从复制(Redis分布式系统中的主从复制-CSDN博客),本篇文章针对主从复制中的问题引出Redis中的哨兵,希望本篇文章会对你有所帮助。 文章目录 一、引入哨兵机制 二、基本概念 三、主从复制的问题 四、哨…

php相关

php相关 ​ 借鉴了小迪安全以及各位大佬的博客,如果一切顺利,会不定期更新。 如果感觉不妥,可以私信删除。 默认有php基础。 文章目录 php相关1. php 缺陷函数1. 与2. MD53. intval()4. preg_match() 2. php特性1. php字符串解析特性2. 杂…

Cisco 路由重发布 —— 实现路由信息在不同路由域间的传递

一、技术背景 在实际的组网中,可能会遇到这样一个场景:在一个网络中同时存在两种或者两种以上的路由协议。例如客户的网络原先是纯 Cisco 的设备,使用 EIGRP 协议将网络的路由打通。但是后来网络扩容,增加了一批华为的设备&#…

【题解 Kruskal重构树 LCA】 星际导航

星际导航 分析: 这也是一个比较老的题目了 今天突然想学一下kruskal重构树,就做到了这个题。 首先我们要明白,为什么这道题的路径一定是在最小生成树里? 或许是我们惯有的经验:最小的最大或者最大的最小无非两种套路…

信号【Linux】

文章目录 信号处理方式(信号递达)前后台进程 终端按键产生信号kill系统调用接口向进程发信号阻塞信号sigset_tsigprocmasksigpending内核态与用户态:内核空间与用户空间内核如何实现信号的捕捉 1、信号就算没有产生,进程也必须识别…

【C++】C++类和对象详解(上)

目录 思维导图大纲: 思维方面: 1. 类的定义: 2. 类的特点: 3. this指针: 4. 类的默认成员函数 默认构造函数 1.构造函数 2.析构函数 3.拷贝构造函数 4. 赋值运算符重载 1. 运算符重载 5. 日期类实现&#…

【CPP】CPP的内存管理

目录 10 C/C内存管理10.1 内存分布10.2 C的动态内存管理10.3 C的内存管理10.4 new失败的检测10.5 operator new与operator delete函数10.5 new与malloc()的区别,delete与free()的区别10.6 定位new表达式 这里是oldking呐呐,感谢阅读口牙!先赞后看,养成习惯! 个人主页:oldking呐…

编程中的智慧四:设计模式总览

前面三篇我们通过从一些零散的例子,和简单应用来模糊的感受了下设计模式在编程中的智慧,从现在开始正式进入设计模式介绍,本篇将从设计模式的7大原则、设计模式的三大类型、与23种设计模式的进行总结,和描述具体意义。 设计模式体…

使用Diffusion Models进行街景视频生成

Diffusion Models专栏文章汇总:入门与实战 前言:街景图生成相当有挑战性,目前的文本到视频的方法仅限于生成有限范围的场景的短视频,文本到3D的方法可以生成单独的对象但不是整个城市。除此之外街景图对一致性的要求相当高&#x…

数据库基础与安装MYSQL数据库

一、数据库管理系统DBMS 数据库技术是计算机科学的核心技术之一,具有完备的理论基础。使用数据库可以高效且条理分明地存储数据,使人们能够更加迅速、方便地管理数据 1.可以结构化存储大量的数据信息,方便用户进行有效的检索和访问 2.可以…