Advertisement

DETR论文笔记 End-to-End Object Detection with Transformers

阅读量:

文章目录

  • 摘要
  • 模型大致结构
  • 损失函数
  • 模型结构
  • 为什么有用

摘要

DETR是一个使用transformer进行目标检测的一篇论文。它的亮点在将transformer应用到了视觉任务,将NLP和CV任务之间打通了。DETR实现非常简单,不需要像faster-rcnn一样设计很复杂的结构,而且可以达到和faster-rcnn差不多的结果。

模型大致结构

模型流程图
模型的结构主要是两部分,首先是CNN的图片特征提取部分,然后是transformer的结构部分,经过transformer之后,就输出了目标检测的结果。模型输出的结果是固定的,也就是说最多检测一张图片中N个目标。
CNN输出的结果是一个H*W*C的tensor,代表了图片提取出的feature map。将feature map变成(H*W)*C的二维矩阵放到transformer中。

损失函数

transformer的输出是N个预测,N是一个固定值,这个N要比正常图片中可能出现的目标的数量大一些。数据的标注由两部分组成:一个是c_i代表物体所属类别,一个是b_i代表目标的矩形框。预测值同样由两个部分组成,\hat p_{\sigma(i)}(c_i),表示预测值的第\sigma(i)个是c_i个的概率,以及\hat b_{\sigma(i)}代表预测的bounding box。
然后来说说这个\sigma。因为产生了N个预测,那怎么知道每一个预测应该对应图中哪一个物体呢?faster-rcnn中的做法是计算IoU,IoU大于阈值则对应上了。这里是使用了另一种方法,将预测值和gt进行匹配的方法。首先有N个预测,因为真实目标的数量(gt)是小于N的,所以就需要padding,下面这张图里以N=5为例,假如gt只有两个,那么就需要三个\empty来加入进来作为padding。\sigma就是预测值到gt的对应关系。这个对应关系要满足\hat \sigma=arg min_{\sigma} \sum_i^N \mathcal{L}_{match}(y_i, \hat y_{\sigma(i)})。这个最优化是用Hungarian algorithm算出来的。
在这里插入图片描述
找到对应关系之后,损失函数的计算公式就是
在这里插入图片描述

模型结构

CNN的输出是一个H*W*C的三维tensor,将这个tensor展开成(H*W)*C的二维矩阵喂给transformer encoder,从feature map变成transformer输入的过程用下面这张图比较好解释。transformer encoder的输入有H*W个,同样要产生H*W个输出,然后继续送给transformer decoder。
在这里插入图片描述
整体的结构图还是用论文中的图片比较好。transformeren encoder 的H*W个输出,就会被送进transformer decoder。
在这里插入图片描述
encoder的输出作为decoder的一个输入,但是transformer的decoder应该还需要一个输入的,这个输入怎么办呢?在阅读理解问题中,encoder的输入是给的阅读材料,decoder的输入是问题,在汉译英任务中,encoder输入是汉语句子,decoder初始的输入是的token,后面的每一步输入都是上一步的输出。在这篇论文中,decoder的输入是object queries,有N个输入object queries,产生N个预测值。
object queries应该是N个向量,这N个向量是随机初始化然后训练得到的。每一个object query都学到了一些东西,原论文中的图7显示了一些object query在做什么,比如第一行第一个就是在询问左下角有什么物体,第一行左数第二个就是在询问中间靠下的地方有什么,等等。其他的一些颜色看一下图片下面的注释就好。
在这里插入图片描述

为什么有用

在这里插入图片描述
论文中给出了一张效果图,左边的大象,会发现基本上attention注意到的点都是在大象边缘。transformer的注意力机制是特征图中所有的点两两之间都要计算attention值,因此相对于基于anchor的方法,这种方法在图片上的注意力更加灵活。比较值得注意的是下面这张图中红圈圈出来的部分。
在这里插入图片描述
画红线的地方是后面那只大象被遮挡住露出来的一小部分,attention一样看到了,展示了这种方法对遮挡物体非常强的适应性,也说明全局所有像素点之间进行attention是有用的。

全部评论 (0)

还没有任何评论哟~