数据关联是多目标跟踪任务中的关键步骤,其目的主要是为了进行帧与帧之间的多个目标的匹配,其中包括新目标的出现,旧目标的消失,以及前一帧与当前帧的行人id匹配。传统的数据关联方法多为运筹学方法,比较经典即为匈牙利算法和KM算法,接下来将详细介绍这两种算法。
在了解匈牙利算法与KM算法之前,我们需要了解一个概念“二分图”。简单来说就是两组集合U与V,其中U与V集合内部的点不能相互连通,但是U与V的点之间是可以联通的,如下图所示:
我们可以看到,二分图的结构与我们多目标跟踪任务的结构很相像,我们可以把U与V看成是多目标跟踪任务中的前一帧与当前帧的检测框集合,U与V之间的关联视为前一帧与当前帧的同一id目标的检测框的关联,这样我们需要做的就是将相邻两帧的目标检测框尽可能准确的两两匹配。为了解决这个问题,就需要用到匈牙利算法或者KM算法。
1.匈牙利算法(Hungarian Algorithm)
匈牙利算法是基于Hall定理中充分性证明的思想,它是部分图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法。
具体来说,匈牙利算法是一个递归过程,详细步骤如下:
(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换边,但是另一条便并不满足条件,这时我们再考虑将U中目标1进行更换匹配,但是发现也无法换边,这时我们就需要对进行减操作,即将所有冲突边对应的U中顶点权值减d,V中顶点权值加d
再进行匹配操作,这时发现U中目标3多了一条可以匹配的边,所以U中目标3与V中目标2匹配。
(3)最后进行U中目标4的匹配,与上述步骤相同,由于V中目标3已被匹配,所以再进行一系列的加减d操作,还是匹配失败,两轮以后U中目标4权值减为0,故放弃匹配目标4。
以上即为KM算法,总体来讲也是一个递归过程,核心思想与匈牙利算法一样,只不过引入了权值作为约束条件,可以使匹配成功率大大提高。
3 .小结
上述介绍了数据关联算法中的匈牙利算法和KM算法,具体实现起来并不复杂,另外常见的数据关联算法还有概率相关的算法,感兴趣的同学可以进一步研究。