YOLOS:大道至简,直接使用预训练ViT进行实时目标检测 | NeurIPS 2021

news2024/9/22 15:41:22

论文探索了在中型ImageNet-1k数据集上预训练的普通ViT到更具挑战性的COCO目标检测基准的可迁移性,提出了基于Vision TransformerYou Only Look at One Sequence(YOLOS)目标检测模型。在具有挑战性的COCO目标检测基准上的实验结果表明,2D目标检测可以以纯sequence-to-sequence的方式完成,并且附加的归纳偏置最小

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

论文: You Only Look at One Sequence: Rethinking Transformer in Vision through Object Detection

  • 论文地址:https://arxiv.org/abs/2106.00666
  • 论文代码:https://github.com/hustvl/YOLOS

Introduction


Vision Transformer(ViT) 证明,直接继承自NLPTransformer编码器架构可以在大规模图像识别方面表现出色。以图像块嵌入序列作为输入,仅需少量的Fine-tune数据,ViT即可成功地从纯粹的sequence-to-sequence角度将足量数据预训练的视觉表达迁移到更具体的图像分类任务。

  一个自然的问题是:ViT能否直接迁移到更具挑战性的对象和区域级目标任务中,例如图像级识别之外的目标检测?

ViT-FRCNN是第一个使用预先训练的ViT作为Faster R-CNN目标检测器的主干网络,但这种设计无法摆脱对卷积神经网络(CNN)的依赖和2D归纳偏差。因为ViT-FRCNN需要将ViT的输出序列重新排列为2D空间特征图,依赖于区域池化操作(即RoIPoolRoIAlign)以及基于区域的CNN架构来解码ViT特征,用于对象和区域级别的感知。

  受现代CNN设计的启发,最近的一些工作将特征金字塔等设计引入到Vision Transformer中,这很大程度上提高了包括目标检测在内的密集预测任务的性能。但这些架构是以性能为导向的,不能反映Vision Transformer的特性。另外的一些如DEtection TRansformer(DETR) 的系列工作,使用随机初始化的Transformer来编码和解码CNN特征用于目标检测,也未揭示预训练Transformer的可迁移性。

  直观上,ViT旨在学习远距离依赖关系和全局上下文信息,而不是本地和区域级别的关系。此外,ViT缺乏现代CNN那样的分层架构来处理视觉实体尺寸的巨大变化。根据现有的研究,目前尚不清楚纯ViT是否可以将预训练的通用视觉表达从图像级识别转移到更复杂的2D目标检测任务。

  为了回答这个问题,论文提出了基于ViT架构的目标检测模型You Only Look at One Sequence(YOLOS),具有尽可能少的架构修改、区域先验以及目标任务相关归纳偏差。本质上,从预训练ViTYOLOS检测器的变化非常简单:

  • ViT中用于图像分类的 [ C L S ] [\mathrm{CLS}] [CLS] 标记替换为一百个用于目标检测的 [ D E T ] [\mathrm{DET}] [DET] 标记。
  • 按照DETR用二分匹配损失替换ViT的图像分类损失,以集合预测的方式进行目标检测。这可以避免像ViT-FRCNN那样将ViT的输出序列重新解释为2D特征图,以及防止在标签分配中引入启发式算法和2D空间结构的先验知识。而且,YOLOS的预测头可以摆脱复杂多样的设计,就像分类层一样紧凑。

YOLOS继承自ViT并不是为了成为另一个高性能目标检测器,而是为了揭示预训练的Transformer从图像识别到更具挑战性的目标检测任务的多功能性和可迁移性。具体来说,论文的主要贡献总结如下:

  • 使用中型ImageNet-1k作为唯一的预训练数据集,表明普通ViT可以成功迁移至复杂的目标检测任务,并以尽可能少的修改在COCO基准上达成有竞争力的结果。
  • 首次证明通过将一系列固定大小的非重叠图像块作为输入,也可以以纯sequence-to-sequence的方式完成2D目标检测。在现有的目标检测器中,YOLOS利用最小的2D归纳偏置。
  • 对于原始ViT,目标检测结果对预训练方法非常敏感并且检测性能远未饱和。因此,YOLOS也可以用作具有挑战性的基准任务来评估ViT的不同(标签监督和自监督)预训练策略。

You Only Look at One Sequence


YOLOS遵循原始ViT架构,并与DETR一样针对目标检测进行优化。YOLOS可以轻松适应NLP和计算机视觉中可用的各种Transformer架构,这种简单的设置并不是为了更好的检测性能而设计的,而是为了尽可能公正地准确揭示Transformer系列在目标检测中的特性。

  • Architecture

  模型架构如图 1 所示,从ViT分类器到YOLOS检测器的变化很简单:

  • 删除用于图像分类的 [ C L S ] [\mathrm{CLS}] [CLS] 标记,附加了一百个随机初始化的可学习检测标记 [ D E T ] [\mathrm{DET}] [DET] 到输入嵌入 [ P A T C H ] [\mathrm{PATCH}] [PATCH] 以进行目标检测。

  • 在训练过程中,将图像分类损失替换为二分匹配损失,以遵循DETR的设定预测方式进行目标检测。

  • Stem

  常规ViT接收1D序列嵌入作为输入,为了处理2D图像输入,将图像 x ∈ R H × W × C \mathbf{x}\in\mathbb{R}^{H\times W\times C} xRH×W×C 重塑为展平的2D图像块 x P A T C H ∈ R N × ( P 2 C ) \mathbf{x}_{\mathrm{PATCH}}\in\mathbb{R}^{N\times(P^2 C)} xPATCHRN×(P2C)。其中, ( H , W ) (H,W) (H,W) 是输入图像的分辨率, C C C 是输入的通道数, ( P , P ) (P,P) (P,P) 是每个图像块的分辨率, N = H W P 2 N=\frac{HW}{P^{2}} N=P2HW 是得到的图像块数量。

  使用可训练的线性投影 E ∈ R ( P 2 C ) × D \mathbf{E}\in\mathbb{R}^{(P^2 C)\times D} ER(P2C)×D x P A T C H \mathbf{x}_{\mathrm{PATCH}} xPATCH 映射到 D D D 维,将投影输出 x P A T C H E \mathbf{x}_{\mathrm{PATCH}}\mathbf{E} xPATCHE 作为 [ P A T C H ] [\mathrm{PATCH}] [PATCH] 标记。同时,一百个随机初始化的可学习 [ D E T ] [\mathrm{DET}] [DET] 标记 x D E T ∈ R 100 × D \mathbf{x}_{\mathrm{DET}}\in\mathbb{R}^{100\times D} xDETR100×D 也被附加到 [ P A T C H ] [\mathrm{PATCH}] [PATCH] 标记中。

  遵循VIT的做法,将标准的可学习1D位置嵌入 P ∈ R ( N + 100 ) × D \mathbf{P}\in\mathbb{R}^{(N+100)\times D} PR(N+100)×D 添加到所有输入标记中以保留位置信息。

  最终得到序列 z 0 \mathbf{z}_{0} z0 作为YOLOS编码器的输入:

$$
{\mathbf z}{0}=\left[{\mathbf x}{\mathrm{PATCH}}^{1}{\mathbf E};\cdot\cdot\cdot\ ;{\mathbf x}{\mathrm{PATCH}}^{N}{\mathbf E};\ {\mathbf x}{\mathrm{DET}}^{1};\cdot\cdot\cdot\ ;{\mathbf x}_{\mathrm{DET}}^{100}\right]+{\mathbf P}

\quad\quad (1)
$$

  • Body

YOLOS的主体与ViT基本相同,由一堆Transformer编码器层组成。 [ P A T C H ] [{\mathrm{PATCH}}] [PATCH] 标记和 [ D E T ] [{\mathrm{DET}}] [DET] 标记被同等对待,在Transformer编码器层内执行全局交互。

  每个Transformer编码器层由一个多头自注意力(MSA)块和一个MLP块组成,每个块前应用LayerNorm(LN)处理并且添加残差连接,其中MLP包含一个中间带有GELU非线性激活函数的隐藏层。形式上,第 ℓ \ell YOLOS编码器层的计算如下:

$$
\begin{array}{l}
{{\mathbf{z}^{\prime}{\ell}=\mathrm{MSA}({\mathrm{LN}}({\mathbf{z}}{\ell-1}))+\mathbf{z}{\ell-1}}}
\
{{\mathbf{z}
{\ell}=\mathrm{MLP}({\mathrm{LN}}({\mathbf{z}}{\prime}_{\ell}))+\mathbf{z}{\prime}_{\ell}}}
\end{array}

\quad\quad (2)
$$

  • Detector Heads

YOLOS的检测头摆脱了复杂而笨重的设计,与ViT的图像分类层一样简洁。分类和边界框回归头各由一个MLP实现,其中包含两个带有ReLu非线性激活函数的隐藏层。

  • Detection Token

  论文故意将随机初始化的 [ D E T ] [{\mathrm{DET}}] [DET] 标记作为对象查询,避免2D结构的归纳偏差以及在标签分配期间引入任务相关的先验知识。

  在COCO上进行微调时,每次前向传递都会在 [ D E T ] [\mathrm{DET}] [DET] 标记生成的预测与GT之间建立最佳二分匹配。该过程与DETR的标签分配的作用相同,不接触输入的2D结构,即YOLOS不需要像ViT-FRCNN那样将ViT的输出序列重新排列为2D特征图以进行标签分配。理论上,YOLOS在不知道确切的空间结构和几何形状的情况下,执行任何维度的目标检测都是可行的,只要每次传递的输入始终以相同的方式扁平化为序列。

  • Fine-tuning at Higher Resolution

  在COCO上进行微调时,除了用于分类和边界框回归的MLP头以及随机初始化的一百个 [ D E T ] [\mathrm{DET}] [DET] 标记之外,所有参数均从ImageNet-1k预训练权重中进行初始化。由于微调过程的图像分辨率比预训练时高得多,保持图像块大小 P × P = 16 × 16 P\times P=16\times 16 P×P=16×16 不变就会导致更大的有效序列长度。虽然ViT可以处理任意输入序列长度,但位置嵌入需要执行2D插值以适应不同长度的输入序列。

  • Inductive Bias

  论文精心设计了YOLOS架构,尽可能小地引入额外的归纳偏置,从ViT带来的归纳偏置主来自主干网络部分的图像块提取以及位置嵌入的分辨率调整。

  除此之外,YOLOSViT上没有添加可能引入归纳偏置的卷积(例如 3 × 3 3\times 3 3×3 或其它非 1 × 1 1\times 1 1×1)。从学习对象表达的角度来看,论文选择使用 [ D E T ] [{\mathrm{DET}}] [DET] 标记来绑定目标进行最终预测,避免额外的2D归纳偏置以及任务特定的启发算法。面向性能的CNN设计,如特征金字塔结构、2D局部空间注意力以及区域池化操作也没有使用。

  所有这些设计都是为了在对输入的空间结构和几何形状了解最少的情况下,以纯粹的sequence-to-sequence的方式准确地揭示预训练Transformer从图像识别到目标检测的多功能性和可迁移性。

  • Comparisons with DETR

YOLOS的设计深受DETR的启发:YOLOS跟从DETR使用 [ D E T ] [{\mathrm{DET}}] [DET] 标记作为目标表达的代理,避免2D结构的归纳偏置和标签分配期间引入任务相关的先验知识,并且YOLOS的训练方式与DETR类似。

  同时,两个模型之间存在一些关键区别:

  • DETR采用Transformer编码器-解码器架构,而YOLOS选择仅编码器的Transformer架构。

  • DETR仅在其CNN主干网络上采用预训练,但让Transformer编码器和解码器通过随机初始化进行训练,而YOLOS自然地继承了任何预训练的ViT表达。

  • DETR在编码图像特征和对象查询之间应用交叉注意力,并在每个解码器层添加辅助的解码损失,而YOLOS始终只查看每个编码器层的一个序列,而不区分 [ P R T C H ] [{\mathrm{PRTCH}}] [PRTCH] 标记和 [ D E T ] [\mathrm{DET}] [DET] 标记。

  • Model Variants

  表 1 展示了不同大小的YOLOS变体。

Experiments


  表 2 和 表 3 展示了不同预训练方法对性能的影响。

  表 4 展示了不同大小模型的预训练性能以及迁移对性能对比。

  图 5 展示了与轻量级CNN目标检测模型对比。

  表 6 展示了与轻量级DETR目标检测模型对比。

  如图 2 和图 3 所示, [ D E T ] [{\mathrm{DET}}] [DET] 标记对目标位置和大小敏感,而对目标类别不敏感。

  表 7 展示了去掉 [ D E T ] [\mathrm{DET}] [DET] 标记对性能的影响。



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

work-life balance.

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

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

相关文章

Windows系统通过WSL2安装Ubuntu22.04系统及图形化界面

1.通过WSL2安装Ubuntu22.04系统及图形化界面 WSL(Windows Subsystem for Linux)是一个为Windows用户设计的兼容层,它允许用户在Windows10和Windows11操作系统上直接运行GNU/Linux环境。WSL提供了一个微软开发的Linux兼容内核接口&#xff0c…

MySQL中的时间与当前时间相差8个小时,两步解决。

前言: 有朋友后台私信问,我服务器中的MySQL时间与本地时间差了8个小时,我在给表中字段设置根据时间戳自动更新时会出现时间与当前时间不符的原因。灰常简单,一起来看看吧。 第一步: 在MySQL中,输入命令&…

基于asp.net软件缺陷跟踪系统设计与实现

系统分析 本章讲述了本软件缺陷跟踪系统的前期分析方法和分析结论。 3.1 可靠性分析 在软件研发企业或研发团队中,开发人员和测试人员所应用的软件缺陷管理的主要方法流程是: 1.测试人员发现软件存在的缺陷,填写缺陷报告&…

【正点原子K210连载】第三十四章 image图像滤波实验 摘自【正点原子】DNK210使用指南-CanMV版指南

第三十四章 image图像滤波实验 在上一章节中,介绍了image模块中元素绘制方法给的使用,本章将继续介绍image模块中图像滤波方法的使用。通过本章的学习,读者将学习到image模块中图像滤波的使用。 本章分为如下几个小节: 34.1 imag…

Transformer直接预测完整数学表达式,推理速度提高多个数量级

前言 来自 Mata AI、法国索邦大学、巴黎高师的研究者成功让 Transformer 直接预测出完整的数学表达式。 转载自丨机器之心 符号回归,即根据观察函数值来预测函数数学表达式的任务,通常涉及两步过程:预测表达式的「主干」并选择数值常数&am…

jfif怎么改成jpg格式?这几种转换方法请务必学会!

jfif怎么改成jpg格式?JFIF,作为一种相对不常见的图像存储格式,其在实际应用中确实存在一系列不容忽视的局限,首要问题在于,当尝试将JFIF图片转换为其他格式时,往往会伴随着图像压缩的副作用,这意…

Vue学习笔记 一

Vue学习笔记 1、Vue基础指令 1.1 什么是Vue? Vue.js 是一套响应式的 JavaScript 开发库。Vue.js 自问世以来所受关注度不断提高,在现在的市场上,Vue.js 是非常流行的 JavaScript 技术开发框架之一。 Vue是一款国产前端框架,它的作者尤雨溪(Evan You)是一位美籍华人,…

Android使用addr2line分析Native Crash

NDK提供的工具将函数地址解析为具体的函数名和行数才能进一步分析问题。 常用的地址转换工具有addr2line、ndk-stack等,个人比较喜欢addr2line,所以接下来介绍下该工具的基本使用方式 日常使用过程中,只需要关注-C -f -e三个参数即可 // -…

LaViT:这也行,微软提出直接用上一层的注意力权重生成当前层的注意力权重 | CVPR 2024

Less-Attention Vision Transformer利用了在多头自注意力(MHSA)块中计算的依赖关系,通过重复使用先前MSA块的注意力来绕过注意力计算,还额外增加了一个简单的保持对角性的损失函数,旨在促进注意力矩阵在表示标记之间关…

注意力机制(Attention mechanism)(中篇)

模型的输入是一组向量,它可以是文字,可以是语音,可以是图。而输出有三种可能性, 第一种可能性是每一个向量都有一个对应的标签。如图1所示,当模型看到输入是4个向 量的时候,它就要输出4个标签。如果是回归问…

React项目通过jsmind实现思维导图以及相关功能

jsMind jsMind 是一个用于显示和编辑思维导图的纯 JavaScript 类库。它基于 Canvas 和 SVG 进行设计,能够在现代浏览器中高效地运行。jsMind 以 BSD 协议开源,这意味着可以在遵守该协议的前提下,将其嵌入到任何项目中使用。 功能特点 jsMi…

从0到1搭建用户管理系统

手把手教你搭建前后端框架 新手对于很多成熟框架,不知道如何搭建的,不知道如何实现等等,忙碌之余,写了一篇博客 手把手教你搭建前后端框架源码, springbootmysqlelementuivue 从0到1,搭建springboot框架&am…

windows下mysql启动失败无报错(已解决)

环境:win server 2012R2 mysql版本:8.0 今天使用net stop mysql;net start mysql进行重启,发现重启失败,而且提示服务没有任何错误。 接着就检查了所有的常见问题(如端口占用、配置文件路径错误等)仍然无…

024、架构_资源_主机

摘要 在主机管理界面,可查看 GoldenDB 使用的主机信息,可对主机执行新增、编辑、删除操作。 主机列表 选择菜单[资源管理→主机管理],进入主机列表界面。 新增主机(单个、批量) 新增主机流程: 添加

hexo d 报错

上学期四月份左右用hexogithub搭了一个简单的博客,开学回来发现运行hexo d就报错,试了好几种网上的方法解决。(虽然好使了,但还是没弄明白啥原理,难道是token过期就不好使吗?) 奇妙的解决方案 …

WD100电磁铁-国家实验室方案

根据合肥国家实验室磁场要求,上海天端实业有限公司设计制造WD100电磁铁,参数如下 水冷WD100电磁铁参数资料 产品规格 水冷型WD-100型电磁铁,卧式座放,磁场方向水平; 气隙双向可调,可调范围0-100mm&am…

【GeoScenePro】Generic Server Error

错误 解决方案 在portal中进行知识图谱许可授权

C语言指针进阶一:(字符指针,数组指针,指针数组,函数指针)

字符指针 在指针类型中我们知道字符指针类型,一般就是用于 char 的: int main() {char ch w;char* p &ch;*p a;return 0;} 还有一种使用方法: int main() {const char* pstr "hello bit";printf("%s\n", p…

亚马逊、temu自养号采购大额下单需要解决哪些技术要点?

自养号采购下单在跨境电商平台中是一个复杂且需要精细操作的过程,主要涉及多个技术要点以确保账号安全、提高下单成功率,并避免被平台风控系统识别。以下是需要解决的关键技术要点: 1. 纯净的测评环境 服务器与IP:使用高纯净度的…

java实现发邮件功能的方式?如何使用java?

java实现发邮件的配置步骤?如何用java实现发信功能? Java实现发邮件功能是一个非常常见且重要的需求。无论是用于用户注册确认、密码重置还是系统通知,Java实现发邮件功能都能提供强大的支持。AokSend将详细介绍几种常用的Java实现发邮件功能…