基于yolov8+deepsort的多目标跟踪完成行人、车辆计数和越界检测

 一 、基本概念:

1. MOT(多目标跟踪):每一帧定位每一个目标,并绘制其运动轨迹;

2. DeepSORT通过融合动作和外观信息来实现更准确的关联,它使用ReID网络来提前目标外观特征,提升了对缺失和遮挡部分的鲁棒性

 二、整体流程

(1)、Input->初始化metrix->yolov8进行detection得到bbox和features->筛选掉confidence小于yaml文件设定的min_confidence的目标->NMS(optional)->track.predict->track.update->输出bbox.identities;

(2)、DeepSort进行Matching Cascade:对detection使用匈牙利算法(门控余弦距离)进行匹配级联,同时使用卡尔曼滤波结合检测到的数据对上一层的detection进行更新,然后将未匹配的、高度匹配的和更新的轨迹进行IOU匹配,对连续三帧都未匹配到的轨迹进行筛选过滤。总体流程如图

三、环境搭建

1) 下载Visual Studio 社区版

下载链接:下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux

2) cuda、cudnn、Anaconda的安装和环境变量的配置

3) 使用安装虚拟环境: conda create -n mypytorch python=3.9;

4) 下载并安装Git,在Git CMD窗口中执行以下代码完成yolov8的克隆:              git clone GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite

5) 创建并进入虚拟环境,然后在ultralytics 目录下安装相关库:pip install -e .

6) 现在yolov8的预训练权重,并放在新建的weights文件夹下,https://pan.baidu.com/s/1pnNvCc4lOURUVuS-W6fBMg

提取码:xmzy

7) 下载yolov8-deepsort.zip,并解压链接:https://pan.baidu.com/s/1pnNvCc4lOURUVuS-W6fBMg 提取码:xmzy

8) 在虚拟环境下,进入easydict路径:python setup.py install

四、执行各个程序

(一)、yolov8-deepsort\demo.py文件:该文件主要作用是使用一个目标检测器Detector(yolov8)和一个目标跟踪器objtrackder来跟视频的每个目标,并为每个目标绘制一条轨迹。处理完的视频会存为一个新的文件。

1).首先定义一个Point类,用于表示一个二维点,Detections类,用于保存所有目标检测的结果;

2).使用VideoCapture打开视频,读取每一帧,使用目标跟踪器更新被跟踪目标的位置信息。对应被跟踪的目标,计算他们的中心位置,然后在目标的轨迹中添加新的位置,然后绘出轨迹(draw_trail函数)并删除那行没有被跟踪到的目标轨迹;

(二)、yolov8-deepsort\count.py文件:这个文件主要用来检测和跟踪物体,并在他们穿过特定线条时进行计数。

1).导入相关的库:numpy、objtracker、objdetector、cv2;

2).循环处理所有检测到的目标:首先对detections中的每个目标(由xyxy,confidence,classes_id,objtracker_id组成)进行迭代;

3).对每个目标计算其框的中心点,然后使用is_in_line 函数用来检测某个点是否在一条由pt1和pt2定义的线的一侧,该函数应用的计算原理是向量的外积(在二维空间中,如果有两个向量A(X1,y1),B(x2,y2),则他们的外积=x1*y2-x2*y1),如果结果为正,则A在B 的顺时针方向,否则为逆时针方向

4). 处理新检测到的目标:如果检测到的当前帧在上一帧中不存在,则创建新的状态条目,并判断方向;

5). 处理当前检测目标:如果目标没有越过线,则跳过处理下一个目标;如果目标已经越线,会根据目标的移动方向跟新进入和退出的计数,并更新目标状态和方向;

(三)、yolov8-deepsort\zone.py文件:该文件主要用于监视视频中的人物是否进入特定区域,主要用cv2中来进行视频处理和渲染。

1).使用numpy来进行数值计算,使用drawAndFillPolygon函数画出多边形并进行填充;

2).定义isInsidePolygon函数,来判断是否进入特定区域(使用了射线交叉算法,即点在多边形内部算法);

3). 每个被跟踪的目标绘制出一个圆,形成一条轨迹,轨迹的最大长度为50帧,超过50帧后最早位置被删除;

(四)、yolov8-deepsort\objdetector.py文件:主要用于目标检测,依赖于torch和ultralytics库。利用预训练的yolo模型进行检测,并返回检测到的目标边界框和类别信息。

(五)、yolov8-deepsort\objtracker.py文件:首先创建一个deepsort目标追踪器,定义plot_bboxes函数绘制边界框和相关信息,然后定义了update函数,该函数接受目标检测器和图像作为输入,并返回绘制了边界框和和标识跟踪ID 的图像及边界框列表。

(六)、yolov8-deepsort\deep_sort.py文件:包含DeepSORT类,用于目标识别和跟踪。定义_get_features函数,用来提取特定部位(目标物体)的特征;

(七)、yolov8-deepsort\feature_extractor.py文件:该函数主要调用transform.ToTensor函数对图片进行预处理,然后调用__call__方法来完成的图像的特征向量;

(八)、yolov8-deepsort\model.py文件:该文件定义了Net类,即深度神经网络模型(包括Conv、BN、ReLU、Pooling、FC结构层)。此模型用于目标检测和行人重识别(ReID)任务;

(九)、prepare_car.py/prepare_person.py文件:该脚本用来处理车辆和行人数据集。将原数据集按照特定的结构重新组织并保存到指定的路径下。使用多层循环来训练ID和跟踪指数;

(十)、test.py文件:改脚本使用torchvision中的imageFolder类加载数据集,并使用transform.ToTensor对图像进行预处理,使用Dataloader类将数据集分成查询集和图库集分别保存;

(十一)、train.py文件:主要使用yolov8_DeepSort模型完成训练。改脚本主要功能:加载数据集并进行预处理(裁剪、翻转、缩放、归一化等)、定义神经网络模型、定义loss和optim、训练模型然后计算并绘制loss和acc;

(十二)、iou_matching.py文件:该文件包含两个功能函数(iou和iou_cost)。iou计算两个边界框的iou值,值越大表面两个框重叠率越高;iou_cost用于计算跟踪目标与检测目标之间的IoU距离成本矩阵,该矩阵可以帮助我们判断当前帧中的哪个检测目标与上一帧中的哪个目标相匹配;

(十三)、kalman_filter.py文件:卡尔曼滤波是一个数字模型,能根据当前状态和过去状态来预测物体的未来状态,具体分两阶段实现:

1).预测阶段:根据系统的动态模型对系统当前状态进行预测,并预测系统状态的协方差(表示不确定性),预测的结果作为下一更新阶段的输入;

2).更新阶段:滤波器使用新的数据来修正预测结果。这里涉及到卡尔曼增益,决定如何在预测和实际检测之间去平衡,然后滤波器会更新状态估计和状态协方差。

(十四)、linear_assignment.py文件:该文件主要包括几个重要函数

1).min_cost_matching:用于解决线性分配问题。它通过计算给定距离度量和最大距离(门控阈值)以计算成本矩阵,然后利用匈牙利算法找到最小成本的匹配,返回跟踪和检测到的索引和未匹配到的跟踪和检测索引;

2).matching_cascade:一个实现级联匹配策略的函数。它首先将所有跟踪和检测分级,并从最新到最旧依次对每级进行匹配。它是一种处理跟踪和检测数目不对等、同时减少错误匹配的方法;

3).gate_cost_matrix:是一个实现代价矩阵门控的函数,使代价矩阵中的不可行条目无效。对每一个检测和跟踪的匹配计算马氏距(Mahalanobis Distance)作为门控阈值,如果马氏距离大于预定阈值,说明该匹配不可行。

(十五)、nn_matching.py文件:主要定义了NearestNeighborDistanceMetric类,用来计算欧氏距离(pdist函数)和余弦距离(cosine_dist);

(十六)、preprocessing.py文件:包含了一个函数non_max_suppression,用于实现非极大值抑制算法。

五、相关数据集和代码链接:

链接:https://pan.baidu.com/s/1_h3Scd4dRVw9e_fI--d0KA
提取码:qat4
--来自百度网盘超级会员V4的分享

  • 4
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
近年来,深度学习技术的飞速发展,使得视觉识别技术在车辆行人的监管和管控等领域中逐渐得到广泛应用。其中,由YOLOv5和DeepSORT组合实现的车辆行人检测、追踪和计数系统具有出色的性能和灵活性,已经被广泛运用于交通安全、城市智慧管理等领域。 YOLOv5是目前最先进的一种物体检测技术,运用领先的深度学习算法和现代化的硬件设备,实现了毫秒级别的准确物体检测,并能够在大规模数据上进行训练,具有高精度、高效率和高适应性等特点。 DeepSORT算法则是一种基于卡尔曼滤波和匈牙利算法的目标追踪技术,采用多个视觉特征联合匹配的方法,能够实现对多目标的快速准确跟踪,并通过追踪结果进行目标计数。 综合应用YOLOv5和DeepSORT技术,可以实现对车辆行人的实时检测、追踪和计数。具体实现方式包括以下步骤: 首先,通过YOLOv5模型对输入图像进行物体检测,根据预设的检测策略和检测器参数,输出每个检测框包含的目标信息和对应的位置。 其次,根据DeepSORT模型进行目标追踪,将已检测到的目标与上一帧已追踪的目标进行特征匹配,根据距离和可信度等特征进行目标关联,以确定目标的轨迹并不断更新。 最后,通过对轨迹进行简单的统计和整理,即可得到对车辆行人的统计计数结果,实现对目标的全程监控和管理。 总体来说,YOLOv5和DeepSORT结合的车辆行人检测、追踪和计数系统可以快速准确实现对城市的智慧化管理,为保障城市公众的生命、安全和财产利益提供了关键技术支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值