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

news2024/11/23 18:04:01

📢前言:本篇是关于如何使用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.coloradmin.cn/o/839732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

diffusion model2 扩散模型的文本信息融合、交叉注意力机制、lora

前言 在上一篇文章中,我们剖析了diffusion model的原理,而在这一篇文章中,我们探讨与扩散模型有关的其他话题,包括扩散模型的unet是如何在推理噪声的过程中,融入文本信息的考量?其原理为交叉注意力机制&am…

Kubernetes 整体架构介绍

架构图 Kubernetes 主要由以下几个核心组件组成: etcd 保存了整个集群的状态;kube-apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API 注册和发现等机制;kube-controller-manager 负责维护集群的状态&#xf…

【LeetCode】287. 寻找重复数

287 . 寻找重复数(中等) 方法 快慢指针 思路 要解决这道题首先要理解如何将输入的数组看作为链表。对于数组 nums 中的数字范围在 [1, n],考虑两种情况: 如果数组中没有重复的数字,以 [1, 3, 4, 2] 为例,将…

从8个新 NFT AMM,聊聊能如何为 NFT 提供流动性

DeFi 的出现,开启了数字金融民主化的革命。其中,通过 AMM 自由创建流动性池极大地增加了 ERC-20 Token 的流动性,并为一些长尾 Token 解锁了价值的发现,因而今天在链上可以看到各种丰富的交易、借贷和杠杆等活动。 而另一方面&am…

uni-app——下拉框多选

一、组件components/my-selectCheckbox.vue <template><view class"uni-stat__select"><span v-if"label" class"uni-label-text">{{label &#xff1a;}}</span><view class"uni-stat-box" :class"…

SpringBoot实现数据库读写分离

SpringBoot实现数据库读写分离 参考博客https://blog.csdn.net/qq_31708899/article/details/121577253 实现原理&#xff1a;翻看AbstractRoutingDataSource源码我们可以看到其中的targetDataSource可以维护一组目标数据源(采用map数据结构)&#xff0c;并且做了路由key与目标…

《华为认证》SR-MPLS-TE

实验需求&#xff1a;运营商网络配置SR-MPLS-TE&#xff0c;实现CE1和CE2之间的互访流量通过PE1-P2-P4-PE3。 步骤1&#xff1a;配置运营商网络的IGP协议&#xff08;本实验采用ISIS协议&#xff09; PE1&#xff1a; isis 1is-level level-2cost-style widenetwork-entity 49…

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

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

Python实现决策树算法:完整源码逐行解析

决策树是一种常用的机器学习算法&#xff0c;它可以用来解决分类和回归问题。决策树的优点是易于理解和解释&#xff0c;可以处理数值和类别数据&#xff0c;可以处理缺失值和异常值&#xff0c;可以进行特征选择和剪枝等操作。决策树的缺点是容易过拟合&#xff0c;对噪声和不…

云原生应用里的服务发现

服务定义&#xff1a; 服务定义是声明给定服务如何被消费者/客户端使用的方式。在建立服务之间的同步通信通道之前&#xff0c;它会与消费者共享。 同步通信中的服务定义&#xff1a; 微服务可以将其服务定义发布到服务注册表&#xff08;或由微服务所有者手动发布&#xff09;…

内网穿透:ngrok使用教程

一、前言 平时我们在本地8080端口创建一个服务的时候&#xff0c;都是使用localhost:8080访问我们的web服务。但是外网是不能访问我们的web服务的。这时&#xff0c;如果你要实现外网访问的功能就需要实现内网穿透&#xff0c;ngrok就是可以帮我们实现这个功能。 二、ngrok介…

岩土工程仪器多通道振弦传感器信号转换器应用于隧道安全监测

岩土工程仪器多通道振弦传感器信号转换器应用于隧道安全监测 多通道振弦传感器信号转换器VTI104_DIN 是轨道安装式振弦传感器信号转换器&#xff0c;可将振弦、温度传感器信号转换为 RS485 数字信号和模拟信号输出&#xff0c;方便的接入已有监测系统。 传感器状态 专用指示灯方…

unraid docker桥接模式打不开页面,主机模式正常

unraid 80x86版filebrowser&#xff0c;一次掉电后&#xff0c;重启出现权限问题&#xff0c;而且filebrowser的核显驱动不支持amd的VA-API 因为用不上核显驱动&#xff0c;解压缩功能也用不上&#xff0c;官方版本的filebrowser还小巧一些&#xff0c;18m左右 安装的时候总是…

QTableWidget对单元格(QWidget/QTableWidgetItem)的内存管理[clearContents()]

目录 现象结论代码验证clearContents() 会释放QTableWidgetItem 和QWidget 对象&#xff0c;但是不指向nullptrmemorytable.hmemorytable.cpp断点情况 验证clearContents()是延时释放QWidget 的而QTableWidgetItem 立即释放 现象 结论 clearContents() 会清除表格中的所有单元格…

小程序 view下拉滑动导致scrollview滑动事件失效

小程序页面需要滑动功能 下拉时滑动&#xff0c;展示整个会员卡内容&#xff0c; 下拉view里包含了最近播放&#xff1a;有scrollview&#xff0c;加了下拉功能后&#xff0c;scrollview滑动失败了。 <view class"cover-section" catchtouchstart"handletou…

eNSP:ospf和mgre的配置

实验要求&#xff1a; 第一步&#xff1a;路由、IP的配置 r1&#xff1a; <Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]sys r1 [r1]int loop0 [r1-LoopBack0]ip add 192.168.1.1 24 [r1-LoopBack0]int g0/0/0 [r1-GigabitEthernet0/0/0]ip a…

部署Tomcat和jpress应用

静态页面&#xff1a;静态页面是指在服务器上提前生成好的HTML文件&#xff0c;每次用户请求时直接返回给用户。静态页面的内容是固定的&#xff0c;不会根据用户的请求或其他条件进行变化。静态页面的优点是加载速度快&#xff0c;对服务器资源要求较低&#xff0c;但缺点是无…

git报错:Error merging: refusing to merge unrelated histories

碰对了情人&#xff0c;相思一辈子。 打命令&#xff1a;git pull origin master --allow-unrelated-histories 然后等一会 再push 切记不要有冲突的代码 需要改掉~

Spring Cloud Eureka 和 zookeeper 的区别

CAP理论 在了解eureka和zookeeper区别之前&#xff0c;我们先来了解一下这个知识&#xff0c;cap理论。 1998年的加州大学的计算机科学家 Eric Brewer 提出&#xff0c;分布式有三个指标。Consistency&#xff0c;Availability&#xff0c;Partition tolerance。简称即为CAP。…

一则简单代码的汇编分析

先通过Xcode创建一个terminal APP&#xff0c;语言选择C。代码如下&#xff1a; #include <stdio.h>int main(int argc, const char * argv[]) {int a[7]{1,2,3,4,5,6,7};int *ptr (int*)(&a1);printf("%d\n",*(ptr));return 0; } 在return 0处打上断点&…