HIRI-ViT:使用高分辨率输入的视觉Transformer扩展
摘要
https://arxiv.org/pdf/2403.11999
视觉Transformer( V i T \mathrm{ViT} ViT)与卷积神经网络(CNN)的混合深度模型已成为视觉任务中一类强大的骨干网络。自然地,提高此类混合骨干网络的输入分辨率会增强模型容量,但不可避免地会面临计算成本随输入尺寸二次方增长的问题。相反,我们提出了一种具有高分辨率输入(即HIRI-ViT)的新型混合骨干网络,它将流行的四阶段ViT升级为专为高分辨率输入定制的五阶段ViT。HIRI-ViT基于将典型CNN操作分解为两个并行CNN分支的创新思想,以节约成本。其中一个高分辨率分支直接以主要的高分辨率特征为输入,但使用的卷积操作较少。另一个低分辨率分支首先对特征进行下采样,然后在低分辨率特征上利用更多的卷积操作。在识别任务(ImageNet-1K数据集)和密集预测任务(COCO和ADE20K数据集)上的实验均证明了HIRI-ViT的优越性。更值得一提的是,在可比的计算成本( ∼ 5.0 \sim 5.0 ∼5.0 GFLOPs)下,HIRI-ViT在ImageNet数据集上以 448 × 448 448 \times 448 448×448的输入实现了迄今为止最佳的Top-1准确率 84.3 % 84.3\% 84.3%,这绝对优于使用 224 × 224 224 \times 224 224×224输入的iFormer-S的 83.4 % 83.4\% 83.4%,提高了 0.9 % 0.9\% 0.9%。
索引词——视觉Transformer,自注意力学习,图像识别。
1 引言
受自然语言处理(NLP)中主导Transformer结构[1]的启发,计算机视觉(CV)领域见证了视觉Transformer(ViT)作为视觉骨干网络设计的兴起。这一趋势在图像/动作识别[2]、[3]、[4]、[5]以及如目标检测[6]等密集预测任务中最为明显。这些成功的很大一部分归功于通过传统Transformer块中的自注意力机制对输入视觉标记之间的长距离交互进行灵活建模。最近,几项并发研究[7]、[8]、[9]、[10]、[11]指出,直接在视觉标记序列上应用纯Transformer块是次优的。这种设计不可避免地缺乏二维区域结构建模的正确归纳偏置。为了缓解这一限制,它们引领了将卷积神经网络(CNN)的二维归纳偏置融入ViT的新潮流,从而产生了CNN+ViT混合骨干网络。
在CNN骨干网络设计中,一个常见的做法是增加网络深度/宽度/输入分辨率[12]、[13],从而通过捕获输入中更精细的模式来增强模型容量。本着类似的精神,我们的工作旨在深入探索使用高分辨率输入扩展CNN+ViT混合骨干网络的过程。然而,与扩展CNN骨干网络类似,简单地增大流行ViT骨干网络的输入分辨率将带来实际挑战,尤其是计算成本急剧增加。以广泛采用的ViT骨干网络Swin Transformer[14]为例,当直接将输入分辨率从 224 × 224 224 \times 224 224×224增加到 384 × 384 384 \times 384 384×384时,ImageNet-1K的Top-1准确率从 83.5 % 83.5\% 83.5%明显提高到 84.5 % 84.5\% 84.5%。然而,如图1所示,具有 384 × 384 384 \times 384 384×384输入的Swin Transformer的计算成本(GFLOPs:47.0,推理时间:3.95毫秒)明显重于具有 224 × 224 224 \times 224 224×224输入的Swin Transformer(GFLOPs:15.4,推理时间:1.17毫秒)。
鉴于这个问题,我们的核心问题是——是否存在一种有原则的方法来在保持可比计算开销的同时,使用高分辨率输入扩展 C N N + \mathrm{CNN}+ CNN+ViT混合骨干网络?为此,我们设计了一系列专为高分辨率输入定制的五阶段Vision Transformers,这些模型在较早阶段包含两个分支的构建块,以在性能和计算成本之间寻求更好的平衡。具体来说,重塑的stem/CNN块中的关键组件是高分辨率分支(在高分辨率输入上进行较少的卷积操作)和低分辨率分支(在低分辨率输入上进行更多的卷积操作)的并行组合。这种双分支设计取代了stem/CNN块中具有标准卷积操作的单个分支。通过这种方式,我们不仅保留了使用高分辨率输入增强的模型容量,还通过每个分支的轻量化设计显著降低了计算成本。如图1所示,通过将输入分辨率从 224 × 224 224 \times 224 224×224增加到 384 × 384 384 \times 384 384×384,我们的HIRI-ViT实现了明显的性能提升,但计算成本仅略有增加(GFLOPs:从8.2到9.3,推理时间:从0.84毫秒到1.04毫秒)。即使将输入分辨率增大到 768 × 768 768 \times 768 768×768,HIRI-ViT也能带来显著的性能提升,同时需要的计算成本低于Swin Transformer。
通过将这种双分支设计融入 C N N + V i T \mathrm{CNN+ViT} CNN+ViT混合主干网络,我们提出了一种新的原则性五阶段视觉主干网络,即 H I R I − V i T HIRI-ViT HIRI−ViT,它能高效地以高分辨率输入扩展视觉变换器(Vision Transformer)。特别是,我们首先将典型的卷积主干块(Conv-stem block)进行升级,将单一的卷积神经网络(CNN)分支分解为两个并行分支(即高分辨率和低分辨率分支),从而得到高分辨率主干(HR-stem)块。接下来,通过用提出的双分支设计替换CNN分支,对早期阶段的CNN块进行重新建模。这种新的高分辨率块(HR-block)可以触发对高分辨率输入的成本效益较高的编码。
本文的主要贡献在于提出了在保持计算成本合理的同时,使用高分辨率输入扩展 C N N + V i T \mathrm{CNN+ViT} CNN+ViT混合主干网络的方法。这也带来了将典型CNN操作针对高分辨率输入分解为两个并行轻量级CNN分支的优雅设计。通过在一系列视觉任务(例如图像识别、目标检测和实例/语义分割)上进行的广泛实验,我们证明了与最新ViT和CNN主干网络相比,在可比的计算成本下,我们新的 H I R I − V i T HIRI-ViT HIRI−ViT主干网络具有优越性。
2 相关工作
2.1 卷积神经网络
受AlexNet[15]在ImageNet1K基准测试上取得突破的启发,卷积神经网络(CNN)已成为计算机视觉领域的实际主干网络。具体而言,其中一项开创性工作是VGG[16],它通过增加网络深度来提高模型能力。ResNet[17]通过在卷积块之间引入跳跃连接来训练更深的网络,从而获得更好的泛化能力和令人印象深刻的结果。DenseNet[18]通过将每个卷积块连接到所有之前的块,进一步将网络扩展到数百层。除了加深网络外,设计多分支块是增强模型能力的另一个方向。InceptionNet[19]、[20]通过拆分-变换-合并策略将具有不同核的多个路径集成到单个卷积块中。ResNeXt[21]表明,使用同质多分支架构增加基数是提高性能的有效方法。Res2Net[22]通过构建分层类残差连接,在更细粒度级别上开发多个感受野。EfficientNet[13]利用神经架构搜索在网络宽度、深度和分辨率之间寻求更好的平衡。最近,ConvNeXt[23]、[24]通过将ResNet与变换器设计相结合,使其现代化,在与视觉变换器竞争时取得了具有竞争力的结果,同时保持了CNN的效率。
2.2 视觉变换器
受自然语言处理(NLP)领域变换器[1]的启发,视觉变换器架构最近开始主导视觉任务中主干网络的构建。视觉变换器(Vision Transformer)[2]的首次亮相将图像分割成一系列图像块(即视觉标记),然后直接在视觉标记上应用自注意力。DeiT[25]通过升级训练策略和蒸馏过程,以数据高效的方式学习视觉变换器。由于ViT/DeiT的所有层都是在相同的较低分辨率下设计的,因此它们可能不适合直接用于密集预测任务[26]。为了解决这个问题,PVT[26]采用了具有四个阶段的ViT金字塔结构,其分辨率从高到低逐渐缩小。Swin[14]将移位窗口方案集成到局部自注意力中,允许具有线性计算复杂度的跨窗口连接。Twins[27]交错使用局部分组注意力和全局子采样注意力,以利用细粒度和长距离全局信息。DaViT[28]进一步提出了具有空间窗口注意力和通道组注意力的双重注意力机制,旨在实现局部细粒度和全局交互。后来,CNN和ViT开始相互交互,产生了许多混合主干网络。特别是,CvT[9]和CeiT[11]分别用卷积升级了自注意力和前馈模块。ViTAE[29]在自注意力模块旁边引入了一个额外的卷积块,其输出被融合并输入到前馈模块中。iFormer[30]将最大池化、卷积和自注意力相结合,以学习高频和低频信息。MaxViT[31]通过将卷积、局部自注意力和空洞全局自注意力集成到单个块中,执行局部和全局空间交互。
2.3 高分辨率表示学习
在探索卷积神经网络(CNN)主干设计中的高分辨率输入方面取得了显著进展。例如,HRNet[32]在整个网络中保持高分辨率分支,并反复融合多分辨率特征。EfficientHRNet[33]进一步将EfficientNet和HRNet统一起来,并设计了一种向下缩放方法来缩小输入分辨率、主干网络和高分辨率特征网络。随后,LiteHRNet[34]通过应用shuffle块和条件通道加权单元提高了HRNet的效率。之后,一些工作开始构建具有高分辨率输入的Transformer主干。其中,HR-NAS[35]引入了一个多分辨率搜索空间,包括CNN和Transformer块,用于多尺度信息和全局上下文建模。最近,HRViT[36]和HRFormer[37]旨在通过在整个网络中保持所有分辨率并执行跨分辨率交互来构建具有多尺度输入的Vision Transformer。然而,这些ViT主干的输入仍然局限于较小的分辨率(即 224 × 224 224 \times 224 224×224)。尽管大多数混合主干可以直接通过更高的分辨率(例如 384 × 384 384 \times 384 384×384)进行放大,但计算成本会变得非常高,计算成本相对于输入分辨率呈二次方增长。相反,我们的工作为使用高分辨率输入的 C N N + V i T \mathrm{CNN}+\mathrm{ViT} CNN+ViT混合主干进行放大开辟了一条新途径,同时保持了与小分辨率相同的计算开销优势。
3 预备知识
传统的多阶段Vision Transformer(M-ViT)[14]、[38]、[39]、[40]通常由一个stem层和四个阶段组成,与ConvNets[17]、[21]、[23](见图2(a))类似。具体来说,stem层首先用于将输入图像(分辨率: 224 × 224 224 \times 224 224×224)分割成小块。每个小块被视为一个“视觉标记”,并将进一步输入到后续阶段。每个阶段包含多个Transformer块,每个Transformer块由一个多头自注意力模块(MHA)和一个前馈网络(FFN)组成。通常,在两个阶段之间插入一个下采样层(DS)来合并输入的“视觉标记”(即降低特征图的分辨率)并同时增加其通道维度。最后,采用一个分类器层根据最后一个特征图预测概率分布。
多头自注意力。多头自注意力旨在捕获视觉标记之间的长距离依赖关系。从技术上讲,设 X ∈ R n × D X \in \mathbb{R}^{n \times D} X∈Rn×D表示视觉标记的特征,其中 n = H × W n=H \times W n=H×W是视觉标记的数量, H / W / D H/W/D H/W/D分别表示高度/宽度/通道数。输入 X X X首先被线性变换为查询 Q ∈ R n × D Q \in \mathbb{R}^{n \times D} Q∈Rn×D、键 K ∈ R n × D K \in \mathbb{R}^{n \times D} K∈Rn×D和值 V ∈ R n × D V \in \mathbb{R}^{n \times D} V∈Rn×D,它们进一步沿着通道维度分解为 N h N_{h} Nh个头/部分。将第 j j j个头的查询、键和值分别表示为 Q j ∈ R n × D h Q_{j} \in \mathbb{R}^{n \times D_{h}} Qj∈Rn×Dh、 K j ∈ R n × D h K_{j} \in \mathbb{R}^{n \times D_{h}} Kj∈Rn×Dh和 V j ∈ R n × D h V_{j} \in \mathbb{R}^{n \times D_{h}} Vj∈Rn×Dh( D h D_{h} Dh:每个头的维度),自注意力模块的操作如下:
MultiHead ( Q , K , V ) = Concat ( head 0 , … , head N h ) W O , head j = Attention ( Q j , K j , V j ) , Attention ( Q j , K j , V j ) = Softmax ( Q j K j T D h ) V j \begin{array}{l} \operatorname{MultiHead}(Q, K, V)=\operatorname{Concat}\left(\text { head }_{0}, \ldots, \text { head }_{N_{h}}\right) W^{O}, \\ \text { head }_{j}=\operatorname{Attention}\left(Q_{j}, K_{j}, V_{j}\right), \\ \operatorname{Attention}\left(Q_{j}, K_{j}, V_{j}\right)=\operatorname{Softmax}\left(\frac{Q_{j} K_{j}{ }^{T}}{\sqrt{D_{h}}}\right) V_{j} \end{array} MultiHead(Q,K,V)=Concat( head 0,…, head Nh)WO, head j=Attention(Qj,Kj,Vj),Attention(Qj,Kj,Vj)=Softmax(DhQjKjT)Vj
其中 W O W^{O} WO是权重矩阵,Concat ( ⋅ ) (\cdot) (⋅)是拼接操作。考虑到自注意力的计算成本相对于标记数量呈二次方增长,通常会对键/值进行空间缩减以降低计算/内存开销[8]、[40]。
前馈网络。原始的前馈网络[1]、[2]由两个全连接(FC)层组成,中间有一个非线性激活函数:
F F N ( X ) = F C ( σ ( F C ( X ) ) ) \mathbf{F F N}(X)=\mathbf{F C}(\sigma(\mathbf{F C}(X))) FFN(X)=FC(σ(FC(X)))
其中 σ \sigma σ表示非线性激活函数。受[8]、[40]启发,我们通过添加一个卷积操作来引入二维归纳偏置,从而升级FFN,得到卷积前馈网络(CFFN)。该CFFN的总体操作总结为:
CFFN ( X ) = F C ( D W C o n v ( z ) + z ) , z = σ ( F C ( X ) ) \operatorname{CFFN}(X)=\mathbf{F C}(\mathbf{D W C o n v}(z)+z), z=\sigma(\mathbf{F C}(X)) CFFN(X)=FC(DWConv(z)+z),z=σ(FC(X))
其中DWConv表示深度卷积。
4 高分辨率输入视觉Transformer(HIRI-ViT)
在本文中,我们的目标是设计一个原则性的Transformer结构(即HIRI-ViT),该结构能够以成本效益高的方式扩展具有高分辨率输入的视觉Transformer。为此,我们将典型的四阶段M-ViT升级为新的五阶段ViT家族,其中较早阶段包含双分支构建块,这些构建块将单分支卷积神经网络(CNN)操作分解为两个并行CNN分支。这种方法有利于针对高分辨率输入定制计算开销。图2(b)展示了我们的HIRI-ViT的总体架构。
4.1 高分辨率茎(Stem)层
传统视觉Transformer中茎层的设计可以简要分为两个维度:ViT-stem和Conv-stem [41]、[42]。如图3(a)所示,ViT-stem实现为一个单步长卷积层(例如,步长=4,卷积核大小=7 [40]),其目标是将输入图像划分为块。最近,[10]、[42]揭示,用几个堆叠的 3 × 3 3 \times 3 3×3卷积(即图3(b)中所示的Conv-stem)替换ViT-stem可以稳定网络优化过程,同时提高峰值性能。Conv-stem会导致典型输入分辨率(例如, 224 × 224 224 \times 224 224×224)下的参数和GFLOPs(十亿次浮点运算)略有增加。然而,当输入分辨率显著增加(例如, 448 × 448 448 \times 448 448×448)时,Conv-stem的GFLOPs会变得比ViT-stem重得多。为了缓解这些问题,我们通过将单分支Conv-stem重塑为两个并行CNN分支,设计了一个新的高分辨率茎层(图3(c)中的HR-stem)。这种设计不仅保留了Conv-stem的高模型容量,而且在高分辨率输入下也消耗了有利的计算成本。
技术上,HR-stem首先利用一个步长卷积(步长=2,卷积核大小=3)像Conv-stem那样对输入图像进行下采样。之后,将下采样后的特征图输入到两个并行分支(即高分辨率和低分辨率分支)中。高分辨率分支包含一个轻量级深度卷积,后跟一个步长卷积。对于低分辨率分支,首先使用步长卷积对特征图进行下采样。然后应用两个卷积( 3 × 3 3 \times 3 3×3和 1 × 1 1 \times 1 1×1卷积)来施加归纳偏置。最后,通过聚合两个分支并通过批归一化(BN)进一步对和进行归一化,得到HR-stem的输出。
4.2 高分辨率块
鉴于混合主干网络中前两个阶段的输入分辨率较大,Transformer块的计算成本相对较高。为了解决这个问题,我们用新的高分辨率块(HR块)替换了前两个阶段中的Transformer块,从而在较早阶段实现了对高分辨率输入的成本效益高的编码。具体来说,与HR-stem类似,HR块由两个并行分支组成。轻量级高分辨率分支在高分辨率输入上捕获粗粒度信息,而低分辨率分支则利用更多的卷积操作在低分辨率输入上提取高级语义。图4描绘了HR块的详细架构。
具体来说,高分辨率分支实现为一个轻量级深度卷积。对于低分辨率分支,首先使用带BN的步长深度卷积(步长=2,卷积核大小=3)对输入特征图进行下采样。然后,在低分辨率特征图上应用前馈操作(即两个全连接层,中间带有激活函数)。之后,通过重复对低分辨率输出进行上采样,并将其与高分辨率输出进一步融合。
4.3 反向残差下采样
在传统的M-ViT中,空间下采样是通过单个带步长的卷积(例如,步长$ = 2 ,卷积核大小 ,卷积核大小 ,卷积核大小=3[40]$)实现的,如图5(a)所示。受卷积神经网络(ConvNets)[17]、[43]的启发,我们设计了一个具有两个并行分支的更强大的下采样层,即反向残差下采样(Inverted Residual Downsampling,IRDS)。特别地,对于前两个高分辨率输入阶段,我们采用IRDS-a(图5(b))进行下采样。IRDS-a首先使用带步长的 3 × 3 3 \times 3 3×3卷积来扩展维度并减小空间尺寸,然后使用 1 × 1 1 \times 1 1×1卷积来压缩通道维度。对于最后两个下采样层,我们利用IRDS-b(图5(c)),它类似于反向残差块[44]。不同之处在于,我们仅在第一个卷积之后应用归一化和激活操作。注意,我们添加了额外的下采样捷径来稳定训练过程。
4.4 块归一化
卷积神经网络(ConvNets)[17]、[21]通常使用批量归一化(Batch Normalization,BN)来稳定训练过程。BN还可以合并到卷积操作中,以加速推理。相比之下,视觉Transformer骨干网络倾向于使用层归一化(Layer Normalization, L N \mathbf{L N} LN)来规范化特征。 L N \mathbf{L N} LN对于小批量训练的密集预测任务(例如,目标检测和语义分割)更为友好,因为它与批量大小无关。与 B N \mathbf{B N} BN相比, L N \mathbf{L N} LN还可以带来略好的性能[23]。然而,对于高分辨率输入, L N \mathbf{L N} LN会导致更高的计算成本。因此,我们为高分辨率输入的前三个阶段使用BN,而为低分辨率输入的最后两个阶段应用 L N \mathbf{L N} LN。此外,我们还用 B N \mathbf{B N} BN替换了CFFN块中的 L N \mathbf{L N} LN。这样做可以在保持性能的同时,将推理速度提高 7.6 % 7.6\% 7.6%。
4.5 EMA蒸馏
在训练过程中,指数移动平均(EMA)[58]已被广泛用于稳定和改善卷积神经网络(ConvNets)[13]和视觉Transformer(ViT)[25]的训练过程。然而,传统EMA中的信息传递是单向的,即教师网络基于学生网络的参数通过EMA进行更新,从而导致次优解。为了触发教师网络和学生网络之间的双向信息传递,我们提出了一种新的EMA蒸馏策略来训练HIRI-ViT。EMA蒸馏还利用从教师网络学习到的概率分布来指导学生网络的训练。与传统的知识蒸馏[25]不同,我们的EMA蒸馏不依赖于任何额外的大规模预训练网络。
在技术上,给定一对训练样本 ( x a , y a ) \left(x_{a}, y_{a}\right) (xa,ya)和 ( x b , y b ) \left(x_{b}, y_{b}\right) (xb,yb),通过Cutmix/Mixup生成新的训练样本 ( x ~ , y ~ ) (\tilde{x}, \tilde{y}) (x~,y~),然后将其输入到学生网络 F s \mathcal{F}^{s} Fs中进行网络优化。以Cutmix为例,新的样本 ( x ~ , y ~ ) (\tilde{x}, \tilde{y}) (x~,y~)可以生成如下:
x ~ = M ⊙ x a + ( 1 − M ) ⊙ x b y ~ = λ y a + ( 1 − λ ) y b , λ = ∑ M H W \begin{array}{l} \tilde{x}=M \odot x_{a}+(1-M) \odot x_{b} \\ \tilde{y}=\lambda y_{a}+(1-\lambda) y_{b}, \lambda=\frac{\sum M}{H W} \end{array} x~=M⊙xa+(1−M)⊙xby~=λya+(1−λ)yb,λ=HW∑M
其中, M ∈ { 0 , 1 } H × W M \in\{0,1\}^{H \times W} M∈{0,1}H×W表示矩形掩码, ⊙ \odot ⊙表示逐元素相乘。在EMA蒸馏中,我们将原始样本 x a x_{a} xa和 x b x_{b} xb输入到教师网络 F t \mathcal{F}^{t} Ft中(移除了最后一个特征图上的平均池化操作),分别得到概率分布图 P a P_{a} Pa和 P b P_{b} Pb。接下来,我们为生成的样本 x ~ \tilde{x} x~分配一个混合目标标签:
P ~ = M ⊙ P a + ( 1 − M ) ⊙ P b , y ^ = AvgPool ( P ~ ) \tilde{P}=M \odot P_{a}+(1-M) \odot P_{b}, \hat{y}=\operatorname{AvgPool}(\tilde{P}) P~=M⊙Pa+(1−M)⊙Pb,y^=AvgPool(P~)
其中,AvgPool表示沿空间维度使用平均池化操作。之后,我们将Cutmix和教师网络生成的两个目标标签结合起来: y ‾ = α y ~ + ( 1 − α ) y ^ \overline{y}=\alpha \tilde{y}+(1-\alpha) \hat{y} y=αy~+(1−α)y^,其中 α \alpha α是权衡参数。最后,在训练过程中,我们将混合样本 ( x ~ , y ˉ ) (\tilde{x}, \bar{y}) (x~,yˉ)输入到学生网络 F s \mathcal{F}^{s} Fs中。通过这种方式,额外利用了来自教师网络的知识来促进学生网络的学习。
4.6 架构细节
表1详细列出了我们HIRI-ViT系列的架构。遵循现有CNN+ViT混合骨干网络[14]、[26]的基本网络配置,我们构建了三种不同模型尺寸的HIRI-ViT变体,即HIRIViT-S(小型)、HIRI-ViT-B(基础型)和HIRI-ViTL(大型)。具体而言,HIRIViT的整体架构由一个HR-stem层和五个阶段组成。对于前两个具有高分辨率输入的阶段,我们用轻量级的高分辨率块替换了传统的Transformer块,以避免巨大的计算开销。对于第三阶段,我们仅使用CFFN块来处理中分辨率特征图。与传统的Vision Transformer类似,我们在最后两个具有低分辨率输入的阶段中使用了Transformer块。对于每个阶段 i i i, E i E_{i} Ei、 C i C_{i} Ci和 H D i H D_{i} HDi分别表示前馈层的扩展比、通道维度和头数。
5 实验
我们在四个视觉任务上评估了我们的HIRI-ViT:图像分类、目标检测、实例分割和语义分割。特别是,HIRI-ViT首先在ImageNet-1K[59]上从头开始训练,用于图像分类任务。接下来,我们对预训练的HIRI-ViT进行微调,以执行其余三个下游任务:在COCO[60]上进行目标检测和实例分割,以及在ADE20K[61]上进行语义分割。
5.1 在ImageNet-1K上的图像分类
设置。ImageNet-1K数据集包含128万张训练图像和5万张验证图像,涵盖1000个对象类别。在训练过程中,我们采用了[14]、[40]中的常见数据增强策略:随机裁剪、随机水平翻转、Cutmix[65]、Mixup[66]、Random Erasing[67]和RandAugment[68]。整个网络通过AdamW[69]在8个V100 GPU上进行优化,包括300个训练周期,使用余弦衰减学习率调度器[70]和5个周期的线性预热。批量大小、初始学习率和权重衰减分别设置为1024、0.001和0.05。我们在ImageNet1K验证集上报告了Top-1/5准确率,并在ImageNet V2匹配频率测试集上报告了Top-1准确率(即V2 Top-1),如[25]所示。
性能比较。表2展示了我们的HIRI-ViT系列与现有CNN/ViT骨干网络的性能比较。值得注意的是,所有基线模型都使用典型分辨率输入( 224 × 224 224 \times 224 224×224),而我们的HIRI-ViT系列则使用高分辨率输入( 448 × 448 448 \times 448 448×448)扩展了Vision Transformer。总体而言,在每个组的可比计算成本下,我们的HIRI-ViT( 448 × 448 448 \times 448 448×448)在所有模型尺寸上相对于最先进的骨干网络都实现了持续的性能提升。特别地,对于大型模型尺寸(GFLOPs超过11.7的骨干网络),我们的HIRI-ViT-L( 448 × 448 448 \times 448 448×448)的Top-1准确率为85.7%,比最佳竞争对手MaxViT-L(85.2%)高出0.5%的绝对性能增益。尽管HIRI-ViT-L的输入分辨率显著高于MaxViT-L,但我们的HIRI-ViT-L( 448 × 448 448 \times 448 448×448)所需的GFLOPs却少于MaxViT-L,并且几乎将吞吐量翻倍,表明了更快的推理速度优势。这些结果清楚地表明,我们的HIRI-ViT在性能和计算成本之间实现了更好的平衡,特别适用于高分辨率输入。还值得注意的是,当使用典型分辨率输入( 224 × 224 224 \times 224 224×224)时,我们的每个模型尺寸的HIRI-ViT与最先进的骨干网络相比都实现了可比的性能,同时要求的计算成本显著降低。例如,在大型模型尺寸组中,我们的HIRI-ViT-L( 224 × 224 224 \times 224 224×224)的Top-1准确率为85.3%,对应的吞吐量为每秒660张图像,这远远快于最佳竞争对手MaxViT-L(Top-1准确率:85.2%,吞吐量:每秒241张图像)。这些结果再次证实了我们的HIRI-ViT具有成本效益的设计。
更高分辨率下的性能比较。表3展示了我们的HIRI-ViT系列与其他具有更大输入图像尺寸的最先进视觉骨干网络的比较。对于这个具有更高分辨率输入( 768 × 768 768 \times 768 768×768)的升级版HIRI-ViT,我们在8个V100 GPU上采用了AdamW优化器[69],动量设置为0.9,初始学习率设置为 1.0 e − 5 1.0 e^{-5} 1.0e−5,权重衰减设置为 1.0 e − 8 1.0 e^{-8} 1.0e−8。优化过程包括30个训练周期,使用余弦衰减学习率调度器[70]。同样,对于每个具有可比计算成本的组,我们的HIRI-ViT在更高分辨率下与其他视觉骨干网络相比始终获得性能增益。这些结果清楚地验证了我们提出的针对高分辨率输入定制的五阶段ViT骨干网络的有效性。这种设计创新地将典型的CNN操作分解为并行的高分辨率和低分辨率分支,因此在设置更高分辨率输入时仍能保持良好的计算成本。
5.2 在COCO上的目标检测与实例分割
设置。我们在COCO数据集上执行目标检测和实例分割任务。我们采用[14]、[40]中的标准设置,并在COCO-2017训练集(约118K张图像)上训练所有模型。最终,在COCO-2017验证集(5K张图像)上评估学习到的模型。我们使用两种主流检测器(RetinaNet[72]和Mask R-CNN[73])进行目标检测和实例分割。每个检测器中的主要卷积神经网络(CNN)主干被替换为我们的HIRI-ViT系列(最初在ImageNet 1K上进行预训练)。所有其他新添加的层都用Xavier[74]进行初始化。我们通过AdamW优化器[69]在8个V100 GPU上对检测器进行微调(批量大小:16)。对于RetinaNet和Mask R-CNN,我们采用标准 1 × 1 \times 1×训练计划(12个周期)。每张图像的较短边被调整为1600像素,而较长边不超过2666像素。对于目标检测,我们在另外四种目标检测方法上进行了实验:Cascade Mask R-CNN[75]、ATSS[76]、GFL[77]和Sparse RCNN[78]。遵循[14]、[40],使用具有多尺度策略的 3 × 3 \times 3×计划(36个周期)进行训练。输入图像的大小被随机调整,保持较短边在[960, 1600]范围内,而较长边被强制小于2666像素。我们报告了不同交并比(IoU)阈值和三种不同物体尺寸(即小 ( A P S ) \left(A P_{S}\right) (APS)、中 ( A P M ) \left(A P_{M}\right) (APM)、大 ( A P L ) \left(A P_{L}\right) (APL))下的平均精度( A P A P AP)分数。对于实例分割任务,报告了边界框和掩码的 A P A P AP分数( A P b A P^{b} APb, A P m A P^{m} APm)。
性能比较。表4总结了COCO基准测试中,具有不同主干的RetinaNet和Mask R-CNN的目标检测和实例分割性能。我们的HIRI-ViT-S和HIRI-ViT-B在每个组中,以可比的计算成本,在所有指标上始终展现出比其他主干更好的性能。具体来说,基于RetinaNet和Mask RCNN检测器,HIRI-ViT-S分别比最佳竞争对手ScalableViT-S高出 1.4 % ( A P ) 1.4 \%(A P) 1.4%(AP),比Ortho-S高出 0.5 % ( A P m ) 0.5 \%\left(A P^{m}\right) 0.5%(APm)。同时,HIRI-ViT-S的输入分辨率是ScalableViT-S的两倍,而它们的参数数量和GFLOPs却相似。这明确验证了通过我们的设计在下游任务中扩展Vision Transformer的优越泛化能力。表5进一步展示了在COCO上,不同主干下四种额外目标检测器的性能。同样,HIRI-ViT-S对于每个目标检测器都相对于其他基线带来了持续的性能提升。
5.3 ADE20K上的语义分割
设置。接下来,我们在ADE20K上评估HIRI-ViT的语义分割性能。该数据集涵盖150个语义类别,包含20,000张训练图像、2,000张验证图像和3,000张测试图像。在这里,我们遵循[14],使用UPerNet[79]作为基础模型,其中CNN主干被替换为我们的HIRI-ViT。整个网络通过AdamW优化器[69]在8个V100 GPU上进行160K次迭代训练。我们使用具有1,500次迭代线性预热的线性学习率衰减调度器进行优化。批量大小、权重衰减和初始学习率分别设置为16、0.01和0.00006。我们采用标准的数据增强方法:随机水平翻转、随机光度失真以及在[0.5,2.0]比例范围内随机重新缩放。为了公平比较,所有其他超参数和检测头均按照Swin[14]的设置进行配置。
性能比较。表6详细列出了ADE20K验证集上不同主干用于语义分割的性能。与在目标检测和实例分割下游任务中的观察结果类似,我们的HIRI-ViT-S和HIRI-ViT-B在每个组中,以可比的计算成本,获得了最高的平均交并比(mIoU)分数。具体来说,在相同的UPerNet基础模型下,HIRI-ViT-S将HRViT-b2的mIoU分数提高了 1.2 % 1.2 \% 1.2%,这再次证明了我们的提议的有效性。
5.4 消融研究
在本节中,我们首先阐述如何构建一个具有四个阶段的强大多阶段视觉Transformer( M − V i T \mathrm{M}-\mathrm{ViT} M−ViT),它作为基准模型。然后,我们将基准模型扩展到五个阶段,并研究HIRI-ViT中的每个设计如何影响ImageNet-1K上图像分类任务的整体性能。表7通过逐步将每个设计纳入基准模型,总结了不同消融运行的性能。
M-ViT。我们从基准模型开始,即具有四个阶段的多阶段视觉Transformer(M-ViT)。M-ViT的整体架构与PVT[26]相似,由一个ViT主干层(stem layer)和四个阶段组成。每个阶段包含一堆Transformer块。每个Transformer块由多头注意力(MHA)和前馈神经网络(FFN)组成。在前两个阶段,MViT利用步幅卷积作为空间缩减来下采样键和值,而最后两个阶段则不使用任何空间缩减操作。在两个阶段之间,利用单个步幅卷积进行空间下采样,同时增加通道维度。采用层归一化( L N \mathbf{L N} LN)进行特征归一化。如表7(第1行)所示,M-ViT的top-1准确率达到 82.7 % 82.7\% 82.7%。
FFN → \rightarrow → CFFN。第2行通过将每个FFN与额外的深度卷积(即CFFN)集成来升级基准模型。通过这种方式,CFFN能够利用归纳偏置,从而提高性能( 82.9 % 82.9\% 82.9%)。
移除MHA。接下来,我们从[53]中获得灵感,并移除了前两个阶段中的多头自注意力(MHA)。同时,也扩大了CFFN中的通道扩展维度。如表7(第3行)所示,这次消融运行保持了性能,同时减少了GFLOPs和参数数量。
L N → B N \mathbf{L N} \rightarrow \mathbf{B N} LN→BN。然后,我们在前两个阶段和每个CFFN块中将层归一化( L N \mathbf{L N} LN)替换为批归一化( B N \mathbf{B N} BN)(第4行)。top-1准确率略微提高到 83.0 % 83.0\% 83.0%,这表明对于包含卷积操作的块,BN比 L N \mathbf{L N} LN更适合。
ViT主干 → \rightarrow → Conv主干。当我们用Conv主干替换ViT主干(第5行)时,top-1准确率进一步提高到 83.4 % 83.4\% 83.4%。这一观察结果证明了Conv主干的优点,它在早期视觉处理中注入了一小部分归纳偏置,从而稳定了优化并提高了峰值性能。
IRDS。之后,我们在每两个阶段之间应用倒置残差下采样(IRDS)(第6行)。具有四个阶段的M-ViT的最终版本实现了 83.6 % 83.6\% 83.6%的top-1准确率,这一成绩具有竞争力,甚至超过了大多数现有的ViT主干网络。
分辨率 224 → 448 \mathbf{224} \boldsymbol{\rightarrow 448} 224→448。接下来,我们直接将该四阶段结构的输入分辨率从 224 × 224 224 \times 224 224×224 扩大到 448 × 448 448 \times 448 448×448(第7行)。这次消融运行带来了明显的性能提升,但GFLOPs从4.7急剧增加到21.5。这一观察结果与现有的四阶段ViT架构(如PVT和Swin Transformer)一致,在这些架构中,计算成本随着输入分辨率的增大而呈二次方增长。
四阶段 → \rightarrow → 五阶段。此外,我们通过增加一个额外阶段来进一步下采样高分辨率输入,从而扩展了四阶段消融运行(第7行)。这种五阶段结构(第8行)在高分辨率输入( 448 × 448 448 \times 448 448×448)下显著降低了GFLOPs,同时Top-1准确率下降至 84.0 % 84.0\% 84.0%,但仍然优于另一个在 224 × 224 224 \times 224 224×224输入下的四阶段消融运行(第6行)。这些结果基本证实了我们的五阶段结构的有效性,该结构旨在为高分辨率输入寻求更好的成本效益平衡。
Conv主干 → \rightarrow → HR主干。然后,我们将Conv主干替换为我们的HR主干(重塑为双分支设计)。如表7(第9行)所示,GFLOPs明显下降(5.1),但Top-1准确率仍然保持不变( 84.0 % 84.0\% 84.0%)。
HR块。之后,我们在前两个阶段中将每个CFFN替换为两个堆叠的HR块(第10行)。请注意,对于小尺寸(GFLOPs: ∼ 5.0 \sim 5.0 ∼5.0)来说,ImageNet上的Top-1准确率几乎已经饱和( ∼ 84.0 % \sim 84.0\% ∼84.0%),因此很难引入大幅改进。然而,我们的HR块仍然成功地在Top-1和Top-5准确率上实现了 0.1 % 0.1\% 0.1%的性能提升,同时略微降低了计算成本,这再次验证了通过我们并行的高分辨率和低分辨率分支进行成本效益高的编码的优势。
EMA蒸馏。最后,第11行是我们经过额外EMA蒸馏优化的HIRI-ViT-S的完整版本,达到了最佳的Top-1准确率( 84.3 % 84.3\% 84.3%)。
5.5 五阶段中每种块的影响
在这里,我们进一步进行了额外的消融研究,以全面考察五阶段中每种块(HR/CFFN/Transformer块)的影响。表8通过用不同块构建五阶段来展示HIRI-ViT不同消融变体的性能。具体来说,第1-3行的结果表明,在最后三个阶段中用Transformer块替换更多的HR块通常可以带来性能提升,但计算成本也会更高。例如,在第三阶段使用Transformer块(第3行)获得了微小的性能提升(Top-1准确率提升 0.1 % 0.1\% 0.1%),但GFLOPs明显增加。这些结果基本验证了Transformer块在低分辨率输入的后阶段的有效性,但Transformer块自然会导致巨大的计算开销,特别是对于前阶段的高分辨率输入。此外,我们用CFFN块替换Transformer块来处理第三阶段的中分辨率输入(第4行)。这种设计很好地降低了GFLOPs,同时保持了Top-1和Top-5准确率,这证明了在HIRI-ViT中计算成本和性能之间的最佳权衡。
5.6 计算成本与准确率
图6进一步展示了我们的HIRI-ViT与其他最先进的视觉主干网络在计算成本(即(a) GFLOPs,(b) 模型参数数量和© 推理时间)方面的准确率曲线。如图所示,我们的HIRI-ViT主干网络的曲线始终位于其他视觉主干网络之上。也就是说,我们的HIRI-ViT主干网络在计算成本-准确率权衡方面优于现有的视觉主干网络。
5.7 扩展到其他主干网络
在这里,我们报告了通过利用我们的提议,以更高分辨率的输入( 224 × 224 224 \times 224 224×224到 448 × 448 448 \times 448 448×448)扩展三种不同的视觉主干网络(HRNet、PVTv2、DaViT)的性能/计算成本。如表9所示,在HIRI-ViT中,我们采用五阶段和双分支设计的结构,始终能为每个视觉主干网络带来显著的性能提升,同时保持较低的计算成本。这些结果进一步验证了我们采用五阶段和双分支设计的结构在扩展高分辨率输入的视觉主干网络方面的通用性。
6 结论
在本文中,我们为高分辨率输入设计了一种新的五阶段ViT主干网络,即HIRI-ViT,该网络创新地将典型的CNN操作分解为并行的高分辨率和低分辨率分支。通过这种有原则的五阶段和双分支设计,我们的HIRI-ViT能够以成本效益高的方式扩展Vision Transformer主干网络以处理高分辨率输入。我们在ImageNet-1K(图像分类)、COCO(目标检测和实例分割)和ADE20K数据集(语义分割)上进行了大量实验,以验证我们的HIRI-ViT相对于竞争性的CNN或ViT主干网络的有效性。
尽管有这些发现,但仍然存在未解决的问题。虽然我们的五阶段和双分支设计结构明显提高了扩展Vision Transformer的效率,但我们观察到,当采用六阶段结构时,性能/计算成本的提升并不明显。此外,如何扩展高分辨率输入的Video Vision Transformer仍然是一个主要挑战。
相关文章:
HIRI-ViT:使用高分辨率输入的视觉Transformer扩展
摘要 https://arxiv.org/pdf/2403.11999 视觉Transformer( V i T \mathrm{ViT} ViT)与卷积神经网络(CNN)的混合深度模型已成为视觉任务中一类强大的骨干网络。自然地,提高此类混合骨干网络的输入分辨率会增强模型容量…...
TI DSP TMS320F280025 Note15:串口SCI的使用
TMS320F280025 串口SCI的使用 ` 文章目录 TMS320F280025 串口SCI的使用框图分析串口特点可编程数据格式SCI端口中断非FIFO/FIFO模式下SCI中断的操作/配置UartDriver.cUartDriver.h串口时钟由PCLKCR7控制使能,默认位系统时钟4分频 串口接收与发送都可以触发中断 串口使用的引脚…...
[Bandzip] 文件解压工具的下载及详细安装使用过程(附有下载文件)
文件解压工具,避免解压出错,双击即可解压文件 下载链接在文末 下载压缩包后解压 !!安装路径不要有中文 解压得到文件 双击exe文件 同意并安装 安装完成后,点击关闭, 右键点击需要解压的压缩包࿰…...
微服务MongoDB解析部署使用全流程
目录 1、什么是MongoDB 1、非关系型数据库 2、非关系型数据库分类 3、MongoDB?bson格式什么样? 2、MongoDB的优势 3、MongoDB应用场景 4、术语 5、操作 1、安装MongoDB 1、查询镜像文件【不操作】 2、拉取镜像文件 3、创建数据挂载目录 4、启…...
string为什么存储在堆里
在 Java 中,字符串对象存储在堆内存中而不是栈内存中,这是由于 Java 的内存管理和对象生命周期的特性决定的。以下是详细解释: 1. Java 内存模型 Java 的内存模型主要分为以下几个部分: 堆(Heap)&#x…...
Python和C++及MATLAB距离相关性生物医学样本统计量算法及数据科学
🎯要点 统计观测值之间距离计算代谢组学和脂质组学分析相关距离矩阵计算卡方检验偏差校正快速计算距离协方差算法大规模生物系统分析距离矩阵相关性测试石油勘探统计学关系 Python距离矩阵 在数学、计算机科学,尤其是图论中,距离矩阵是一…...
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
文章目录 C模板进阶编程前言第一章: 非类型模板参数1.1 什么是非类型模板参数?1.1.1 非类型模板参数的定义 1.2 非类型模板参数的注意事项1.3 非类型模板参数的使用场景示例:静态数组的实现 第二章: 模板的特化2.1 什么是模板特化?2.1.1 模板…...
golang学习笔记20-面向对象(二):方法与结构体【重要】
本节内容是面向对象的核心与基础,很重要。 注意:由于导包语句已经在19讲(笔记19:面向对象的引入)展示过了,所以这里就不展示了。 一、方法的定义与细节 方法是与特定类型(通常是结构体&#x…...
广州C++信奥老师解一本通题 1919:【02NOIP普及组】选数
【题目描述】 已知nn个整数x1,x2,……xn 以及一个整数K(K<n)。从n个整数中任选K个整数相加,可分别 得到一系列的和。例如当n4, k3 4个整数分别为3,7,12,19 3, 7,12,19时,可得全部的组合与它们的和为: 371222 371929 7121938 3121934 现在,要求你计算出和为…...
cas5.3统一登录前后端分离改造方案(源码)
cas5.3 为什么选择cas5.3 版本 5.3 版本是最新的支持jdk8 的版本,并且项目架构基于maven ,商业项目中jdk8 仍是主流,在考虑商业收益的情况下,如果客户不要求,不会升级jdk, 基于Maven的项目比gradle 简单,…...
【ComfyUI】控制光照节点——ComfyUI-IC-Light-Native
原始代码(非comfyui):https://github.com/lllyasviel/IC-Light comfyui实现1(600星):https://github.com/kijai/ComfyUI-IC-Light comfyui实现2(500星):https://github.c…...
LVS+keepalived整合负载均衡配置
准备三台服务器;负载均衡服务器192.168.45.136,后端机器1,92.168.45.135,后端机器2,192.168.45.138 在两台后端机器上安装nginx服务,yum install -y nginx,并且启动nginx服务,systemctl start …...
Goland无法使用debug的修复
现象goland在debug的时候,一直卡在打的断点处,释放断点程序就执行结束。 查看其他博客说是当使用老版本的goland,golang版本为高版本时就会出现debug问题,需要手动更换dlv。 接下来以window为例子: 第一步࿱…...
MySQL和Doris开窗函数LAG执行时的区别
目标表的表结构 CREATE TABLE point_value_status_color_tmp ( id bigint NOT NULL, org_id varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, device_id varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL, origin_ti…...
都是小憨憨!
周五晚上约了俩哥们儿吃饭,天南海北地聊着。其中一个哥们儿 L 讲,他在外面如何辛苦跑业务,维系客户,拿单子……但却被合伙人说是合伙人拉了 L 一把,而且可以分分钟灭了 L。所以 L 感觉到很委屈。然后我们俩就劝说趁早决…...
高级java每日一道面试题-2024年9月30日-服务器篇[Redis篇]-Redis持久化有几种方式?
如果有遗漏,评论区告诉我进行补充 面试官: Redis持久化有几种方式? 我回答: Redis 是一个高性能的键值存储系统,常用于缓存、消息队列和实时数据分析等场景。为了保证数据的持久性,Redis 提供了两种主要的持久化方式:RDB(Redi…...
ICML 2024 论文分享┆一个简单且通用的交通预测提示调优框架
论文简介 本推文介绍了2024 ICML的优秀论文之一《FlashST: A Simple and Universal Prompt-Tuning Framework for Traffic Prediction》。论文的核心目标是通过整合空间和时间因素,精准地预测和分析交通流量的动态变化。然而,在交通预测领域,…...
【C++打怪之路Lv4】-- 类和对象(中)
🌈 个人主页:白子寰 🔥 分类专栏:C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持创作博文(平均质量分82)&#…...
滚雪球学MySQL[1.1讲]:MySQL简介与环境配置
全文目录: 前言1. MySQL简介与环境配置1.1 MySQL简介什么是MySQLMySQL的历史和版本MySQL的应用场景 1.2 安装与配置安装MySQL(Windows、Linux、macOS)配置文件解析(my.cnf)启动与停止MySQL服务 1.3 MySQL客户端工具MyS…...
Llama微调以及Ollama部署
1 Llama微调 在基础模型的基础上,通过一些特定的数据集,将具有特定功能加在原有的模型上。 1.1 效果对比 特定数据集 未使用微调的基础模型的回答 使用微调后的回答 1.2 基础模型 基础大模型我选择Mistral-7B-v0.3-Chinese-Chat-uncensored&#x…...
中关村环球时尚产业联盟 东晟时尚产业创新中心成立
2024年9月6日,中关村环球时尚产业联盟与东晟时尚创新科技(北京)有限公司于中关村科技园东城园举行了隆重的战略合作签约仪式。 中关村科技园东城园领导发表了致辞,并表示东城区作为首都北京的核心区域,拥有深厚的历史…...
基于SSM的宠物领养管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的宠物领养管理系统2拥有两种角色 管理员:宠物分类管理、领养管理、宠物商品管理、用户管理、寄存管理、丢失信息管理、订单管理等 用户:登录注册、收藏评…...
为什么要配置环境变量?
在 Windows 操作系统中配置环境变量有多个重要的原因,这些原因与软件开发、系统管理和日常使用密切相关。以下是一些主要的原因: 1. 系统路径(PATH) 可执行文件的位置:PATH 环境变量用于指定操作系统在何处查找可执行…...
条件熵公式详细解释、举例说明计算步骤
公式 7-4 是条件熵的表达式: E ( Y ∣ X ) ∑ i 1 m p ( X x i ) E ( Y ∣ X x i ) E(Y|X) \sum_{i1}^m p(X x_i) E(Y | X x_i) E(Y∣X)i1∑mp(Xxi)E(Y∣Xxi) 这个公式表示的是条件熵,它是衡量在已知某一特征 X X X 的情况下,…...
颍川陈氏始祖陈寔逆势崛起的原由(一)不屈的努力
园子说颍川 按陈寔的出身,与当官是风马牛不相及的。 东汉末年的社会,朝中外戚、宦官当道,地方则由世家大族把持,郡县的政治经济资源都由他们掌控分配,平民以及中小地主很难有出头之日,弄不好就被兼并了。…...
golang小项目1-家庭收支记账系统
项目地址:golang小项目 参考资料:尚硅谷golang教程P229 家庭收支记账系统 1. 系统简介 1.1 项目背景 在现代社会中,家庭的财务管理显得尤为重要。随着生活成本的不断上升,家庭需要有效地记录和分析收支情况,以确保…...
Visual Studio Code下载安装及汉化
官网:https://code.visualstudio.com/ 按照指示一步步操作即可: 汉化:...
MySQL—触发器详解
基本介绍 触发器是与表有关的数据库对象,在 INSERT、UPDATE、DELETE 操作之前或之后触发并执行触发器中定义的 SQL 语句。 触发器的这种特性可以协助应用在数据库端确保数据的完整性、日志记录、数据校验等操作。 使用别名 NEW 和 OLD 来引用触发器中发生变化的记…...
钉钉H5微应用Springboot+Vue开发分享
文章目录 说明技术路线注意操作步骤思路图 一、创建钉钉应用二、创建java项目三、创建vue项目(或uniapp项目),npm引入sdk的依赖四、拥有公网域名端口。开发环境可以使用(贝锐花生壳等工具)五、打开钉钉开发者平台&…...
项目:微服务即时通讯系统客户端(基于C++QT)]四,中间界面搭建和逻辑准备
四,中间界面搭建 前言:当项目越来越复杂的时候,或许画草图是非常好的选择 一,初始化中间窗口initMidWindow void mainWidget::initMidWindow() {//使用网格布局进行管理QGridLayout* layout new QGridLayout();//距离上方 20px 的距离&…...
网站制作有哪些创新/百度权重查询
说实话,css用过不少,但是伪类与伪元素是啥意思呢?不复习真不知道用了那么多的: :;竟然就是伪类与伪元素的意思。来,跟我一起来复习下。 先来看看这张图片 CSS 选择器 种类如下 类型、类和ID选择器标签属性选择器运算符伪类与伪元…...
网站上微信引流怎么做的/北京百度搜索排名优化
前段时间研究webrtc,找了很多资料,都不好用。后来找到个skypertc,在上面做了修改,实现了功能。 不知道有多少人对这个感兴趣,并且正在找资料。 有兴趣的话请留言,需要人多的话我再花时间整资料出来。转载于…...
程序员自学网站/seo在线教学
BOOL CPrjDlg::PreTranslateMessage(MSG* pMsg){if ((pMsg->message WM_LBUTTONDOWN) || (pMsg->message WM_LBUTTONUP)) //核心点{if (GetFocus() GetDlgItem(IDC_EDIT_PRJ_NAME)) //根据不同控件焦点判断是那个在执行 {char chHelp[100]; GetPrivateProfileStrin…...
安徽网站建设公司/优秀网站网页设计
Masked AutoEncoders(MAE) Top-1准确率87.8% masked autoencoders(MAE) 是一种可扩展的计算机视觉自监督学习方法。 本文的MAE方法很简单:mask输入图像的随机patch,并重建丢失的像素 。它基于两个核心设计的。 首先…...
青海网站建设价格低/seo工资水平
背景 一些软件系统需要根据组织做数据查看权限限制,比如可以设置张三能查看或管理1个或多个组织的数据。在对张三进行配置后,张三这个账号查询对应的业务数据表时需要带上数据权限有关的where条件。 一、主要表介绍 组织表的主要字段:ID、CODE、NAME、上级CODE、CODE全路…...
html商城网站源码/湖南关键词优化首选
与 UpdatePanel 控件不兼容的控件 下面的 ASP.NET 控件与部分页更新不兼容,因此,不能用在 UpdatePanel 控件内: 在以下几种情况下的 Treeview 控件:一种是当回调不是作为异步回发的一部分启用时;一种是您直接将样式设置…...