《RepViT Revisiting Mobile CNN From ViT Perspective》

期刊:CVPR

年份:2024

代码:http://https: //github.com/THU-MIG/RepViT

摘要

最近,与轻量级卷积神经网络(CNN)相比,轻量级视觉Transformer(ViTs)在资源受限的移动设备上表现出了更高的性能和更低的延迟。研究人员已经发现了轻量级ViT和轻量级CNN之间的许多结构联系。然而,它们之间在块结构、宏观和微观设计上的显著差异并没有得到充分的研究。在本研究中,我们从ViT的角度重新审视轻量级CNN的高效设计,并强调其在移动设备上的广阔前景。具体来说,我们通过集成轻量级vit的高效架构设计,逐步增强了标准轻量级CNN(即MobileNetV3)的移动友好性。这就产生了一个新的纯轻量级CNN家族,即RepViT。大量的实验表明,RepViT优于现有的最先进的轻型ViT,并在各种视觉任务中表现出良好的延迟。值得注意的是,在ImageNet上,RepViT在iPhone 12上以1.0 ms的延迟实现了超过80%的top-1精度,据我们所知,这是轻量级模型的第一次。此外,当RepViT遇到SAM时,我们的RepViT-SAM的推理速度比先进的MobileSAM快近10倍。

Introduction

轻量级CNN的发展:过去十年中,研究人员主要关注轻量级CNN,并取得了显著进展。提出了许多高效设计原则,如可分离卷积、反向残差瓶颈、通道洗牌和结构重参数化等,这些原则促成了MobileNets、ShuffleNets和RepVGG等代表性模型的发展。

轻量级ViTs的探索:尽管直接减小ViT模型的大小以适应移动设备的约束是可能的,但这样做往往会降低性能,使其不如轻量级CNN。因此,研究人员开始探索轻量级ViTs的设计,目标是超越轻量级CNN的性能。

轻量级ViTs和CNNs的比较:尽管轻量级ViTs和轻量级CNNs在某些结构上具有相似性,例如都采用卷积模块来学习空间局部表示,但它们在块结构、宏观/微观设计上存在显著差异,这些差异尚未得到充分的检查。

主要贡献:

  1. 新的轻量级CNN架构RepViT:提出了一种新的轻量级CNN架构,名为RepViT,它通过整合轻量级ViTs的高效架构设计,旨在为资源受限的移动设备提供高性能的模型。

  2. 性能与延迟的优化:RepViT在保持低延迟的同时,实现了超越现有最先进轻量级ViTs和CNNs的性能,特别是在ImageNet数据集上达到了超过80%的top-1准确率,且在iPhone 12上的延迟仅为1.0毫秒。

  3. 架构设计的创新:文章详细介绍了RepViT架构的设计过程,包括块设计、宏观设计和微观设计,这些设计决策共同促进了模型性能的提升和延迟的降低。

延迟 vs 准确性

图1

Method

2.1 预备知识

延迟度量:作者选择在移动设备上的实际延迟作为模型性能评估的基准,而不是传统的FLOPs或模型大小,因为这些指标与移动应用中的实际延迟相关性不高。

训练对齐:为了公平比较,作者将MobileNetV3-L的训练与现有的轻量级ViTs对齐,包括使用AdamW优化器、余弦学习率调度器、数据增强技术如Mixup、自动增强和随机擦除,以及标签平滑作为正则化方案。

2.2 块设计

2.2.1 Separate token mixer and channel mixer

动机:轻量级ViTs的一个关键设计特征是将Token Mixer和Channel Mixer分开。这种分离基于MetaFormer架构,已被证明对ViTs的有效性至关重要。

图2 (a) 是一个 MobileNetV3 块,具有可选的squeeze-and-excitation (SE) 层。(b) 是设计的 RepViT 块,它通过结构重新参数化技术分离令牌混合器和通道混合器。SE 层在 RepViT 块中也是可选的。为简单起见,省略了范数层和非线性。

如图2(a)所示:

  • 在MobileNetV3-L中,原始的块结构采用1×1扩展卷积和1×1投影层来实现通道间的交互(即Channel Mixer),并在1×1扩展卷积之后使用3×3深度卷积(DW)来融合空间信息(即Token Mixer)。这种设计将Token Mixer和Channel Mixer耦合在一起。
  • 为了分离它们,作者首先将DW卷积上移,并在DW之后放置可选的Squeeze-and-Excitation(SE)层,因为SE层依赖于空间信息的交互。(通过将DW卷积移动到1×1扩展卷积之前,我们可以首先对每个通道进行空间混合,然后再通过1×1卷积进行通道混合。这样,空间信息的混合和通道信息的混合就不再是顺序依赖的,而是可以独立进行。
  • 采用结构重参数化技术来增强模型在训练期间的学习能力。这种技术允许在推理过程中消除跳跃连接带来的计算和内存成本,这对移动设备尤其有利。

扩展阅读

扩展卷积(Expansion Convolution)处理通道信息

  • 扩展卷积通常用于CNN中的“扩展层”或“瓶颈层”,其目的是在不显著增加参数数量的情况下增加特征图的维度。
  • 在MobileNetV2和MobileNetV3等架构中,扩展卷积通过1×1的卷积操作来实现通道数的增加,这有助于在后续的深度卷积层中捕获更丰富的特征。

深度卷积(Depthwise Convolution)处理空间信息

  • 深度卷积是一种对输入特征图的每个通道分别应用的卷积操作,每个通道的卷积核独立于其他通道。
  • 这种卷积方式可以增加特征图的空间维度,同时保持较低的计算成本,因为它允许每个输入通道独立地学习空间特征。
  • 在MobileNet系列架构中,深度卷积通常与扩展卷积结合使用,以实现有效的特征提取和降维。

投影(Projection Layer)

  • 投影层通常指的是1×1的卷积层,它用于调整特征图的通道数,而不会改变其空间维度。
  • 在某些CNN架构中,如MobileNetV1,投影层用于在深度卷积后减少特征图的通道数,以降低后续层的计算负担。
  • 在Transformer架构中,投影层也可以用于将多头自注意力(Multi-Head Self-Attention, MHSA)模块的输出投影回原始维度,以准备进行下一轮的自注意力计算。

拓展阅读2

Token Mixer

  • 在ViT中,Token Mixer通常指的是多头自注意力机制(MHSA),它允许模型在不同位置的输入特征(tokens)之间建立联系,通过注意力权重来强调某些特征。这种机制有助于模型捕获全局上下文信息。

Channel Mixer

  • Channel Mixer通常指的是在特征的通道维度上进行混合的操作,如1×1的卷积,它允许模型在保持空间位置不变的同时,重新分配和组合不同通道的特征信息。

分开的原因

  • 在一些传统的ViT架构中,Token Mixer和Channel Mixer可能是结合在一起的,这意味着它们在同一个操作中同时发生。然而,这种耦合可能不利于模型的效率和灵活性,尤其是在需要处理不同分辨率或在资源受限的设备上运行时。

效果:将 MobileNetV3-L 的延迟降低到 0.81 ms,以及临时性能下降到 68.3%。 

2.2.2 Reducing expansion ratio and increasing width

扩展比(Expansion Ratio):扩展比是指在网络中的某些层,特别是卷积层或前馈网络(Feed Forward Network, FFN)中,输出通道数与输入通道数的比例。例如,如果一个层的扩展比是4,那么它的输出通道数是输入通道数的4倍。

扩展比的调整

在传统的ViT中,FFN模块的扩展比通常设置为4,这意味着FFN的隐藏维度是输入维度的4倍。这种设计虽然有助于捕获复杂的特征,但也导致了计算资源的大量消耗。

网络宽度(Width):网络宽度指的是网络中通道的数量。增加网络宽度可以提供更多的特征表示能力,有助于提高模型的性能。

宽度的调整

为了补偿降低扩展比带来的参数减少,作者提出增加网络的宽度。例如,在每个阶段之后加倍通道数,从而在保持或提高性能的同时,减少模型的延迟。

方案

RepViT在通道混合器中为所有阶段设置扩展比为 2,随着扩展比较小,我们可以增加网络宽度来弥补较大的参数减少。我们在每个阶段之后对通道进行双重处理,每个阶段最终得到48,96,192和384个通道。

效果:在 0.91 ms 的类似延迟下获得了 73.0% 的 top-1 准确率的较差性能

2.3 宏观设计

2.3.1 Early convolutions for stem

动机

Stem是CNN中的第一个卷积层,它负责从原始图像中提取初步的特征表示。在ViT和一些轻量级CNN中,Stem通常使用patchify操作,将输入图像分割成小块。Patchify操作虽然简单,但可能导致优化问题和对训练配置的敏感性。这是因为它将图像分割成固定大小的非重叠块,这可能不利于模型学习有效的特征表示

为了解决上述问题,引入了早期卷积的概念。这种方法使用几个stride为2的3×3卷积层作为Stem,以替代传统的patchify操作。

早期卷积的优势:使用早期卷积可以提高优化稳定性和性能。这是因为较小的卷积核可以更好地捕捉局部特征,并且多层堆叠可以逐渐增加感受野,从而有助于模型学习更丰富的特征表示。

实现细节:在RepViT架构中,作者采用了两个3×3卷积层,步长为2,作为Stem。第一个卷积层的过滤器数量设置为24,第二个卷积层设置为48。

图3 (a)MobileNetV3-L 将过滤器的初始数量减少到 16,这反过来又限制了Stem的表示能力。(b)RepViT采用早期卷积的方法,简单地装备两个步长为 = 2 的 3 × 3 卷积作为Stem。

效果:整体延迟降低到 0.86 ms。top-1 准确率提高到 73.9%。 

 2.3.2 Deeper downsampling layers

动机:在CNN中,下采样层负责减少特征图的空间维度,同时增加特征的深度,这有助于模型捕获不同尺度的特征并减少计算量。在标准的ViT和一些轻量级CNN中,下采样通常由单独的层完成,例如通过步长大于1的卷积或池化操作。然而,这种简单的下采样可能会导致信息丢失,影响模型性能

深化下采样层的策略

通过增加下采样层的深度来提高网络的性能。这包括使用多个连续的卷积层来逐步降低特征图的分辨率,同时增加特征的深度。

具体实现

  • 在RepViT中,作者首先使用一个步长为2的深度卷积(DW convolution)进行空间下采样,然后使用一个1×1的逐点卷积(pointwise convolution)来调整通道维度。
  • 为了进一步加深下采样层并捕获更多的信息,作者在逐点卷积后添加了一个前馈网络(FFN)模块,以记忆更多的潜在信息
图4 (c)MobileNetV3-L (d)RepViT

MobileNetV3-L仅通过步长为 = 2 的 DW 卷积,可能缺乏足够的网络深度,导致信息丢失和对模型性能的负面影响。因此,为了实现单独和更深的下采样层,我们首先使用stride = 2和pointwise 1 × 1卷积的DW卷积分别进行空间下采样和调制通道维度。

效果:将 top-1 准确率提高到 75.4%,延迟为 0.96 ms

2.3.3 Simple classifier

动机

分类器是CNN架构中的最后部分,负责将特征转换为最终的类别预测。在传统的CNN中,分类器通常包括全连接层、全局平均池化层或类似的结构。在一些现有的轻量级CNN中,分类器可能包含额外的卷积层和全连接层,这些设计虽然可以提高特征的表达能力,但也增加了计算复杂度和延迟

简化分类器的设计

使用更简单的分类器设计,以减少计算量并降低延迟。这种设计通常包括全局平均池化层(Global Average Pooling, GAP)后接一个线性层。

  • 全局平均池化层可以有效地将特征图转换为一维特征向量,同时显著减少参数数量和计算量。这种操作对于减少模型大小和提高推理速度非常有益。
  • 在全局平均池化之后,一个线性层(通常是一个全连接层)用于将池化后的特征映射到最终的类别上。这种设计简单且有效。
图4 (e)MobileNetV3-L (f)RepViT

效果:精度下降 0.6%,但延迟降低到 0.77 ms。 

2.3.4 Overall stage ratio

阶段比率(Stage Ratio):阶段比率是指网络中不同阶段的层数或块数的比例。这个比例对网络的性能和计算效率有重要影响。

动机:在第三阶段使用更多的层数可以带来准确性和速度之间的良好平衡。现有的轻量级ViTs通常在第三阶段应用更多的块,以实现更好的性能。

对网络采用 1:1:7:1 的阶段比率。然后,我们将网络深度增加到 2:14:2,实现更深的布局。

效果:将 top-1 准确率提高到 76.9%,延迟为 0.91 ms

2.4 微观设计

2.4.1 Kernel size selection

动机

  • 卷积核的大小直接影响CNN的性能和计算效率。较大的卷积核可以捕获更广泛的上下文信息,但会增加计算复杂度和延迟,特别是在移动设备上。
  • 一些研究工作,如ConvNeXt和RepLKNet,展示了使用大卷积核可以提高性能,但这些研究通常不针对移动设备优化。

在移动设备上,由于计算资源和内存访问成本的限制,大卷积核可能不是最优选择。此外,编译器和计算库通常对3×3卷积核有更高度的优化。

效果:保持76.9%的最高精度,同时延迟降低到0.89 ms。

2.4.2 Squeeze-and-excitation layer placement

动机

  • SE层作为一种通道注意力模块,可以弥补卷积在缺乏数据驱动属性方面的局限性,带来更好的性能。
  • 尽管SE层能够提升性能,但它也会引入额外的计算成本。因此,在设计轻量级模型时,需要仔细考虑SE层的放置,以平衡性能增益和计算效率。

先前研究的启示:引用了先前的研究,指出在低分辨率特征图的阶段使用SE层可能不会带来显著的准确率提升,而在高分辨率特征图的阶段使用SE层则可以更有效地提升性能。

具体方案

在RepViT中,采用了一种跨块的SE层放置策略。具体来说,每个阶段中的第1、3、5...个块使用SE层,这种交错放置方式旨在最大化准确率的提升,同时控制延迟的增加。

效果准确率达到77.4%,延迟为0.87 ms。

拓展阅读

SE模块:

Squeeze

  • 这一步骤通过全局平均池化(Global Average Pooling, GAP)将特征图压缩成一个单一的通道。这意味着无论特征图的空间维度有多大,都会被压缩成一个包含所有空间信息的单一数值。
  • 这种压缩操作生成了一个长度为1的全局特征向量,它捕获了输入特征图的全局空间信息。

Excitation

  • 接下来,这个全局特征向量通过几个全连接(FC)层进行非线性变换,通常包括一个ReLU激活函数和一个sigmoid激活函数。
  • ReLU层引入非线性,而sigmoid层则将输出值压缩到0和1之间,生成一个与输入通道数相同长度的权重向量。

Result

如表所示,RepViT在各种模型大小上始终实现最先进的性能。在类似的延迟情况下,RepViTM0.9可以显著优于EfficientFormerV2-S0和fastvitt - t8,准确率分别提高3.0%和2.0%。与EfficientFormerV2-S1相比,repviti - m1.1还可以获得1.7%的性能提升。值得注意的是,repviti - m1.0在iPhone 12上以1.0 ms的延迟实现了超过80%的top-1精度,据我们所知,这是轻量级机型的第一次。我们最大的模型,repviti - m2.3,获得83.7%的准确率,只有2.3毫秒的延迟。以上结果很好地表明,通过结合高效的架构设计,纯轻量级cnn可以在移动设备上优于现有的最先进的轻量级vit。 Conclusion

在本文中,我们通过结合轻量级vit的架构设计来重新审视轻量级cnn的高效设计。这就产生了RepViT,这是一个针对资源有限的移动设备的新型轻量级cnn系列。在各种视觉任务上,RepViT优于现有的最先进的轻量级vit和cnn,表现出良好的性能和延迟。这凸显了面向移动设备的纯轻量级cnn的前景。我们希望RepViT可以作为一个强大的基线,并激发对轻量级模型的进一步研究。

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

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

相关文章

无法访问指向的web服务器(或虚拟主机)的目录,请检查网络设置

微信公众平台,进行业务域名、JS接口安全域名、网页授权域名配置时,遇到的问题中有:无法访问指向的web服务器(或虚拟主机)的目录,请检查网络设置,这里简单记录一下处理过程。 关于这个问题首先保证下载…

【基于R语言群体遗传学】-1-哈代温伯格基因型比例

前言 群体遗传学是研究生物群体中基因的分布、基因频率和基因型频率的维持和变化的学科。它不仅探讨遗传病的发病频率和遗传方式,还研究基因频率和变化的规律,为预防、监测和治疗遗传病提供重要信息。R语言作为一种强大的统计分析工具,在群体…

mybatis实现多表查询

mybatis高级查询【掌握】 1、准备工作 【1】包结构 创建java项目,导入jar包和log4j日志配置文件以及连接数据库的配置文件; 【2】导入SQL脚本 运行资料中的sql脚本:mybatis.sql 【3】创建实体来包,导入资料中的pojo 【4】User…

TypeScript Project References npm 包构建小实践

npm 包输出 es/cjs 产物 在开发一个 npm 包时,通常需要同时输出 ES 模块和 CommonJS 模块的产物供不同的构建进行使用。在只使用tsc进行产物编译的情况下,我们通常可以通过配置两个独立的 tsconfig.json 配置文件,并在一个 npm script 中 执…

7.1作业

1.思维导图 2.在堆区申请两个长度为32的空间,实现两个字符串的比较【非库函数实现】 (1)定义函数,在对区申请空间 两个申请,主函数需要调用2次 (2)定义函数,实现字符串的输入 void input(char *p) (3)调用函数实现字符串比较…

BUT000增强字段BAPI结构激活出错(BUPA_CENTRAL_CI_CHANGE)

导语:BP主数据增强字段,需要使用BAPI:BUPA_CENTRAL_CI_CHANGE进行值写入,但是在SAP 2023以后的版本,激活会出错,原因是因为SAP的一个结构同时包含了BUS00_EEW以及BUS00_EEWX两个结构,导致结构字…

Spring Security 认证流程

Spring Scurity是spring生态下用于认证和授权的框架,具有高度的灵活性和可扩展行,本节主要对Spring Security的认证过程中进行概括性的介绍,主要介绍在该过程中,会涉及到哪些组件以及每个组件所承担的职责,希望大家可以…

电脑录音软件哪个好?7款录制音频工具大盘点,赶快学起来!(2024)

也许你渴望提取你最喜欢的节目的背景音乐,或者你希望录制自己的声音制作教程。如果是这样,你就需要一款优秀的电脑录音软件,来帮助你捕捉任何你想要的声音,而且不会损失音质。目前市场上存在着大量的录制音频工具,面对…

锁相环相位噪声仿真代码-汇总

24小时自动发货 所设计的压控振荡器输入电压为0.625V时,输出大致为500Mhz;输入电压为1.559时,输出电压大致为1Ghz 1.文件夹里面各个文件作用(包括参考书PLL PHASE NOISE ANALYSIS、lee的射频微电子、以及前人留下的matlab文件还有…

Ubuntu(通用)—网络加固—防DNS污染和ARP欺骗

1. 防DNS污染 DNS协议,把域名解析成ip地址,udp,这个过程会暴露访问的域名, 对这一传输过程加密(传输层用tcp)即为DoH(DNS over HTTPS)。 Browser(firefox)加固 由于Cloudflare、Quad8的DoH服务器不能用&…

Dns被莫名篡改的问题定位(笔记)

引言:最近发现用户的多台机器上出现了Dns被莫名修改的问题,从系统事件上看并未能正常确定到是那个具体软件所为,现在的需求就是确定和定位哪个软件具体所为。 解决思路: 首先到IPv4设置页面对Dns进行设置:通过ProcExp…

缺失d3dx9_43.dll是怎么回事?教你几种靠谱的解决方法

在日常生活和工作中,电脑已经成为我们不可或缺的工具。然而,在使用电脑的过程中,我们常常会遇到一些问题,其中之一就是软件运行时提示d3dx9_43.dll丢失。这个问题会导致软件游戏无法启动运行,但只要我们了解其原因和解…

LinkedHashMap、TreeMap

LinkedHashMap: 有序、不重复、无索引,底层是双链表 TreeMap:底层基于红黑树,可以对键进行排序 默认排序:integer和string都是从小到大排序 例题:

DP:子数组问题

文章目录 引言子数组问题介绍动态规划的基本概念具体问题的解决方法动态规划解法:关于子数组问题的几个题1.最大子数组和2.环形子数组的最大和3.乘积最大子数组4.乘积为正数的最长子数组长度5.等差数列划分 总结 引言 介绍动态规划(DP)在解决…

14分Top刊NC代码开源|NSCLC单细胞+空转肿瘤微环境分析

说在前面 说起肺癌真的过去回忆历历在目,小编毕业后职业生涯的第一个项目——非小细胞肺癌预后有效靶点筛选。当时肝的是转录组预后建模筛选。 做研发其实要求是远远高于发文章的,文章投不出去就降分,加工作量,做药要是烂尾或者…

2024年7月1日 (周一) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键,实现一键唤起、一键隐藏的 Windows 工具,并且支持窗口动态绑定快捷键(无需设置自动实现)。 喜马拉雅下载工具: 字面意思 《星刃》早期概念图分享 末世破败环境推主Genki分享了《星…

Spire.PDF for .NET【文档操作】演示:在 PDF 中创建目录 (TOC)

目录在增强文档的可读性和可导航性方面起着至关重要的作用。它为读者提供了文档结构的清晰概述,使他们能够快速找到并访问他们感兴趣的特定部分或信息。这对于较长的文档(例如报告、书籍或学术论文)尤其有价值,因为读者可能需要多…

Linux启动elasticsearch,提示权限不够

Linux启动elasticsearch,提示权限不够,如下图所示: 解决办法: 设置文件所有者,即使用户由权限访问文件 sudo chown -R 用户名[:新组] ./elasticsearch-8.10.4 //切换到elasticsearch-8.10.4目录同级 chown详细格式…

LLaVA1.5训练数据和时间分析

LLaVA的PT+SFT训练_llava sft-CSDN博客文章浏览阅读379次。这个阶段,使用8个A100(80G)训练LLaVA-v1.5-13B大约需要20h。全量微调,非lora跑不起来啊,以前一直用swift,llama-factory这种框架式的代码库,但用原作者开源的代码也是有很多好处的。在这个阶段,使用 8 个 A100(…

64.WEB渗透测试-信息收集- WAF、框架组件识别(4)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:63.WEB渗透测试-信息收集- WAF、框架组件识别(3)-CSDN博客 我们在…