DETR-二分图匹配 & 匈牙利算法

文章目录

  • 前言
  • 1. 二分图匹配问题
  • 2.匈牙利算法
  • 3. DETR中的实现
  • 总结
  • 参考

前言

DETR提出了基于Query的端到端目标检测算法,把目标检测看成了一个集合预测问题,大大简化了模型的训练和部署。(详见DETR的学习与分析)其中,DETR模型实现的创新点之一就是基于集合的目标函数,那么具体来说这个目标函数是如何设计的呢?二分图匹配、匈牙利算法、一对一匹配都是什么意思?

1. 二分图匹配问题

DETR模型最后的输出是一个固定的集合,即不论输入图片中包含多少目标,最后都会输出N个框(一般N远大于图片中的目标数目)。问题来了,一张图片中Ground Truth(真值)的bounding box(边界框)可能只有几个,那么如何匹配预测框与Ground Truth框呢?
作者将这个问题转化为了二分图匹配的问题。
例子:有abc三个工人,去干xyz三种工作,由于每个工人各有所长,所以完成每种工作的开销不同,如何分配工人做这三种工作,可以使开销最小?
最优二分图匹配即最后可以找到一个唯一的解,能够给每个人对应分配最擅长的工作,使得开销最小。
DETR-二分图匹配 & 匈牙利算法_第1张图片

2.匈牙利算法

对于上述问题,可以直接暴力穷举,遍历所有可能,找出其中最小开支,但是算法的复杂度会很高。而匈牙利算法则是可以用较低的复杂度解决这一问题的算法。
在用python进行实现时,一般使用Scipy包种提供的linear-sun-assignment函数。

scipy.optimize.linear_sum_assignment(cost_matrix, maximize=False)

参数:
cost_matrix: 数组
二分图的成本矩阵。

maximize: 布尔(默认值:假)
如果为真,则计算最大权重匹配。

返回:
row_ind, col_ind: 数组
一组行索引和一个对应的列索引,给出最佳分配。

3. DETR中的实现

目标检测其实也是一个二分图匹配的问题,将abc看成N个预测的框,xyz看成ground truth的框,使用linear-sun-assignment函数得到最优匹配。而cost matrix中的值其实就是目标检测中的loss。
DETR-二分图匹配 & 匈牙利算法_第2张图片
在这里插入图片描述
loss中包含两个部分,一个是分类的loss,一个是出框的准确度。即 遍历所有预测的框,让预测的框和ground truth的框去计算两个loss,然后将loss放到cost matrix中,利用匈牙利算法得到最后的最优解。

总结

其实二分图最优匹配求解,与原来目标检测使用的利用人的先验知识,把预测和之前的proposal或Anchor做匹配的方式相差不多。只不过此处约束更强,一定要得到一个“一对一”的匹配关系,而不是像之前一样得到“一对多”的。最后只有一个框与ground truth框做对应,这样就不需要再进行NMS后处理。
最终知道N个框中有哪几个框是与ground truth框对应的,就可以计算真正的目标函数,然后用这个loss做梯度的反向传播,更新模型的参数。最终的目标函数如下式:
在这里插入图片描述
实验细节:

  1. 为了使分类的loss和出框的loss大概在同样的取值空间,计算时去掉了log
  2. 在出框的loss处,由于L_1 loss出框越大损失越大,而DETR对大物体检测友好,经常出大框。所以使用了L_1 loss与generalized IOU loss的结合,使得loss与框大小无关。

参考

  1. DETR论文精读
  2. 匈牙利算法

你可能感兴趣的:(1024程序员节,目标检测,算法,计算机视觉)