一、一些预备知识点:关于多目标跟踪的实现方式一般为Tracking By Detecting;
Step1:使用目标检测算法将每帧中感兴趣的目标检测出来,得到对应的(位置坐标, 分类, 可信度),假设检测到的目标数量为M;
Step2:通过某种方式将Step1中的检测结果与上一帧中的检测目标(假设上一帧检测目标数量为N)一一关联起来。换句话说,就是在M*N个Pair中找出最像似的一对组合。
检测算法有很多种,你可以用到目前比较火的深度学习的Faster-RCNN算法来检测目标,也可以使用传统的方法来对多目标进行检测
数据关联方法也有很多种:(数据关联需要把前后两帧的bbox颜色,ID对应起来,不是简单的检测出目标)
1.常见的计算两帧中两个目标之间的欧几里得距离(平面两点之间的直线距离),距离最短就认为是同一个目标,然后通过匈牙利算法找出最匹配的Pair。
2.使用IOU进行计算,如果前后帧的bounding box的交并比接近1,则证明前后两帧的这个检测目标是同一目标,就能关联起来。
但单纯利用前后帧的目标检测,然后再将前后帧的检测到的目标进行数据关联会遇到一点问题。
如上图,实线框表示目标在第一帧的位置,虚线框表示目标在第二帧的位置。当目标运行速度比较慢的时候,通过之前的跟踪方式可以很准确的关联(A, A’)和(B, B’)。但是当目标运行速度很快(或者隔帧检测)时,在第二帧中,A就会运动到第一帧中B的位置,而B则运动到其他位置。这个时候使用上面的关联方法(IOU)就会得到错误的结果。
二、所以我们需要解决当目标物体运动时,物体追踪会失败的问题。所以提出来了基于轨迹预测的跟踪方式;
基于轨迹预测的跟踪方式的核心思想是:
使用faster-RCNN(或其他检测算法)检测第一帧的目标-->将检测的目标经过卡尔曼滤波预测下一帧的轨迹状态(u,v,r,h)-->再使用faster-RCNN检测第二帧的目标-->将检测到的第二帧目标与预测的轨迹状态进行配对,(例如如果两者IOU接近1,则代表上帧目标与此帧对应成功)
重复此过程,其中:faster-RCNN用于帧帧检测目标,卡尔曼滤波用于预测。匈牙利算法(或IOU等方法)用于前后帧数据关联。
这样再回到之前说过的因为目标前后帧运动过快,导致使用传统的Tracking By Detecting会导致最终匹配失败。但是基于轨迹预测能够很好的解决这个问题,有了这个预测,就能将下一帧预测的目标状态与下一帧的检测出来目标进行对比关联,能够发现我下一帧检测出来的这个目标对应上一帧的目标是哪个;就能将两帧分别检测出来的目标联系起来。
参考:https://blog.csdn.net/ycc2011/article/details/84786924