通过对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 推理目标和全局图像的关系,然后直接输出最终的预测集,最后再通过二分图匹配确定哪个框对应哪类目标。
原论文参见:End-to-End Object Detection with Transformers
与RCNN的proposal + classifier的方法不同(通过一些密集的方框去覆盖整张图像可能出现物体的部分,然后预测该视野范围内的物体类别以及对该视野范围进行微调),DETR的检测方式与人类习惯更加相似:先确定物体的大体位置,再进一步判断这个物体是什么。
DETR提出了两个新的东西:
①提出了一个新的目标函数:通过二分图匹配的方式,强制模型输出一组独一无二的预测。理想状态下,一个物体对应生成一个框。(使用二分图匹配替代了原来的NMS)详见:DETR-二分图匹配 & 匈牙利算法
②使用了Transformer encoder & decoder的架构。其中包含两个小细节:
DETR的优点:
①想法简单,实现简单,不需要新的deep learning library,支持cnn和transformer就能支持DETR。
②能够简单地拓展到其他任务上,例如语义分割,只需加一个分割头即可。
DETR的缺点:
①对于小目标的检测效果不好。(通过使用多尺度的特征来提升小物体的检测,类比FPN对Faster R-CNN的改进)
②训练太慢。想要达到很好的效果需要在COCO数据集上训练500Epoch,而一般其他模型只需几十个Epoch
解决方案:Deformable DETR(Deformable Attention & 多尺度特征)
将Transformer Encoder的自注意力进行可视化:在目标上设置一些基准点,计算该点和图像中其他点的自注意力,观察自注意力的分布。可以发现Transformer Encoder的自注意力已经基本将目标的形状恢复出来了,甚至有一点语义分割中mask的形状了,即使对于有遮挡的情况,还是能把目标分辨清楚。
从表中看出,Transformer Encoder的层数越深,学到的全局特征越好,有可能可视化就越清晰,目标之间分开更加清楚,目标检测就容易很多。
经过Transformer Encoder后为什么还需要一个Decoder?Decoder在学什么?
图中将每个物体的自注意力用不同颜色表示出来了。左图中,小象使用黄色标识,大象用蓝色标识。可以发现即使在遮挡严重的情况下,例如大象的蹄子还是可以显示出蓝色;对于小象来说,大象和小象的皮肤其实非常接近,但还是能把轮廓分的很清楚(可以预想在伪装检测领域的威力)。
右图中,斑马本身的斑纹就是非常强的干扰特征,而且遮挡十分严重。即使这种情况下,DETR还是能准确分辨出斑马的边界和蹄子
回答:Encoder在学全局的特征,尽可能让目标之间分开,但是只是分开是不够的,对于头部、尾巴、边界这类极值点就交给Decoder去做了。因为Encoder已经把目标都分好了,Decoder就可以把所有注意力都分到学边缘,去更好地区分物体以及解决遮挡问题。(类似于语义分割中的U-net结构,encoder去抽取语义特征,Decoder一边恢复图片大小,另一边加入更多细节信息。)
从设定的N=100个的Object Query输出框中选出了20个。图中绿色的点代表小的bounding box(边界框),红色的点代表大的、横向的bounding box,蓝色的点代表大的、竖向的bounding box。
可以发现,Object Query与Anchor有一些相似之处:Anchor是提前先去定义好了一些bounding box,最后将预测与提前定好的bounding box 做对比;而Object Query是一个可以学习的东西,它就像是一个问问题的人,例如第一个框他会问,左下角有没有一个小物体?中间有没有大的横向的物体?中间有没有大的纵向的物体?每当一张图片输入,各个框就会按照各自的方式去问图片各种各样的问题,如果得到了合适的答案,它就会把这个答案返回给你,而这个答案就是对应的bounding box。
后续的 Deformable DETR、Sparse R-CNN 等工作进一步提高了基于 Query 的端到端物体检测算法的收敛速度以及精度。与之前基于锚框 / 锚点(anchor based/keypoint based)的方法相比,Query Based的方法已经取得了可媲美的结果。
在基于Query的目标检测算法快速发展的同时,如何将其有效拓展到语义分割领域成为值得探讨的问题。
DETR论文精读