【Yolov5+Deepsort】训练自己的数据集(1)| 目标检测追踪 | 轨迹绘制

📢前言:本篇是关于如何使用YoloV5+Deepsort训练自己的数据集,从而实现目标检测与目标追踪,并绘制出物体的运动轨迹。本章讲解的为第一个内容:简单介绍YoloV5+Deepsort中所用到的目标检测,追踪及sort&Deppsort算法。本文中用到的数据集均为自采,实验动物为斑马鱼。文尾附Deepsort原论文。

💬源码如下:

GitHub - mikel-brostrom/yolo_tracking: A collection of SOTA real-time, multi-object tracking algorithms for object detectors

GitHub - Sharpiless/Yolov5-Deepsort: 最新版本yolov5+deepsort目标检测和追踪,能够显示目标类别,支持5.0版本可训练自己数据集

目录

Ⅰ简述目标检测

0x00 什么是目标检测

0x01 一般步骤

0x02 常用算法

Ⅱ 简述目标追踪

0x00 什么是目标追踪

0x01 一般步骤

0x02 常用算法

Ⅲ sort算法

0x00 卡尔曼滤波

0x01 匈牙利算法

Ⅳ Deepsort

0x00 算法的一般流程


Ⅰ简述目标检测

0x00 什么是目标检测

目标检测是计算机视觉领域的一个重要任务,它旨在识别图像或视频中的特定对象,并通过在目标周围绘制边界框(bounding box)来标记它们的位置。

这种技术在许多实际应用中都有广泛的应用,如自动驾驶、安防监控、智能交通、人脸识别、工业质检等。

0x01 一般步骤

1. 输入图像:

  • 首先,目标检测算法会接收一个输入图像或视频帧。

2. 特征提取

  • 然后,算法会通过卷积神经网络(CNN)等方法对图像进行特征提取。这些特征可以是边缘、纹理、颜色等图像的局部或全局特征。

3. 候选区域生成

  • 接下来,目标检测算法会根据特征图选择一些可能包含目标的候选区域,通常称为区域提议(Region Proposals)。常用的方法包括Selective Search、R-CNN等。

4. 目标分类与定位:

  • 在得到候选区域后,算法会对每个区域进行目标分类和边界框的回归。目标分类是指确定区域中是否包含目标(如车、人、动物等),而边界框回归则是调整候选框的位置和大小以更准确地围绕目标。

5. 后处理:

  • 最后,算法会进行一些后处理步骤,例如非极大值抑制(NMS),以剔除重叠的边界框并保留最可信的检测结果。

目标检测有许多不同的算法和架构,其中一些著名的方法包括Faster R-CNN、YOLO、SSD(SINGLE SHOT MULTIBOX DETECTOR)、RetinaNet等。每种方法都有其优缺点和适用场景,取决于应用需求和计算资源。

0x02 常用算法

RCNN系列:

  • RCNN(Region-based Convolutional Neural Networks): 首先通过选择性搜索(Selective Search)算法提取候选区域,然后对每个候选区域进行卷积神经网络(CNN)特征提取和目标分类。

  • Fast R-CNN: 在RCNN的基础上引入ROI池化(ROI Pooling)层,使得特征提取更高效。

  • Faster R-CNN: 引入RPN(Region Proposal Network),将候选区域的提取和目标分类合并为一个端到端的网络,大大加快了检测速度。

YOLO系列

  • YOLOv1:将目标检测看作回归问题,通过一个CNN直接预测目标的边界框和类别概率。
  • YOLOv2 / YOLO9000:在YOLOv1基础上改进,引入Darknet-19网络和多尺度预测,提高检测精度。YOLO9000是在YOLOv2的基础上通过联合训练多个数据集实现了多标签分类和检测。
  • YOLOv3:进一步改进YOLOv2,采用更深的Darknet-53网络和FPN,提高小目标检测性能。

SSD(Single Shot Multibox Detector):一种单阶段目标检测算法,通过在不同尺度的特征图上预测边界框和类别概率来实现目标检测。

RetinaNet:结合了Focal Loss和FPN,用于解决目标检测中类别不平衡问题,提高了检测性能。 

EfficientDet:高效的目标检测算法,通过改进网络结构和优化目标函数,实现高精度和高效率的目标检测。

Ⅱ 简述目标追踪

0x00 什么是目标追踪

目标追踪是计算机视觉领域的一项任务,旨在从视频序列中连续地跟踪特定目标的运动轨迹。与目标检测不同,目标追踪要在时间上保持目标的一致性,而不仅仅是在单个图像中检测目标的存在。

0x01 一般步骤

1. 目标初始化: 首先,目标追踪算法会在视频序列的第一帧中检测和识别目标,并为目标分配唯一的ID。这个过程称为目标初始化。

2. 目标预测: 在之后的视频帧中,目标追踪算法会使用目标在上一帧中的位置和运动信息,对目标在当前帧的位置进行预测。通常,预测可以基于一些简单的运动模型或者基于目标的历史运动轨迹。

3. 目标更新: 接下来,算法会使用目标检测或特征匹配等技术来确定当前帧中目标的准确位置。这个过程可以使用像素级的区域匹配、相关滤波器、深度学习特征提取等方法。

4. 目标关联: 一旦目标在当前帧中被确定,算法需要将其与之前帧中的目标进行关联,以保持目标的一致性。这可能涉及到目标ID的跟踪,确保目标的唯一标识在整个视频序列中保持一致。

5. 后处理: 最后,目标追踪算法会进行一些后处理步骤,例如滤波或者平滑处理,以减少噪声或者不稳定性,并提高追踪的准确性和稳定性。

目标追踪在许多实际应用中都有广泛的应用,例如视频监控、自动驾驶、视频分析、虚拟现实等。

0x02 常用算法

卡尔曼滤波器(Kalman Filter): 卡尔曼滤波是一种递归的状态估计算法,通常用于目标运动预测和位置估计。它结合了观测数据和系统动力学模型,对目标的状态进行预测和更新。

粒子滤波器(Particle Filter): 粒子滤波是一种蒙特卡洛方法,它使用一组随机粒子来估计目标的状态。粒子滤波在非线性系统和非高斯噪声下表现较好。

单目标跟踪器:

  • MedianFlow: 基于KLT(Kanade-Lucas-Tomasi)光流和匹配的简单单目标跟踪器。
  • KCF(Kernelized Correlation Filters): 使用核相关滤波器来实现快速的单目标跟踪。
  • TLD(Tracking-Learning-Detection): 结合目标检测和跟踪,能够在目标丢失时重新检测目标。
  • MIL(Multi Instance Learning): 采用多实例学习方法跟踪目标。

多目标跟踪器:

  • SORT(Simple Online and Real Time Tracking): 在多目标跟踪中,通过卡尔曼滤波和匈牙利算法进行目标关联。
  • DeepSORT: 在SORT的基础上加入深度学习特征,提高目标关联的准确性和鲁棒性。
  • IOU Tracker: 使用目标边界框的IoU(Intersection over Union)来进行目标关联的简单方法。

深度学习方法:

  • Siamese网络: 使用孪生网络进行目标匹配,常用于目标跟踪任务。
  • SiamRPN、SiamFC、SiamMask: 基于Siam网络的不同变种,用于目标跟踪和目标分割。

在线学习方法:

  • 在线提升: 在线增强学习器,不断地更新模型来适应目标外观的变化。
  • Online SVM(Support Vector Machine): 在线学习SVM,用于目标分类和跟踪。

Ⅲ sort算法

SORT(Simple Online and Realtime Tracking)是一种用于多目标跟踪的简单而有效的算法,它在实时场景下能够进行在线目标追踪。

SORT算法基于卡尔曼滤波匈牙利算法的多目标跟踪器。

0x00 卡尔曼滤波

卡尔曼滤波是一种递归状态估计算法,主要用于估计目标在时间上的运动状态,例如位置和速度。

  • 在SORT算法中,卡尔曼滤波的作用是用于对目标的状态进行预测和更新
  • 在目标追踪过程中,卡尔曼滤波能够对目标的运动轨迹进行预测,并根据实际的检测结果对目标状态进行更新。

卡尔曼滤波的作用可分为两个主要方面:

1.目标预测

  • 在目标追踪过程中,目标在每一帧中都会进行位置预测。卡尔曼滤波通过使用之前帧中的目标状态和运动信息,预测目标在下一帧中的位置和速度。这样能够使得目标跟踪器对目标的未来位置有一个较好的估计。

2.状态更新

  • 在进行目标关联时,SORT算法会使用匈牙利算法将当前帧的检测结果与之前帧中的目标进行关联。关联的结果可能会包含一些噪声或误匹配,而卡尔曼滤波可以在一定程度上消除这些误差。通过将检测结果与卡尔曼滤波预测的状态进行融合,得到目标的最终位置和速度,并对目标状态进行更新。

0x01 匈牙利算法

匈牙利算法是用于解决二分图最优匹配问题的经典算法,它能够在多个候选匹配中找到最佳的匹配组合,以最小化总匹配成本。  

  • 在SORT算法中,匈牙利算法的作用是将当前帧的目标检测结果与之前帧中的跟踪目标进行关联,以确定目标在连续帧中的唯一ID。

SORT中的匈牙利算法的具体作用如下:

1.目标关联

  • 在每一帧中,进行目标检测,得到新的目标边界框。同时,之前帧中的每个已跟踪目标也有一个预测位置。
  • SORT算法会使用匈牙利算法,将当前帧的检测结果与之前帧中的目标进行关联。将目标检测与预测的目标进行匹配,得到最佳的匹配组合。

2.成本计算

  • 匈牙利算法会计算目标检测与预测目标之间的成本,成本通常由目标边界框之间的IoU(Intersection over Union)计算得出。IoU度量了两个边界框的重叠程度,可以用来评估目标检测与预测目标的相似程度。

3.最优匹配

  • 匈牙利算法的目标是找到一种最佳匹配,使得总成本最小。通过最小化目标检测与预测目标之间的成本,找到最佳的匹配组合,确定目标在连续帧中的唯一ID。

4.目标ID更新

  • 在完成匈牙利算法后,已跟踪目标的ID会随着匹配的结果进行更新。如果一个目标检测与之前的某个目标匹配,该目标将被赋予相应的ID,从而在多个连续帧中保持一致的跟踪。

🚩简单来说:

在sort算法中,

卡尔曼滤波的主要作用是利用当前时刻的运动变量来预测下一时刻的运动变量,同时第一次的检测结果用于初始化卡尔曼滤波的运动状态

匈牙利算法主要作用是将一组检测框和卡尔曼预测的框进行匹配,以找到卡尔曼预测的框与其最匹配的检测框,从而实现目标的追踪

Ⅳ Deepsort算法

DeepSORT(Deep Learning-based SORT)是基于深度学习的多目标跟踪算法,是SORT的改进版。

0x00 算法的一般流程

1.目标检测

  • 在每一帧中,使用目标检测算法(如YOLO、Faster R-CNN、SSD等)来检测图像中的目标,并得到目标的边界框(bounding box)和类别信息。

2.深度特征提取

  • 对于每个检测到的目标,使用预训练的深度学习模型(如ResNet、MobileNet等)来提取目标区域的特征向量。这些特征向量能够表示目标的语义信息和视觉特征。

3.目标关联

  • 利用匈牙利算法将当前帧的检测结果与之前帧中的跟踪目标进行关联。匈牙利算法通过最小化匹配的总成本来找到最佳的匹配,成本通常由目标检测与预测目标之间的外观相似性和运动一致性计算得出。

4.卡尔曼滤波预测

  • 对于每个已跟踪的目标,使用卡尔曼滤波来预测其下一帧的位置。卡尔曼滤波利用目标的历史运动信息和观测数据,预测目标在下一帧中的位置和速度。

5.特征匹配

  • 将当前帧的检测结果与之前帧中的跟踪目标进行特征匹配。采用余弦相似度或欧氏距离等度量方法,比较特征向量之间的相似性。

6.外观相似性分数计算

  • 计算目标检测结果与跟踪目标之间的外观相似性分数。综合考虑特征匹配和运动一致性,为每个匹配组合分配相似性分数。

7.最终关联

  • 根据外观相似性分数,选择最佳的目标关联组合。这样能够确定目标在连续帧中的唯一ID,实现多目标的连续跟踪。

8.卡尔曼滤波更新

  • 对于成功匹配的目标,使用卡尔曼滤波来更新其状态。通过融合检测结果和卡尔曼滤波预测的信息,得到目标的最终位置和速度,并对目标状态进行更新。

9.状态估计不确定性更新

  • 根据卡尔曼滤波的结果,更新目标的状态估计不确定性。这样可以根据目标的可信度来调整匹配的权重。

10.目标确认和删除

  • 对于一些没有成功匹配到检测结果的目标,或者匹配结果置信度较低的目标,进行确认和删除操作。可以根据跟踪器的置信度阈值来决定是否保留目标。

11.轨迹维护

  • 对于成功匹配的目标,更新目标的运动轨迹。

12.重复

  • 对于下一帧,重复上述过程,进行目标检测、特征提取、目标关联、更新等操作。

END


📝因为作者的能力有限,所以文章可能会存在一些错误和不准确之处,恳请大家指出!

 📃参考文献:

[1] Simple Online and Realtime Tracking with a Deep Association Metric

[1703.07402] Simple Online and Realtime Tracking with a Deep Association Metric (arxiv.org)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/79267.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Spring Boot的在线视频教育培训网站设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频: 基于Spring Boot的在线视频教育培训网站设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java sp…

Python IDE

Python IDE 本文为大家推荐几款款不错的 Python IDE(集成开发环境),比较推荐 PyCharm,当然你可以根据自己的喜好来选择适合自己的 Python IDE。 PyCharm PyCharm 是由 JetBrains 打造的一款 Python IDE。 PyCharm 具备一般 Pyt…

Android优化篇|网络预连接

作者:苍耳叔叔 一个示例 前后分别去请求同一个域名下的接口,通过 Charles 抓包,可以看到 Timing 下面的时间: 第二次请求时,DNS、Connect 和 TLS Handshake 部分都是 -,说明没有这部分的耗时,…

一个.NET开发的Web版Redis管理工具

今天给大家推荐一款web 版的Redis可视化工具WebRedisManager,即可以作为单机的web 版的Redis可视化工具来使用,也可以挂在服务器上多人管理使用的web 版的Redis可视化工具。 WebRedisManager基于SAEA.Socket通信框架中的SAEA.RedisSocket、SAEA.WebApi两…

BS框架说明

B/S架构 1.B/S框架,意思是前端(Browser 浏览器,小程序、app、自己写的)和服务器端(Server)组成的系统的框架结构 2.B/S框架,也可理解为web架构,包含前端、后端、数据库三大组成部分…

实际工作中通过python+go-cqhttp+selenium实现自动检测维护升级并发送QQ通知消息(程序内测)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 首先,今年比较忙没有多余时间去实操创作分享文章给大家,那就给大家分享下博主在实际工作中的一点点内容吧,就当交…

数据结构基础

目录 1、线性表 1.1、数组 1.2、链表 1.3、栈 1.4、队列 2、散列表 3、树 3.1、二叉树 3.1.1、存储原理 3.1.2、红黑树 a、平衡二叉树和红黑树 b、红黑树特征 c、左旋 d、右旋 e、颜色反转 3.1.3、二叉堆 3.1.4、二叉树的遍历 a、深度优先遍历 b、广度优先遍…

洛谷 P3375 【模板】KMP 字符串匹配

题目描述 给出两个字符串 s1​ 和 s2​,若 s1​ 的区间 [l,r] 子串与 s2​ 完全相同,则称 s2​ 在 s1​ 中出现了,其出现位置为 l。 现在请你求出 s2​ 在 s1​ 中所有出现的位置。 定义一个字符串 s 的 border 为 s 的一个非 s 本身的子串…

4 三组例子,用OpenCV玩转图像-AI-python

读取,缩放,旋转,写入图像 首先导入包,为了显示导入matplotlib/为了在matplotlib显示 导入CV2/查看版本 导入图片/查看图片类型 图片数组 数组大小 对于opencv通道顺序蓝色B、绿色G、红色R matplotlib通道顺序为 红色R、绿色G、蓝…

无涯教程-Perl - delete函数

描述 此函数从哈希中删除指定的键和关联的值,或从数组中删除指定的元素。该操作适用于单个元素或切片。 语法 以下是此函数的简单语法- delete LIST返回值 如果键不存在,并且与已删除的哈希键或数组索引关联的值,则此函数返回undef。 Perl 中的 delete函数 - 无涯教程网无…

机器学习---概述(二)

文章目录 1.模型评估1.1 分类模型评估1.2 回归模型评估 2. 拟合2.1 欠拟合2.2 过拟合2.3 适当拟合总结: 3.深度学习3.1层次(Layers):3.2 神经元(Neurons):3.3 总结 1.模型评估 模型评估是机器学…

【Python】Locust持续优化:InfluxDB与Grafana实现数据持久化与可视化分析

目录 前言 influxDB 安装运行InfluxDB 用Python 上报数据到influxdb ocust 数据写入到 influx Locust的生命周期 上报数据 优化升级 配置Grafana 总结 资料获取方法 前言 在进行性能测试时,我们需要对测试结果进行监控和分析,以便于及时发现问…

项目实战 — 消息队列(4){消息持久化}

目录 一、消息存储格式设计 🍅 1、queue_data.txt:保存消息的内容 🍅 2、queue_stat.txt:保存消息的统计信息 二、消息序列化 三、自定义异常类 四、创建MessageFileManger类 🍅 1、约定消息文件所在的目录和文件名…

迅为全国产龙芯3A5000电脑运行统信UOS、银河麒麟、loongnix系统

iTOP-3A5000开发板采用全国产龙芯3A5000处理器,基于龙芯自主指令系统 (LoongArch) 的LA464微结构,并进一步提升频率,降低功耗,优化性能。在与龙芯3A4000处理器保持引脚兼容的基础上,频率提升至2.5GHZ,功耗降…

谷粒商城第九天-解决商品品牌问题以及前后端使用检验框架检验参数

目录 一、总述 二、商品分类问题 三、前端检验 四、后端检验 五、总结 一、总述 在完成完商品分类的时候,后来测试的时候还是发现了一些问题,现在将其进行解决,问题如下: 1. 取消显示的时候,如果取消了显示&…

九度OJ → 题目1368:二叉树中和为某一值的路径 ← DFS

【题目来源】 由于九度OJ(http://ac.jobdu.com/)已经永久关闭,故无法在其上进行在线提交代码。 幸运的是,在AcWing上有此题目“二叉树中和为某一值的路径”,但描述有些不同。可详见:https://www.acwing.com…

redis 集群 1:李代桃僵 —— Sentinel

目前我们讲的 Redis 还只是主从方案,最终一致性。读者们可思考过,如果主节点凌晨 3 点突发宕机怎么办?就坐等运维从床上爬起来,然后手工进行从主切换,再通知所有的程序把地址统统改一遍重新上线么?毫无疑问…

绿色项目管理:为环境和效益双赢

绿色项目管理:为环境和效益双赢 在21世纪的今天,我们正面临着各种全球性的环境问题,从气候变化到资源枯竭。作为项目经理,我们有责任和机会确保我们的项目对环境的影响最小,并在可能的情况下为环境做出积极的贡献。 …

P9503 『MGOI』Simple Round I | B. 魔法照相馆

题目背景 照片留下了值得留恋的瞬间,但对于魔法士来说最重要的是向前看。——殿堂魔法士 W 题目描述 小 M 正在准备入学所必需的魔法士证件,因此他来到了纵深巷的魔法照相馆。 在等待的时候,小 M 注意到魔法照相馆有三个幕布,颜…

建筑行业是不是一个夕阳产业?一建值得考吗?

建筑行业行业是不是夕阳产业,提出这个问题的人已经了解了现在建筑行业的不景气,从3年疫情到放开疫情管控,2023年是疫情放开后最好的一年。 建筑上下游各产业链行业失业率攀升,房屋建筑土地没人卖,多修建公共建筑&…