【目标检测】51、YOLOS | 从目标检测的角度来重新思考 Transformer

【目标检测】51、YOLOS | 从目标检测的角度来重新思考 Transformer_第1张图片

文章目录

    • 一、背景
    • 二、方法
    • 三、效果

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

代码:https://github.com/hustvl/YOLOS

作者:华中科大王兴刚团队

出处:NIPS 2021

时间:2021.10

一、背景

ViT 作为首个在视觉领域超越 CNN 的 Transformer 模型,能够通过提取全局信息来构建长距离的依赖模型,但其是从分类的角度出发,且缺失了层级特征,所以难以判定原始 ViT 能否将 pre-trained 的大数据集的 image-level 的特征传递到下游的目标检测任务。

所以,YOLOS 被提出,从目标检测的角度来探索 Transformer 的结构,主要变化如下:

  • YOLOS 将 ViT 中的 1 个 cls token 用 100 个 det token 代替,来用于目标检测
  • YOLOS 使用 bipartite matching loss 代替 ViT 中的分类 loss,让目标检测过程变成一个序列预测过程,避免把 ViT 的输出重新构建成一个 2D 特征图,且能够在标签分配的时候保持手工启发式和先验知识。
  • YOLOS 的预测头没有复杂的设计,类似一个紧凑的分类层

YOLOS 的贡献如下:

  • 使用 mid-sized ImageNet-1k 作为预训练数据集,验证了 ViT 能够成功的将预训练特征传递到目标检测任务,并且能够在 COCO 上取得很好的效果
  • 首次证明了目标检测任务可以使用一个 sequence-to-sequence 的方式来实现,输入等大且不重叠的图片块作为输入,相比现有的目标检测器,YOLOS 只使用了很少的 2D 归纳偏置
  • 使用原始 ViT 证明了目标检测的结果受预训练的方法影响很大,且其检测效果和上限还有很大的距离。

二、方法

【目标检测】51、YOLOS | 从目标检测的角度来重新思考 Transformer_第2张图片

YOLOS 结构如图 1 所示

1、Stem

  • 原始的 ViT 输入是对每个 patch 经过线性变换,concat 一个 cls token,然后加上位置编码,作为输入的
  • YOLOS 由于是检测模型,所以也是降每个 patch 使用 E 做线性变换,然后 concat 100 个 det token,加上位置编码作为输入。这 100 个 det token 其实可以看做预设的 100 个 anchor,最终会得到 100 个预测结果。

在这里插入图片描述

2、Body:Encoder

  • MSA+LN
  • MLP+LN
  • Residual connections

在这里插入图片描述

3、Detector Heads

分类和回归的头都是使用 1 个 MLP 来实现的,使用 Relu 作为激活函数。

4、Detection Token

这其实就是上面的那初始随机生成的 100 个 det token,也可以看做目标的特征,这样做就能够在标签分配的时候避免特定任务所注入的 2D 归纳偏置和先验知识。

Fine-tuning COCO 的时候,给预测结果(来自 det token )和真实标签使用了双边匹配,这个策略虽然和 label assignment 同样都起了很重要的作用,但在 2D 结构中通常被忽略了。YOLOS 其实不需要将 Transformer 的输出在重新回复成 2D 特征图来进行 label assignment。

5、Fine-tuning at Higher Resolution

Fine-tuning 时,COCO 的图像是远远大于预训练的图的,不改变 patch size(还保持 16x16),就会产生一个很大的序列,作者使用位置坐标差值法来适应不同的大小。

6、Inductive Bias

为了引入最小的归纳偏置,YOLOS 使用 det tokens 来作为最终检测目标的联系,避免了 2D 归纳偏置和特点任务的启发。

7、和 DETR 的对比

YOLOS 其实是受 DETR 的启发的:

  • YOLOS 使用了 det token,来避免归纳偏置
  • YOLOS 的优化方式也类似 DETR

YOLOS 和 DETR 的不同:

  • DETR 使用的 Transformer 的 encoder-decoder 结构,YOLOS 使用了 encoder-only 结构
  • DETR 使用了预训练的卷积网络,Transformer 网络是随机初始化的,YOLOS 是使用预训练的 ViT 了
  • DETR 在每个 decoder 中使用了 cross-attention,并且使用了辅助 decoding loss 来监督每个 decoder 层,YOLOS 不区分 patch token 和 det token,只关注一个序列。

三、效果

1、模型变体

【目标检测】51、YOLOS | 从目标检测的角度来重新思考 Transformer_第3张图片
2、预训练的效果

【目标检测】51、YOLOS | 从目标检测的角度来重新思考 Transformer_第4张图片
3、和其他网络的对比

【目标检测】51、YOLOS | 从目标检测的角度来重新思考 Transformer_第5张图片

4、det token 的作用可视化

下面展示了前十个 det token 的效果

【目标检测】51、YOLOS | 从目标检测的角度来重新思考 Transformer_第6张图片
【目标检测】51、YOLOS | 从目标检测的角度来重新思考 Transformer_第7张图片

5、YOLOS 的 self-attention 特征图

为了查看 det token 的self-attention 和其对应的预测头的关系,可视化了最后一层的图:

  • 不同的 self-attention 头关注不同的特征和位置
  • 不同预训练次数的 attention map 不同:可视化了使用 200 epoch 预训练的模型和 300 epoch 预训练的的 YOLOS 的特征图,AP 是类似的,但从可视化角度看,是不同的。

【目标检测】51、YOLOS | 从目标检测的角度来重新思考 Transformer_第8张图片

【目标检测】51、YOLOS | 从目标检测的角度来重新思考 Transformer_第9张图片

你可能感兴趣的:(目标检测,目标检测,transformer,深度学习)