[模型学习与对比]DETR和ViT

文章介绍了VisionTransformer(ViT)和DETR两种基于Transformer的深度学习模型。ViT将图像转换为序列数据用于分类任务,而DETR则利用Transformer进行端到端的目标检测,避免了传统目标检测中的后处理步骤。两者都涉及将图像序列化,但处理方式和应用场景有所不同,DETR的核心在于Decoder的学习过程。
摘要由CSDN通过智能技术生成

上一周本来想写ViT的原理来着,后来发现这东西和DETR好像没啥区别,就是特征提取方式和后处理的方式不大一样,中间都是原方不动套的TRM,于是就改成同时记录一下二者的原理、区别和联系。

由于我发现如果不结合代码,即便写完了记录,第二天睡醒后也忘的特干净,所以我决定把代码解读也写了,下一篇发。

  1. Vision Transformer(分类任务)

1.1 我们知道,TRM的输入是一些序列,在提出的伊始倍用来处理NLP任务(如翻译)。

图1 使用TRM处理翻译任务时的输入

那么很显然,若想要使用TRM处理图像数据,一个非常朴素的思想就是把图像展开,将图像数据转换为序列数据(序列数据可以是图片的像素对应值,然后将这个转换为输入token),也就如下图所示:

图2 将图片数据转换为序列数据

但此种处理方式会面临随着图像增大,模型计算时的复杂度呈平方级增长的问题。遇到这种问题,可以采用:1. 采用局部注意力机制,也即图2中,2只和7,39做交叉注意力,13只和27,11做交叉注意力;2. 改进attention公式,采用稀疏注意力机制;3. 等等各种方法。。。

1.2 在此之上,我们还可以考虑将图像中的间隔像素点和其邻域的其他像素点整合在一起,为一个token,再进行输入和后续操作,如下图所示。

图3 图像化整为零

1.3 在有了这个操作后,由于后续处理的流程几乎不变,基本上就是输入Transformer然后得到输出,下面,我们可以看一下ViT的流程图:

图4 ViT整体流程1

  1. 将图片切分为一个个的16×16的patch

  1. 这个部分是用来获取每一个patch的Embedding,这里包含两个小步骤:

  1. 将16×16的patch展平;

  1. 将得到的256长度的向量,映射为Transformer所需要的长度;

NB:很明显,这里可以通过线性层进行映射,也可以通过设置卷积核的方式直接得出Embedding

  1. 位置编码与第二部中获得的Embedding相加

  1. e. 也就是直接向TRM encoder的输入与输出,将得到的多个维数为768的向量的第一个作为分类输入,使用常规的多分类方法进行分类。

图5 ViT整体流程2

  1. DETR(目标检测)

2.1 DETR是一种端到端的目标检测手段,可在不使用比如anchor这些传统手艺的前提下直接生成检测框。对于我们提到的这些传统手艺,其主要依靠于人工经验与数据集特征来针对性设置,不具有普适性。

并且这些东西涉及到非常多的后处理操作,具体表现在于这些手段有很大几率会在同一个物体上生成一大堆冗余的框,这时候需要使用NMS等后处理操作,消除那些框。

2.2 DETR的基本思路在于,首先在训练的过程中,无论如何,直接通过TRM并行地生成N个预测框(论文中N=100),然后通过匈牙利算法去匹配预测框和Ground Truth的k个框,选出最贴近的k个预测框,选出来后,用这k个预测框再和ground truth的k个框计算Loss,从而进行模型更新。

图6 DETR模型匹配思路

2.3 DETR步骤与TRM在其中的作用

图7 DETR整体步骤1

图8 DETR过程示意

我们这里结合一个实例来理解一下。

  1. 特征提取

  1. 输入一个3通道,大小为800×1066的图像,然后通过一个CNN的backbone提取特征,其输出的size是2048×25×34。这里的25和34分别是之前800和1066的1/32,2048是输出的通道数;

  1. 然后再把这个向量通过一个Linear层,将其通道数映射为256,那么它的size也就变成256×25×34;

  1. 在此基础上,把这个向量和位置编码相加,位置编码的size也是256×25×34;

  1. 与位置编码相加后,把这个256×25×34的向量拉直,得到850×256的向量,在这里,256是Embedding的size。

  1. 将上一步得到的向量经过TRM encoder,在这个过程中,Encoder学习图像全局信息,图像中每一个由CNN提取的特征都会与其他特征做交互,从总体上知道物体的大致位置,保证一个物体只出一个框。

可以把Encoder理解成一个提取各种特征,然后等待Decoder来选秀的过程

图9 Encoder提取特征示意

  1. Decoder的输入是100个可学习的,size为256的Embedding,在这里充当TRM中query向量的角色,和Encoder中得到的特征不断地做Cross Attention,最终得到100个预测Embedding。

这里要着重说明一下,DETR的核心是Decoder,Decoder的核心是这100个输入的可学习向量,Decoer训练的过程可以理解成就是训练这100个query向量的过程。

非常有意思的一点在于,在作者的源码中,这100个可学习query向量都被初始化为0,然后加上位置编码作为输入,在此基础上对这100个向量进行学习。

另一个值得注意的点是,论文中提到的Decoder部分是M层的,但事实上,这M层的decoder只有一部分被重复了M次(图10红框部分);

图10 DETR与Decoder结构示意

  1. 出框最后的一步也是最常规的一步,通过添加FFN检测头来进行预测,这里是做两个预测,一个是物体出框预测(四个值,中心点坐标x, y, 以及框的width, height),一个是物体类别预测

  1. 在得到预测后,这100个预测框会和Ground Truth框一起通过匈牙利算法进行匹配,也就是2.2中和图7中所讲的内容;

  1. DETR与ViT对比

总体上我认为,DETR和ViT非常类似,都是针对于图像的任务,一个是图像分类,一个是目标检测二者区别主要在于将图像序列化的方式不同(当然,毕竟这二者是不同任务,后处理部分也肯定是不一样的,但是可以看到的是,后处理部分使用的都是很常规的分类或检测手段,因此这里不纳入本文的考虑)。

在这里要感谢以下的up:

  1. https://www.bilibili.com/video/BV1GB4y1X72R/?share_source=copy_web&vd_source=54a003f2fe57290ef9f347426cdb53c9

  1. https://www.bilibili.com/video/BV1Uu411o7oY/?share_source=copy_web&vd_source=54a003f2fe57290ef9f347426cdb53c9

  1. "未来"的经典之作ViT:transformer is all you need! - 小小将的文章 - 知乎https://zhuanlan.zhihu.com/p/356155277

  1. https://www.bilibili.com/video/BV1ZT411D7xK/?p=2&share_source=copy_web&vd_source=54a003f2fe57290ef9f347426cdb53c9

  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Amigo_5610

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值