deepsort跟踪的基本流程

目录

本篇文章主要梳理deepsort跟踪的基本流程,不会具体讲解所有细节,但是基本的环节都不会遗漏。

基本概念

匈牙利算法
匈牙利算法也可以称之为最小权重匹配,给一个矩阵,每一行至多与一列匹配,每一列也至多与一行匹配,当所有行或者列都匹配结束后,使匹配的结果之和最小。

>>> cost = np.array([[4, 1, 3], [2, 0, 5], [3, 2, 2]])
>>> from scipy.optimize import linear_sum_assignment
>>> row_ind, col_ind = linear_sum_assignment(cost)
>>> col_ind
array([1, 0, 2])
>>> cost[row_ind, col_ind].sum()
5

卡尔曼滤波
待完善。。。

成员

1.tracks:指正在跟踪的目标Tentative,Confirmed ,Deleted

tracks=[track1,track2,track3,,,]

每个track属性:

self.mean = mean #[x,y,a,h,ax,ay,aa,ah]
self.covariance = covariance
self.track_id = track_id 
elf.hits = 1 #
self.time_since_update = 0 #上一次update距离当前帧的帧数,每次匹配成功后该值会自动清零,为匹配成功则自动加一。
self.state = TrackState.Tentative #一共有Tentative,Confirmed ,Deleted 三个状态,
self.features = [] # 目标特征
self._n_init = n_init # 连续成功匹配n_init次后,状态由Tentative转到Confirmed
self._max_age = max_age # 跟丢后保留的帧数

self._n_init的设计是为了防止误报,这个值可以是三,也可以是1。
每个track的状态变化条件

#匹配成功时
if self.state == TrackState.Tentative and self.hits >= self._n_init:
	self.state = TrackState.Confirmed
#匹配失败时
if self.state == TrackState.Tentative:
     self.state = TrackState.Deleted
elif self.time_since_update > self._max_age:
     self.state = TrackState.Deleted

2.detections
detections:指当前检测到的目标
属性:

self.tlwh = np.asarray(tlwh, dtype=np.float)
self.confidence = float(confidence)
self.feature = np.asarray(feature, dtype=np.float32)

3.tracker
tracker是指用于匹配tracks和detections的方法的概述。
主要包括predict和update两个方法,predict要用在update之前
predict的作用是通过卡尔曼滤波预测每一个track在当前帧的状态。

self.mean, self.covariance = kf.predict(self.mean, self.covariance)

update是tracker的重要操作,根据tracks在当前帧的状态和detections的状态进行匹配,并根据匹配结果去更新tracks,使tracks中的track的状态和数量进行相应的变化。

基本流程

1.预测每个track在当前帧的状态。

tracker.predict()

2.匹配

tracker.update(detections)
上一篇:俄罗斯方块


下一篇:异步fifo的设计