【目标跟踪】一图看懂DeepSORT大流程
系列文章
简介
多目标跟踪,在DeepSORT提出之前是SORT算法(),但是它对身份变换的问题,仅仅采取框和框之间距离的匹配方式,没有考虑框内的内容,所以容易发生ID-switch,不过这个问题已经在2017年的论文中进行了解决,即我们今天要介绍的。
本文前提是需要对卡尔曼滤波器比较了解,如果不了解建议跳转:
DeepSORT流程图
名词解释
Detections:目标检测器得出的结果,有bboxs和分类、置信度。 Tracks:在整个跟踪流程中用于流转的一个对象,有这些重要属性: mean:八个值的均值,这八个值是center_x,center_y,aspect_ratio,h,v_center_x,v_center_y,v_aspect_ratio,v_h covariance:协方差矩阵 track_id:跟踪目标的id n_init:在track状态被设置为“Deleted”之前,连续错过的最大次数。 max_age:最大寿命,一个跟踪目标出现max_age次,会被删除。 feature:bbox中改对象的特征向量,每次update时这个list会增加一个元素。 hits:观测更新的总次数。 age:自第一次出现以来的总帧数。 time_since_update:自上次测量更新以来的总帧数。 state:1-Tentative创建的Track标为暂定 2-Confirmed已经确认过 3-Deleted Unmatched Detections:未匹配的Detections Unmatched Tracks:未匹配的Tracks Matched Tracks:已匹配的Tracks,匹配次数在3以下的是未确认状态-Unconfirmed,匹配超过3次变成已确认状态-Confirmed。 Confirmed:已经确认匹配的Tracks。 Unconfirmed:未确认匹配的的Tracks。
整体流程
重点节点解释
【1】KF预测 1.执行KF.predict,计算mean和covariance 2.寿命age+=1 3.time_since_update+=1,这个值执行KF.predict时+1,执行KF.update时设置成0 4.上一轮迭代传过来的Confirmed和Unconfirmed状态不变,Confirmed已经确定是被跟踪对象的送入【1】去跟新的Detections去匹配,没确认的Unconfirmed送入【3】去做IOU匹配。
【2】Cascade匹配,匹配tracks和detections 1.循环迭代max_age次,直到没有Unmatched Detections 2.利用每个bbox的特征向量计算cos距离 3.匈牙利算法做匹配,会得到三种结果unmatched_detections unmatched_tracks matched_tracks
【3】IOU匹配 IOU匹配沿用了SORT的做法,是将Cascade匹配中的判断距离的算法变成了IOU。 在Cascade匹配后加一个IOU匹配在为了处理剩下的没有匹配的Detections和Tracks,Cascade匹配可能发生漏检,某时刻,预测的轨迹tracks还在,但是检测器没有检测到与之对应的目标。 为什么会有detection匹配失败的情况呢? 可能某一时刻有一个物体是新进入的镜头(比如,之前一直只有三个物体,某时刻突然镜头中出现了第四个新物体),就会发生detection匹配不到tracks的情况,因为这个物体是新来的,在这之前并没有它的轨迹用于预测;还有一种情况就是物体长时间被遮挡,导致检测到的物体没有可以与之匹配的轨迹。 针对上述匹配失败问题,处理方法就是对匹配失败的tracks和匹配失败的detection进行IOU匹配。如果能匹配成功,则再进行更新,然后继续进行预测–观测–更新的追踪流程。
【5】KF Update 1.执行kf.update 2.将特征向量存入feature 3.hits += 1 4.time_since_update = 0 5.if hits>3:state=Confirmed