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

文章目录

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

摘要

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

模型大致结构

DETR论文笔记 End-to-End Object Detection with Transformers_第1张图片
模型的结构主要是两部分,首先是CNN的图片特征提取部分,然后是transformer的结构部分,经过transformer之后,就输出了目标检测的结果。模型输出的结果是固定的,也就是说最多检测一张图片中N个目标。
CNN输出的结果是一个 H ∗ W ∗ C H*W*C HWC的tensor,代表了图片提取出的feature map。将feature map变成 ( H ∗ W ) ∗ C (H*W)*C (HW)C的二维矩阵放到transformer中。

损失函数

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

模型结构

CNN的输出是一个 H ∗ W ∗ C H*W*C HWC的三维tensor,将这个tensor展开成 ( H ∗ W ) ∗ C (H*W)*C (HW)C的二维矩阵喂给transformer encoder,从feature map变成transformer输入的过程用下面这张图比较好解释。transformer encoder的输入有 H ∗ W H*W HW个,同样要产生 H ∗ W H*W HW个输出,然后继续送给transformer decoder。
DETR论文笔记 End-to-End Object Detection with Transformers_第3张图片
整体的结构图还是用论文中的图片比较好。transformeren encoder 的 H ∗ W H*W HW个输出,就会被送进transformer decoder。
DETR论文笔记 End-to-End Object Detection with Transformers_第4张图片
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在做什么,比如第一行第一个就是在询问左下角有什么物体,第一行左数第二个就是在询问中间靠下的地方有什么,等等。其他的一些颜色看一下图片下面的注释就好。
DETR论文笔记 End-to-End Object Detection with Transformers_第5张图片

为什么有用

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

你可能感兴趣的:(深度学习)