DETR的学习与分析

DETR的学习与分析

前言

通过对Transformer在语义分割任务中应用的学习,发现自己对Query-Based的模型十分陌生,而这些模型大多都是基于DEtection TRansformer这一模型设计的,于是便找来DETR的原论文进行学习与分析。

DETR提出了基于Query(Query based)的端到端目标检测算法。从深度学习开始,一直到DETR,目标检测领域很少有端到端的方法。不论是proposal based的方法、anchor based的方法,还是non anchor based的方法,最后都需要非极大值抑制 (NMS) 这种后处理方法,去除冗余的预测框。而NMS的存在使得模型调参复杂、部署困难。而DETR既不需要proposal,也不需要anchor,直接利用Transformer的全局建模能力,把目标检测看成了一个集合预测的问题。并且DETR在训练过程中,预测结果与实际的真实值一一匹配,不会输出那么多冗余的框,不需要再用NMS进行后处理,使得模型的训练和部署简单了不少。

注:集合预测问题(set prediction) ——即给定一个固定小规模的目标查询集,DETR 推理目标和全局图像的关系,然后直接输出最终的预测集,最后再通过二分图匹配确定哪个框对应哪类目标。

1. DETR的特点

原论文参见:End-to-End Object Detection with Transformers

与RCNN的proposal + classifier的方法不同(通过一些密集的方框去覆盖整张图像可能出现物体的部分,然后预测该视野范围内的物体类别以及对该视野范围进行微调),DETR的检测方式与人类习惯更加相似:先确定物体的大体位置,再进一步判断这个物体是什么

DETR提出了两个的东西:
①提出了一个新的目标函数:通过二分图匹配的方式,强制模型输出一组独一无二的预测。理想状态下,一个物体对应生成一个框。(使用二分图匹配替代了原来的NMS)详见:DETR-二分图匹配 & 匈牙利算法
②使用了Transformer encoder & decoder的架构。其中包含两个小细节:

  • Transformer decoder中有另一个输入——learned object query(使用Object Quary替代了原来的Anchor)
  • 模型可以并行输出预测框(区别于NLP中Transformer通过自回归方式的串行输出,并行输出提高了时效性)

DETR的优点
①想法简单,实现简单,不需要新的deep learning library,支持cnn和transformer就能支持DETR。
②能够简单地拓展到其他任务上,例如语义分割,只需加一个分割头即可。

DETR的缺点
①对于小目标的检测效果不好。(通过使用多尺度的特征来提升小物体的检测,类比FPN对Faster R-CNN的改进
②训练太慢。想要达到很好的效果需要在COCO数据集上训练500Epoch,而一般其他模型只需几十个Epoch

解决方案:Deformable DETR(Deformable Attention & 多尺度特征)

2. DETR模型结构

在这里插入图片描述
根据上图,整个模型的实现大体分成四步:

  1. 使用卷积神经网络提取特征
  2. 用Transformer Encoder学习全局特征。学习全局特征有助于大致判断不同物体的位置,消除冗余的框,帮助后面的目标检测
  3. 用Transformer Decoder生成很多的预测框。*object query限定了要出多少个框,通过query和特征不停做自注意力操作,从而得到最后的输出的框。*最终生成多少个框是作者定义的(原文中是100),即不论输入什么图片都会生成100个框。
  4. 用生成的预测框与Ground Truth的框做匹配,在匹配上的框中计算目标检测的loss(Ground Truth就是正确标注的数据
    生成的框如何与Ground Truth的框做匹配,然后计算loss?
    作者将这个问题看成一个集合预测的问题,最后用二分图匹配的方法计算loss。例子:Ground Truth框有两个,通过计算100个预测框和这两个框的matching loss来决定100个预测中哪两个框是独一无二的。决定好框之后,再像普通的目标检测
    一样算一个分类的loss和一个bounding box的loss。至于没有匹配到Ground Truth的框会被标记为没有物体,即所谓的背景类。

在这里插入图片描述

3. 可视化分析

3.1 Encoder

在这里插入图片描述
将Transformer Encoder的自注意力进行可视化:在目标上设置一些基准点,计算该点和图像中其他点的自注意力,观察自注意力的分布。可以发现Transformer Encoder的自注意力已经基本将目标的形状恢复出来了,甚至有一点语义分割中mask的形状了,即使对于有遮挡的情况,还是能把目标分辨清楚。
在这里插入图片描述
从表中看出,Transformer Encoder的层数越深,学到的全局特征越好,有可能可视化就越清晰,目标之间分开更加清楚,目标检测就容易很多。

3.2 Decoder

在这里插入图片描述
经过Transformer Encoder后为什么还需要一个Decoder?Decoder在学什么?
图中将每个物体的自注意力用不同颜色表示出来了。左图中,小象使用黄色标识,大象用蓝色标识。可以发现即使在遮挡严重的情况下,例如大象的蹄子还是可以显示出蓝色;对于小象来说,大象和小象的皮肤其实非常接近,但还是能把轮廓分的很清楚(可以预想在伪装检测领域的威力)。
右图中,斑马本身的斑纹就是非常强的干扰特征,而且遮挡十分严重。即使这种情况下,DETR还是能准确分辨出斑马的边界和蹄子

回答:Encoder在学全局的特征,尽可能让目标之间分开,但是只是分开是不够的,对于头部、尾巴、边界这类极值点就交给Decoder去做了。因为Encoder已经把目标都分好了,Decoder就可以把所有注意力都分到学边缘,去更好地区分物体以及解决遮挡问题。(类似于语义分割中的U-net结构,encoder去抽取语义特征,Decoder一边恢复图片大小,另一边加入更多细节信息。)

3.3 Object Query

在这里插入图片描述
从设定的N=100个的Object Query输出框中选出了20个。图中绿色的点代表小的bounding box(边界框),红色的点代表大的、横向的bounding box,蓝色的点代表大的、竖向的bounding box。
可以发现,Object Query与Anchor有一些相似之处:Anchor是提前先去定义好了一些bounding box,最后将预测与提前定好的bounding box 做对比;而Object Query是一个可以学习的东西,它就像是一个问问题的人,例如第一个框他会问,左下角有没有一个小物体?中间有没有大的横向的物体?中间有没有大的纵向的物体?每当一张图片输入,各个框就会按照各自的方式去问图片各种各样的问题,如果得到了合适的答案,它就会把这个答案返回给你,而这个答案就是对应的bounding box。

4. 下一步计划

后续的 Deformable DETR、Sparse R-CNN 等工作进一步提高了基于 Query 的端到端物体检测算法的收敛速度以及精度。与之前基于锚框 / 锚点(anchor based/keypoint based)的方法相比,Query Based的方法已经取得了可媲美的结果。

在基于Query的目标检测算法快速发展的同时,如何将其有效拓展到语义分割领域成为值得探讨的问题。

  • 尝试使用DETR完成语义分割的下游任务
  • 追踪DETR后续的改进模型,进一步理解Object Queries(Cell-DETR & VisTR、QueryInst)
  • 跟进Mask Embeding部分。(通过ISTR、SOLQ理解图d;通过Max-DeepLab、Segmenter理解图e,见语义分割任务中的Transformer
  • 学习FCN、DeepLabV1V2V3、LR-ASPP、U-Net、U2Net语义分割领域经典模型

参考

DETR论文精读

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值