新闻详情

新闻详情

首页 / 资讯中心 / 详情

YOLOv9智慧交通车辆行人检测计数系统实战教程

发布时间:2026/10/2 8:35:38来源:尧图网络
YOLOv9智慧交通车辆行人检测计数系统实战教程
简介基于YOLOv9的智慧交通道路车辆行人识别检测计数系统提供完整Python源码、训练好的模型与详细运行教程面向深度学习、目标检测方向的毕业设计、课程项目及实际场景应用开发者。压缩包内共182个文件涵盖83个Python脚本、30个YAML配置文件、3个预训练权重文件、评估图表与示例图片整体大小63.03MB结构清晰便于按需检索。目前已有526人学习/下载适合计算机相关专业在校学生、教师或企业工程师参考使用。项目代码经过测试运行成功配套教程从环境配置、数据集准备、模型训练到检测测试均有说明并附带训练好的模型和评估指标曲线可直接复现道路车辆与行人识别计数效果也可换用自有数据集进行二次训练学术展示与工程落地均能快速上手。1. 智慧交通与 YOLOv9这份资源到底能解决什么YOLOv9 道路车辆行人识别检测计数系统拆开看就是三件事把视频帧里的车和人框出来、按类别区分、统计数量。路口监控场景最典型的诉求——轿车、卡车、行人、骑电动车的同时出现与相互遮挡恰好是目标检测里最容易翻车的组合。这份资源给的是完整的一套Python 源码、训练好的模型、评估指标曲线外加一份能照做的运行教程。它不要求你从零复现 YOLOv9 论文而是直接站在一个能跑的工程上改数据集、调参数、训出自己的模型再拿 best.pt 去做检测和计数。适合计算机、人工智能、大数据相关专业的毕设课设也适合要做智慧交通 demo 的开发者。下面按我实际拆项目的顺序讲环境怎么搭、数据怎么改、训练参数怎么调、坑在哪。2. 环境与工程结构先装包、再认全项目文件拿到 zip 别急着双击 train_dual.py第一步是把环境弄干净。这个项目是标准的 PyTorch 训练链路环境装不对后面每一步都会被报错打断。先把 YOLOv9 选型背景交代清楚再讲环境最后把解压出来的文件逐个认一遍后面改参数才不会迷路。2.1 YOLOv9 的选型理由PGI 与 GELAN 解决什么问题YOLOv9 相比 v5/v8 有两个核心变化值得知道。一是可编程梯度信息PGI它在反向传播时给浅层网络额外提供一条完整的梯度通路解决的是深网络在传输梯度时信息丢失的问题对小目标尤其重要。道路场景里远处行人、隔了一个车道的轿车在 640 分辨率下往往只有几十个像素这类目标最容易在深层特征里“被丢掉”。二是 GELAN 结构一种轻量化的跨层特征融合方式用更少的参数换相近的精度推理速度更快。这两点不需要背论文但带着这个认知去调参会很有用。比如你在验证集上发现远处小目标漏检严重那就知道问题大概率出在特征提取的浅层环节可以优先调整输入分辨率 img 尺寸而不是盲目加 epochs。YOLOv9 不是黑匣子它把精度和速度的平衡点往前推了一步这也是它适合做智慧交通实时检测的原因——车流场景对延迟敏感模型不能只追求 mAP 高而跑不到实时帧率。2.2 anaconda pycharm把 Python 环境一次性配好教程里推荐的是 anaconda 加 pycharm 的组合这是最省事的路子。anaconda 负责创建独立虚拟环境pycharm 负责编辑和运行两者通过 Python 解释器关联起来。我一般的做法是先装 anaconda再装 pycharm然后打开 anaconda prompt 创建环境。conda create -n yolov9 python3.8 -y conda activate yolov9 cd /path/to/your/project pip install -r requirements.txtpython 3.8 是 YOLOv9 这类 PyTorch 项目最常见的兼容版本不建议直接用 3.11 或 3.12部分依赖如 torch、opencv-python 在旧版本上更稳。requirements.txt 在项目根目录里面是训练和推理需要的全部包包括 torch、opencv-python、numpy、pandas、matplotlib 这些。安装时如果卡在 resolving 阶段不动基本是默认源太慢换成清华源能解决大部分问题。pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple装完之后把 conda 环境的 python 解释器导入 pycharmFile → Settings → Project → Python Interpreter → Add → Existing environment选 anaconda 目录下 envs/yolov9/bin/python.exe。这一步做完pycharm 里运行 train_dual.py 用的就是刚才装好依赖的环境。2.3 解压后先认清单核心文件各自承担什么角色项目解压后文件不少第一次打开容易看懵。我按实际使用频率整理了一张清单照着认一遍比瞎翻高效得多。文件/目录作用使用时机train_dual.py训练入口脚本改参数后运行训练阶段detect_dual.py推理入口脚本加载模型检测图片/视频测试与部署data/banana_ripe.yaml数据集配置模板自定义数据集的参照训练前必改hyp.scratch-high.yaml训练超参数文件训练时自动读取models/detect/yolov9-c.yaml模型结构配置文件训练时自动读取reparameterization.ipynb重参数化转换 notebook把训练模型转为推理模型训练后必跑results.csv训练过程评估指标记录含 P、R、mAP 等训练后分析train_batch0/1/2.jpg训练批次可视化图片训练中检查标注val_batch2_pred.jpg / val_batch2_labels.jpg验证集预测结果与真实标注对比训练后评估events.out.tfevents.*TensorBoard 日志文件可视化训练曲线runs/train训练输出目录含 weights、results.csv 等训练生成runs/detect推理输出目录存放检测结果推理生成这里有两个容易忽略的点。一是 data/banana_ripe.yaml 是模板文件它的存在是为了让你照着格式改自己的数据集配置不是说这个项目要去训练香蕉成熟度识别。二是 reparameterization.ipynb 这个 notebookYOLOv9 训练完的模型不能直接拿来推理必须先做重参数化融合这个我在第 6 章详细说现在先知道它是必经步骤就行。3. 数据集与配置文件YOLO 格式与 yaml 怎么改训练自己的模型数据准备工作量通常比调参还大。这个项目的核心场景是车辆行人识别数据集的下载链接在资源介绍栏里。下载后别直接开训先确认目录结构、标注格式和配置文件三件事都对了否则跑起来的训练全是无效训练。3.1 YOLO 格式数据集的目录结构与标注规则YOLO 格式数据集的目录结构是固定的图片和标注分开存放常见做法是 data 目录下分 images 和 labels 两个子目录各自再拆 train/val。datasets/traffic/ ├── images/ │ ├── train/ # 训练图片 │ └── val/ # 验证图片 └── labels/ ├── train/ # 训练标注 txt └── val/ # 验证标注 txt每一张图片对应一个同名 txt 文件比如 img_001.jpg 对应 img_001.txt。txt 里每一行代表一个目标格式是五个值类别编号、归一化中心点 x、归一化中心点 y、归一化宽、归一化高。以下面这行为例0 0.432 0.512 0.123 0.086 1 0.710 0.423 0.051 0.210第一列 0 和 1 是类别编号对应 yaml 里 names 的顺序。假设第 0 类是 vehicle、第 1 类是 person那么第一行就是一个轿车框第二行是一个行人框。cx、cy、w、h 全部除以了图片宽高取值在 0 到 1 之间所以标注文件不关心图片是 1920 还是 640训练时会统一缩放。手动标注工具一般用 labelimg标注时选择 YOLO 格式导出它自动生成的就是这种格式。这个项目自带数据集的标注质量不需要怀疑但如果你要自己补充数据注意类别编号必须和 yaml 里 names 的索引严格一致这是新手最容易翻车的点——txt 里写了 3yaml 里只有 2 个类别训练直接报错。3.2 从 banana_ripe.yaml 改自己的数据集配置项目里 data 文件夹下的 banana_ripe.yaml 就是拿来当模板的格式非常标准。我一般会在同级目录新建一个 traffic.yaml保留模板不动养成这个习惯后面想对比不同数据集配置时就有后悔药吃。# data/traffic.yaml train: D:/datasets/traffic/images/train # 训练集图片路径 val: D:/datasets/traffic/images/val # 验证集图片路径 names: 0: vehicle 1: persontrain 和 val 填的是图片目录的路径不是 labels 目录训练时程序会根据图片路径自动关联到同名标注 txt。路径建议写绝对路径相对路径在换机器或者改工作目录后经常找不到文件报错还不好排查。names 列表的顺序就是标注 txt 里类别编号的对照表0 对应 vehicle、1 对应 person多类别就继续往下加。如果下载的数据集里类别只有 vehicle 和 person那到这里配置就结束了。如果还想区分 car、bus、truck、pedestrian、cyclist 这些细分类别names 里按顺序列全同时确认标注 txt 的类别编号和它对得上顺序错一位整个训练白跑。数据量方面两类别检测每类一千张以上起步比较稳样本少的类别会出现明显的漏检和误检这部分没有玄学纯看数据分布。4. 训练参数逐项拆解train_dual.py 与评估指标曲线环境配好、数据改完进入最关键的训练环节。train_dual.py 支持两种启动方式改脚本和命令行。无论哪种核心都是那七八个参数我把它们拆开讲清楚你就知道自己改的是什么了。4.1 方式一改脚本里的八个参数pycharm 里直接打开 train_dual.py找到参数区按下面这份清单逐项改。我标注了每个参数的作用和推荐值。# train_dual.py 中需要修改的关键参数 --weights: yolov9-s.pt # 预训练权重从零训练可填空字符串 --cfg: models/detect/yolov9-c.yaml # 模型结构配置 --data: data/traffic.yaml # 你的数据集配置文件 --hyp: hyp.scratch-high.yaml # 训练超参数 --epochs: 100 # 训练轮数 --batch-size: 8 # 批次大小按显存改 --device: 0 # 单卡训练填0CPU训练填cpu --close-mosaic: 15 # 最后15个epoch关闭mosaic增强逐个说参数含义。weights 填 yolov9-s.pt 表示加载官方预训练权重做迁移学习这是最推荐的做法收敛快且精度高如果填空字符串就是从头训练需要更大的数据量和更多 epoch。cfg 保持默认的 yolov9-c.yaml 即可网络结构不用动。data 换成第 3 章新建的 traffic.yaml。hyp 是超参数集scratch-high 表示用偏高的数据增强配置适合通用目标检测场景。epochs 是训练轮数100 到 200 之间即可数据量小的话 100 就够硬加轮数不一定会涨精度。batch-size 完全看显存8G 显存填 8 比较安全16G 可以尝试 16。device 单卡填 0没显卡用 CPU 训练就填 cpu但速度会慢到让你怀疑人生这点后面避坑章单独说。close-mosaic 的含义是训练最后 15 个 epoch 关闭 mosaic 数据增强让模型在接近真实分布的数据上精调这个参数是 YOLOv9 官方建议开启的。改完直接在 pycharm 里运行 train_dual.py。启动后终端会先打印数据集加载情况、类别数量、模型结构参数量这些信息没有报错就说明配置正确可以放心等训练。4.2 方式二命令行训练怎么改成自己的pycharm 终端窗口里跑命令行是另一种方式官方示例长这样python train_dual.py --workers 8 --device 0 --batch 16 --data data/coco.yaml --img 640 --cfg models/detect/yolov9-c.yaml --weights --name yolov9-c --hyp hyp.scratch-high.yaml --min-items 0 --epochs 500 --close-mosaic 15对照这个命令改自己的配置--data 换成 data/traffic.yaml--weights 填 yolov9-s.pt 而不是空字符串除非你想从零预训练--epochs 从 500 降到 100 到 200官方示例的参数是拿 COCO 这种百万级数据集跑的你的交通数据集没那么大500 轮纯属浪费算力--name yolov9-c 是输出目录名改成 traffic 方便后面在 runs/train/traffic 里找模型--img 640 是输入分辨率显存紧张可以降到 512 或 416。--workers 表示数据加载线程数默认 8 即可CPU 核心少就调成 4。--min-items 0 表示不过滤标注少于该数量的图像保持默认。命令行方式的好处是每次跑实验不用改脚本参数以命令行传入为准适合做多组对照实验。改脚本和命令行两种方式本质是同一套参数逻辑只是入口不同看个人习惯。4.3 训练输出怎么读runs/train、results.csv 与指标曲线训练完成后所有产物都在 runs/train 目录下。以 --name traffic 为例路径是 runs/train/traffic里面包含 weightsbest.pt 和 last.pt、results.csv、train_batch*.jpg、val_batch*.jpg 等文件。best.pt 是验证集 mAP 最高的权重last.pt 是最后一轮的权重推理和部署都用 best.pt。results.csv 每一行对应一个 epoch 的评估指标核心列是 Precision、Recall、mAP50、mAP50-95。这四个指标是判断模型好坏的主依据含义如下指标含义车辆行人场景参考值PrecisionP预测框中真正有目标的占比0.8 以上RecallR真实目标中被检出的占比0.8 以上mAP50IoU 阈值 0.5 时的平均精度0.75 以上mAP50-95IoU 从 0.5 到 0.95 的平均精度0.55 以上训练中每轮结束后可以手动用 matplotlib 画 results.csv 里的曲线看 mAP 是否还在上升。如果 50 轮后曲线已经走平继续训收益很小如果还在上升可以加大 epochs 继续。另外 train_batch*.jpg 是训练批次的标注可视化能直观看出标注框和图片是否对应正确val_batch2_pred.jpg 和 val_batch2_labels.jpg 是验证集预测结果与真实标注的对比漏检和误检在这两张图上一目了然。5. 避坑训练与推理最常见的五个翻车现场跑 YOLOv9 这条链路绝大多数问题不是模型本身而是环境、显存、路径这些基本功。我把实际遇到的五个高频坑按「现象 → 原因 → 解决」列出来都是血泪经验照着排查能省下大半天。5.1 CUDA out of memory显存不够先别急着换机器现象训练启动几秒到几分钟终端报 RuntimeError: CUDA out of memory有时还会提示 Tried to allocate 数千 MiB。原因batch-size、输入分辨率 img 和模型大小三者共同决定显存占用默认 640 分辨率加 batch 16 在 8G 显存卡上基本必爆。解决先把 batch-size 降到 4 到 8再把 --img 从 640 降到 512这两步能把显存占用砍掉一半以上。注意修改后要重启训练进程旧的显存分配不会自动释放。提示如果是 4G 显存的卡直接放弃 GPU 训练用 CPU 跑小数据集验证流程更现实。5.2 pip 安装卡到地老天荒换源能解决 90% 的装包问题现象pip install -r requirements.txt 在 Resolving dependencies 阶段长时间不动或者下载到一半超时中断。原因默认 PyPI 源在国内访问不稳定尤其是 torch 这种几百 MB 的大包。解决换清华源重新执行命令是 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple。一次装完不要分多次requirements.txt 里的包有版本依赖关系分开装容易装出冲突版本。5.3 训练完找不到 best.ptruns/train 里的 exp 编号会叠加现象训练日志显示结束去 runs/train 目录找模型发现里面有 exp、exp2、exp3 多个文件夹不确定哪个是自己这次训练的。原因不带 --name 参数时程序自动按 exp、exp2、exp3 递增命名跑过多次实验就分不清了。解决每次训练都带上 --name 参数比如 --name traffic_v1产物固定在 runs/train/traffic_v1/weights/best.pt绝对不会找错。5.4 close-mosaic 设为 15 直接报错总轮数太短现象epochs 设为 10close-mosaic 保持默认 15启动训练时提示 mosaic 相关的断言错误或直接崩溃。原因close-mosaic 表示最后 15 个 epoch 关闭 mosaic 增强总轮数比它小逻辑上不成立。解决close-mosaic 的值必须严格小于 epochs比如 epochs 100 时填 15epochs 50 时填 10 或更小。这是 YOLOv9 官方训练参数里最容易忽视的隐藏约束。5.5 用 CPU 训练想放弃正确姿势是先跑通再谈效果现象--device 填 cpu 后一个 epoch 要跑几十分钟甚至更久验证集评估又花一大截时间。原因CPU 算卷积是逐层串行跟 GPU 的并行能力差距是两个数量级。解决先别追求完整训练把数据集临时缩减到一两百张、img 降到 416、epochs 降到 10跑通整个流程确认代码无误、模型能正常保存再想办法搞 GPU 资源。完整训练用 colab 免费额度或者云 GPU 按小时租都行别在 CPU 上硬扛完整训练时间成本不划算。6. 重参数化与检测计数把 best.pt 用到真实场景训练完只是完成了第一步。YOLOv9 的 best.pt 还不能直接拿去检测视频做计数中间必须过一次重参数化这一步漏掉后面所有推理结果都会让你怀疑是不是模型没训好。6.1 重参数化为什么 yolov9 的模型不能直接部署YOLOv9 在训练阶段网络结构里带有额外的辅助分支用来辅助梯度传播训练精度很高但推理时带着这些分支跑速度变慢且权重冗余。reparameterization.ipynb 这个 notebook 干的事就是把训练分支融合进主分支产出一个精简的推理模型。我拿到这份资源第一次用的时候直接拿 best.pt 跑 detect_dual.py结果检测又慢又飘后来才反应过来没做重参数化。按 notebook 从上到下运行一遍输出推理用权重再替换到检测脚本里速度和精度就恢复正常了。这一步是 YOLOv9 系列的老规矩没有例外。6.2 detect_dual.py 推理参数conf-thres 与 iou-thres 怎么配合推理前的参数调整比训练参数更影响体验。核心就两个阈值python detect_dual.py --weights runs/train/traffic_v1/weights/best.pt --source test_imgs --conf-thres 0.35 --iou-thres 0.45--weights 填重参数化后的推理模型路径--source 填测试图片目录或视频文件路径目录就放 test_imgs 下--conf-thres 是置信度阈值低于这个值的检测框会被丢弃0.25 到 0.35 是交通场景比较合适区间——调高漏检多调低误检多--iou-thres 是 NMS 的 IoU 阈值默认 0.45目标密集路段可以降到 0.3减少重叠框的保留。这两个阈值不需要每次训练都调换数据集或换场景才需要重新压一遍测试集看效果。6.3 从检测框到计数虚拟检测线的常见做法检测框有了计数逻辑要靠自己加。最简单的方案是统计每帧画面内的目标数量按类别分别输出要做进出双向计数常见做法是配合虚拟检测线——取检测框底边中心点坐标与画面中一条固定位置的线比较前后帧穿越方向相反就分别累加进和出。# 伪代码检测框跨线计数 prev_frame_y None for det in frame_detections: # 每个检测框 cx det.x det.w / 2 cy_bottom det.y det.h # 框底边中心点车/人“接触地面”的位置 if prev_frame_y is not None: if prev_frame_y line_y and cy_bottom line_y: enter_count 1 elif prev_frame_y line_y and cy_bottom line_y: exit_count 1 prev_frame_y cy_bottom这段逻辑的关键在于用框底边中心点而不是框中心点因为行人、车辆的“位置”在地面上框中心会随目标大小上下浮动跨线判断不准。从那以后我每次换模型都强制走一遍重参数化再去调 conf-thres 和 iou-thres 这两个阈值检测计数基本没再翻过车。希望帮到你。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

改进提效:从过程数据中找规律,让团队成功可复制 2026/10/2 10:09:10

改进提效:从过程数据中找规律,让团队成功可复制

做过程改进的人心里都有一笔账:同样的团队、同样的业务方向,有些周期顺得让人怀疑人生,交付快、返工少、客户还满意;有些周期大家加班到深夜,却处处卡壳,临近节点还在救火。你要问大家为什么,得…

阅读更多 →
金蝶KIS云采购模块实操指南:从采购订单到入库发票的全流程解析 2026/10/2 10:09:10

金蝶KIS云采购模块实操指南:从采购订单到入库发票的全流程解析

1. 采购模块的整体定位与业务流程1.1 采购模块在KIS云供应链中的角色接触金蝶KIS云之前,我一直在传统单机版进销存软件里折腾,最大的痛点就是数据孤岛。仓库管仓库的账,财务管财务的账,采购部自己拿个Excel登记到货情况&#xff0…

阅读更多 →
校园IP网络广播系统全解析:架构、配置与故障排查 2026/10/2 10:09:10

校园IP网络广播系统全解析:架构、配置与故障排查

简介:面向中小学校园广播数字化改造,这份PDF方案书讲解基于TCP/IP网络的IP广播系统,适合学校信息化管理者与弱电集成人员参考。内容针对传统电铃与模拟广播音质差、维护复杂的问题,覆盖上下课铃声、多媒体教学、英语听力考试及应急…

阅读更多 →
【仓颉语言入门 · 第22课】 2026/10/2 10:09:10

【仓颉语言入门 · 第22课】

【仓颉语言入门 第22课】文件与目录 IO:让程序的数据持久化 前 21 课的数据都活在内存里,程序一关就没了。本课带你掌握 std.fs 文件系统库:读写文本文件、遍历目录、处理路径拼接,最后把第 21 课的订单数据保存到文件&#xff0…

阅读更多 →
财富量级:决定你与钱关系的底层逻辑与跃迁指南 2026/10/2 10:09:10

财富量级:决定你与钱关系的底层逻辑与跃迁指南

我们和钱的关系,其实早被财富量级定好了。这句话不是我拍的脑袋,是这几年在财务咨询和身边朋友的真实案例里反复验证过的。很多人以为“钱的问题”本质是“赚钱能力”的问题,但你看得越久越会发现,月入五千的人和月入五万的人&…

阅读更多 →
鸿蒙游戏开发:高刷设备角色移动发飘的预测与插值调优 2026/10/2 10:09:04

鸿蒙游戏开发:高刷设备角色移动发飘的预测与插值调优

提到鸿蒙HarmonyOS上的游戏开发,我第一个想起的不是UI适配,不是包体裁剪,而是角色移动的"手感"。前阵子在两台不同刷新率的鸿蒙设备上跑同一个游戏Demo,一台60Hz,一台120Hz,跑起来之后我直接愣住…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉