多目标追踪算法deepsort(1)算法流程

您所在的位置:网站首页 心水的意思是什么饭圈 多目标追踪算法deepsort(1)算法流程

多目标追踪算法deepsort(1)算法流程

#多目标追踪算法deepsort(1)算法流程| 来源: 网络整理| 查看: 265

参考资料:

deepsort paper: https://arxiv.org/abs/1602.00763

deepsort github:GitHub - ZQPei/deep_sort_pytorch: MOT tracking using deepsort and yolov3 with pytorch

kaleman filter:https://blog.csdn.net/u010720661/article/details/63253509

Deepsort算法代码流程

一。初始化

重要的初始化参数有:max_dist(特征最大值余弦距离), min_confidence(检测框最小置信度),最大nms_max_overlap(非极大值抑制最大重叠), max_iou_distance=0.7(最大交并比距离), max_age(确定态追踪器未匹配帧数超过这个值被删除), n_init=3(临时态追踪器连续匹配帧数吵超过这个转为确定态), nn_budget(每个轨迹保存过去nn_budget帧的状态)

二。预测

进行kalman filter预测

首先调用deepsort类的self.tracker.predict,之后调用tracker类的track.predict(self.kf),最后调用track类的self.mean, self.covariance = kf.predict(self.mean, self.covariance) ,其原理为

利用kalman filter由k-1的状态和协方差预测k时刻的状态和协方差。

状态包括:bbox的中心坐标 (cx, cy),宽高比r,高h,以及各自的速度变化值,x = [cx, cy, r, h, vx, vy, vr, vh],协方差为8*8的对角矩阵,分别代表状态各个变量的方差。在tracker初始化时对状态和协方差进行初始化,状态速度变量初始化值为0,协方差根据h初始化为一个较小值。

预测时的Fk矩阵为对角线和次次次次对角线为1,利如cx(k+1) = cx(k) + vx(k),u为0,Q类似于初始值,依赖于h的一个小噪声。

三。匹配

首先调用deepsort类的self.tracker.update(detections)

3.1进行匹配:(调用tracker类的matches, unmatched_tracks, unmatched_detections = self._match(detections))

3.1.1首先对confirmed tracker的进行级联匹配

(先调用linear_assignment类的matching cascade函数,在上一函数内调用linear_assignment类的min_cost_matching(计算代价矩阵和卡余弦距离阈值的函数),在上一函数内调用NearestNeighborDistanceMetric类的distance计算余弦距离,利用gate_cost_matrix计算马氏距离并卡马氏距离阈值)

在confirmed tracker中更新代数(time_since_update)小的优先匹配(调用min_cost_matching,metric为余弦),首先计算n个detection和m个tracker中k个feature的余弦距离(1-向量内积),每个detection和一个tracker的余弦距离为与其k个feature距离的最小值,构成的代价矩阵(cost_matrix)维度为(m*n)。之后计算由卡尔曼滤波预测的位置信息和真实位置之间马氏距离,并将马氏距离超过阈值的匹配对去掉(将其余弦距离设置为1e5)。之后将代价矩阵中大于最大余弦距离的值设去掉(方法同上)。之后将代价军阵送入匈牙利算法进行匹配(scipy.optimize.inear_sum_assignment),得到成功匹配对,和未匹配的detection和tracker。

3.1.2其次对于iou candidate进行IOU匹配(linear_assignment.min_cost_matching(iou_matching.iou_cost)

unconfirmed tracker和unmatched tracker中更新代数为1的tracker组成iou candidate,进行IOU匹配(min_cost_matching,metric为iou),得到代价矩阵,同样进行匈牙利匹配。

3.1.3最后返回匹配的tracker和detection,未匹配的tracker,和未匹配的detection。

四。更新

根据匹配结果更新状态(self.tracks[track_idx].update(self.kf, detections[detection_idx]))

4.1对匹配上的tracker,利用kalman滤波器更新状态,其中tentative态连续匹配上3帧进入confirmed态.

kalman filter更新原理为:首先将预测状态映射至与预测同一维度(KalmanFilter.project),Hk维度为4*8的单位阵,相当于只取位置信息,之后计算卡尔曼增益并进行更新(KalmanFilter.predict)

4.2对未匹配的tracker,对于tentative态的tracker,将其删除;对于confirmed态的tracker。若其time_since_update>70,则将其删除。

4.3对未匹配的detection,则初始化一个新的tracker。self._initiate_track()



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3