多目标跟踪之数据关联(匈牙利匹配算法和KM算法)
ref:
https://zhuanlan.zhihu.com/p/110590953
https://www.zhihu.com/search?type=content&q=%E5%8C%88%E7%89%99%E5%88%A9%E5%8C%B9%E9%85%8D%20%E8%B7%9F%E8%B8%AA%E5%85%B3%E8%81%94
首先要明确概念:
数据关联是多目标跟踪任务中的关键步骤,其目的主要是:为了进行帧与帧之间多个目标的匹配,其中包括新目标的出现,旧目标的消失,以及前一帧与当前帧的(行人)ID的匹配。传统的数据关联方法多为运筹学方法,比较经典的即为匈牙利匹配算法和KM算法,接下来详细介绍这两种算法。
在介绍匈牙利匹配算法和KM算法之前,我们需要了解一个“二分图”的概念。简单来说就是,两组集合U和V,U和V各自内部的点不能相互连通,但是U和V之间的点可以连通,看示意图:
可以看到,二分图的结构与我们多目标跟踪任务的结构很相像,我们可以把U与V看成是多目标跟踪任务中的前一帧与当前帧的检测框集合,U与V之间的关联视为前一帧与当前帧的同一id目标的检测框的关联,这样我们需要做的就是将相邻两帧的目标检测框尽可能准确的两两匹配。为了解决这个问题,就需要用到匈牙利算法或者KM算法。
1. 匈牙利算法(Hungarian Algorithm)
匈牙利算法是基于Hall定理(该定理用于判定二分图是否完全匹配)中充分性证明的思想,它是部分图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。
具体来说,Hungarian Algorithm是一个递归过程,详细步骤如下:
(1)初始化二分图:即将当前帧中可能与上一帧中目标匹配的检测框确认
(2)按照ID顺序依次进行匹配,首先将可能与上一帧目标1相匹配的当前帧的目标1进行匹配(红色代表已经匹配)
(3)接着对目标2进行匹配
(4)接着对3进行匹配,这时我们发现当前帧中可以与目标3进行匹配的目标1,2已经被匹配过了,为了使目标3可以匹配到目标,我们尝试将之前U中匹配到目标1的目标与另一个目标匹配(黄色代表取消匹配)
这时我们发现U中的目标1可以匹配到的V中的目标2也已经被U中的目标2匹配到了,那么同理,我们在将U中的目标2更换匹配目标。
这时我们再返回上一步,即可将U中的目标1,2,3均匹配到目标
(5)接着对目标4进行匹配,与上述步骤相同,但是最后并没有找到能够符合要求的匹配方法,所以U中的目标4在这一帧中消失,同时当前帧中的目标4被视为新出现的目标。
以上为匈牙利算法的流程,简单来说就是一个递归过程,尽可能找到让上一帧与当前帧目标一对一的匹配。该算法对红线连接的准确率要求很高,也就是对运动模型和表观模型要求较高,需要将置信度较高的边送入匈牙利算法进行匹配,才能得到比较好的结果。
2. KM算法(Kuhn-Munkres Algorithm)
上面介绍的匈牙利算法存在一个很大的问题,就是该算法将每个目标的匹配对象视为平级,然而在实际的跟踪任务中,肯定有些匹配的框比较接近目标,有些框与目标相差较大,这时候如果将其视为同级会影响匹配准确度,所以在匈牙利算法的基础上又提出了KM算法,这也是实际任务中比较常用的算法,KM算法解决的是带权二分图的最优匹配问题,即引入了权值这一概念。具体步骤如下:
(1)初始化权值二分图:对每个顶点赋值(顶标),将左边的顶点赋值为与其相连边的最大权值,右边的顶点赋值为0。
(2)匹配原则为只和权重与左边分数(顶标)相同的边进行匹配,若找不到边匹配,则将此条路径对应左边顶点的顶标减d,右边顶标加d(这里我们取d为0.1)。所以首先对U中的目标1,我们选取第一条满足条件的边
U中的目标2,同理找到满足条件的边:
接着对于U中的目标3,我们发现满足条件的V中的目标1已经被匹配,我们首先想让U中的目标3换边,但是另一条边并不满足条件(另一条边权重0.8,不满足权重最大边匹配的条件)。
然后再来考虑U中的目标1,我们同样想更换目标1的边,同样的问题,与目标1匹配的另一条边权重只有0.6,不是最大权重边,同样违背了权重最大的匹配条件。
遇到这种情况,就需要进行加减操作了,即将所有冲突边对应的U中的顶点权值减d,V中顶点权值加d。
(这里需要注意一下,按照最大权重的边匹配规则,U中的目标1和目标3会同时连接到V中的目标1,这时产生了两条冲突的边,在V中只对应一个顶点,就是目标1,所以V中只有目标1减了d。)
然后继续进行匹配操作,由于权重改变,我们发现V中目标3多了一条可以匹配的边,所以U中目标3与V中目标2进行匹配。
(我觉得这个图画错了,应该是左3和右2连接)
(4)最后进行U中目标4的匹配,与上述步骤相同,由于V中目标3已被匹配,所以再进行一系列的加减d操作,还是匹配失败,两轮以后U中目标4权值减为0,故放弃匹配目标4。
以上即为KM算法,总体来讲也是一个递归过程,核心思想与匈牙利算法一样,只不过引入了权值作为约束条件,可以使匹配成功率大大提高。
3. 小结
上述介绍了数据关联算法中的匈牙利算法和KM算法,具体实现起来并不复杂,另外常见的数据关联算法还有概率相关的算法,感兴趣的同学可以进一步研究。
数据关联的最大瓶颈是计算量爆炸的问题。
如果我们回顾一下数据关联面对的问题,问题可以总结为:在所有可能关联中,找到概率最大的一个或者几个。但很多时候,我们并不需要计算所有的可能性,只需要用一个方法找到最优解即可。从这个角度,问题变成了一个分配问题求最优解的过程。常用的求解算法有:
- 单个最优:匈牙利算法,拍卖算法 等
- 多个最优:Murty's 等
- 多个次优:Gibbs 采样 等
这里已经提到多个解的情况了,意味着有些时候我们要保留多个结果,接下来我就会介绍数据关联的最重要的两个传统方法:联合概率数据关联(JPDA)和多重假说追踪(MHT)。GNN用贪婪算法的思维,只保留一个最优关联,缺点就是抛弃了除了最优以外的所有信息,当多个最优的关联方式的概率相差不大的时候,很容易出错。而JPDA在PDA的基础上,选出多个关联方式,并且用联合概率的方式融合它们得到一个新的联合概率,以此来利用更多的信息。但是融合也会产生问题,虽然利用了所有信息,但是融合后的结果却不是准确结果了。相比于JPDA的融合,MHT选择直接保留多种关联方式,来真正得到准确结果。但与此同时,当每个时刻保留超过一种关联方式的时候,额外的基于各个时间的关联步骤产生了,因此假说的概念被引入。举个例子,总共两个时刻1和2,时刻1有五个关联方式保留下来,时刻2也是五个关联方式,当描述对于时刻1和2整体的数据关联时,我们必须从时刻1和2分别挑出一种关联,组成对于整体关联描述的一种方案。这样的方案,被称之为假说,总共的假说个数是 。同时,MHT给出了计算每个假说概率的方法。回到上面的简单多目标情景,使用GNN和JPDA时,随着时间增长的计算次数的增长是加法: ;MHT的计算次数随着时间的增长方式是乘法: 。随着时间的增长,计算量将大到无法处理。
尽管MHT有着更精确的结果,但是计算量直接大到爆炸。尽管实际情况中,应用了很多预处理和后处理步骤来删减计算的数量,但是面对复杂的情景,要实现实时计算还是几乎不可能。更别提,大多数传统方法都假定目标的数量是固定的,关联的过程不存在目标新生和消失的情况,即使有些考虑变化数量的目标,但也只是更大的计算量。
此时,数据关联急需一个新的理论框架,由此而生的是随机有限集(RFS)理论。在RFS理论框架下,用集合来描述所有目标状态空间和测量空间。集合中元素的数量和状态都可以用一个RFS概率密度来描述。基于RFS理论而产生的方法有 概率假说密度(PHD),多重伯努利(MB),带标签的RFS滤波器,以及它们的各种变体。其中一种变体,广义标签多重伯努利(GLMB),由多目标追踪领域大佬Ba-Ngu Vo提出,甚至可以实现长时间追踪一百万数量以上的目标。当然还有更新的
总结来说,数据关联在多目标追踪问题中是非常重要且困难的一步,传统方法被计算量限制,新理论仍然处于一个探索阶段,相信随着数据关联研究的突破,多目标追踪问题的处理可以被进一步完善。