编程语言
首页 > 编程语言> > 匈牙利算法 & KM算法

匈牙利算法 & KM算法

作者:互联网

匈牙利算法 & KM算法


Reference:

  1. 带你入门多目标跟踪(三)匈牙利算法&KM算法
  2. 算法学习笔记(5):匈牙利算法

匈牙利算法(Hungarian Algorithm)与 KM 算法(Kuhn-Munkres Algorithm)主要用于解决一些与二分图匹配有关的问题,这种问题在解决多目标跟踪中的数据关联时会比较常见。

二分图(Bipartite graph) 是一类特殊的图,它可以被划分为两个部分,每个部分内的点互不相连。下图是典型的二分图:
在这里插入图片描述
可以把二分图理解为视频中连续两帧中的所有检测框,第一帧所有检测框的集合称为 U U U,第二帧所有检测框的集合称为 V V V。同一帧的不同检测框不会为同一个目标,所以不需要互相关联,相邻两帧的检测框需要相互联通,最终将相邻两帧的检测框尽量完美地两两匹配起来,而求解这个问题的最优解时就要用到匈牙利算法或者KM算法。

1. 匈牙利算法(Hungarian Algorithm)

匈牙利算法是一种在多项式时间内求解任务分配问题的组合优化算法,并推动了后来的原始对偶方法。美国数学家哈罗德·库恩于1955年提出该算法。此算法之所以被称作匈牙利算法,是因为算法很大一部分是基于以前匈牙利数学家 Dénes Kőnig 和 Jenő Egerváry 的工作之上创建起来的。

在这里插入图片描述
以上图为例,假设左边的四张图是我们在第 N N N 帧检测到的目标 X X X,右边四张图是我们在第 N + 1 N+1 N+1 帧检测到的目标 Y Y Y。红线连起来的图,是算法认为的同一行人可能性较大的目标。由于算法并不是绝对理想的,因此并不一定会保证每张图都有一对一的匹配,事实上会有一对二甚至一对多的、多对多的情况发生。这时该怎么获得最终的一对一结果呢?

最终的结果是我们匹配出了三对目标,由于候选的匹配目标中包含了许多错误的匹配红线(边),所以匹配准确率并不高。可见匈牙利算法对红线连接的准确率要求很高,也就是要求我们运动模型、外观模型等部件必须进行较为精准的预测,或者预设较高的阈值,只将置信度较高的边才送入匈牙利算法进行匹配,这样才能得到较好的结果。

匈牙利算法的流程大家看到了,有一个很明显的问题相信大家也发现了,按这个思路找到的最大匹配往往不是我们心中的最优。匈牙利算法将每个匹配对象的地位视为相同,在这个前提下求解最大匹配。这个和我们研究的多目标跟踪问题有些不合,因为每个匹配对象不可能是同等地位的,总有一个真实目标是我们要找的最佳匹配,而这个真实目标应该拥有更高的权重,在此基础上匹配的结果才能更贴近真实情况。

KM 算法就能比较好地解决这个问题,我们下面来看看 KM 算法。

2. KM 算法(Kuhn-Munkres Algorithm)

KM算法解决的是带权二分图的最优匹配问题

还是用上面的图来举例子,这次给每条连接关系加入了权重,也就是我们算法中其他模块给出的置信度分值。

在这里插入图片描述

至此KM算法流程结束,三对目标成功匹配,甚至在左3目标预测不够准确的情况下也进行了正确匹配。可见在引入了权重之后,匹配成功率大大提高

最后还有一点值得注意,匈牙利算法得到的最大匹配并不是唯一的,预设匹配边、或者匹配顺序不同等,都可能会导致有多种最大匹配情况,所以有一种替代KM算法的想法是,我们只需要用匈牙利算法找到所有的最大匹配,比较每个最大匹配的权重,再选出最大权重的最优匹配即可得到更贴近真实情况的匹配结果。但这种方法时间复杂度较高,会随着目标数越来越多,消耗的时间大大增加,实际使用中并不推荐。

标签:匹配,Algorithm,匈牙利,KM,目标,算法
来源: https://blog.csdn.net/qq_28087491/article/details/121150172