论文阅读笔记: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.rhkb.cn/news/411321.html

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

相关文章

Jmeter(十四)Jmeter分布式部署测试

单个接口测试,我们使用谷歌的插件postman 多个接口测试,我们使用Jmeter进行测试 一、使用工具测试 1、使用Jmeter对接口测试 首先我们说一下为什么用Posman测试后我们还要用Jmeter做接口测试,在用posman测试时候会发现的是一个接口一个接…

存储架构模式之复制架构

存储类问题处理框架图 故障:机器挂掉 灾难:自然灾害 多活:技术复杂度高、成本高 高可用的关键指标 stag1是正常状态,系统和业务都是正常的 stag2是故障状态,系统和业务都是异常的 stag3是系统恢复正常&#xff0c…

docker maven 构建的找不到 ClassNotFoundException

Exception in thread "main" java.lang.ClassNotFoundException: com.baimeidashu.springbootdemo1.Springbootdemo1Application 我用idea 自带的 maven 构建的jiar包没,没问题, 但是用 docker 镜像 maven:3.6.0-jdk-8-alpine 构建的就出问…

Oracle发邮件时SMTP服务器配置方法与步骤?

Oracle发邮件功能如何配置?如何优化Oracle发信性能? 为了实现自动化报告和通知,Oracle发邮件功能变得尤为重要。通过配置SMTP服务器,Oracle可以轻松地发送电子邮件。AokSend将详细介绍如何配置Oracle发邮件时的SMTP服务器&#x…

收藏夹里的“小网站”被误报违规不让上怎么办?如何将Chrome和Edge安装到 D 盘(含用户数据),重装系统也不会丢失收藏夹和密码?

当你用国产浏览器访问网站的时候,有时候会显示这个: 如果确实是违规网站,不让访问也没什么,但是很多都是误报啊,你这样直接来个大红横幅,还让人活不? 那遇到这种误报应当怎么办呢?有…

爆火的《黑神话:悟空》对LabVIEW软件开发的启示

近期,《黑神话:悟空》在全球范围内爆火,引发了游戏行业和玩家群体的广泛关注。作为一款由中国开发团队Game Science历时多年打造的动作角色扮演游戏,它的成功不仅源于卓越的技术创新和对中国传统文化的深度挖掘,更在于…

翻译_Clock Domain Crossing Design

翻译_Clock Domain Crossing Design 原文标题及连接:Clock Domain Crossing (CDC) Design & Verification Techniques Using SystemVerilog. 作者:Clifford E. Cummings Sunburst Design, Inc. cliffc@sunburst-design.com 摘要 在多时钟设计中,需要在时钟域交叉(…

【Java】—— Java面向对象基础:使用Java模拟银行账户与客户交易系统

目录 账户类(Account) 客户类(Customer) 测试类(CustomerTest) 运行结果 在今天的博文中,我们将通过Java编程语言来模拟一个简单的银行账户与客户交易系统。这个系统将包括两个主要类&#…

09.定时器02

#include "reg52.h"sbit led P3^6;void delay10ms() { //1. 配置定时器0工作模式位16位计时TMOD 0x01;//2. 给初值,定一个10ms出来TL00x00;TH00xDC;//3. 开始计时TR0 1;TF0 0; } void main() {int cnt 0;led 1;while(1){if(TF0 1)//当爆表的时候&a…

Open3D mesh 去除噪点

目录 一、概述 1.1去除噪点的方法 1.2应用 二、代码实现 三、实现效果 3.1原始点云 3.2添加噪声的mesh Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSDN博客 一、概述 在三维网格…

LeetCode刷题:1 两数之和

1. 两数之和 暴力解法:O(N^2) //给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 // // 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。…

list的使用及其相关知识点

目录 ◉list的底层逻辑 ◉关于list的新增功能 ▲splice功能 ▲remove函数 ▲unique函数 ▲merge函数 ▲sort函数 ▣迭代器类型 ▲reverse函数 作为数据容器之一的list和其他容器的使用上有很多相似的地方,比如都有大致相同的构造函数,大致相同的头插尾插…

【Java】—— Java面向对象基础:Java中如何创建和使用三角形类(TriAngle)来计算面积

目录 第一步:定义TriAngle类 第二步:编写TriAngleTest测试类 运行程序 总结 在Java编程中,面向对象的编程思想是一种非常强大的工具,它允许我们将现实世界中的实体(如三角形)抽象成程序中的类&#xff…

Python+tkinter实现2048游戏

游戏规则 2048 是一个单人拼图游戏,目标是通过滑动方块将相同数字的方块合并,最终得到一个数字为 2048 的方块。 游戏在一个 4x4 的网格上进行,初始时有两个方块,每个方块的值为 2 或 4。玩家可以通过上下左右方向键滑动方块&am…

微服务间调用

一、restTemplate 1、先将restTemplate注册成为一个bean Configuration public class RemoteCallConfig {Beanpublic RestTemplate restTemplate() {return new RestTemplate();} }2、实现代码 private void handleCartItems(List<CartVO> vos) {// TODO 1.获取商品id…

【C++ Primer Plus习题】6.4

问题: 解答: #include <iostream> using namespace std;const int strsize 40; const int usersize 40;typedef struct _Bop {char fullname[strsize];char title[strsize];char bopname[strsize];int preference; }Bop;Bop bop_user[usersize] {{"Wimp Macho&q…

使用Python调用JavaScript进行网页自动化操作

随着互联网技术的飞速发展&#xff0c;网页自动化操作在数据抓取、用户界面测试、内容管理等多个领域变得越来越重要。Python作为一种流行的编程语言&#xff0c;因其简洁的语法和强大的库支持&#xff0c;成为了许多开发者进行网页自动化的首选工具。然而&#xff0c;面对动态…

【C++ Primer Plus习题】6.8

问题: 解答: #include <iostream> #include <fstream> #include <string> using namespace std;int main() {string filename;ifstream stream;char read_char;int count0;cout << "请输入要打开的文件:";getline(cin, filename);stream.op…

微分方程(Blanchard Differential Equations 4th)中文版Section5.1

平衡点分析 从第3章的工作中,我们能够对线性系统的解有定性和解析的理解。不幸的是,非线性系统通常不容易使用我们开发的解析和代数技术来分析,但我们可以利用线性系统的数学来理解非线性系统在其平衡点附近的行为。 Van der Pol 方程 为了说明如何分析平衡点附近解的行为…

输电线路分布式故障诊断系统:分布式智慧网络的构建

输电线路分布式故障诊断系统&#xff1a;分布式智慧网络的构建 今天&#xff0c;就让深圳鼎信智慧科技陪大家一起走进输电线路分布式故障定位系统的世界&#xff1a; 1、系统架构&#xff1a;分布式智慧网络的构建 输电线路分布式故障定位系统主要由三大核心部分组成&#x…