DETR学习笔记
1.问题
目前的检测方法不是直接预测一个目标的集合,而是使用替代的回归和分类去处理大量的proposals以及anchors。模型的效果会受到一系列问题的影响:后处理去消除大量重叠的预测、anchor的设计、如何把target box与anchor关联起来等问题。
2.解决方案
简化上述流程,将目标检测视为集合预测的方式,好处是训练与预测变成真正的端到端,无需NMS的后处理,十分方便。同时,也不用人为地预设anchor。
3.创新点
a.Set-based的全局loss,使用二分图匹配生成唯一的预测(预测框到ground-truth的匹配)
b.基于encoder-decoder结构的Transformer( 可以显示对序列中的元素进行两两关系的建模,可以在一定程度上缓解生成重复框的限制,也可以满足集合预测的要求)
4.Transformer结构
dert中的transformer不再使用自回归,而是使用并行直接的预测即直接预测出序列上所有对象的分类和 位置信息
5.二分图匹配方法![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/2ff45b592d28b08fe4ec3931f6775ebd.png)
图中CNN代表图像特征编码的backbone,transformer的后面的输出就是最终预测的结果集合,假设固定为5个预测结果也就是说网络的输出就是5×4(框中心坐标与对应原图的长宽比例)和5×(C+1)两个tensor,分别对应框的预测和类别的预测,C表示总共的类别数,+1是背景类。
DERT在一次解码的过程中,会推断出固定大小的N个预测集,其中N被设置为显著大于图像中对象的数量。
二分图匹配方法的具体做法:
a.首先对标签集合中padding加入no object,使得预测集与标签集数量一致
b.学习参数使得预测集合与GT之间的loss最小,如下式(1)所示,这个公式的求解使用的是Hungarian算法,同时考虑类别损失,框回归损失,与交并比损失,定义了最终的损失函数如下式(2)所示:
6.DETR结构![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f3012a0b4e46e06d2071552692d4f88c.png)
具体步骤:
a.利用CNN提取图像特征,backbone可以使用主流的图像编码网络例如ResNet50等
b.编码-解码的transformer,encoder中带有position encoding,decoder中输入了object queries(随机向量,其个数决定了输出个数)
c.用来预测最终目标的前馈网络FFN,一个简单的三层前馈网络
tips:
a.encoder中输入的序列是channel维度的feature map
b.decoder输入object queries是N个向量,这N个向量是随机初始化然后训练得到的。每一个object query都学到了一些东西,右图显示了一些object query在做什么,比如第一行第一个就是在询问左下角有什么物体,第一行左数第二个就是在询问中间靠下的地方有什么。
7.实验结果
coco2017目标检测数据集
不同层数transformer-encoder的影响
transformer-encoder的热图
decoder输出结果NMS极大值抑制的影响
decoder attention的热图
loss对检测结果的影响
8、总结
a.基于Transformer的端到端目标检测框架
b.二分图匹配损失,用于直接set prediction
c.将DETR与Faster R-CNN基线方法进行了对比,结果发现DETR在大型目标上的检测性能要优于Faster R-CNN,但在小目标的检测上性能不如后者,这为今后DETR的改进提供了新的方向。