DETR
PDF: https://arxiv.org/pdf/2005.12872
Code: https://github.com/facebookresearch/detr
一、大体内容
DETR(DEtection TRansformer)基于Transformer提出了一个全新的端到端的目标检测框架,之前的目标检测方法,不管是两阶段、一阶段还是Anchor-free和Anchor-based方法,最后都需要有NMS操作来过滤重叠的预测框,而且基于Anchor和基于proposal都依赖于人为设定的大小。DETR将目标检测任务变成一个集合预测问题(原先都是通过 proposal或anchor来间接预测),不用借助NMS、Anchor、先验框等信息,直接端到端等输出物体检测框,且其只需要更换检测头就可以直接迁移到分割任务。
并且预测是并行出框的。但当时对小物体检测效果不太好且训练比较慢,但这些问题在后续提出的Deformable DETR中都得到了解决。
整体结构和流程
整体上分成4个模块,CNN骨架网络提取初始特征,加上位置编码后输入Encoder提取全局特征,再把可学习的object Queries输入到Decoder,最后经过检测头直接输出框和类别信息。
假设输入图片大小为\(800 \times 1066 \times 3\),预测类别为91类,图片经过卷积神经网络32倍下采样后抽取特征为\(25 \times 34 \times 2048\),在变换到\(25 \times 34 \times 256\),然后与同样大小的位置编码进行相加并拉直得到特征为\(850 \times 256\),输入到Transform Encoder学习全局特征还是\(850 \times 256\),再和可学习的固定个数的(超参 100个,所以大小为\(100 \times 256\))object Queries进行自注意力操作,再经过Encoder得到大小为\(100 \times 256\)的特征,最后经过一个检测头输出类别信息(\(1 \times 91\))和框信息(\(1 \times 4\))。
二、贡献点
- 提出一个端到端的目标检测框架DETR,无需NMS等操作,也不需要一些先验知识去设置Anchor,直接并行输出目标框和类别
- DETR很容易扩展到分割等任务,可以作为一个视觉通用框架,DETR新挖了个坑,后续很多工作对其进行了改进
三、细节
3.1 训练和预测区别
主要区别在于是否需要二分图匹配。
在训练时需要利用二分图匹配给每个真实框分配一个唯一的预测框,进行损失计算。
二分图匹配可以参考:https://www.cnblogs.com/xiaxuexiaoab/p/17838305.html
实现上直接采用scipy包的函数linear-sum-assignment
。
而推理时直接输出预定个数的框,然后按照一个给定分数阈值,得到最终检测框。
3.2 损失函数
DETR对任意图片都输出给定的N个框,在训练时给每个真实框分配一个唯一的预测框。
其中为
整体结构上还是和Hungarian loss一致,由一个分类和一个框损失组成。
但是BETR中的分类损失没有用log,保证和框损失取值空间一致。
框损失一般用L1Loss,考虑到L1 loss和出框大小有关,越大损失越大, BETR采用了GIou loss和L1 Loss结合。
试验也表明框损失同时采用L1 loss和GIoU loss效果最好
3.3 Object Query
Object Query开始进行随机初始化,然后在Decoder中的第一个多头注意力进行自注意力。主要是为了移除冗余框,第二个多头注意力再与Encoder输出特征进行交叉注意力
这图说明学习的和anchor有点类似,相当于以不同的方式去询问,比如有的关注左下角,有的关注右侧,上图显示中间都有一条,作者给出的解释是COCO数据集一般中间都有一个大物体,这说明DETR是学习自动学习到了Anchor特征,这也避免了人为事先设定。
3.4 DETR的Transformer结构
与Transformer还是有点不一样,如:
DETR在Encoder里位置编码只加在Q和K上,而Transformer加在QKV上
DETR在解码器第一个多头注意力是对object queries进行的,到第二个才与Decoder输出关联,并将Object queries加到Q上
3.5 迁移到分割
作者通过可视化分析了Encoder和Decoder的结果,这也为直接迁移到分割提供了基础。
-
Encoder注意力可视化
图片中牛的大体区域已经学习到了,包括那头小牛位置都很清晰。 -
Decoder可视化
这张图效果更加明显,大象和斑马的皮肤很接近,但边缘位置Decoder学习的很好,能够把不同物体的边缘区分出来。 -
分割网络
在box后接入一个FPN(特征金字塔)网络可以直接实现全景分割。
3.6 不足点
- 对小目标效果不好
- 训练耗时,比较慢
在DeTR中图像通过一系列的卷积层和池化层进行特征提取,只选择了最后一层特征(没有考虑多尺度特征),这会导致特征图的分辨率降低,小物体在经过这些层后可能会失去很多细节信息,使得模型难以准确检测小目标。另外Transformer的注意力机制倾向于关注图像中的显著区域,这可能导致模型对小物体的关注度不足,在大物体占主导地位的场景中,小物体可能被忽略。
目标检测和分割通常图片分辨率较大,对应到Transformer模块计算量成倍增长,且训练时需要进行二分图匹配才能计算损失,所以训练比较耗时。
这些问题半年之后deformable detr的提出把这两个问题都解决了。(FPN===>Faster RCNN用了两年半)
四、效果
-
检测结果对比
-
不同层数效果
-
分割效果