华文细黑做网站有版权吗品牌网站开发背景
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:51
当前位置: 首页 > news >正文
华文细黑做网站有版权吗,品牌网站开发背景,当涂 微网站开发公司,东莞网站建设方案服务本文来源公众号“DeepDriving”#xff0c;仅用于学术分享#xff0c;侵权删#xff0c;干货满满。
原文链接#xff1a;多目标跟踪算法之SORT
1 简介
SORT是2016年发表的一篇文章《Simple Online and Realtime Tracking》中提出的一个经典的多目标跟踪算法#xff0c;…本文来源公众号“DeepDriving”仅用于学术分享侵权删干货满满。
原文链接多目标跟踪算法之SORT
1 简介
SORT是2016年发表的一篇文章《Simple Online and Realtime Tracking》中提出的一个经典的多目标跟踪算法该算法结合常用的卡尔曼滤波器和匈牙利匹配算法实现了一个简单的在线多目标跟踪框架。由于其超简单的设计SORT可以以260 Hz的更新速率实现多目标跟踪远超当时其它的目标跟踪算法。 论文地址https://arxiv.org/abs/1602.00763
代码地址https://github.com/abewley/sort
2 具体实现
2.1 目标检测
SORT是一种采用Tracking-by-Detection策略的目标跟踪算法也就是说算法的输入数据来源于目标检测器其本身是不参与目标检测过程的。作者在论文里对比了以Faster-RCNN和ACF在PASCAL VOC数据集上的行人检测结果作为MDP和SORT跟踪算法的输入得出的结论是目标检测结果的好坏直接决定了目标跟踪的性能使用最好的目标检测器会得到最好的跟踪效果。 这也告诉我们一个道理解决问题要从源头开始。如果不从源头提升目标检测算法的性能花再多时间去提升目标跟踪的性能可能都是徒劳。
2.2 状态估计模型 如果对卡尔曼滤波器不了解可以看一下我之前整理的资料里面有卡尔曼滤波器的详细推导过程后续文章介绍。
2.3 数据关联
给已存在的目标分配当前帧检测到的边界框时目标在当前帧中的边界框是基于之前的状态预测出来的。所有当前帧检测的边界框与已存在目标做预测得到的边界框通过计算它们之间的IOU来求代价矩阵然后用匈牙利算法求解最优匹配结果。如果检测边界框与预测边界框匹配成功且它们之间的IOU值大于阈值IOU_min那么就认为它们是一对有效的匹配对否则是无效的。匹配成功后就可以基于检测的边界框对目标状态进行更新了。
作者发现采用IOU作为距离度量进行匹配可以隐式地解决由于传递目标引起的短期遮挡的问题。具体来说当一个目标被另一个物体覆盖时检测器只能检测到这个遮挡物体而检测不到被遮挡物体因为IOU距离有利于具有相似比例的检测框。这样的话遮挡物体可以正常被分配检测框去更新状态而被遮挡物体则不会受误分配带来的影响因为当前没有检测框会分配给它。
2.4 跟踪标识的创建和删除
当一个目标出现在图像中的时候我们需要为其创建一个全局唯一的身份标识ID反之当目标消失的时候就要销毁它的跟踪信息。 3 代码分析
3.1 算法整体流程
SORT算法的处理流程非常简单感兴趣的可以去看源码。下图是我整理的算法流程图 对当前帧的检测结果Detections和已存在的目标Tracker使用匈牙利算法进行匹配会出现三种情况 检测结果Detection未匹配成功那么就以该边界框的几何信息为初始状态去创建一个Tracker; 检测结果Detection与Tracker匹配成功那么就以该检测结果为观测值更新Tracker的状态 未匹配的Tracker前面说到T_Lost设置为1也就是只要一帧没匹配上该Tracker就会被删除。
3.2 卡尔曼滤波器
SORT的代码里创建了一个类KalmanBoxTracker用于对卡尔曼滤波器的状态进行管理卡尔曼滤波器使用的是filterpy.kalman包中的KalmanFilter官方文档地址为https://filterpy.readthedocs.io/en/latest/kalman/KalmanFilter.html。
3.2.1. 滤波器初始化 def init(self,bbox):# 创建卡尔曼滤波器时需设置状态向量和观测向量的维度self.kf KalmanFilter(dim_x7, dim_z4) # 状态转移矩阵self.kf.F np.array([[1, 0, 0, 0, 1, 0, 0],[0, 1, 0, 0, 0, 1, 0],[0, 0, 1, 0, 0, 0, 1],[0, 0, 0, 1, 0, 0, 0],[0, 0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 0, 1, 0],[0, 0, 0, 0, 0, 0, 1]])# 观测矩阵self.kf.H np.array([[1, 0, 0, 0, 0, 0, 0],[0, 1, 0, 0, 0, 0, 0],[0, 0, 1, 0, 0, 0, 0],[0, 0, 0, 1, 0, 0, 0]])# 测量噪声协方差矩阵self.kf.R[2:,2:] * 10.# 状态协方差矩阵变化率不可观测所以设置一个较大值表示其较大的不确定性self.kf.P[4:,4:] * 1000. self.kf.P * 10.# 过程噪声协方差矩阵self.kf.Q[-1,-1] * 0.01self.kf.Q[4:,4:] * 0.01#状态向量前面四个值用bbox初始化变化率设置为0self.kf.x[:4] convert_bbox_to_z(bbox)
3.2.2. 滤波器生命周期管理
滤波器生命周期的管理是通过几个变量来实现的KalmanBoxTracker创建的时候会初始化几个变量
self.time_since_update 0
self.hits 0
self.hit_streak 0如果Tracker匹配成功就会更新这几个变量的状态:
def update(self, bbox):self.time_since_update 0self.hit_streak 1如果Tracker做了一次预测同样会更新这几个变量的状态:
def predict(self):if (self.time_since_update 0):self.hit_streak 0self.time_since_update 1time_since_update表示距离上一次带观测值更新滤波器状态过去了多久hit_streak表示Tracker连续匹配成功并更新的次数一旦调用predict()函数对当前帧做了预测time_since_update就加一表示其已经对当前帧做过一次预测了。
在算法的处理类Sort中会对Tracker的这几个变量做判断 一个匹配成功的Tracker需要判断其是否还在“试用期”只有连续几帧都匹配成功才能使用它的跟踪信息
if (trk.time_since_update 1) and (trk.hit_streak self.min_hits or self.frame_count self.min_hits):ret.append(np.concatenate((d, [trk.id1])).reshape(1, -1))如果下一帧Tracker未匹配成功该Tracker就会被删除
if (trk.time_since_update self.max_age):self.trackers.pop(i)4 总结
SORT目标跟踪算法仅使用卡尔曼滤波器和匈牙利算法解决帧与帧之间的状态预测和数据关联问题跟踪的效果高度依赖于目标检测结果的好坏算法整体设计非常简单在速度和精度上取得较好的平衡主要体现一个“快”字。当然速度提升必然导致精度损失SORT的缺点在于仅仅使用物体的边界框进行跟踪而忽略其表面特征在复杂的场景中效果会比较差。另外SORT没有目标重识别过程一旦目标丢失就需要重新创建跟踪器去更新状态一帧未匹配成功就需要重新跟踪导致同一目标的ID频繁变换。
THE END !
文章结束感谢阅读。您的点赞收藏评论是我继续更新的动力。大家有推荐的公众号可以评论区留言共同学习一起进步。
- 上一篇: 华为云自助建站好不好济南知名网站建设平台
- 下一篇: 华夏运用网站南阳定制网站制作价格低
相关文章
-
华为云自助建站好不好济南知名网站建设平台
华为云自助建站好不好济南知名网站建设平台
- 技术栈
- 2026年03月21日
-
华为网站建设目标房屋设计装修app
华为网站建设目标房屋设计装修app
- 技术栈
- 2026年03月21日
-
华为网站建设和阿里云哪个好网页美工设计哪家好
华为网站建设和阿里云哪个好网页美工设计哪家好
- 技术栈
- 2026年03月21日
-
华夏运用网站南阳定制网站制作价格低
华夏运用网站南阳定制网站制作价格低
- 技术栈
- 2026年03月21日
-
化工建网站多少费用万能转账生成器app
化工建网站多少费用万能转账生成器app
- 技术栈
- 2026年03月21日
-
化工网站模板免费下载网站建设合同英文模板下载
化工网站模板免费下载网站建设合同英文模板下载
- 技术栈
- 2026年03月21日
