目标检测 - End-to-End Object Detection with Transformers
0. 前言
- 相关资料:
- 论文基本信息
- 领域:目标检测
- 作者单位:FAIR
- 发表时间:2020.5
- 一句话总结:提出了一种不同于之前工作的新目标检测解决方案
1. 要解决什么问题
- 当前的目标检测解决方案(比如Faster RCNN/YOLO/CenterNet等)都不够直观
- 把检测任务分解为获取候选框/anchors/图像中心点、分类两部分。
- 性能很大程度上取决于postprocessing操作(用于删除多余的结果)
2. 用了什么方法
-
将检测任务看作是direct set prediction problem
- set prediction,就是一次预测一波数据,可能相互之间没啥关系,相当于是多个head同时进行预测?可能更类似于序列任务中的一对多任务?
-
DETR结构如下图所示
-
新的目标检测解决方案(或者说范式?),就是要解决以下两个问题:
- 模型一共分几步,每一步获取什么叫结果(从而获得最终的检测结果),以及损失函数如何构建。
- 对于Faster R-CNN,就是先通过RPN获取候选框,再通过分类网络获取每个候选框的类型,最后通过后处理筛选得到最终结果。损失函数就是RPN与Fast R-CNN分别的分类损失函数与bbox reg损失函数。
- 模型获得每一步结果的具体结构长什么样子
- 对于Faster R-CNN,就是RPN的设计以及套用Fast R-CNN模型的分类部分。
- 模型一共分几步,每一步获取什么叫结果(从而获得最终的检测结果),以及损失函数如何构建。
-
DETR概述
- 第一步:利用Transformer构建DETR Architecture,对每张图片预测固定数量的物体。
- 可能就是所谓的 set prediction
- 第二步:训练时,需要将固定数量的预测物体与GT进行匹配。DETR的目标,就是找到set prediction结果与GT的匹配关系。
- 第一步:利用Transformer构建DETR Architecture,对每张图片预测固定数量的物体。
-
一些损失函数相关细节
-
假设set prediction有N个预测结果,而GT的数量一般都是小于N,那么,先要对GT执行PAD操作(用no object来进行填充),然后找道预测结果与GT的两两匹配结果。
-
这里的匹配与之前Faster RCNN/Yolo的匹配其实都是差不多的,不同之处在于,DETR中GT与预测结果是一一匹配的。
-
DETR的损失函数总体结构为:
-
所谓匹配,分开来说,其实就是包括类别匹配与bbox匹配。所以上面同时中的 L m a t c h L_{match} Lmatch也可以分为这两个部分,形式如下
-
上面公式中,box的损失函数其实使用的是l1 loss和GIOU loss的线性组合,即
-
-
Detr网络结构概述
- 网络分为三个部分:backbone, encoder-decoder transformer, feed forward network
- backbone:没啥好说的,普通卷积网络,用于提取图像特征。
- encoder-decoder transformer
- 第一,Encoder输入构建。对backbone的结果进行降维(1x1卷积,使得channel数量减少),然后flatten为dx(HW)的特征图。感觉就是将d个长度为HW的向量作为encoder的输入。Encoder输入中还融合了positional encodings信息。
- 第二,Encoder结构。与普通Transformer相同,以上一步的结果作为输入,通过Transformer的multi-head self-attention模块和feed forward network。
- 第三,Decoder结构,与普通Transformer几乎相同。不同之处在于DETR中对于N个物体是并行预测的,而原始Transformer是一个一个生成的。
- 第四,FFNs,即Prediction Feed Forward Netkworks,用于预测最终bbox结果。预测的值是 normalized center coordinates, height, width以及基于softmax的分类结果。有两点需要注意:其一,直接预测坐标,而不是那些基于anchor的,预测变化量;其二,类别预测中要有一类为
no object
-
全景分割相关
3. 效果如何
- 效果自然顶呱呱
4. 还存在什么问题&可借鉴之处
- 论文中提到,在大目标中DETR效果有显著提升,但小目标效果不好。
- 训练时间非常长……训练300epochs,16V100需要3天……甚至还有训练500epoch的……
- 要理解这论文,还是要更深刻地理解Transormer,这样position encodeings、encoder、decoder的细节才能搞清楚。
- 可以考虑下,如何用到视频领域,挺有意思的。不过就算有想法,这训练资源,有点劝退。