『论文精读』FastViT(ICCV 2023,Apple开源)论文解读

『论文精读』FastViT(ICCV 2023,Apple开源)论文解读

文章目录

  • 一. FastViT简介
  • 二. 模型架构
    • 2.1. Stage 的内部架构
    • 2.2. Stem 的结构
    • 2.3. Patch Embedding 的架构
    • 2.4. 位置编码
  • 三. 参考文献

  • 论文下载链接:https://arxiv.org/pdf/2303.14189.pdf
  • 论文代码链接:https://github.com/apple/ml-fastvit
  • 关于VIT论文的解读可以关注我之前的文章:『论文精读』Vision Transformer(VIT)论文解读
  • 关于Deit论文的解读可以关注我之前的文章:『论文精读』Data-efficient image Transformers(DeiT)论文解读

一. FastViT简介

  • 最近transformer和卷积设计的融合导致了模型的准确性和效率的稳步提高。本文提出FastViT,一种混合视觉transformer架构,可获得最先进的延迟-精度权衡。本文提出一种新的token混合算子RepMixer,FastViT的一个构建模块,使用结构重参数化,通过删除网络中的跳跃连接(skip-connections)来降低内存访问成本。进一步应用训练时间过参数化和大核卷积来提高精度,并根据经验表明这些选择对延迟的影响最小。所提出模型比最近最先进的混合transformer架构CMT快3.5x,比EfficientNet快4.9×,比ConvNeXt在移动设备上快1.9×,以获得在ImageNer数据集上的相同精度。在相似的延迟下,该模型在ImageNet上的Top-1准确率比MobileOne高出4.2%。所提出模型在图像分类、检测、分割和3D网格回归等任务中始终优于竞争架构,在移动设备和桌面GPU上的延迟都有显著改善。此外,该模型对分布外样本和损坏具有高度的鲁棒性,优于竞争的鲁棒模型。
  • 本文提出基于三个关键设计原则的FastViT:①使用RepMixer块来删除跳跃连接(skip-connections);②使用线性训练时间过参数化来提高精度;③在早期阶段使用大型卷积核来替代自注意力层。
  • FastViT 性能对比: (a) 最新方法的准确性与移动延迟缩放曲线。 这些模型在 iPhone 12 Pro 上进行了基准测试,如下 [57]。 (b) 最新方法的准确度与 GPU 延迟缩放曲线。 为了获得更好的可读性,仅绘制 Top-1 精度优于 79% 的模型。 有关更多情节,请参阅补充材料。 在这两种计算结构中,我们的模型具有最佳的准确性与延迟权衡。 iPhone 12 Pro 设备和 NVIDIA RTX-2080Ti desktop GPU
  • 最近最先进的移动架构和 FastViT 变体的准确性与移动延迟缩放曲线。 这些模型使用表 16 中描述的适当图像尺寸在 iPhone 12 Pro 上进行基准测试。

在这里插入图片描述

二. 模型架构

  • FastViT 整体框架图2: (a) FastViT 架构概述,它将训练时间和推理时间架构解耦。 第 1、2、3 阶段具有相同的架构,并使用 RepMixer 进行token混合。 在第 4 阶段,自注意力层用于令牌混合。 (b) 卷积干的架构。 © 卷积 FFN 的架构 (d) RepMixer 块概述,该块在推理时重新参数化跳跃连接。

在这里插入图片描述

2.1. Stage 的内部架构

  • FastViT 采用了4个 stage 的架构,每个 stage 相对于前一个的分辨率减半,通道数加倍。前3个 stage 的内部架构是一样的,都是训练的时候采用下式:
    Y = DWConv(BN ( X ) ) + X (1) \bf Y=\text{DWConv(BN}(X))+X \tag{1} Y=DWConv(BN(X))+X(1)
  • 推理的时候采用结构重参数化得到下式:
    Y = DWConv ( X ) (2) \bf Y=\text{DWConv}(X) \tag{2} Y=DWConv(X)(2)
  • RepMixer 卷积混合首先在ConvMixer中引入。 对于输入张量 X \bf X X ,层中的混合块实现为:
    Y = BN ( σ (DWConv ( X ) ) + X (3) \bf Y=\text{BN}\left(\sigma\text{(DWConv}\left(\bf X\right)\right)+\bf X \tag{3} Y=BN(σ(DWConv(X))+X(3)
  • 其中 σ \sigma σ是非线性激活函数,BN是批量归一化层,DWConv是深度卷积层。虽然该块被证明是有效的,但在RepMixer中,我们只是重新安排操作并删除非线性激活函数,如下所示:
    Y = DWConv(BN ( X ) ) + X (4) \bf Y=\text{DWConv(BN}(X))+X \tag{4} Y=DWConv(BN(X))+X(4)
  • 我们设计的主要好处是,它可以在推理时重新参数化到单个深度卷积层,如下所示,如图2d所示。
    Y = DWConv ( X ) (5) \bf Y=\text{DWConv}(X) \tag{5} Y=DWConv(X)(5)
  • 第4个 stage 的内部架构如图2 (a) 所示,采用 Attention 来作为 token mixer,可能是为了性能考虑,宁愿不采用结构重参数化,牺牲延时成本,以换取更好的性能。
  • 值得注意的是,每个 Stage 中的 FFN 使用的并不是传统的 FFN 架构,而是如图2(c)所示的,带有大核 7×7 卷积的 ConvFFN 架构。

2.2. Stem 的结构

  • Stem 是整个模型的起点,如图2 (b) 所示,FastViT 的 Stem 在推理时的结构是 3×3 卷积 + 3×3 Depth-wise 卷积 + 1×1 卷积。在训练时分别加上 1×1 分支或者 Identity 分支做结构重参数化。

2.3. Patch Embedding 的架构

  • Patch Embedding 是模型在 Stage 之间过渡的部分,FastViT 的 Patch Embedding 如图2 (a) 所示,在推理时的结构是 7×7 大 Kernel 的 Depth-wise 卷积 + 1×1 卷积。在训练时分别加上 3×3 分支做结构重参数化。

2.4. 位置编码

  • 位置编码使用条件位置编码,它是动态生成的,并以输入 token 的局部邻域为条件。这些编码是由 depth-wise 运算符生成的,并添加到 Patch Embedding 中。

三. 参考文献

  • MobileOne 原班人马打造!FastViT:快速卷积 Transformer 的混合视觉架构
  • 即插即用! | 苹果推出新型网络架构 FastViT: 又快又强又稳,端侧一键部署毫无压力!

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

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

相关文章

BLFS学习系列 第25章. 图形环境库 —— libdrm

一、简介 libdrm提供了一个用户空间库,用于在支持ioctl接口的操作系统上访问直接渲染管理器(DRM)。libdrm是一个低级别库,通常由图形驱动(程序)使用,如Mesa DRI驱动(程序&#xff0…

基于java+swing俄罗斯方块

基于javaswing俄罗斯方块 一、系统介绍二、功能展示三、其他系统实现五、获取源码 一、系统介绍 项目类型:Java SE项目(awtswing)非开源 项目名称:俄罗斯方块(Tertis) 主要技术:java、awt、swing等技术 …

【玩转Linux操作】crond的基本操作

🎊专栏【玩转Linux操作】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题🥰 文章目录 🍔概述🍔命令⭐常用选项 🍔练…

图解算法--排序算法

目录 1.冒泡排序算法 2.选择排序算法 3.插入排序算法 4.希尔排序算法 5.归并排序算法 6.快速排序算法 1.冒泡排序算法 原理讲解: 从待排序的数组中的第一个元素开始,依次比较当前元素和它相邻的下一个元素的大小。如果当前元素大于相邻元素&#x…

剪枝基础与实战(1): 概述

本文介绍基于L1正则化的剪枝原理,并以VGG网络进行实战说明。将从零详细介绍模型训练、稀疏化、剪枝、finetune的全过程,提供详细的源码及说明,有助于对剪枝的熟练掌握,后续也会对yolov8进行剪枝的介绍。 论文: Learning Efficient Convolutional Networks through Network …

SpringBoot项目(支付宝整合)——springboot整合支付宝沙箱支付 从极简实现到IOC改进

目录 引出git代码仓库准备工作支付宝沙箱api内网穿透 [natapp.cn](https://natapp.cn/#download) springboot整合—极简实现版1.导包配置文件2.controller层代码3.进行支付流程4.支付成功回调 依赖注入的改进1.整体结构2.pom.xml文件依赖3.配置文件4.配置类,依赖注入…

渗透测试方法论

文章目录 渗透测试方法论1. 渗透测试种类黑盒测试白盒测试脆弱性评估 2. 安全测试方法论2.1 OWASP TOP 102.3 CWE2.4 CVE 3. 渗透测试流程3.1 通用渗透测试框架3.1.1 范围界定3.1.2 信息搜集3.1.3 目标识别3.1.4 服务枚举3.1.5 漏洞映射3.1.6 社会工程学3.1.7 漏洞利用3.1.8 权…

根据源码,模拟实现 RabbitMQ - 虚拟主机 + Consume设计 (7)

目录 一、虚拟主机 Consume设计 1.1、承接问题 1.2、具体实现 1.2.1、消费者订阅消息实现思路 1.2.2、消费者描述自己执行任务方式实现思路 1.2.3、消息推送给消费者实现思路 1.2.4、消息确认 一、虚拟主机 Consume设计 1.1、承接问题 前面已经实现了虚拟主机大部分功…

【linux】2 Linux编译器-gcc/g++和Linux调试器-gdb

文章目录 一、Linux编译器-gcc/g使用1.1 背景知识1.2 gcc如何完成1.3 函数库1.4 gcc选项 二、linux调试器-gdb使用2.1 背景2.2 开始使用 总结 ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价ヾ(๑╹◡╹)ノ" 一、Linux编译器-gcc/g使用 1.1 背景…

JS加密的域名锁定功能,JShaman支持泛域名

JShaman的域名锁定功能,支持泛域名 JShaman的JS代码混淆加密中,有一项“域名锁定”功能。使用此功能后,代码运行时会检测浏览器地址中的域名信息,如是非指定域名,则不运行,以此防止自己网站的JS代码被复制…

python的文件操作

前言 打印内容到屏幕 最简单的输出方式是调用print函数,此函数会将你传递的表达式转化成字符串表达式,并将结果写道标准输出中。 读取键盘输入 python提供了两个raw_input和input内置函数从标准输入中读取一行文本,默认的标准输入是键盘。 …

Android NDK JNI与Java的相互调用

一、Jni调用Java代码 jni可以调用java中的方法和java中的成员变量,因此JNIEnv定义了一系列的方法来帮助我们调用java的方法和成员变量。 以上就是jni调用java类的大部分方法,如果是静态的成员变量和静态方法,可以使用***GetStaticMethodID、CallStaticObjectMethod等***。就…

docker安装fastDFS

一、docker安装 1、搜索镜像 2、拉取镜像 最新版本: docker pull delron/fastdfs3、使用镜像构建容器 3.1 创建tracker容器 docker run -dti --networkhost --name my-tracker -v /opt/zdxf/soft/fastdfs/tracker:/var/fdfs -v /etc/localtime:/etc/localtime d…

Nvidia Jetson 编解码开发(3)解决H265解码报错“PPS id out of range”

1.问题描述 基于之前的开发程序 Nvidia Jetson 编解码开发(2)Jetpack 4.x版本Multimedia API 硬件编码开发--集成encode模块_free-xx的博客-CSDN博客 通过Jetson Xavier NX 硬编码的H265发出后, 上位机断点播放发出来的H265码流, 会报“PPS id out of range” 错误 …

【C语言】喝汽水问题

大家好!今天我们来学习C语言中的喝汽水问题! 目录 1. 题目内容: 2. 思路分析 2.1 方法一 2.2 方法二 2.3 方法三 3. 代码实现 3.1 方法一 3.2 方法二 3.3 方法三 1. 题目内容 喝汽水,1瓶汽水1元,2个空瓶可以…

算法题面试实战收集

回文数字 2023-08-18 美团 一面 在不使用额外的内存空间的条件下判断一个整数是否是回文。 回文指逆序和正序完全相同。 数据范围: 进阶: 空间复杂度O(1) ,时间复杂度 O(n) 提示: 负整数可以是回文吗?(比如…

vue项目配置git提交规范

vue项目配置git提交规范 一、背景介绍二、husky、lint-staged、commitlint/cli1.husky2.lint-staged3.commitlint/cli 三、具体使用1.安装依赖2.运行初始化脚本3.在package.json中配置lint-staged4.根目录新增 commitlint.config.js 4.提交测试1.提示信息格式错误时2.eslint校验…

深度学习3:激活函数

一、激活函数的简介与由来 激活函数:是用来加入非线性因素的,解决线性模型所不能解决的问题。 线性函数的组合解决的问题太有限了,碰到非线性问题就束手无策了。如下图。 通过激活函数映射之后,可以输出非线性函数。 最后再通过…

【2023深圳杯数学建模A题思路模型与代码分享】

2023深圳杯数学建模A题 A题 影响城市居民身体健康的因素分析解题思路第一问第二问第三问第四问 技术文档第一问完整代码写在最后 A题 影响城市居民身体健康的因素分析 以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病(以下简称慢性病…

【Terraform学习】使用 Terraform 托管 S3 静态网站(Terraform-AWS最佳实战学习)

使用 Terraform 托管 S3 静态网站 实验步骤 前提条件 安装 Terraform: 地址 下载仓库代码模版 本实验代码位于 task_s3 文件夹中。 变量文件 variables.tf 在上面的代码中,您将声明,aws_access_key,aws_secret_key和区域变量…