End-to-End Object Detection with Transformers,DETR论文学习

1. 引言

一些废话:
研究生生涯已经过了一年,我只看了三篇论文,这是第三篇(第一篇是数据融合方面的,第二篇是提出 transformer 那篇)。也是因为要准备组会,拿这篇论文作了汇报,这篇博客就是由我的汇报内容改编过来的。

学习背景:
我的课题是多传感器(相机、雷达)数据融合,数据融合完往往都要有个应用,一般都会应用在无人驾驶上,无人驾驶中的一个重要任务即目标检测(物体检测不出来还咋开车,成撞车了不是),所以多传感器数据融合领域的论文中会有很多目标检测方面的知识,故需要了解了解才能继续往下进展。

适用范围:
这篇博客适用于纯纯的学术小白(比如只看过三篇论文的我,深度学习都没学过,只听过一些简单的概念),博客中介绍的内容也只是停留在表面,看完可能也就是知道有这么个东西,往深了问啥也不知道,我也解释不了,毕竟我啥也不会。看懂这篇论文的前提是要了解很多目标检测方面的知识,所以整个第 2 章都是在为介绍这篇文章做铺垫。如果你觉得文章中有说的不对的地方请提出自己的见解,一起交流。

内容来源:
这篇博客中大部分内容(包括文字、图片)都是从别的博客直接粘贴过来的(看懂这篇论文需要明白很多个点,而一个博客一般只会介绍一个点),我所做的工作只是汇总,我会在第 5 章给出它们的原出处,更详细的内容请到原出处查看。

一点感谢:
一直以来,遇到问题就在网上搜,从来都是白嫖,甚至看完对自己有用的内容连赞都不点,我自己就是一个纯纯的白嫖怪。想着有这么多无私的人在网上奉献他(她)们的心得、经验,我也会想着去分享一下自己的见解,但每次都感觉好费时间,所有也从来没有分享过自己的心得体会。这次,算是第一次吧(我足足写了一整天才完成)!感谢所有愿意分享的人(有你们我才能白嫖 doge,哈哈哈)!

2. 本论文发表前的目标检测策略

本论文是将 transformer 用于目标检测任务的开山之作,transformer 的运作机制使得可以直接从图片中检测出最终的目标(这里体现端到端的思想)。而之前的一些检测手段大都采用一种间接的、非端到端的方式(通过定义 anchor 产生候选区域的方式检测目标,后面会讲到 anchor的概念)。下面介绍一下这些间接的检测手段。

2.1 目标检测的任务

目标检测的任务是检测出图像中的物体的类别(是桌子还是板凳,小狗还是小猫)以及物体的位置(用框把物体框出来,这里的框即Bounding Box,BBox),如图 1 所示:
目标检测任务示意图

图1 目标检测任务

2.2 one-stage 目标检测策略

单阶段目标检测经典算法:
YOLO v1-v5(v5 后面的我也不知道属不属于单阶段,因为没有看论文,最近又刚出 v7,据我推断应该是,因为YOLO全称叫 You Only Look Once,即看一次就行了,只有一个看的过程,没有先选出候选区域的过程)、SSD等。

单阶段目标检测流程:
通过 CNN 提取特征后就直接预测目标的类别与位置(直接在 CNN 提取的特征图 feature map 上使用预定义的 anchor 生成一系列边框,最后再对这些边框进行回归),如图 2 所示(这个小狗好可爱):
单阶段目标检测流程图

图2 单阶段目标检测流程图

2.3 two-stage 目标检测策略

双阶段目标检测经典算法:
RCNN、Fast RCNN、Faster RCNN等。

双阶段目标检测流程:
先生成候选区域(Region Proposal,这些候选区域也被称为感兴趣区域 Region of Interest,ROI,即可能是目标的区域),再将这些区域的特征输入网络进行类别分类和位置回归(即预测框框四个点的坐标(x, y, w, h),(x, y)为左上角顶点的坐标,w、h是包围框的长和宽),如图 3 所示(这个小狗好可爱 * 2):
双阶段目标检测流程图

图3 双阶段目标检测流程图

2.4 如何产生候选区域

由 2.3 知双阶段目标检测会先产生候选区域,那么候选区域是如何产生的?早期产生候选区域使用滑动窗口法,后面使用选择性搜索算法(如RCNN、Fast RCNN),Faster R-CNN 中使用 RPN 网络生成候选区域,下面逐一进行介绍。

2.4.1 滑动窗口法

滑动窗口法检测流程:
使用不同大小、不同长宽比的框框在整幅图像上进行穷尽式的滑窗,然后提取窗口内的特征(例如Haar、LBP、Hog等特征,我并不知道这些特征都是啥意思),再送入分类器(SVM、Adaboost等)判断该窗口内是否有目标,如图 4 所示:
滑动窗口法

图4 滑动窗口法

滑动窗口法的缺点:
此方法复杂度太高(在整幅图上地毯式搜索),会产生很多的冗余的候选区域,而且由于不可能每个尺度都兼顾到,因此得到的目标位置也不会那么准。

2.4.2 选择性搜索算法

我想现在并不需要去深入了解算法的细节,只需要知道选择性搜索算法(Selective Search,SS)比滑动窗口法牛逼就行。

SS 算法执行流程:
① 使用《Efficient Graph-Based Image Segmentation》中的方法初始化区域集 R;
② 计算 R 中相邻区域的相似度(颜色相似度、纹理相似度、尺寸相似度、填充相似度等),并以此构建相似度集合 S ;
③ 如果 S 不为空,则执行以下 7 个子步骤,否则跳到步骤 ④;
    获取 S 中的最大值 s(ri, rj);
    将 ri 与 rj 合并成一个新的区域 rt
    将 S 中与 ri 有关的值 s(ri, r*) 剔除掉;
    将 S 中与 rj 有关的值 s(r*, rj) 剔除掉;
    使用步骤 ② 中的方法,构建 St, 它是 S 的元素与 rt 之间的相似度构成的集合;
    将 St 中的元素全部添加到 S 中;
    将 rt 放入 R 中。
④ 将 R 中的区域作为目标的位置框 L,这就是算法的执行结果。

2.4.3 RPN 网络(Region Proposal Network)

简单来说,RPN 网络即专门生成候选区域的网络,抛开各种细节,将图片输入 RPN 中就能产生很多候选区域(同时也会完成区域的分类,即将图片分为背景和目标这样的两种不同的类别,并且也会对目标的位置进行初步的预测)。如图 5 的步骤 2 所示:
使用RPN网络产生候选区域

图5 使用 RPN 网络产生候选区域

2.5 anchor

RPN 网络中的一个重要概念叫 anchor,即基于 anchor 来生成候选框,以下来解释 anchor 的概念。

2.5.1 anchor 是什么

简单来说,anchor 就是在图像上预设好的不同大小,不同长宽比的框,如图 6 所示:
anchor示意图

图6 anchor 示意图

2.5.2 anchor 的作用

通过 anchor 可以知道此 anchor 包含物体的概率、物体中心点与 anchor 自身中心点位置的偏移量以及相对于 anchor 的宽高比例,如图 7 所示:
anchor的作用

图7 anchor 的作用

2.5.3 anchor 的优点

① 使用 anchor 机制产生密集的 anchor boxes,使得网络可直接在此基础上进行目标分类及边界框坐标回归;

② 密集的 anchor boxes 可有效提高网络目标召回能力,对于小目标检测来说提升非常明显。

2.5.4 anchor 的缺点

① 需要为 anchor 设定超参数:尺度(scale)和长宽比(aspect ratio)是比较难设计的,需要较强的先验知识;

② 会产生大量冗余框:一张图像内的目标毕竟是有限的,基于每个 anchor 设定大量 anchor boxes 会产生大量的完全不包含目标的背景框(easy-sample),这会造成正负样本严重不平衡问题。

③ 网络实质上看不见 anchor boxes,在 anchor boxes 的基础上进行边界回归更像是一种在小范围上的强行记忆(我不理解)。

3. 以上目标检测策略面临的问题

① 需要人为定义 anchor 的参数,需要很多先验知识。

② 在同一目标位置上会产生大量的候选框,而我们只希望在一个物体上看到一个框。

3.1 如何消除冗余框

以上的目标检测方法在同一目标位置上会产生大量的候选框,而我们只希望在一个物体上看到一个框,那么又如何去掉其余的候选框呢?这里有 3 种解决思路:
① 选取多个候选框的交集作为最后的目标框;

② 选取多个候选框的并集作为最后的目标框(当然这里也不是只要相交就直接取并集,需要相交的框满足交集占最小框的面积达到一定阈值才合并);

③ NMS(Non-Maximum Suppression,非极大值抑制),在同一个物体上若有相交的多个框就选取其中置信度最高的一个作为最终的框,没相交的就直接保留下来,作为最终的框。一般大家都是用此方法去除冗余框,下面将介绍 NMS 的工作流程。

3.2 NMS 工作流程

① 将所有框的得分进行排序,并选中最高分及其对应的框;

② 遍历其余的框,如果和当前最高分框的重叠面积 iou 大于一定阈值,就将其删除(iou:intersection-over-union,交并比,即两个边界框的交集除以它们之间的并集);

③ 从未处理的框中继续选一个得分最高的,重复上述过程。
NMS 处理前

图8 NMS 处理前

NMS 处理后

图9 NMS 处理后

4. 本篇文章(铺垫完成,进入正题)

End-to-End Object Detection with Transformers,中文翻译即使用 transformer 进行端到端(端到端:输入原始数据,输出最后结果)的目标检测(也即文中提到的直接的检测方式,we propose a direct set prediction approach to bypass the surrogate tasks)。

有了第 3 章的铺垫,就能看懂论文中的以下内容了(也即此论文中的方法相比其它论文中的方法的改进)(我就不翻译了):

1 Introduction 第一段中的内容:
The goal of object detection is to predict a set of bounding boxes and category labels for each object of interest. Modern detectors address this set prediction task in an indirect way, by defining surrogate regression and classification problems on a large set of proposals, anchors, or window centers. Their performances are significantly influenced by postprocessing steps to collapse near-duplicate predictions, by the design of the anchor sets and by the heuristics that assign target boxes to anchors.

2.1 Set Prediction 第一段中的内容:
The first difficulty in these tasks is to avoid near-duplicates. Most current detectors use postprocessings such as non-maximal suppression to address this issue, but direct set prediction are postprocessing-free.

2.3 Object detection 第一段中的内容:
Most modern object detection methods make predictions relative to some initial guesses. Two-stage detectors predict boxes w.r.t. proposals, whereas single-stage methods make predictions w.r.t. anchors or a grid of possible object centers. Recent work demonstrate that the final performance of these systems heavily depends on the exact way these initial guesses are set.

4.1 模型结构

下面将简单介绍 DETR 模型的各个部分(往深了我也不知道),如果想具体了解其中的编码器-解码器部分可以看提出 transformer 的文章(Attention is All You Need),我会在第 5 章给出论文链接。
DETR模型

图10 DETR 模型结构图

4.1.1 Backbone

什么是 backbone:
backbone 指的是人的脊梁骨,对人类来说十分重要,而在深度学习中,特征提取的好坏对模型的影响至关重要(地基不稳怎么盖高楼),所以将提取特征部分比作 backbone。

backbone 工作流程:
输入 ximg ∈ R3×H0×W0(3 表示图像的三个通道)的图像,然后由 CNN 先生成低分辨率的激活图 f ∈ RC×H×W(C = 2048,H = H0/32,W = W0/32,即进行 32 倍下采样),最后用 1×1 的卷积减少 f 的通道数生成最终的特征图z0,z0 ∈ Rd×H×W

4.1.2 Encoder

即 transformer 中使用的 encoder,由于 transformer 的 编码器-解码器 结构只能处理序列形式(即一维向量)的数据,故需要将 backbone 提取到的特征图进行降维,降维后最终输入到 encoder 中的维度为 1× (d×HW)。又由于 transformer 的 编码器-解码器 结构是 permutation-invariant 的, 故需要在输入序列中加入位置编码。
DETR使用的编码器-解码器结构

图11 本论文使用的 encoder-decoder 结构图

permutation-invariant:
指的是模型的输出结果与特征之间的空间位置没有关系,即调换特征的顺序后将输入模型,模型的输出结果和不调换顺序是一样的(transformer 最初是用在机器翻译任务中,如果没有位置关系,向模型中输入“ 我爱你 ”、“ 你爱我 ”翻译出来的效果是一样的,而这两句话表达的意思却完全相反,这显然不符合常理,故需要向特征中加入位置关系)。

注意力机制的作用:
原文中提到 Attention mechanisms are neural network layers that aggregate information from the entire input sequence. 可以看出,注意力机制的作用就是让模型把所有的特征信息都汇聚起来,使得 Q、K、V (transformer 中的术语)可以在所有的信息中进行交互与匹配。

4.1.3 Decoder

即 transformer 中使用的 decoder,与原 transformer 中的 decoder 唯一不同的是每次可以并行输出 N(N 取决于输入的 object query 的数量,文中的 N = 100)个预测结果。而原论文中因为做机器翻译任务,是使用自回归的方式进行逐字翻译,每次只翻译一个单词,而目标检测任务并非一个自回归的过程。自回归指的是Q、K、V 都是一样的东西。

与 encoder 一样,decoder 同样也是 permutation-invariant 的,也需要加入位置编码。

4.1.4 object query 是什么

可视化的decoder输出

图12 输入object query 后 decoder 的可视化输出

上图是论文中可视化出的与 20 个 object query 对应的 decoder 的输出,绿色代表预测出的小目标的框,红色代表水平的大框,蓝色代表垂直的大框。可以看到不同的 object query 输出的结果均不一样,比如第一个可视化结果更关注图像左侧的物体,第二个可视化结果更关注图像中间的物体,而第三个可视化结果更关注图像右侧的物体。

什么是 object query:
站在模型的角度来讲,object query 不过是模型学习到的不同的一维向量,而这些不同的一维向量分别又代表什么意思呢?说的更形象一点,每一个 object query 就相当于模型训练出来的一个人,不同的 object query 就是不同的人,而每个人的关注点都不尽相同,由这些所有的人分别向图像进行提问,比如第一个人向图像提问 “ 你的左上角是一只小狗吗? ”,而第二个人可能会说 “ 我更喜欢小猫,请问你中间那个物体是小猫吗? ”,而第三个人可能会问“ 右下角有没有东西? ”……不同的问题被送入 decoder,通过 decoder 中的注意力机制,decoder 会为不同的人解答他们提出的不同的问题。

4.1.5 FFN

decoder 不仅会输出预测的物体的类别,还会输出这些物体的位置信息,输出的信息会被送入不同的网络进行分类与回归,从而输出最终的结果。

包围框由一个使用 ReLU 激活函数的 3 层感知机预测,其隐藏层的维度为 d,类别的预测由一个使用 softmax 激活函数的线性层预测。

4.2 DETR 如何选出最佳的预测框

由 4.1.3 知本文中的 decoder 每次会并行输出 N 个预测结果,而 N 要大于图片中的最大物体数,即预测出的结果比图像中真实存在的物体数量多(就相当于前面讲到的在一个物体上产生多个候选框),这就产生了一个问题,如何选出最佳的预测结果呢(前面讲到的方法利用 NMS 消除多余的预测框)?本文采取一种二分图匹配损失的方法(这也是本论文相比其他方法进行创新的地方)解决此问题。介绍二分图匹配损失前需要先介绍一下匈牙利算法。

4.2.1 匈牙利算法

匈牙利算法被用来求解任务分配问题,也叫指派问题。即将 N 项任务分配给 N 个人做,不同的人做不同的任务需要不同的时间,如何分配可使工作效率最高(能解决效率最高问题同样也能解决效率最低问题)。
匈牙利算法

图13 使用匈牙利算法寻找最佳匹配

图 13 为匈牙利算法寻找最佳匹配的示意图,我们暂且不管匈牙利算法的具体执行流程,经过匈牙利算法后肯定能找到一种最佳匹配。

4.2.2 二分图匹配损失

模型可以从图像中拿到该图像对应的标注信息,现在假设模型只输出 5 个结果(论文中一次输出 100 个结果),而这张图片的标注信息只有两个(c1,b1),(c2,b2),那么另外三个补为(∅,b)。其中,c 表示类别,b 表示物体的位置。计算损失时,首先用上面的匈牙利算法找到一个最佳匹配,找到最佳匹配后就可以计算预测结果集的损失了。
使用匈牙利算法找到 encoder 的输出结果与真实物体间的最佳匹配

图14 预测与真实进行二部图匹配

4.2.3 损失函数

损失函数

图15 论文中的损失函数
这里不想敲公式了,直接放截图。

L为损失函数,L中的 c 表示类别,b 表示物体的位置(即考虑了类别和位置两部分的损失),σ为最佳匹配的总损失(我就懂这么多了)。

4.2.4 本文的创新点

最先将 transformer 用于目标检测任务,将目标检测看作一种集合预测问题,使用二分图匹配损失选出最佳的预测框,并解决了第 3 章存在的问题。正如原文中所写的这样:

We present a new method that views object detection as a direct set prediction problem. Our approach streamlines the detection pipeline, effectively removing the need for many hand-designed components like a non-maximum suppression procedure or anchor generation that explicitly encode our prior knowledge about the task.

Our DEtection TRansformer (DETR) predicts all objects at once, and is trained end-to-end with a set loss function which performs bipartite matching between predicted and ground-truth objects. DETR simplifies the detection pipeline by dropping multiple hand-designed components that encode prior knowledge, like spatial anchors or non-maximal suppression. Unlike most existing detection methods, DETR doesn’t require any customized layers, and thus can be reproduced easily in any framework that contains standard CNN and transformer classes.

Compared to most previous work on direct set prediction, the main features of DETR are the conjunction of the bipartite matching loss and transformers with (non-autoregressive) parallel decoding. In contrast, previous work focused on autoregressive decoding with RNNs. Our matching loss function uniquely assigns a prediction to a ground truth object, and is invariant to a permutation of predicted objects, so we can emit them in parallel.

4.3 后记

就写到这里了,实验部分我也没有看。(写了整整一天!)

5. 参考内容

one-stage 与 two-stage
one-stage 与 two-stage
anchor
anchor
anchor
RPN 网络
非极大值抑制
端到端的概念
选择性搜索算法
匈牙利算法
DETR 论文解读
《Attention Is All You Need》
《End-to-End Object Detection with Transformers》

  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值