tinyViT论文笔记

论文:https://arxiv.org/abs/2207.10666
GitHub:https://github.com/microsoft/Cream/tree/main/TinyViT

摘要

在计算机视觉任务中,视觉ViT由于其优秀的模型能力已经引起了极大关注。但是,由于大多数ViT模型的参数量巨大,使得其无法在资源受限的设备上运行。为了解决这个问题,本文提出了TinyViT,基于提出的快速蒸馏方案在大规模数据集上进行预训练的一系列小且高效的模型。核心思想是将大的预训练模型蒸馏给一个小的,同时能获取海量预训练数据的红利。具体来说,在预训练阶段进行蒸馏流程完成知识迁移,教师模型的输出被稀疏化并存储在硬盘中来节省内存消耗和计算负担。大量实验证明TinyViT的有效性,其参数量为21M,在ImageNet-1K数据集上取得84.8%的top-1精度,与Swin-B相比,同样的精度下参数量少了4.2倍。此外,通过增大网络输入分辨率,TinyViT可以去的86.5%的精度,比Swin-L稍微好点,但参数量仅为其11%。最后,实验验证了其在下游任务上具有较好的迁移能力。

模型结构

快速预训练蒸馏

image.png
如上图所示,作者观察到,使用大规模数据预训练小模型并不会带来性能的增益,尤其是迁移到下游任务上。为了解决这个问题,作者借助知识蒸馏进一步释放小模型的预训练潜力。不同于之前的工作关注微调阶段的蒸馏工作,本文关注预训练阶段的蒸馏,这样不仅小模型可以从大模型中学习到知识,同时提高了它们对下游任务的迁移能力。
直接进行预训练蒸馏是低效且昂贵的,因为大部分的计算资源消耗在教师模型的前向传播中,而不是训练学生模型上。为了解决这个问题,作者提出了一个快速预训练蒸馏框架。如下图所示,首先将数据增强方式和教师模型的预测结果保存下来,在训练阶段,重用存储的信息来精确地复制前向传播过程,成功地省略了教师模型的前向传播过程和内存占用。
image.png
假设输入图像为 x x x,数据增强方式为 A A A,例如randaugment和cutmix,教师模型用 T T T表示。数据增强方式 A A A和教师模型预测结果 y ^ = T ( A ( x ) ) \hat{y}=T(A(x)) y^=T(A(x))将会被保存下来。需要注意的是,由于数据增强具有随机性,因此对于同一张图片多次通过同样的数据增强策略会得到不同的结果,所以每次迭代 ( A , y ^ ) (A, \hat{y}) (A,y^)都需要存储。
在训练阶段,只需要重用 ( A , y ^ ) (A, \hat{y}) (A,y^),并优化下面的目标函数即可:
L = C E ( y ^ , S ( A ( x ) ) L=CE(\hat{y}, S(A(x)) L=CE(y^,S(A(x))
其中, S ( . ) S(.) S(.) C E ( . ) CE(.) CE(.)分别表示学生模型和交叉墒损失函数。这个训练框架是不需要真实标签,因为只使用了教师模型生成的软标签进行训练。这种无标签策略在实际中是可行的,因为软标签足够正确,同时携带大量用于分类的信息,例如类别关系。此外,当使用真实标签进行蒸馏会带来轻微的性能下降,原因在于IN-21K中并不是所有的标签都是互斥的。
此外,作者的蒸馏框架中应用了稀疏软标签和数据增强编码,可以极大减少存储压力同时提高内存利用率。

稀疏软标签

考虑到教师模型输出 C C C维度(类别数)的向量,如果 C C C非常大,则保存全部的向量内容需要更多的存储空间,例如,对于IN-21K而言 C = 21841 C=21841 C=21841。因此,只保存 y ^ \hat{y} y^中最重要的 t o p − K top-K topK个值即可。在训练过程中,只对稀疏标签进行标签平滑:
image.png
当稀疏稀疏 K K K远小于 C C C时,可以将逻辑值的存储量减少几个数量级。而且实验结果表明,这中稀疏标签可以实现与密集标签相当的知识蒸馏性能。

数据增强编码

数据增强涉及到一组参数 d d d,例如旋转角度和裁剪坐标。由于每次迭代中每个图像的 d d d是不同的,直接保存它会降低内存的效率。为了解决这个问题,作者通过标量参数 d 0 = ξ ( d ) d_0=\xi(d) d0=ξ(d)来编码 d d d,其中 ξ \xi ξ表示编码器。在训练阶段,从存储文件中加载 d 0 d_0 d0然后还原 d = ξ − 1 ( d 0 ) d=\xi^{-1}(d_0) d=ξ1(d0),其中 ξ − 1 \xi^{-1} ξ1表示解码器。解码器的常见选择是PCG,它将单个参数作为输入,并生成一系列参数。

模型结构

作者通过一个逐步模型缩减方法(a progressive model contraction approach)来得到一族微小视觉transformer模型。具体而言,从一个大模型开始定义一些基本的缩放因子,每一次迭代通过调整缩放因子来得到一个更小的模型。选择那些既满足参数数量约束又满足吞吐量约束的模型,在下一步中,具有最佳精度的模型将被进一步缩减,直到达成目标。
为了方便用于多尺度特征的密集预测下游任务,作者采用了分层视觉transformer作为基本架构。更具体来说,基础模型由分辨率逐渐降低的四个阶段组成,类似Swin和LeViT。patch embedding模块由两个卷积组成,卷积核大小为3,步长为2,padding为1。在第一阶段,使用轻量且高效的MBConvs来下采样,因为在开始阶段由于卷积较强的归纳偏差使用卷积层可以有效地学习低级表示。后3个阶段由transformer block组成,使用窗口注意力来降低计算成本。注意力偏差和注意力与MLP之间的3✖️3深度卷积被引入来获取局部信息。所有的激活函数都是GeLU,卷积层和线性层的归一化方法为BatchNorm和LayerNorm。
构建模型过程中,作者考虑了如下的缩放因子:

  • γ D 1 − 4 \gamma_{D_{1-4}} γD14:4个stage的嵌入维度;决定网络的宽度
  • γ N 1 − 4 \gamma_{N_{1-4}} γN14:4个stage中block的个数;决定网络的深度
  • γ W 2 − 4 \gamma_{W_{2-4}} γW24:最后3个stage的宽口大小
  • γ R \gamma_{R} γR:MBConv block的channel expansion ratio;
  • γ M \gamma_{M} γM:transformer blocks中MLP的expansion ratio;
  • γ E \gamma_{E} γE:multi- head attention中每个head的维度

所有模型中相同的缩放因子为: γ N 1 , γ N 2 , γ N 3 , γ N 4 = 2 , 2 , 6 , 2 {\gamma_{N_1},\gamma_{N_{2}},\gamma_{N_{3}},\gamma_{N_{4}}}={2,2,6,2} γN1,γN2,γN3,γN4=2,2,6,2 γ W 2 , γ W 3 , γ W 4 = 7 , 14 , 7 {\gamma_{W_{2}},\gamma_{W{3}},\gamma_{W_{4}}}={7,14,7} γW2,γW3,γW4=7,14,7 γ R , γ M , γ E , = 4 , 4 , 32 {\gamma_{R},\gamma_{M},\gamma_{E},}={4,4,32} γR,γM,γE,=4,4,32。对于嵌入向量 γ D 1 , γ D 2 , γ D 3 , γ D 4 {\gamma_{D_1},\gamma_{D_{2}},\gamma_{D_{3}},\gamma_{D_{4}}} γD1,γD2,γD3,γD4,TinyViT-21M为{96, 192, 384, 576} ,TinyViT-11M为{64, 128, 256, 448}, TinyViT-5M为{64, 128, 160, 320}。

效果分析

在本节中,作者对两个关键问题进行分析和讨论:

  • 限制小模型适应大规模数据的潜在原因是什么?
  • 为什么蒸馏可以帮助小模型释放大规模数据的潜力?

为了回答上述问题,作者在ImageNet-21K上进行了实验,该数据集包含14M图像和21841个类别。
限制小模型适应大规模数据的潜在原因是什么?
作者发现在IN-21K中存在很多困难样本,例如图像对应标签错误,相似图像有不同标签等。众所周知,IN-21K中大约有10%的样本是困难样本。小模型难以适应这些困难样本,导致与大模型相比训练精度较低(TinyVit-21M: 53.2%和Swin-L-197M: 57.1%),同时在IN-1K上的可迁移性有限(TinyViT-21M w/ pretraining: 83.8% 和 w/o pretraining: 83.1%)。
image.png
如上图所示,为了验证困难样本的影响,作者使用如下两种技术:

  • 使用IN-21K微调预训练模型Florence,然后推理IN-21K,对于预测结果不在top-5之内的那些图像,定义为困难样本。通过这种方式,从IN-21K中移除了大约2M图像,约14%。然后在清理后的数据集上预训练TinyViT-21M和Swin-T。
  • 使用Florence作为教师模型来执行预训练蒸馏训练TinyViT-21M和Swin-T,使用其生成软标签来代替IN-21K中被污染的GT标签,得到在IN-1K上进行微调的结果。

从上图的结果可以得出如下结论:

  • 在原始的IN-21K上预训练小模型在IN-1K上微调的增益微乎其微;
  • 当移除部分困难样本之后,小模型可以更好的利用大数据并实现更高的性能增益;
  • 知识蒸馏方案可以避免检测困难样本,因为它不使用GT标签,,而GT标签的不合适才是样本属于困难样本的主要原因,因此它可以获得更高的性能提升。

为什么蒸馏可以帮助小模型释放大规模数据的潜力?
答案是学生模型可以直接从教师模型那里学习到高级知识。具体来说,教师在训练学生时注入类之间的关系,同时过滤学生模型的噪声标签。
为了分析教师模型预测的类别关系,作者从总共21841个类别的IN-21K中为每个类别选择8张图像。这些图像被送入到Florence来的道预测逻辑值,并画出预测逻辑上勒见Pearson相关稀疏的热力图。
image.png
如上图1(a)所示,相似或者相关类别之间有高相关性,不同类别可以被区分,表明教师模型的预测结果确实包含类别关系。在(b)和©中比较了是否采用蒸馏法的Pearson相关性。分析对角线结构,作者发现当不使用蒸馏技术时候,对角线的结构会更不明显,说明小模型更难捕获类间关系。但是,蒸馏可以引导学生模型模仿教师模型的行为,从而更好地从大数据中挖掘知识。

实验结果

实验细节

ImageNet-21K的预训练:TinyViT在ImageNet-21K上预训练90个epoch,具体参数设置如下:

  • 优化器:AdamW,权重衰减系数0.01
  • 学习率:初始学习率为0.002,warmup 5个epoch,余弦衰减方案,batch size为4096,梯度裁剪设置为最大norm=5
  • 随机深度:TinyViT/11M为0,21M为0.1

从上一步预训练模型进行ImageNet-1K微调:将预训练模型在ImageNet-1K上进行微调
ImageNet-1K高分辨率微调:进一步提高输入分辨率,微调TinyViT
知识蒸馏:预先保存教师模型在ImageNet-1K上的top-100预测值,包括Swin-L, BEiT-L, CLIP-ViT-L/14和Florence。

消融实验

预训练蒸馏方案的影响:如下图所示,相比于从头开始训练,进行预训练但不做蒸馏,取得的增益十分有限,如0.8%/0.6%/0.7% for DeiT-Ti/DeiT-S/Swin-T。使用快速蒸馏方案,分别可以提高2.2%/2.1%/2.2%。结果表明预训练蒸馏方案可以使得小模型可以从大规模数据中获利更多。
image.png
预训练数据规模的影响:如下图所示,TinyVIT-5M/21M在不同预训练数据规模上结果的影响。使用IN-21K的数据进行预训练,CLIP- ViT- L/14作为教师模型,最后在IN-1K上进行微调,可以得出预训练蒸馏方案在不同的数据大小上都能带来性能增益。
image.png
稀疏化大小的影响:使用Swin- L作为教师模型,TinyViT-21M作为学生模型,在IN-1K和IN-21K上都观察到精度随着稀疏逻辑值K的数增加而提高,直到饱和。这个观察符合现有工作对知识蒸馏的认知,教师模型的输出中除了有类别关系还包含噪声。为了在有限的空间下获得相当的精度,作者选择稍大的K,在IN-1K中K=10(1% logits),在IN-21K上K=100(0.46% logits),分别需要16GB/48GB的存储空间。
image.png
教师模型的影响:作者同时评估了教师模型对预训练蒸馏的影响。如下图所示,更好的教师可以产生更好的学习模型。但是,较好的教师模型通常模型尺寸较大,导致GPU内存消耗高且时间长。
image.png

图像分类结果

image.png
image.png

下游任务

线性探测

如下图所示,测试了4种不同训练设计下性能对比,可以发现预训练蒸馏可以提升TinyViT线性探测的能力。此外,当在更大规模的数据上训练时,有更好的表现。
image.png

少样本学习

如上图所示,同样可以观察到预训练蒸馏下TinyViT能取得更好的效果,除了ChestX数据集,因为它是一个灰度医学图像与自然图像存在较大差距。

目标检测

以Swin-T的Cascade R-CNN作为基准,在相同的训练策略下,TinyViT取得更好的成绩,高1.5%,当应用预训练蒸馏法后,还能额外取得0.6%的增益。结果表明,预训练蒸馏方案对于小模型在下游任务上的迁移能力也是有效的。
image.png

结论

本文基于提出的预训练蒸馏方案发布了一个小且有效的视觉ViT模型,TinyViT。大量的实验表明TinyViT在ImageNet-1K上的高效性,以及在下游任务上的迁移能力。在接下来的工作中,将考虑使用更多数据和更好的教师模型来解锁小模型的能力。设计一个高效的模型缩放方法来生成具有较好性能的小模型是另外一个有趣的研究方向。
Vision Transformer 超详细解读 (原理分析+代码解读) (二十八)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

prometheus|云原生|grafana-9.4.3版本的主题更改

一, grafana-9.4.3版本的主题更改 grafana-9.4.3版本应该是目前比较高的版本了,但不知道是什么原因,grafana的主题界面并不多,只有暗色,亮色和系统色三种 配置管理----首选项里可以看到 亮色: 暗色&…

jconsole的基本使用和死锁的检测

jconsole的基本使用和死锁的检测 因为jconsole是JDK自带的,所以安装了JDK就可以直接打开了。 1. 打开方式 cmd命令行打开:输入jconsole,然后按Enter JDK安装目录,bin目录下,双击即可打开 选择一个进程然后打开 可…

FreeRTOS学习之路,以STM32F103C8T6为实验MCU(2-4:内核控制与时间管理函数)

学习之路主要为FreeRTOS操作系统在STM32F103(STM32F103C8T6)上的运用,采用的是标准库编程的方式,使用的IDE为KEIL5。 注意!!!本学习之路可以通过购买STM32最小系统板以及部分配件的方式进行学习…

Windows核心编程 线程

目录 线程概述 进程与线程的关系 线程调度原理 单核与多核的线程处理方式 多线程 线程相关API 线程分配 线程切换时 线程状态 线程退出 线程退出时做的事(正常退出情况) 线程概述 程序磁盘上的一个可执行文件(由指令和数据等组成…

深入理解MySQL索引及事务

✏️✏️✏️今天给各位带来的是关于数据库索引以及事务方面的基础知识 清风的CSDN博客 😛😛😛希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! 动动你们发财的小手&#…

redis持久化:RDB:和AOF

目录 RDB 持久化 1、修改配置文件:redis.conf 2、RDB模式自动触发保存快照 3、RDB模式手动触发保存快照 4、RDB的优缺点 AOF持久化 1、AOF持久化工作流程 2、修改配置文件开启AOF 3、AOF优缺点 4、AOF的重写机制原理 RDBAOF混合模式 redis持久化有两种方…

杰发科技AC7801——ADC软件触发的简单使用

前言 7801资料读起来不是很好理解,大概率是之前MTK的大佬写的。在此以简单的方式进行描述。我们做一个简单的规则组软件触发Demo。因为规则组通道只有一个数据寄存器,因此还需要用上DMA方式搬运数据到内存。 AC7801的ADC简介 7801的ADC是一种 12 位 逐…

机器学习-激活函数的直观理解

机器学习-激活函数的直观理解 在机器学习中,激活函数(Activation Function)是用于引入非线性特性的一种函数,它在神经网络的每个神经元上被应用。 如果不使用任何的激活函数,那么神经元的响应就是wxb,相当…

【数据库】数据库物理执行计划最基本操作-表扫描机制与可选路径,基于代价的评估模型以及模型参数的含义

物理执行计划基本操作符 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏…

十大排序算法中的插入排序和希尔排序

文章目录 🐒个人主页🏅算法思维框架📖前言: 🎀插入排序 时间复杂度O(n^2)🎇1. 算法步骤思想🎇2.动画实现🎇 3.代码实现 🎀希尔排序 时间复杂度O(n*logn~n^2)希尔排序的设…

sql查询优化实际案例

1、第一步:sql优化 正对于海量数据的查询优化,且外键关联比较多的情况,通常情况是下sql层面的优化,有些时候是由于sql不合理的编写导致,如尽量少使用sql内查询等 如:避免使用 left join (select * form …

如何打造垂直LLM的护城河

B2B人工智能初创企业的一个伟大策略是打造“垂直人工智能”产品:成为特定行业的人工智能助手,比如律师、金融服务、医生。 听起来很简单:你可以利用LLM的超能力,并将其应用于宠物行业的特定数据和用例。 这就是我们在Explain所做的…

量子计算的发展

目录 一、量子力学的发展历程二、量子计算的发展历程三、量子计算机的发展历程四、量子信息科学的发展 一、量子力学的发展历程 量子力学是现代物理学的一个基本分支,它的发展始于20世纪初。以下是量子力学发展的几个重要阶段: 普朗克(1900&…

基于JavaWeb+SpringBoot+Vue医院管理系统小程序的设计和实现

基于JavaWebSpringBootVue医院管理系统小程序的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏[Java 源码获取 源码获取入口 Lun文目录 目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.1微信小程序 2 2.2 …

「Java开发中文指南」IntelliJ IDEA插件安装(一)

IntelliJ IDEA是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的Java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能是非常强大的。 插件扩展了Intel…

MYSQL基础知识之【创建,删除,选择数据库】

文章目录 前言MySQL 创建数据库使用 mysqladmin 创建数据库使用 PHP脚本 创建数据库 MySQL 删除数据库使用 mysqladmin 删除数据库使用PHP脚本删除数据库 MySQL 选择数据库从命令提示窗口中选择MySQL数据库使用PHP脚本选择MySQL数据库 后言 前言 hello world欢迎来到前端的新世…

网络层(IP协议)

文章目录 网络层IP协议IP协议报头32位源IP地址和目的IP地址:为了解决IP地址不够用的情况 IP地址管理子网掩码特殊IP 路由选择(简介) 网络层 网络层主要负责地址管理和路由选择.代表协议就是IP协议. IP协议 IP协议报头 4位版本: 4: 表示IPv4 ; 6: 表示IPv6 4位首部长度: 描述…

格式化输入输出

跟着肯哥(不是我)学格式化输入输出 C语言格式化输入 在C语言中,格式化输入(Formatted Input)是一种从标准输入读取数据并按照指定格式进行解析的操作,它主要通过使用标准库函数scanf()来实现格式化输入。 …

YOLOv8改进 | 2023 | FocusedLinearAttention实现有效涨点

论文地址:官方论文地址 代码地址:官方代码地址 一、本文介绍 本文给大家带来的改进机制是Focused Linear Attention(聚焦线性注意力)是一种用于视觉Transformer模型的注意力机制(但是其也可以用在我们的YOLO系列当中从而提高检测…

小程序项目:springboot+vue基本微信小程序的学生健康管理系统

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时…