一、整体把握
目标在每帧中的轨迹状态是如何表示的?
作者用8维向量[u,v,r,h,x’,y’,r’,h’]来表示目标所处的轨迹状态, u,v,r,h分别对应目标的中心坐标、r是长宽比、h是高。而x’,y’,r’,h’这四个参数代表目标对应的运动速度(可将其看成前四个参数分别的运动数据)。该轨迹向量同时提供了目标在当前帧的bbox信息以及bbox的运动信息,为预测bbox下一帧可能的位置提供了数据。
轨迹如何具体理解?
可以将轨迹理解成在不同时刻的位置序列[u,v,r,h]。
预测下一帧中目标的bbox是如何做到的?
利用轨迹状态中的参数,用卡尔曼滤波对相应目标预测轨迹。卡尔曼滤波采用的为匀速模型和线性观测模型,其观测变量为u,v,r,h这四个变量。
如何确定轨迹的出现和终止?(轨迹处理的细节)
跟踪目标的实际过程中,会出现旧的目标(已在轨迹池中的目标)走出视野,新的目标进入视野,因此每个轨迹的出现和终止是非常重要的问题。
显而易见,若旧目标丢失就终止其轨迹,那如何确定目标丢失了呢?
作者对轨迹池中的每个目标都增加一个记录其最后一次匹配成功到当前时刻的时长变量a,若a大于最大允许阈值Amax则认为该目标已丢失,需终止。
那新的目标是如何确定并处理的呢?
首先检测器会将所有检测到的目标(仅当前帧通过目标检测网络检测得出,将其称为detection)与轨迹池中已有的轨迹进行匹配,而出现的新目标在理想情况下是匹配不到已有轨迹的,因此匹配后多余的detections被视为可能的新目标(那为何不直接确定为新目标呢?我想作者应该是考虑到这种情况除了是新目标出现以外,还可能是已有的目标在该帧由于一些其他原因导致没匹配上(但是下几帧就有可能再次匹配上),因此如果直接确定为新目标会导致ID-Switch大大增加),将其标注为’tentative’,然后观察对应目标在接下来连续几帧内(设定一个阈值)是否能连续匹配成功,若是,则认为新轨迹产生,将其标注为’confirmed’;若否,则标注为’deleted’。
二、数据关联具体细节
匹配指的是当前有效轨迹(tentative/confirmed)和检测到的目标之间的轨迹之间进行的相似度计算和分配问题。
SORT中匹配的相似度计算是仅根据预测框和当前轨迹框的IOU的重合度作为度量,在DeepSORT中除了对运动信息的利用还加入的表观信息,通过计算表观相似度来衡量是否是同一个目标。
这时可能有人会问:既然相似度计算出来了,我们直接将最相似的轨迹直接匹配不就好了么,为什么还要用匈牙利算法来分配呢?这个问题很简单,假设有两个detection,都与a轨迹有着最高的相似度,那该如何判断到底给a轨迹分配给谁,这时就要用到类似匈牙利算法来分配。
运动匹配度
这点思路基本和SORT一致,都是利用卡尔曼滤波器在上一帧对当前帧预测的轨迹与当前帧检测到的bbox信息进行一个对比,如果距离小于一定值,则认为两个匹配,运动匹配度,作者用到了马氏距离,公式如下:
d(i,j)表示第j个detection和第i条轨迹之间的运动匹配度;其中,y_i表示当前的预测观测量,d_j表示detection当前的轨迹信息,S_i是轨迹由卡尔曼滤波器预测得到的在当前时刻观测空间的协方差矩阵。
设定阈值,比较detection和轨迹之间的距离,筛选出匹配好的结果。
外观匹配度
只是用bbox信息(运动匹配)的缺点是没有利用外观信息,对遮挡问题无从解决,可能会导致大量的ID-Switch。作者使用深度网络提取detection和轨迹状态中的bbox包含的外观特征向量(轨迹中包含最后100个外观),并取它们特征向量之间的最小余弦距离作为detection和轨迹之间的外观相似度。
其中r_j是detection的表观,r_k^((i))是第k条轨迹的第i个表观,R_i是该轨迹的最后一百个表观。
距离组合
作者发现当相机大量运动的时候,λ=0是个合理的选择(后续对比实验作者也是设置为0),也就是关联度量仅使用表观信息,但仍先用马氏距离来筛选出不可行的分配。
三、级联匹配
为何引入级联匹配?
考虑如下情况:当两个预测轨迹同时竞争一个detection时,如果其中一个轨迹受到长期遮挡,那么马氏距离更有利于这条长期遮挡的轨迹,因为连续预测不更新会使得协方差矩阵S_i增大,进而使得马氏距离变小,这显然是不合理的。
级联匹配是啥?
简单而言就是解决上述问题,上面问题出现的最大原因就是每次分配的时候不同遮挡时间的轨迹一并考虑,因此,作者的解决方案就是每次分配的时候仅考虑同遮挡时间的轨迹,这就是级联匹配的核心思路。
级联匹配的整个流程?
总流程:首先是得到下帧的追踪框集合T和下帧的检测框集合D,设置最大的Amax为轨迹最大允许丢失匹配的帧数。通过加权的距离度量公式得到成本矩阵,再通过级联条件,设定阈值分别对外观和位置因素进行计算,满足条件则返回1,否则返回0。然后初始化匹配矩阵为空,初始化未匹配矩阵等于D。然后,通过匈牙利算法,对于每个属于追踪框集合的元素T,在检测框里面查找成本最低且满足阈值过滤条件的检测框作为匹配结果,同时更新匹配矩阵和非匹配矩阵。
来源:CSDN
作者:学学没完
链接:https://blog.csdn.net/weixin_42907473/article/details/104597144