【计算机视觉+Tensorflow】SORT目标跟踪算法的讲解(图文解释 超详细)

简介: 【计算机视觉+Tensorflow】SORT目标跟踪算法的讲解(图文解释 超详细)

觉得有帮助请点赞关注收藏~~~

一、目标跟踪简介

目标跟踪算法可以进行轨迹特征的分析和提取,以弥补目标检测的不足;有效地去除误检,提高检测精度,为进一步的行为分析提供基础。例如,在自动驾驶系统中,目标跟踪算法要对运动的车、行人等目标进行跟踪,根据运动轨迹对它们在未来的位置、速度等信息作出预判。

跟踪就是在视频的不同帧中定位某一目标,从算法的设计角度来说分为两个阶段

1:预测第S帧图像中目标A 目标B 在第S+N帧图像中可能出现的位置 即候选区域

2:第S+N帧的候选区域是否为第S帧图像中目标A 目标B 如果是则跟踪成功

二、SORT目标跟踪算法

对于多目标的SORT算法,目标跟踪算法是将各帧的目标检测结果分别赋予跟踪序号的过程,在不同视频帧出现的同一目标需要赋予相同的跟踪序号,算法流程图如下

下面对算法流程中介绍的卡尔曼滤波器和匈牙利算法进行详细介绍

1:卡尔曼滤波器

卡尔曼滤波器不需要存储大量的历史数据,只需要保留系统前一时刻的状态,根据系统的状态空间向量模型准确预测当前状态,该算法计算量小,在速度上占有优势,而且是一个纯时域的滤波器,占用内存小,在实际工程上应用广泛,是解决实时性问题的理想选择

卡尔曼滤波器流程分为两个步骤:状态预测和状态更新。卡尔曼滤波器首先要计算系统状态的先验估计,利用前一时刻系统的状态估计值,计算当前时刻系统状态和误差协方差的预测值,当前时刻的观测值进入系统后,融入新的观测值和先验估计构造后验估计,对模型进行更新,从而更加准确地预测系统下一时刻状态估计

在大多数情况下,同一个目标的运动状态在较短时间可以近似为匀速直线运动,采用线性的卡尔曼滤波器依据中心坐标、尺寸大小比例以及对下一帧的预测信息等为每个目标建立运动模型,进而对下一帧目标的位置进行估计来加快目标跟踪的计算速度

三、基于匈牙利算法的数据关联

匈牙利算法是一种组合优化算法,用于求解指派问题,例如把N项任务分配给N个人时,列出所有组合情况的总薪酬开销可求最小值,但是当任务数和人数变大时,难以列出所有的分配情况,可利用匈牙利算法进行任务分配,实现最合理的资源配置

目标跟踪的主要任务之一就是将视频中不同帧的目标进行匹配,如下图所示,卡尔曼滤波器预测得到目标跟踪框之后,计算出目标跟踪框和目标检测框之间的相交度,即上一帧预测得到的跟踪框与当前帧中的检测框之间的交集面积与并集面积的比值,利用匈牙利匹配算法对检测框与预测框的相交度组成的状态关联矩阵进行指派,实现目标检测结果与跟踪序列之间的匹配

匈牙利算法步骤如下

1:给定N个目标检测框分配N个目标跟踪框,可以用一个N×N的开销矩阵来表示这一指派问题

2:对开销矩阵的各行进行操作 找出每一行中值最小的元素,然后把该行所有元素都减去这一最小值

3:对开销矩阵的各列进行操作,找出每一列中值最小的元素,然后把该列所有元素都减去这一最小值

4:用尽量少的横线或者竖线覆盖矩阵中的所有0

5:从第4步中未被覆盖的元素中找到最小值,然后把所有元素都减去这一最小值 给直线交叉点的元素加上这一最小值,被覆盖元素的最小值实际上是完成所有任务过程中不可避免的开销,这一步的作用是增加开销矩阵中0的个数,使得任务更易分配

6:重复第三步和第四步 直到所有任务都被分配

创作不易 觉得有帮助请点赞关注收藏~~~

 

相关文章
|
3月前
|
机器学习/深度学习 存储 监控
yolov5单目测距+速度测量+目标跟踪(算法介绍和代码)
yolov5单目测距+速度测量+目标跟踪(算法介绍和代码)
198 1
|
4月前
|
机器学习/深度学习 算法 TensorFlow
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
65 0
文本分类识别Python+卷积神经网络算法+TensorFlow模型训练+Django可视化界面
|
3月前
|
机器学习/深度学习 编解码 监控
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-1
计算机视觉实战项目4(单目测距与测速+摔倒检测+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A_路径规划+行人车辆计数+动物识别等)-1
107 1
|
3月前
|
机器学习/深度学习 监控 算法
计算机视觉实战项目(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别)
计算机视觉实战项目(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别)
50 1
|
3月前
|
机器学习/深度学习 编解码 算法
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)-2
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)-2
69 1
|
3月前
|
机器学习/深度学习 监控 算法
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)-1
计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)-1
49 0
|
5天前
|
人工智能 搜索推荐 算法
sort-04-heap sort 堆排序算法详解
这是一个关于排序算法的系列文章摘要,包括了10篇关于不同排序算法的链接,如冒泡排序、快速排序、选择排序、堆排序等。堆排序是一种基于比较的排序算法,利用了近似完全二叉树的结构并满足最大堆或最小堆的性质。最大堆中,每个节点的值都大于或等于其子节点。文章详细解释了最大堆的概念、节点访问方式以及堆的操作,包括堆调整和堆排序的过程,并通过图解展示了堆排序的具体步骤。此外,还提供了一个Java实现的堆排序代码示例。整个排序系列来源于一个开源项目,读者可以通过链接查看完整内容。
sort-04-heap sort 堆排序算法详解
|
5天前
|
搜索推荐 算法 Java
sort-01-bubble sort 冒泡排序算法详解
这是一个关于排序算法的系列文章摘要。作者整理了10种不同的排序算法,包括冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序、归并排序、计数排序、桶排序和大文件外部排序。文章详细介绍了冒泡排序的工作原理、流程,并提供了代码实现,强调了在实现中考虑的改进点,如统一接口、实用性增强和日志输出。此外,还提供了一个排序接口和工具类以方便使用,并通过测试代码和日志展示了排序过程。整个系列旨在帮助读者理解和掌握排序算法。相关代码已开源在GitHub。
|
2月前
|
存储 算法 JavaScript
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(二)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
29 0
|
2月前
|
算法 搜索推荐 程序员
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)(一)
【C++ 泛型编程 入门篇】 C++ 中的泛型算法 STL(sort,find)
35 0