多目标跟踪算法DeepSort

多⽬标跟踪算法DeepSort
前⾔
本⽂分享多⽬标跟踪算法的经典算法DeepSort,它是⼀个两阶段的算法,达到实时跟踪效果,曾被应⽤于⼯业开发。DeepSort是基于Sort⽬标跟踪进⾏的改进,它引⼊深度学习模型,在实时⽬标跟踪过程中,提取⽬标的外观特征进⾏最近邻近匹配。
⽬的:改善有遮挡情况下的⽬标追踪效果;同时,也减少了⽬标ID跳变的问题。
核⼼思想:使⽤递归的卡尔曼滤波和逐帧的匈⽛利数据关联。
论⽂名称:(ICIP2017)Single-Simple Online and Realtime Tracking with a Deep Association Metric
⽬录
⼀、通常的多⽬标跟踪⼯作流程
(1)给定视频的原始帧;
(2)运⾏对象检测器以获得对象的边界框;
(3)对于每个检测到的物体,计算出不同的特征,通常是视觉和运动特征;
(4)之后,相似度计算步骤计算两个对象属于同⼀⽬标的概率;
(5)最后,关联步骤为每个对象分配数字ID。
⼆、前提知识:Sort 多⽬标跟踪
四个核⼼步骤
1. 获取⽬标检测框,( 检测器: Faster R-CNN 、 YOLO )。
2. 卡尔曼滤波器预测当前位置 ,获得预测框。
3. 进⾏相似度计算,计算 前⾯的帧和当前帧⽬标 之间的匹配程度。(只考虑运动信息)
男性功能内裤
4. 通过匈⽛利算法进⾏ 数据关联,为每个对象分配⽬标的 ID 。
它以“每个检测框”与“现有⽬标的所有预测框”之间的IOU作为前后帧之间⽬标关系的度量指标。
算法核⼼
卡尔曼滤波的预测和更新过程。
匹配的过程。
其中,卡尔曼滤波可以基于⽬标前⾯时刻的位置,来预测当前时刻的位置。匈⽛利算法可以告诉我们当前帧的某个⽬标,是否与前⾯帧的某个⽬标相同。
优点:Sort⽬标跟踪算法速度很快;在没有遮挡的情况下准确度很⾼。
缺点:它对物体遮挡⼏乎没有处理,导致ID switch 次数很⾼;在有遮挡情况下,准确度很低。
三、DeepSort 多⽬标跟踪
背景:DeepSort是基于Sort⽬标跟踪进⾏的改进,它引⼊深度学习模型,在实时⽬标跟踪过程中,提取⽬标的外观特征进⾏最近邻近匹配。
⽬的:改善有遮挡情况下的⽬标追踪效果;同时,也减少了⽬标ID跳变的问题。
核⼼思想:使⽤递归的卡尔曼滤波和逐帧的匈⽛利数据关联。
四、卡尔曼滤波器——跟踪场景定义
假定跟踪场景是定义在 8 维状态空间(u, v, γ, h, ẋ, ẏ, γ̇, ḣ)中, 边框中⼼(u, v),宽⾼⽐ γ,⾼度 h 和和它们各⾃在图像坐标系中的速度。
这⾥依旧使⽤的是匀速运动模型,并把(u,v,γ,h)作为对象状态的直接观测量。
在⽬标跟踪中,需要估计⽬标的以下两个状态:
·
均值(Mean):包含⽬标的位置和速度信息,由 8 维向量(u, v, γ, h, ẋ, ẏ, γ̇, ḣ)表⽰,其中每个速度值初始化为 0。均值 Mean 可以通过观测矩阵 H 投影到测量空间输出(u,v,γ,h)。
· 协⽅差(Covariance):表⽰估计状态的不确定性,由 8x8 的对⾓矩阵表⽰,矩阵中数字越⼤则表明不确定性越⼤。
4.1 卡尔曼滤波器——预测阶段
·step1:⾸先利⽤上⼀时刻 k-1 的后验估计值,通过状态转移矩阵 F 变换,得到当前时刻 k 的先验估计状态
远红外纺织品检测其中,状态转移矩阵 F如下:
·step2:然后使⽤上⼀时刻 k-1 的后验估计协⽅差来计算当前时刻 k 的先验估计协⽅差
通过上⼀时刻的后验估计均值和⽅差 估计当前时刻的先验估计均值x和协⽅差P
实现代码如下:
def predict(self, mean, covariance):
# mean, covariance 相当于上⼀时刻的后验估计均值和协⽅差
std_pos = [
self._std_weight_position * mean[3],
self._std_weight_position * mean[3],
1e-2,
self._std_weight_position * mean[3]]
std_vel = [
self._std_weight_velocity * mean[3],pe导电母粒
led发光棒self._std_weight_velocity * mean[3],
1e-5,
self._std_weight_velocity * mean[3]]
# 初始化噪声矩阵 Q
motion_cov = np.diag(np.square(np.r_[std_pos, std_vel]))
# x' = Fx
mean = np.dot(self._motion_mat, mean)
# P' = FPF^T + Q
covariance = np.linalg.multi_dot((
self._motion_mat, covariance, self._motion_mat.T)) + motion_cov
# 返回当前时刻的先验估计均值 x 和协⽅差 P
return mean, covariance
4.2 卡尔曼滤波器——更新阶段
step1:⾸先利⽤先验估计协⽅差矩阵 P 和观测矩阵 H 以及测量状态协⽅差矩阵 R 计算出卡尔曼增益矩阵 K
step2:然后将卡尔曼滤波器的先验估计值 x 通过观测矩阵 H 投影到测量空间,并计算出与测量值 z 的残差 y
step3:将卡尔曼滤波器的预测值和测量值按照卡尔曼增益的⽐例相融合,得到后验估计值 x
step4:计算出卡尔曼滤波器的后验估计协⽅差
卡尔曼滤波器更新阶段,代码实现:
def update(self, mean, covariance, measurement):
# 将先验估计的均值和协⽅差映射到检测空间,得到 Hx' 和 HP'
projected_mean, projected_cov = self.project(mean, covariance)
chol_factor, lower = scipy.linalg.cho_factor(
projected_cov, lower=True, check_finite=False)
# 计算卡尔曼增益 K
kalman_gain = scipy.linalg.cho_solve(
(chol_factor, lower), np.dot(covariance, self._update_mat.T).T,
check_finite=False).T
# y = z - Hx'
innovation = measurement - projected_mean
# x = x' + Ky
new_mean = mean + np.dot(innovation, kalman_gain.T)
# P = (I - KH)P'
new_covariance = covariance - np.linalg.multi_dot((
kalman_gain, projected_cov, kalman_gain.T))
# 返回当前时刻的后验估计均值 x 和协⽅差 P
return new_mean, new_covariance
总结⼀下:
运钞箱在⽬标跟踪中,需要估计⽬标的以下两个状态:
· 均值(Mean):包含⽬标的位置和速度信息,由 8 维向量(u, v, γ, h, ẋ, ẏ, γ̇, ḣ)表⽰,其中每个速度值初始化为 0。均值 Mean 可以通过观测矩阵 H 投影到测量空间输出(u,v,γ,h)。
· 协⽅差(Covariance):表⽰估计状态的不确定性,由 8x8 的对⾓矩阵表⽰,矩阵中数字越⼤则表明不确定性越⼤。
水稻脱粒机predict 阶段和 update 阶段都是为了计算出卡尔曼滤波的估计均值 x 和协⽅差 P,不同的是前者是基
于上⼀历史状态做出的先验估计,⽽后者则是融合了测量值信息并作出校正的后验估计。
五、匈⽛利匹配——跟踪场景定义
解决卡尔曼滤波器的预测状态和测量状态之间的关联,可以通过构建匈⽛利匹配来实现。
两个状态关联
卡尔曼滤波器的预测状态,后验的结果
测量状态,检测器的结果。
两个指标来实现关联
运动信息(⽤“马⽒距离”来计算)
外观特征(⽤“余弦距离” 来计算)
最后,使⽤线性加权和,将两个指标结合起来。
5.1、匈⽛利匹配——马⽒距离关联运动状态
马⽒距离⼜称为协⽅差距离,是⼀种有效计算两个未知样本集相似度的⽅法,度量预测和检测的匹配程度。为了整合物体的运动信息,使⽤了预测状态和测量状态之间的(平⽅)马⽒距离:

本文发布于:2024-09-22 07:08:11,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/164125.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:状态   估计   跟踪   计算   标的   测量
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议