Token Labeling(NeurIPS 2021, ByteDance)论文解读

paper:All Tokens Matter: Token Labeling for Training Better Vision Transformers

official implementation:https://github.com/zihangJiang/TokenLabeling

出发点

  • ViTs的局限性:尽管ViTs在捕捉长距离依赖方面表现出色, 但它通常依赖于额外的可训练class token来计算分类损失,这可能会忽略其他patch token所包含的丰富局部信息。
  • 局部信息的重要性:最近的工作表明,对图像分类任务而言,良好地建模和利用局部信息可以避免模型偏向偏颇和不可泛化的模式,从而显著提高模型性能。

创新点

本文提出了一种新的训练目标——token labeling,旨在利用所有的图像patch token进行密集的训练损失计算,而不仅仅依赖于额外的class token。通过这种方式,每个patch token都能获得由machine annotator生成的单独的、位置特定的监督,从而提升模型的性能。 具体包括:

  • Token Labeling:提出了token labeling方法,通过对所有patch token进行位置特定的监督,提高了图像分类的准确性和对象识别能力。
  • MixToken:改进了传统的CutMix数据增强方法,使其在token层面上操作,避免了图像patch中混合内容的问题,从而提高了模型的训练效果。
  • Patch Embedding:对ViT的patch embedding模块进行了修改,采用了4层卷积层来更好地对输入图像进行token化和整合局部信息。

方法介绍

Token Labeling

在传统的ViT中,给定输入图片 \(I\),最后一个transformer block的输出可以表示为 \([X^{cls},X^1,...,X^N]\),其中 \(N\) 表示patch token的数量,\(X^{cls}\) 和 \(X^1,...,X^N\) 分别对应 class token和patch tokens。则图片 \(I\) 的分类损失可以按下式计算

其中 \(H(\cdot,\cdot)\) 是softmax cross-entropy loss,\(y^{cls}\) 是类别标签。

这种方式只采用了image-level的标签作为监督,而忽略了每个image patch中包含的丰富信息。因此本文提出了一种新的训练目标,token labeling,它利用了patch tokens和class token之间的互补信息。具体来说,作者认为每个输出token都应该和一个单独的、位置特定的label联系起来,因此token labeling的ground truth标签是一个 \(K\times N\) score map矩阵,表示为 \([y^1,...,y^N]\),其中 \(N\) 是patch token的数量,\(K\) 是类别数。

最终计算每个patch token和score map中对应的标签之间的交叉熵损失,如下

完整的损失包含原始的class token损失和token labeling损失,如下

图2是整个过程的一个直观展示

里dense score map是通过machine annotator离线得到的,可参考Re-labeling ImageNet(CVPR 2021, Naver)-CSDN博客。简单地说,machine annotator是一个在额外的大数据集(例如JFT-300M)上训练好的性能强大的分类模型,然后对ImageNet进行推理,去掉全连接层之前的全局平均池化,全连接层改为一个1x1卷积层,因此经过softmax后输出的是一个 \(H\times W\times C\) 的score map,这里的 \(H,W\) 是模型最后一层的分辨率大小,而不像传统的分类模型一样输出的是一个 \(1\times 1\times C\) 的向量。score map是提前计算得到并保存到本地的,在训练token labeling时,只需要加载score map并根据patch token的空间位置对应的在score map上crop和插值对齐空间坐标,然后再进行全局平均池化并经过softmax和argmax得到每个patch token对应的标签。和需要在线生成target的知识蒸馏不同,token labeling额外增加的计算量可以忽略不计。

MixToken

在训练分类模型时,数据增强方法例如MixUp和CutMix可以有效地提高模型性能。但vision transformer依赖patch-based tokenization来将输入图片映射为token序列,本文提出的token labeling也是基于每个patch的标签,如果我们直接在原始图像上应用CutMix,可能导致一个patch中包含来自两个图像的内容,如图3左所示。

这样token labeling很难为每个token分配一个干净正确的标签,因此本文提出了CutMix的变体MixToken,即在patch embedding层后得到的token上进行cutmix操作,如图3右所示,这样就保证了每个token只包含一张图片的内容。

实验结果

结合token labeling和mixtoken作者提出了LV-ViT,网络配置如下

两个components的消融实验如下表所示,可以看到单独将cutmix换成mixtoken精度提升了0.1%,而结合mixtoken和token labeling时,精度提升了0.9%。

和其它分类模型在ImageNet上的结果对比如下表所示 

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Postman导出excel文件

0 写在前面 在我们后端写接口的时候,前端页面还没有出来,我们就得先接口测试,在此记录下如何使用postman测试导出excel接口。 如果不会使用接口传参可以看我这篇博客如何使用Postman 1 方法一 2 方法二 3 写在末尾 虽然在代码中写入文件名…

Linux 推出 Redis 分支 Valkey

Valkey——一个开源高性能键值存储 Redis 公司宣布更改开源许可之后,社区里出现了多个 Redis 分支,如 Redict、Valkey 等 2024 年 3 月 21 日,Redis 背后企业 Redis 的 CEO Rowan Trollope 宣布,该项目的许可证类型将从原本的 BS…

VLAN 划分案例详解

vlan 的应用在网络项目中是非常广泛的,基本上大部分的项目都需要划分 vlan,这里从基础的 vlan 的知识开始,了解 vlan 的划分原理。 为什么需要 vlan: 1、什么是 VLAN? VLAN(Virtual LAN)&…

SpringCloud------Sentinel(微服务保护)

目录 雪崩问题 处理方式!!!技术选型 Sentinel 启动命令使用步骤引入依赖配置控制台地址 访问微服务触发监控 限流规则------故障预防流控模式流控效果 FeignClient整合Sentinel线程隔离-------故障处理线程池隔离和信号量隔离​编辑 两种方式优缺点设置方式 熔断降级-----…

【JavaEE-多线程背景-线程等待-线程的六种状态-线程安全问题-详解】

🌈个人主页:SKY-30 ⛅个人推荐:基于java提供的ArrayList实现的扑克牌游戏 |C贪吃蛇详解 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 &…

高性能、安全、低碳绿色的趋势下,锐捷网络发布三擎云办公解决方案 3.0

桌面虚拟化作为云时代的主流和热门技术,已经取得了广泛应用。随着生成式 AI 爆炸式发展,CSDN 看到,人工智能正在引发计算、开发、交互三大范式的全面升级,技术开发或将迎来一次全新的科技变革周期,因此 VDI 云桌面随之…

20分钟迁移完阿里云ECS跨区域迁移,用老操作系统作为新服务操作系统

由于特殊原因或者数据备份需要迁移ecs服务器 跨区域复制 镜像复制 由于特殊原因或者数据备份需要迁移ecs服务器 1.老服务快照 选择ecs实例,点开实例 进入云盘 https://ecs.console.aliyun.com/disk 在云盘上点击建立快照 https://oss.console.aliyun.com/bu…

C# 位移运算符 <<、>>, 以及 operator 关键字 重载运算符

关键字 operator operator关键字用于在类或结构声明中声明运算符。运算符声明可以采用下列四种形式之一: public static result-type operator unary-operator ( op-type operand ) public static result-type operator binary-operator ( op-type operand, op-ty…

IO、进程、线程03

第一题&#xff1a;预习 opendir 和 readdir函数 opendir 和 readdir 是两个在C语言&#xff08;特别是使用POSIX标准的系统&#xff0c;如Linux和UNIX&#xff09;中用于目录遍历的函数。这两个函数属于标准的C库中的目录操作部分&#xff0c;通常与<dirent.h>头文件一…

国内新能源汽车芯片自给,承认差距,任重道远

【科技明说 &#xff5c; 科技热点关注】 据近日工信部电子五所元器件与材料研究院高级副院长罗道军表示&#xff0c;中国拥有最大的新能源车产能&#xff0c;芯片用量也是越来越多。但是芯片的自给率目前不到10%&#xff0c;是结构性的短缺。 中国拥有最大新能源车产能&#…

万界星空科技MES系统车间设备管理模块的功能

MES系统&#xff08;制造执行系统&#xff09;中的车间设备管理模块是生产环境中不可或缺的一部分&#xff0c;它负责监控、管理和优化车间内所有设备的性能、利用率和维护活动。以下是该模块详细的功能描述&#xff1a; 1. 设备状态监控与实时数据采集 实时监控&#xff1a;通…

【Node.js】会话控制

express 中操作 cookie cookie 是保存在浏览器端的一小块数据。 cookie 是按照域名划分保存的。 浏览器向服务器发送请求时&#xff0c;会自动将 当前域名下可用的 cookie 设置在请求头中&#xff0c;然后传递给服务器。 这个请求头的名字也叫 cookie &#xff0c;所以将 c…

cs224w笔记(p1-p4)

视频b站&#xff1a;1.1 - Why Graphs字幕版gamma_哔哩哔哩_bilibili p4前是数据结构基本内容主要涉及图的基本知识&#xff08;略&#xff09;。下面是未在考研数据结构范围内的知识。 节点中心性是图论和网络分析中用来衡量图中节点重要性的一个概念。 包括&#xff1a;度中…

解决:Linux上SVN 1.12版本以上无法直接存储明文密码

问题&#xff1a;今天在Linux机器上安装了SVN&#xff0c;作为客户端使用&#xff0c;首次执行SVN相关操作&#xff0c;输入账号密码信息后&#xff0c;后面再执行SVN相关操作&#xff08;比如"svn update"&#xff09;还是每次都需要输入密码。 回想以前在首次输入…

基于springboot+vue+uniapp的高校就业招聘系统小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

Grafana :利用Explore方式实现多条件查询

背景 日志统一推送到Grafana上管理。所以&#xff0c;有了在Grafana上进行日志搜索的需求&#xff0c;而进行日志搜索通常需要多条件组合。 解决方案 通过Grafana的Explore的方式实现多条件查询。 直接看操作步骤&#xff1a; 在主页搜索框中输入“Explore” 进入这个界面…

llama 2 改进之 RMSNorm

RMSNorm 论文&#xff1a;https://openreview.net/pdf?idSygkZ3MTJE Github&#xff1a;https://github.com/bzhangGo/rmsnorm?tabreadme-ov-file 论文假设LayerNorm中的重新居中不变性是可有可无的&#xff0c;并提出了均方根层归一化(RMSNorm)。RMSNorm根据均方根(RMS)将…

昇思25天学习打卡营第18天|RNN实现情感分类

相关知识 情感分类 指输入一段话或句子&#xff0c;返回该段话的正向或复兴的情感分类。 text embedding 指将文本转化成向量的方法。这里的文本指词、句子、文档等文本序列。 词向量化后会将词转为二进制(独热编码)或高维实数向量&#xff0c;句子和文档向量化则将句子或文…

给Wordpress评论列表的用户昵称增加个性化角色称号和注册年数

什么是个性化角色称号? 个性化称号:其实就是对应wordpress的几个用户组,重新给它装个面具。 比如:管理员 -> 华山掌门 比如:订阅者 -> 华山弟子 比如:VIP组 -> 掌门亲传弟子 。。。 就是个好玩的东西 什么又是注册年数? 显示用户在你的网站上注册了多少…

spring ioc的原理

1、控制反转(IOC):对象的创建控制权由程序自身转移到外部&#xff08;容器&#xff09; 2、依赖注入(DI):所谓依赖注入&#xff0c;就是由IOC容器在运行期间&#xff0c;动态地将某种依赖关系注入到对象之中。 Spring 中的 IoC 的实现原理就是工厂模式加反射机制。 参考资料…