yolo8目标检测+多目标跟踪算法实现车流量统计

目前常用的车流量统计方法包括基于虚拟区域和基于车辆跟踪的车流量统计方法,如下图所示。前者在视频帧中手动设定虚拟检测区域,通过判断虚拟检测区域的灰度值变化判断车辆是否经过,从而进行车流量统计。其中虚拟检测区域可以由点、线以及线圈组成,又可以进一步细分为不同的方法。基于虚拟区域的车流量统计方法实现简单、速度较快,但易受光照等外界环境影响且统计准确率较低。基于车辆跟踪的车流量统计方法通过对车流视频中的各帧图像中的车辆进行匹配,从而捕捉各个车辆的运动轨迹和状态,并基于车辆轨迹和状态的差异性进行车辆计数。

常用的基于车辆跟踪的车流量统计方法可以细分为:基于检测跟踪、动态轮廓、车辆模型和车辆特征的方法。这种方法由于需要对每一帧做大量运算,计算复杂度较高。但由于其可准确稳定地跟踪和识别各个车辆目标,具有较高的统计准确率。由于 CNN 在目标检测领域取得巨大成功,能充分提取图像深层次特征,目前使用基于 CNN 的方式进行车辆检测和车辆跟踪已经发展为一种主要的趋势。基于检测跟踪的车流量统计方法具有较高的准确率,且还能与计算机视觉技术结合起来,是当前研究的重要方向。 因此目前,最主流的方法是使用目标检测算法获取车辆的高维特征向量,并把这些特征输入到目标检测算法中进行跟踪比对以确定车辆的ID,通过唯一的ID标识不同车辆,进而计数。

总的来说,基于计算机视觉和检测跟踪的车流量统计方法可以分为以下步骤:(1)读取监控摄像头的视频帧。(2)在车辆数据集上训练,得到车辆检测模型。(3)对车辆进行多目标跟踪,得到车辆运动轨迹。(4)对车辆轨迹分析,得到车辆行驶方向和车辆数量。

下面。我们采取yolo8目标检测算法和ByteTracker多目标跟踪算法对车流量进行统计。

YOLOv8 是 ultralytics 公司在 2023 年开源的 YOLOv5 的下一个重大更新版本,按照官方描述,YOLOv8 是一个 SOTA 模型,它建立在以前 YOLO 版本的成功基础上,并引入了新的功能和改进,以进一步提升性能和灵活性。不过 ultralytics 并没有直接将开源库命名为 YOLOv8,而是直接使用 ultralytics 这个词,原因是 ultralytics 将这个库定位为算法框架,而非某一个特定算法,一个主要特点是可扩展性。其希望这个库不仅仅能够用于 YOLO 系列模型,而是能够支持非 YOLO 模型以及分类分割姿态估计等各类任务。因此,YOLO发展到如今的版本,已经不单单是目标检测的代名词,就像官方所解释的那样,YOLOv8 更应该更名为Ultralytics 。目前YOLO8算法框架(ultralytics库)全面支持图像分类、目标检测和实例分割、人体关键点检测等任务。在目标跟踪方面,YOLO8算法库内置了多目标跟踪领域的SOTA算法(Byte-tracker和Bot-tracker)。在实例分割方面,支持与SAM、Fast-SAM无缝集成.....未来,我们也期待着ultralytics库能够扩充更多的CV领域的SOTA算法。与之前的YOLO版本相比,YOLOv8在以下几个方面有所不同:

骨干网络:YOLOv8采用了全新的骨干网络,以提高模型的性能和准确性。YOLOv8的骨干网络是Darknet-53。Darknet-53是一个深度卷积神经网络模型,它由53个卷积层和池化层组成,用于提取图像特征。其实Darknet-53在YOLOv3网络中就已经被广泛使用,并在YOLOv4和YOLOv5中也得到了应用。它具有较强的特征提取能力,能够在目标检测任务中提供较好的性能。

检测头:YOLOv8采用了Anchor-Free的检测头,这意味着它不再需要预先定义一组固定的先验框来检测目标,而是可以直接从原始图像中预测目标的边界框,这有助于提高模型的灵活性和准确性。

损失函数:YOLOv8采用了新的损失函数,以更好地优化模型的训练过程,进一步提高模型的性能。YOLOv8的损失函数由多个部分组成,包括分类损失(VFL Loss)、回归损失为CIOU Loss+DFL的形式。

ByteTracker算法的核心思想是在目标检测的基础上,利用目标之间的相似性和连续性,通过对目标进行跟踪,实现多目标跟踪。ByteTracker算法的流程如下:

(1)目标检测:首先使用目标检测算法对视频序列中的每一帧进行目标检测,获取每个目标的位置和大小。

(2)特征提取:对于每个检测到的目标,利用深度学习网络提取其特征,这些特征将被用于后续的跟踪过程。

(3)目标跟踪:在连续帧之间,利用目标的特征相似性和运动连续性,建立目标之间的对应关系,实现目标的跟踪。

(4)数据关联:将不同帧中的目标进行跟踪,需要解决数据关联问题,即确定哪些目标属于同一个轨迹。ByteTracker采用了一种基于匈牙利算法的数据关联方法。

(5)轨迹管理:对于每个目标轨迹,需要对其进行起始、终止、更新等操作,以便实现多目标跟踪。

基于YOLOv8目标检测算法和ByteTrack 车辆跟踪算法来完成车流量统计任务,整体流程如下:(1)车辆检测阶段。循环读取视频帧, YOLOv8 算法检测出视频帧中道路上所有车辆。(2)车辆跟踪阶段。将前一阶段的检测结果输入到ByteTrack 跟踪算法中,关联前后帧的检测框,输出跟踪框和身份 ID。(3)车流量统计。 在视频帧中设置虚拟检测区域,通过判断跟踪车辆框中心是否在检测框内进行车流统计。

方案非常明晰,实现起来也并不难,但是目前基于yolo+多目标跟踪算法存在的问题是:传统的基于yolo的跟踪计数都是把虚拟检测区域写固定,把视频文件路径写固定,换一个视频画面基本就不能检测了,因此我们新增GUI文件选择界面让系统支持用户选择自己待检测的视频,新增ROI区域自由划定的方式让用户根据自己待检测的视频划定区域,然后进行跟踪检测。实现效果如下:

基于yolov8的车流量跟踪计数 支持自定义检测区域的yolov8车流量跟踪统计

对上述系统源码刚兴趣的同学可以关注微信公众号‘编程学习园地’,在公众号后台聊天窗口回复关键字‘yolo8项目’即可获取源码链接。

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、demo文件夹: YOLOv4目标检测算法针对MVI_40192文件夹数据集的处理效果,比较满意,车辆信息基本都能检测到。 2、road1_demo文件夹: YOLOv4 + DeepSort算法,针对road1.mp4视频数据的目标跟踪车流量计数效果。人工统计车流量292辆(可能有偏差),算法统计车流量288辆。 3、road2_demo文件夹: YOLOv4 + DeepSort算法,针对road2.mp4视频数据的目标跟踪车流量计数效果。人工统计车流量29辆,算法统计车流量29辆。 只要视频流车辆清晰、大小合适、轮廓完整,算法处理的精度挺高。 4、road1_tracking.mp4、road2_tracking.mp4: 由目标跟踪处理结果合成的视频流。 *********************************************************************************************** 1、deepsort文件夹: 含目标跟踪算法源码,包括:卡尔曼滤波、匈牙利匹配、边框类创建、Track类创建、Tracker类创建。 2、ReID文件夹: 含特征提取算法源码,model_data存储着reid网络的结构、权重,feature_extract_model.py用于创建特征提取类。 3、YOLOv4文件夹: 含目标检测算法源码,model_data存储yolov4网络配置、nets + utils用于搭建模型。decode.py用于将检测结果解码。 4、car_predict.py、yolo.py: 用于验证目标检测算法的效果。 5、main.py: 整个项目的运行入口,直接运行main.py,就可以调用YOLOv4+DeepSort,处理视频流信息,完成目标跟踪车流量统计

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城南皮卡丘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值