IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> SORT算法- SIMPLE ONLINE AND REALTIME TRACKING -> 正文阅读

[数据结构与算法]SORT算法- SIMPLE ONLINE AND REALTIME TRACKING

本篇文章参考了如下文章:
https://blog.csdn.net/didiaopao/article/details/120272947
https://blog.csdn.net/HaoBBNuanMM/article/details/85555547
https://azusa.blog.csdn.net/article/details/106009021

首先我们需要明确目标跟踪和目标检测是两件不同的事

目标跟踪:把上一帧利用目标跟踪算法预测的目标跟踪边界框与当前帧目标检测算法检测到的边界框(Bounding Box)进行关联,找到最匹配的目标检测边界框,得到了这样一个目标检测BBox代表成功跟踪的BBox结果
在这里插入图片描述
SORT跟踪算法到底在干什么?(以单目标跟踪为例说明如下)

  • 假设T1时刻成功跟踪了某个单个物体,ID为1,绘制物体跟踪BBox(紫色)
  • T2时刻物体检测BBox总共有4个(黑色),预测T2时刻物体跟踪的BBox(紫色)有1个,解决紫色物体跟踪BBox如何与黑色物体检测BBox关联的算法,就是SORT物体跟踪算法要解决的核心问题
  • SORT关联两个BBox的核心算法是:用IOU计算Bbox之间的距离 + 匈牙利算法选择最优关联结果
    在这里插入图片描述
    以上图为例,多目标跟踪为例说明如下:
  • T1时刻已经成功跟踪了3个检体(不同颜色的BBox代表不同的物体ID)
  • T2时刻除了所有物体检测的新位置BBox(灰色),还要物体跟踪预测的Bbox(非灰的其它不同颜色BBox)与物体检测Bbox(灰色)关联,从而分辨出哪一个物体跟踪的Bbox对应哪一个物体检测的BBox,从而产生T2时刻的物体跟踪BBox结果(包括新增物体跟踪器跟踪T2中新检测到的物体)
  • T3时刻如果被追踪的物体发生了遮挡(红框BBox的物体),那么要继续能找到该物体并追踪 (避免ID Switch)

物体跟踪有几个主要任务以及它们对应的解决方案

  • 检测-深度学习的各种检测网络来实现物体检测
  • 跟踪预测与关联-Tracking的算法来实现物体追踪(比如 本文介绍的SORT)
  • ID Switch- Tracking的算法来解决遮挡物体(比如 deep SORT)
  • ReID(跨摄像头发现和跟踪同一个物体,避免ID switch) - 比如 deep SORT

SORT

SORT的核心是卡尔曼滤波和匈牙利算法
关键步骤:轨迹卡尔曼滤波预测→ 使用匈牙利算法将预测后的tracks和当前帧中的detecions进行匹配(IOU匹配) → 卡尔曼滤波更新

卡尔曼滤波分为两个过程:预测更新。SORT引入了线性速度模型与卡尔曼滤波来进行位置预测,先进行位置预测然后再进行匹配。运动模型的结果可以用来预测物体的位置。

匈牙利算法解决的是一个分配问题,用IOU距离作为权重(也叫cost矩阵),并且当IOU小于一定数值时,不认为是同一个目标,理论基础是视频中两帧之间物体移动不会过多。在代码中选取的阈值是0.3。scipy库的linear_sum_assignment都实现了这一算法,只需要输入cost_matrix即代价矩阵就能得到最优匹配。

卡尔曼滤波的作用: 卡尔曼滤波的作用就是利用当前的一些列运动变量去预测下一时刻的运动变量,注意:第一次的检测结果用来初始化卡尔曼滤波的运动变量
匈牙利算法的作用: 匈牙利算法主要解决合理分配的问题,将该帧下目标检测模型预测得到的边界框与卡尔曼滤波预测得到的边界框做分配,从而让实现让卡尔曼滤波预测得到的边界框找到和自己最匹配的检测框,以达到最终效果
在这里插入图片描述

SORT算法的工作流程如下:

  • (1)将第一帧检测到的结果创建其对应的Tracks。将卡尔曼滤波的运动变量初始化,通过卡尔曼滤波算法生成预测框
  • (2)将该帧下目标检测算法预测得到的bbox和上一帧通过Tracks预测得到的bbox进行IOU匹配,再通过IOU匹配结果计算其代价矩阵(cost matrix, 计算方式是1-IOU)
  • (3)将(2)中得到的所有代价矩阵作为匈牙利算法的输入,得到线性匹配结果,这时我们得到的结果有三种,第一种是Tracks失配(Unmatched Tracks),直接将适配的Tracks删除;第二种是Detections失配(Unmatched Detections),将这样的Detections初始化为一个新的Tracks(new Tracks);第三种是目标检测框和卡尔曼滤波算法预测的边界框匹配成功,这说明我们前一帧和后一帧追踪成功,将其对应的Detections通过卡尔曼滤波更新其对应的Tracks变量。
  • (4)反复循环(2)-(3)步骤,直至视频帧结束。

SORT算法的缺点:

  • 对于物体遮挡几乎没有处理,导致ID switch次数很高
  • 有遮挡的情况下跟踪准确度很低
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:39:43  更:2022-03-03 16:41:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 15:27:02-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码