当前位置: 首页 > article >正文

论文阅读笔记:RepViT: Revisiting Mobile CNN From Vit Perspective

文章目录

  • RepViT: Revisiting Mobile CNN From Vit Perspective
    • 动机
      • 现状
      • 问题
    • 贡献
    • 实现
      • Block设置
        • 独立的token融合器和通道融合器
        • 减少膨胀并增加宽度
      • 宏观设计
        • stem的早期卷积
        • 简单分类器
        • 整体阶段比率
      • 微观设计
        • 内核大小选择
        • Squeeze-and-excitation层放置
        • 网络架构
    • 实验
      • ImageNet-1K上进行图像分类
      • RepViT融合SAM

RepViT: Revisiting Mobile CNN From Vit Perspective

论文地址: https://github.com/THU-MIG/RepViT
代码: https://github.com/THU-MIG/RepViT

动机

现状

  • 与轻量级CNN相比,轻量级ViT在资源受限的移动设备上表现出了卓越的性能和更低的延迟。
  • 轻量级ViT和轻量级CNN之间有许多结构联系

问题

  • 摘要:
    • 轻量级ViT和轻量级CNN之间在块结构、宏观和微观设计方面的架构的显著差异未得到充分研究
  • 引言:
    • 轻量级ViT取得了成功,但由于硬件和计算库支持不足,扔面临实际挑战
    • ViT容易收到高分辨率输入的影响,从而导致高延迟。相比之下, CNN利用高度优化的卷积运算,其复杂度相对于输入呈线性,这使得它们有利于在边缘设备上部署。
    • 轻量级ViT和轻量级CNN表现出一定的结构相似性,如都采用卷积模块来学习空间局部表示、轻量级CNN通过增加卷积核大小来学习全局表示而轻量级ViT采用多头注意力模块。
    • 虽然存在这些结构联系,但他们之间的块结构、宏观.微观设计仍然存在显著差异,尚未得到足够的检验。
    • 问题:
      • 轻量级ViT的架构涉及能否增强轻量级CNN的性能?

贡献

  • 从ViT的角度重新审视轻量级CNN的高效架构设计,逐步增强它们在移动设备商的广阔前景
  • 通过集成轻量级ViT的高效架构设计,逐步增强标准轻量级CNN的移动友好性。
  • 提出了一个新的纯轻量级CNN系列,RepViT。
  • 在ImageNet上,在iPhone12上达到了1.0毫秒的延迟实现了 80 % 80\% 80%的top-1准确率。
  • RepVit和SAM结合后的RepViT-SAM的推理速度比先进的MobileSAM快十倍以上

实现

Block设置

独立的token融合器和通道融合器

独立token融合器和通道融合器是轻量级ViT的块结构的重要设计特征。最近的研究表明ViT的有效性主要源于其通用的token融合器和通道融合器结构,即MetaFormer架构。
如下图所示,(a)原始MobileNetV3块采用 1 × 1 1\times1 1×1扩展卷积核 1 × 1 1\times1 1×1投影层来实现通道之间的交互(即通道融合器)。在 1 × 1 1\times1 1×1扩展卷积之后配备 3 × 3 3\times3 3×3深度(DW)卷积, 用于空间信息的融合(即token融合器)。这样的设计使得token融合器和通道融合器耦合到一起。为了将它们分开,RepViT将DW卷积上移。可选择的squeeze-and-excitation (SE)层也向上移动到DW之后,因为它取决于空间信息交互。因此,成功地分离MobileNetV3 block中的token融合器和通道融合器。RepVit进一步在DW层采用广泛使用的结构重参化技术来增强训练期间的模型学习。得益于结构重参化技术,可以消除推理过程中与跳过连接相关的计算和内存成本。
在这里插入图片描述

减少膨胀并增加宽度

在普通ViT中,通道混合器中的扩展比通常设置为4,,使前馈网络(FFN)模块的隐藏维度 4 t i m e s 4times 4times比输入维度更宽。它消耗了很大一部分计算资源,从而影响了总体推理时间。最近的工作采用了更窄的FFN。

MobileNetV3-L中,扩展比的范围是2.3到6,其通道数比较多的最后两个阶段集中为6。RepViT模块所有阶段的通道混合器中的扩展比斗设置为2。者减少了延迟。在较小的扩展率下,可以增加网络宽度来弥补参数的大幅减少。因此在每个阶段之后将通道加倍,最终每个阶段分别有48/96/192和384个通道。

宏观设计

stem的早期卷积

ViT通常使用patchify操作作为主干,将输入图像划分为不重叠的补丁。这个简单的stem对应于具有大内核和大步长。分层ViT采用相同的patchify操作,但patch大小较小为4。最近的工作表明这种patch操作容易导致ViT训练的优化性和敏感性不合格。而使用少量堆叠的两个 3 × 3 3\times3 3×3卷积作为stem的代替方案,成为早期卷积,这提高了优化稳定性和性能。

MobileNetV3-L采用复杂的主干,涉及 3 × 3 3\times3 3×3卷积、深度不可分离卷积核反向bottleneck。MobileNetV3-L将滤波器的初始数量减少到16个来解决stem以最高分辨率处理输入图像在移动设备上遇到严重延迟瓶颈的问题,但这也限制了stem的表达能力。为了解决这些问题,RepViT采用早期卷积的方式,并简单的使用了两个 3 × 3 3\times3 3×3 s t r i d e = 2 stride=2 stride=2的卷积。如下图(b)所示,第一个卷积中的滤波器数量设置为24,第二个卷积中的滤波器数量设置为48。

简单分类器

在轻量级ViT中,分类器通常由全局平均池化层和线性层组成。这种简单的分类器对延迟很友好。MobileNetV3-L采用了一个复杂的分类器,其中包括一个额外的 1 × 1 1\times1 1×1卷积核一个额外的线性层,以将特征扩展到更高维的空间(下图e)。这可以生成丰富的预测特征但延迟高。RepViT将其代替为一个简单的分类器,即全局平均池化层和线性层(下图(f))。
在这里插入图片描述

整体阶段比率

阶段比表示不同阶段的块数量的比率,从而表明计算在阶段之间的分布。在第三阶段使用更多的块可以在精度和速度之间实现良好的平衡。因此,现有轻量级ViT在这个阶段一般会应用更多的block。RepViT网络采用 1 : 1 : 7 : 1 1:1:7:1 1:1:7:1的级比,将网络深度增加到 2 : 2 : 14 : 2 2:2:14:2 2:2:14:2实现更深的布局。

微观设计

内核大小选择

CNN的性能和延迟通常受到卷积核大小的影响。由于计算复杂度和内存访问成本,大内核的卷积对移动设备并不友好。此外,与 3 × 3 3\times3 3×3卷积相比,较大的卷积核不会被编译器和计算库高度优化。MobileNetV3-L主要利用 3 × 3 3\times3 3×3卷积,在某些block中使用少量 5 × 5 5\times5 5×5卷积。RepViT所有模块都优先使用简单的 3 × 3 3\times3 3×3卷积。

Squeeze-and-excitation层放置

与卷积相比,自注意力模块的优点之一是能够根据输入调整权重,称为数据驱动属性。作为通道上的注意力模块,SE层可以弥补卷积缺乏数据驱动属性的限制,带来更好的性能。MobileNetV3-L在某些块中合并了SE层,主要关注后两个阶段。然而,与具有较高分辨率特征图的阶段相比,具有低分辨率特征图的阶段获得的准确度优势较小。同时,除了性能提升之外,SE层还带来了不可忽略的计算成本。因此,RepViT设计了一种以跨方式利用SE层的策略。即在第1、3、5、···层中采用SE层,以最小的延迟增量最大化准确性优势。

网络架构

RepViT有很多变体,包括RepViT-M0.9/M1.0/M1.1/M1.5/M2.3。"-MX"表示对应型号在移动设备上的延迟为X毫秒。变体通过每个阶段内的通道数和block数来区分。

实验

ImageNet-1K上进行图像分类

在这里插入图片描述

RepViT融合SAM

延迟比较
在这里插入图片描述

zero-shot分割比较
在这里插入图片描述

语义分割结果
在这里插入图片描述


http://www.kler.cn/a/290360.html

相关文章:

  • 光流法与直接法在SLAM中的应用
  • goframe开发一个企业网站 rabbitmq队例15
  • 数据分析——学习框架
  • GitHub 上的开源项目推荐
  • 前端知识点---选择输入框confirm(Javascript)
  • [Docker#4] 镜像仓库 | 部分常用命令
  • blender 快速LOD
  • 【C#】Visual Studio2017 MSDN离线安装
  • Oracle 客户端 PL/SQL Developer 15.0.4 安装与使用
  • 两大信号 华为又有神操作
  • 24数学建模国赛提供助攻(14——偏最小二乘回归)
  • 在HarmonyOS中灵活运用Video组件实现视频播放
  • 打造高效接口自动化测试:精准对比与可视化展示,轻松发现数据差异!
  • 工作加速器:五种思维导图策略优化你的日常
  • 如何使用Git进行C/C++项目的版本控制与协作
  • 视频结构化从入门到精通——GPU主要硬件平台介绍
  • 【云原生-Docker】docker、docker-compose离线安装【包括dokcer、docker-compose资源下载】
  • Qt-信号与槽
  • tomcat架构设计分析,核心组件详解
  • SprinBoot+Vue阅读交流微信小程序的设计与实现
  • ElasticSearch--倒排索引
  • linux~~目录结构远程登录教程(xshell+xftp)
  • [数据集][目标检测]机油泄漏检测数据集VOC+YOLO格式43张1类别
  • Java并发线程 共享模型之管程 5
  • C#中的连接池以及sqlCommand.ExecuteNonQuery()
  • 【Redis】Redis 典型应⽤ - 缓存 (cache)