首页 > 其他分享 >DeiT:训练ImageNet仅用4卡不到3天的平民ViT | ICML 2021

DeiT:训练ImageNet仅用4卡不到3天的平民ViT | ICML 2021

时间:2024-04-16 13:22:55浏览次数:22  
标签:蒸馏 DeiT ICML 网络 token 训练 ViT teacher

论文基于改进训练配置以及一种新颖的蒸馏方式,提出了仅用ImageNet就能训练出来的Transformer网络DeiT。在蒸馏学习时,DeiT以卷积网络作为teacher,能够结合当前主流的数据增强和训练策略来进一步提高性能。从实验结果来看,效果很不错

来源:晓飞的算法工程笔记 公众号

论文: Training data-efficient image transformers & distillation through attention

Introduction


  Vision Transformer一般要先在大型计算设施上预训练数以亿计的图片才能有较好的性能,这极大地提高其应用门槛。为此,论文基于ViT提出了可在ImageNet上训练的Vision Transformer模型DeiT,仅需要一台电脑(4卡)训练不到三天(53小时的预训练和可选的20小时微调)的时间。在没有外部数据预训练的情况下,在ImageNet上达到了83.1% 的最高精度。

  此外,论文还提出了一种针对Transformer的蒸馏策略,通过一个蒸馏token确保student网络通过注意力从teacher网络那里进行学习。当使用卷积网络作为teacher网络时,ImageNet上可达到85.2%的准确性。

  总体而言,论文主要有以下贡献:

  • 通过实验表明,在没有外部数据的情况下,Vision Transformer也可以在ImageNet上达到SOTA的结果,而且仅需要4卡设备训练三天。
  • 论文提出了一种基于蒸馏token的新蒸馏方法,这种用于Transformer的蒸馏方法大幅优于一般蒸馏方法。蒸馏token与class token的作用相同,都参与注意力计算中,只是蒸馏token的训练目的在于复现teacher网络的标签预测。
  • 有趣的是,论文发现在使用新蒸馏方法时,用卷积网络作为teacher要比用另一个相同准确率的transformer的作为teacher的效果要好。
  • 在Imagenet上预训练的模型可以转移到不同的下游任务(如细粒度分类),得到很不错的性能。

Distillation through attention


Soft distillation

  一般的蒸馏方法都是Soft distillation,其核心目标是最小化teacher网络和student网络的softmax输出之间的Kullback-Leibler散度。

  定义\(Z_t\)为teacher网络的logits输出(输入softmax的向量),\(Z_s\)为student网络的logits输出。用\(\tau\)表示蒸馏温度,\(\lambda\)表示平衡Kullback-Leibler散度损失(KL)和交叉熵损失(LCE)的权值,\(\psi\)表示softmax函数。定义soft distillation的目标函数为:

Hard-label distillation

  论文提出了一种蒸馏的变体,将teacher网络的预测标签作为蒸馏的GT标签。假设\(y_t = argmax_c Z_t(c)\)是teacher网络的预测标签,与之相关的hard-label distillation目标为:

  对于同一张图片,teacher网络预测的标签可能随着特定的数据增强而有所变化。从实验结果来看,将预测标签作为蒸馏目标的做法比传统的做法更好,不仅无额外参数,概念上还更简单:teacher网络预测的\(y_t\)与真实标签\(y\)是相同的作用。
  此外,hard label也可以通过label smoothing转换为软标签,其中GT标签具有\(1 - \varepsilon\)的概率,其余类共享\(\varepsilon\)概率。在相关的实验中,参数固定为\(\varepsilon = 0.1\)。

Distillation token

  论文提出的蒸馏方案如如图2所示,在输入的token序列中添加一个蒸馏token。蒸馏token与class token类似,通过self-attention与其它token交互并将最后一层中的对应输出作为网络输出,其训练目标为损失函数中的蒸馏损失部分。蒸馏token使得模型可以像常规蒸馏一样从teacher网络的输出中学习,同时与class token保持互补的关系。

  论文发现,训练后的输入层class token和蒸馏token收敛到了完全不同的向量,平均余弦相似度仅为0.06。但随着在网络的计算,class和蒸馏token在越深层中的对应输出逐渐变得更加相似,最后一层达到了较高的相似度(cos=0.93),但没有完全相同。这是符合预期的,因为两个token的目标就是产生相似但不相同的目标。

  论文也尝试替代实验,用另一个class token代替teacher网络的蒸馏token进行伪蒸馏学习。但无论如何随机且独立地初始化两个class token,训练后都会收敛到相同的向量(cos=0.999),其对应的输出也是准相同的。这表明这个代替的class token不会对分类性能带来任何影响,相比之下蒸馏token则能带来显著的提升。

Fine-tuning with distillation

  在分辨率增加的fine-tuning阶段,同样使用真实标签和teacher网络预测标签进行训练。此时需要一个具有相同目标分辨率的teacher网络,可通过FixRes的做法从之前的低分辨率teacher网络中转换。论文也尝试了只用真实标签进行fine-tuning,但这导致了性能的降低。

Classification with our approach:joint classifiers

  在测试时,网络输出的class token和蒸馏token都用于标签分类。论文的建议做法是将这两个token独立预测后再融合,即将两个分类器的softmax输出相加再进行预测。

Transformer models


  DeiT的架构设计与ViT相同,唯一的区别是训练策略和蒸馏token,训练策略的区别如表9所示。此外,在预训练时不使用MLP,仅使用线性分类器。

  为避免混淆,用ViT来指代先前工作中的结果,用DeiT来指代论文的结果。如果未指定,DeiT指的是DeiT-B,与ViT-B具有相同的架构。当以更大的分辨率fine-tune DeiT时,论文会在名字的最后附加分辨率,例如DeiT-B↑384。最后,当使用论文提出的蒸馏方法时,论文会用一个蒸馏符号将其标识为DeiT⚗.。

  如表1所示,DeiT-B的结构与ViT-B完全一样,参数固定为\(D = 768\),\(h = 12\)和\(d = D/h = 64\)。另外,论文设计了两个较小的模型:DeiT-S和DeiT-Ti,减少了head的数量,\(d\)保持不变。

Experiment


  不同类型的teacher网络的蒸馏效果。

  不同蒸馏策略的对比实验。

  不同网络以及蒸馏策略之间的结果差异,值越小差异越小。

  蒸馏策略与训练周期的关系。

  整体性能的对比。

  ImageNet上预训练模型的在其它训练集上的迁移效果。

  不同优化器、数据增强、正则化的对比,寻找最佳的训练策略和配置。

  224分辨率预训练的DeiT在不同数据集上用不同分辨率fine-tune的效果。

Conclusion


  论文基于改进训练配置以及一种新颖的蒸馏方式,提出了仅用ImageNet就能训练出来的Transformer网络DeiT。在蒸馏学习时,DeiT以卷积网络作为teacher,能够结合当前主流的数据增强和训练策略来进一步提高性能。从实验结果来看,效果很不错。



如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

work-life balance.

标签:蒸馏,DeiT,ICML,网络,token,训练,ViT,teacher
From: https://www.cnblogs.com/VincentLee/p/18137872

相关文章

  • VUE:vite添加环境变量(一)
    新建'.env'(和vite.config.js同一个路径下)VITE_APP_API_URL=http://localhostvite.config.jsimport{defineConfig,loadEnv}from'vite'exportdefaultdefineConfig((mode)=>{constenv_config=loadEnv(mode,process.cwd())constV......
  • 地铁查询系统Android,MainActivity
    packagecom.example.metro_info_front_end;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.ArrayAdapter;importandroid.widget.AutoCompleteTextView;importandroid.widget.Button;importandroid.widget.LinearLayout;importandroid......
  • ViT:拉开Trasnformer在图像领域正式挑战CNN的序幕 | ICLR 2021
    论文直接将纯Trasnformer应用于图像识别,是Trasnformer在图像领域正式挑战CNN的开山之作。这种简单的可扩展结构在与大型数据集的预训练相结合时,效果出奇的好。在许多图像分类数据集上都符合或超过了SOTA,同时预训练的成本也相对较低 来源:晓飞的算法工程笔记公众号论文:AnI......
  • vite和webpack对比
    定位分析打包工具:webpack、rollup、parcel、esbuild作用:可以对代码进行压缩、合并、转换、分割、打包衍生:vue-cli、create-react-app、umi等是基于webpack的上层封装,用于快速创建项目vite:开发环境依赖esbuild进行预构建,生产环境则依赖rollup进行打包差异分析1、启动差异we......
  • vite+xlsx-style表格导出样式设置报错
    项目是vite+vue3,前端表格导出,使用xlsx可以导出基本表格,但是想要设置表格样式,引入xlsx-style,安装依赖,后引入报错引用import { utils } from "xlsx"import { write } from "xlsx-style"Couldnotresolve"./cptable"node_modules/xlsx-style/dist/cpexce......
  • Vue3+TS+Vite+pinia
    一、创建项目    创建文件夹,然后cmd,输入以下内容。然后选择TS版本。npmcreatevite二、安装依赖   在vscode中,使用终端,输入命令 npmi三、安装其他插件    3.1、路由vue-router        多页面应用需要安装路由。所以需要使用v......
  • TQZC706开发板教程:使用Vivado和Vitis烧写flash
    本文所使用的文件链接:https://pan.baidu.com/s/1ZqjfJMZasteJDfZ9qcKAFQ提取码:peqa无论采用何种方式烧写Flash,都务必准备好相应的烧写文件。我在上面的链接中已提供了测试文件供您参考。烧写Flash时通常需要两个文件:BOOT.bin和zynq_fsbl.elf,请确保您已备齐这两个文件,以便......
  • 02_使用Vite搭建Vue3项目
    首先插件添加:LiveServer、Vue-Official、VueVSCodeSnippets、别名路径跳转官网:Vite|下一代的前端工具链(vitejs.dev)1.创建一个文件夹VueApp,运行cmd转到该目录下,执行命令:npmcreatevite@latest2.然后转到vuedemo目录下命令:cdvuedemo,3.执行命令:npminstall。文件夹......
  • Vite+Vue3.0项目使用ant-design-vue <a-calendar>日期组件汉化
    antd的弹框、日期等默认为英文,要把英文转为中文请看下文:1.首先我们要在main.js中引入ant-design组件库并全局挂载:importAppfrom'./App'importAntdfrom'ant-design-vue';import'ant-design-vue/dist/antd.css';constapp=createApp(App);app.use(Antd);2.然......
  • Vite项目打包配置注意事项及常用配置
    1.在vite中默认打包的文件放到assets文件夹中 2.开发环境下我们的图片位置在/src,ok,本地没问题正常显示,你打了个包(npmrunbuild),然后又运行了npm脚本preview,也没问题,但是在一些服务器上,使用绝对目录会导致404,所以我们需要配置为相对目录 3.这时需要将打包路径改为相......