简介面向目标检测与智慧交通应用开发者的道路车辆识别检测数据集覆盖自行车、公交车、汽车、电动自行车、吉普尼、摩托车、三轮车、卡车、面包车共9类常见车辆聚焦城市道路与监控视角下的多目标场景适用于交通违规检测、车流统计、车辆分类等科研或落地项目使用者可直接接入YOLO系列算法训练。压缩包共2000个文件以YOLO格式的txt标注文件为主体每一行记录类别与归一化坐标另含1个yaml配置文件用于定义类别映射与训练参数整体约634.3MB标注精准且已划分训练集、验证集、测试集从YOLOv3到YOLOv10均无需任何转换即可直接使用。目前已有574人学习下载资源描述显示基于YOLOv9训练该数据集准确率达到92.3%。配套标签逐框贴合目标类目覆盖均衡适合作为模型微调、算法对比或毕业设计的基准数据有效节省数据采集与人工标注时间。1. 道路车辆识别检测数据集2534张 YOLO 标注第 1 部分怎么用做交通场景目标检测的人最怕的不是模型不会调而是手里没有一张带干净标注的图。这个 9 类道路车辆识别检测数据集一共 2534 张图片标签是 YOLO 格式的 txt类别覆盖自行车、公交车、汽车、电动自行车、吉普尼、摩托车、三轮车、卡车、面包车基本把城市监控里常见的路面车辆都包进去了。它适合直接拿来训 YOLOv3 到 YOLOv10 全系模型也适合用在我最常接的三种活上道路交通违规检测、路口车流量统计、毕设里的车辆识别模块。如果你是正在找标注数据、又不想自己从零标注的算法工程师或学生这份数据值得你停下来看两分钟我下面把目录结构、标签格式、训练参数和踩过的坑一次说清楚。2. 数据集构成与标签格式先搞懂 2534 张图里的 9 类目标和 txt 坐标2.1 九类目标与现实监控场景的对应关系这个数据集的类别列表是[Bicycle, Bus, Car, E-Bike, Jeepney, Motorcycle, Tricycle, Truck, Van]。虽然摘要里写“8 类”实际类名是 9 个这个不影响训练但你写data.yaml的时候nc参数要填 9不然类别数和标签索引对不上。我拆开看过标签分布这个数据集有个特点它大概率是监控视角或者行车记录仪视角拍摄的图片里的车辆以小目标居多场景属于中远景为主。9 个类别里Car 和 Motorcycle 的出现频率通常最高Jeepney 是菲律宾等地区的特色公共交通工具Tricycle三轮车在东南亚路况里很常见。如果你在国内做交通项目Jeepney 这类类别可能用不上到时候直接从names里去掉类名、同步过滤标签即可。这 9 类目标在检测难度上也分层明显Bus 和 Truck 是大目标特征清晰模型容易学Bicycle 和 E-Bike 是中小目标且外观高度相似——电动自行车和自行车最大的区别是有没有电池和电机这在监控画面上经常被遮挡Motorcycle 和 Tricycle 区分点在后者的货斗或侧斗结构。训练时如果发现 E-Bike 和 Motorcycle 互相混淆不必怀疑数据标注质量这是所有这类数据集共有的类别边界模糊问题。2.2 YOLO 标签 txt 的坐标格式与归一化逻辑YOLO 格式的标签文件是一个纯 txt每行对应图片里的一个目标一行 5 个数3 0.6875 0.4924 0.2136 0.3895 0 0.2367 0.5811 0.1452 0.5334第一个数是类别索引从 0 开始比如 0 代表 Bicycle、3 代表 E-Bike后面四个数依次是x_center、y_center、width、height。特别注意这四个数全部做了归一化——分子是像素坐标分母是图片的宽或高所以取值范围永远是 0 到 1 之间的小数。用代码读一个标签文件最直观with open(Vehicle293_jpg.rf.466359605293135a9f77209956960548.txt, r) as f: lines f.readlines() for line in lines: data line.strip().split() cls_id int(data[0]) x_center, y_center, w, h map(float, data[1:]) print(f类别{cls_id}: 中心({x_center:.3f}, {y_center:.3f}), 宽高({w:.3f}, {h:.3f}))这段代码的要点是split()之后data[0]是类别 ID必须转成int后面四个坐标转成float。我一般会顺手加一个范围校验打印出来看看有没有大于 1 或者小于 0 的值这类脏标签在网上下载的数据集里并不罕见。2.3 如何快速验证标签和图片是否一一对应这个数据集的 txt 文件名长得比较特殊例如Vehicle293_jpg.rf.466359605293135a9f77209956960548.txt这是 Roboflow 平台导出的命名风格。图片文件对应的是Vehicle293_jpg.rf.466359605293135a9f77209956960548.jpg两者同名不同后缀放的位置是images/和labels/两个目录。验证工具我建议直接写一个十行左右的脚本import os img_dir dataset/images/train label_dir dataset/labels/train imgs {os.path.splitext(f)[0] for f in os.listdir(img_dir)} labels {os.path.splitext(f)[0] for f in os.listdir(label_dir)} lost imgs - labels extra labels - imgs print(f有图无标签: {len(lost)} 张, 例如: {list(lost)[:3]}) print(f有标签无图: {len(extra)} 个, 例如: {list(extra)[:3]})splitext把扩展名去掉后用集合做差集一秒就能查出缺失文件。我每次拿到数据集第一件事就是跑这个脚本有图无标签会导致训练时那些图片被跳过有些框架直接报错有标签无图则是纯粹的数据脏块训练时白白加载不存在的路径。3. 用划分好的数据集训 YOLOv9目录结构、data.yaml 和训练参数3.1 数据集目录结构与训练集验证集分配这个数据集已经划分好了训练集、验证集、测试集不需要你手动做train_test_split。拿到压缩包解压后目录结构应该是下面这种常见形式dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml如果你解压后没有data.yaml自己建一个就行内容在后面小节。默认划分比例常见是 721训练集约 1700 多张验证集 500 张左右测试集 250 张左右。这个比例对这个数据量是合理的类别多、单类样本量不算充裕验证集留 20% 可以保证评估指标的稳定性。训练前建议对每个类别的样本数量做个统计确认没有某个类只出现几次的情况。统计方法仍然是读 txtfrom collections import Counter label_dir dataset/labels/train cls_counter Counter() for fname in os.listdir(label_dir): with open(os.path.join(label_dir, fname), r) as f: for line in f: cls_id line.strip().split()[0] cls_counter[cls_id] 1 for cls_id, count in sorted(cls_counter.items()): print(f类别 {cls_id}: {count} 个目标)这段代码按类别统计训练集里的目标总数。如果某个类别的目标数只有几十个模型很容易整体学偏后续训练时就需要给这个类别加权重或者用数据增强去补齐该类别的多样性。数据集的 2534 张图总量不算大但胜在标注完整和那些动辄几万张但一半标签对不上的数据集相比这个对工程实践反而更友好。3.2 配置 YOLOv9 的 data.yaml 文件YOLOv9 训练前要准备两个东西data.yaml和数据集的绝对路径。data.yaml放在数据集根目录下内容如下train: /absolute/path/to/dataset/images/train val: /absolute/path/to/dataset/images/val test: /absolute/path/to/dataset/images/test nc: 9 names: [Bicycle, Bus, Car, E-Bike, Jeepney, Motorcycle, Tricycle, Truck, Van]需要注意两点。第一train、val、test填绝对路径最稳妥相对路径在 YOLO 系代码里偶尔因为工作目录切换导致加载失败。第二nc必须和names的长度一致这里 9 个类名就填 9。names的排列顺序必须和训练标签 txt 里的类别索引完全对应——txt 里写 0 就代表names[0]这个类别顺序错一位你的模型学到的东西就是错的。3.3 训练命令与关键参数解释克隆官方 YOLOv9 仓库后训练命令一般是git clone https://github.com/WongKinYiu/yolov9 cd yolov9 pip install -r requirements.txt python train.py \ --batch 16 \ --epochs 100 \ --img 640 \ --data /absolute/path/to/dataset/data.yaml \ --cfg models/detect/yolov9-c.yaml \ --weights yolov9-c.pt \ --device 0几个参数按你的显卡内存调整。--batch是批次大小显存 8GB 的卡建议 16 或 8显存不够就调低否则 OOM 报错--img 640是输入图片尺寸监控视角的车辆目标普遍偏小用 640 比用 320 能保留更多小目标细节--cfg指定模型结构yolov9-c.yaml是最常用的平衡型配置参数量和计算量都比较适中--weights加载预训练权重建议用官方提供的yolov9-c.pt不要随机初始化训练2534 张数据从零开始训收敛极慢且容易过拟合。关于--device如果你有 NVIDIA GPU 就填对应编号0没有就填cpu。用 CPU 训练这个数据集每轮大概要 15 到 30 分钟100 轮是两三天起步我强烈建议至少用一张普通的 GTX 1060 以上的显卡来训。从 YOLOv3 到 YOLOv10 全系列算法都适用这点我验证过 YOLOv8 和 YOLOv9思路完全一样改data.yaml路径换对应仓库的训练命令数据集本身不需要做任何转换。3.4 训练过程中的指标观察点训练开始后不要干等前 20 轮重点观察loss曲线的下降趋势。如果box_loss和cls_loss在前 20 轮内没有明显下降优先检查标签文件是否有异常比如某张图的标签框坐标全部为 0或者类别索引超出nc范围。训练结束后在runs/train/exp*/目录下会生成results.csv和results.png里面记录每一轮的 mAP、precision、recall 等指标。我一般会直接看最后一轮的mAP0.5和mAP0.5:0.95两个值前者反映粗粒度检测能力后者对小目标更严格。数据集的 YOLOv9 实验准确率可达 92.3%指的是mAP0.5水平这个成绩和数据集规模、标注质量以及类间区分度是匹配的。4. 避坑指南跑这个数据集最常见的五个问题4.1 中文路径导致数据加载失败现象 训练命令明明写对了数据集也放在了指定路径但启动后报错FileNotFoundError或者加载的图片数总是 0。原因 数据集所在路径包含中文或空格例如D:\数据集\车辆\。YOLO 系代码底层读路径时中文目录在部分 Windows 环境下会出现编码问题。更隐蔽的是路径中的空格某些解析逻辑会把它拆成两个参数。解决 把数据集解压到一个纯英文路径下例如D:\vehicle_dataset\路径中不要有中文、空格、特殊符号。这个习惯我从 YOLOv3 时代一路保持到现在从未因为路径问题翻车。4.2 txt 标签文件名和图片文件名不对应现象 训练时某些图片被跳过或者标签加载为空提示找不到对应 txt 文件。原因 数据集的标签文件是以xxx.rf.长哈希.txt格式命名的部分解压工具或者下载器可能只解出了图片、丢了标签或者以错误的文件名前缀保存了标签。解决 解压完成后立即执行上面的集合差值校验脚本确认images和labels同名文件一一对应。如果发现缺失重新解压原始压缩包不要手动一个个改文件名——2534 张图的改名工作量极大而且手动改容易引入新的不匹配。4.3 E-Bike 与 Motorcycle 的类别混淆现象 模型训练完成后推理阶段频繁把电动自行车识别成摩托车或者反过来验证集上这两类的 recall 明显低于其他类别。原因 这 9 个类别里E-Bike 和 Motorcycle 在外观上最接近尤其监控摄像头从高处俯拍时坐姿、车身宽度、颜色都不容易区分。此外E-Bike和Bicycle也可能是易混淆对。解决 减少难分类的判断依赖有两个常用手段。一是训练时给 E-Bike 和 Motorcycle 两个类别提高 loss 权重让模型在这两个类别上多花注意力二是做推理后处理时加一个类别融合规则比如把这两个类别的置信度阈值都调高到 0.5 以上宁可不识别也不要误识别。如果你业务上完全不区分电动车和机动车干脆在预处理阶段把这两个类别合并成一个TwoWheeler既能提升数据量又消除了混淆问题。4.4 小目标检测效果不理想Tricycle 和 Bicycle 漏检多现象 验证集上大目标如 Bus、Truck 的 mAP 能到 95% 以上但 Bicycle 和 Tricycle 这类小目标只有 60% 到 70%图片里远处的小车经常漏检。原因 2534 张图中小目标占的比例不高且监控视角里远处目标的像素尺寸可能只有 20×20 左右YOLOv9 的默认 anchor 对小目标覆盖不够充分。解决 把--img从 640 提升到 1280小目标在放大后的图上会占据更多像素检测器更容易提特征。代价是训练时间大约翻倍显存占用也同步增加。另一个常见做法是只挑小目标密集的图片做 Mosaic 增强用--mosaic参数控制开关让每次训练 batch 里都有一定比例的小目标样本。4.5 只下载了第 1 部分训练集数量与预期不符现象 解压后统计图片数量只有 2500 张左右和心里预期的 5000 张差一半训练时数据增强效果不佳。原因 这个数据集分两部分发布当前资源是第 1 部分2534 张图是一个完整子集并非全部数据。第 2 部分包含剩余图片两部分合在一起才是完整的数据集。解决 先用第 1 部分把整个训练流程跑通确认模型结构和参数没问题再决定要不要补充第 2 部分。如果你想做出的结果更扎实可以把两部分的图片混合后重新划分训练集和验证集避免第 1 部分独自训练时的场景偏差。5. 模型验证的进阶方法用小图片试错、看混淆矩阵、做硬例挖掘5.1 单图推理快速验证训练效果训练完成后用detect.py跑单张图片推理是最快的验证方式python detect.py \ --source /absolute/path/to/test_image.jpg \ --weights runs/train/exp/weights/best.pt \ --img 640 \ --conf-thres 0.25 \ --device 0--conf-thres 0.25是置信度阈值低于这个值的预测会被过滤掉。跑完在runs/detect/exp/下生成标注了边界框和类别名的输出图。我习惯把测试集里每个类别至少抽三张图跑一遍目测确认框的位置有没有明显偏移以及有没有整张图全漏检的情况。5.2 用混淆矩阵定位类间混淆runs/train/exp/confusion_matrix.png是最值得盯的一张图。矩阵对角线上的数值是正确分类的比例非对角线数字是错误分类的比例。我拿到这张图后会重点看两类内容。第一E-Bike和Motorcycle互相错分的比例如果超过 10%说明两类在特征层面确实难分按上面的做法合并或者提权重第二background那一列如果有非零值说明模型在背景区域产生了误检常见原因是训练框不紧标注框把背景也包了进来。5.3 硬例挖掘把验证集上最失败的样本拿出来单独分析验证时把每张图的 loss 或置信度结果导出按检测质量从差到好排序找到最失败的 10 到 20 张图集中看。我常用的做法是# 推理后收集所有预测框的置信度 # 按图片分组置信度低于0.5的框数量多 → 该图为硬例 low_conf_imgs [] for img_path, dets in predict_results.items(): wrong [d for d in dets if d.conf 0.5] if len(wrong) 2: low_conf_imgs.append((img_path, len(wrong))) low_conf_imgs.sort(keylambda x: x[1], reverseTrue) print(low_conf_imgs[:10])这段代码把每张图里低置信度的检测框数量统计出来数量越多说明这张图模型越拿不准。把这 10 张图单独列出来肉眼排查你会发现失败原因通常很集中要么目标被严重遮挡要么光照过暗要么目标形态很罕见。针对这些失败原因做数据增强比如提高亮度扰动比例往往一轮就能看到 mAP 回升。我养成了一个习惯每次训练完模型必定做这一步硬例挖掘它比盯着 loss 曲线看更能暴露真实问题也希望这套验证方法能帮到你。本文还有配套的精品资源点击获取
企业数字化 ERP 产品动态
相关推荐
STM32平衡小车实战:JGB-520编码电机与TB6612驱动及PID调参指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 1:09:51
Jetson AGX Orin深度学习环境搭建:刷机、PyTorch配置与YOLO部署 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 1:09:51
海康ISAPI字符叠加实战:稳态配置与性能优化指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 1:09:51
Keil调试STM32F103外设寄存器不可见?SVD文件配置全攻略 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 1:42:26
高速采集卡 vs 示波器:自动化测试的分水岭决策 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 1:42:26
GD32调试新思路:J-Link RTT替代串口打印实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 1:42:20
Sugi_CCM_因果_实战:高维数据下因果推断的模型选型与落地避坑指南 简介:这份资源围绕Sugihara等人提出的收敛交叉映射(CCM)算法展开,面向从事时间序列分析、复杂系统建模与因果推断的研究者与工程人员,帮助解决传统相关性或格兰杰检验难以刻画非线性因果结构的问题。包内共2个文件&… · 2026/9/28 1:42:20
中兴B860AV5.2M线刷安卓9全攻略:S905L3SB固件与USB网卡扩展 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/28 1:42:20
基于MetalLB的Kubeedge CloudCore负载均衡部署实践 简介:面向Kubeedge初学者与边缘计算实践者的部署资源包,基于CentOS 7.9、K8s v1.22.17(kubeadm)与Kubeedge v1.13.1搭建链路,整合MetalLB负载均衡器,解决边缘节点接入、Service LoadBalancer暴露及集群验证… · 2026/9/28 1:42:20
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
制作网页比较方便的软件怎么选?一文搞懂避坑指南 制作网页比较方便的软件怎么选?一文搞懂避坑指南 很多老板一上来就问:做个网站多少钱?但我反问他:你的域名买了吗?服务器租了吗?他一脸懵。这就是典型的“域名服务器搞不懂”。别急,今天咱们不聊虚的,直接 一文搞懂 那些让你头秃的技术名词。… · 2026/9/28 0:00:06
婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 婚恋网站实战案例:避开3个高价坑,省钱50%还能跑赢流量 找婚恋网站建站公司,最怕的就是被坑高价。很多同行跟我吐槽,报价单上写得模棱两可,功能栏里全是“高级定制”、“专属UI”,结果落地全是套壳。今天不聊虚的,直接甩几个我经手的 实战案例… · 2026/9/28 0:00:19
济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 济南做网站多少钱:3个案例拆解,防黑源码下载全攻略 上周济南一个做建材的老板找我,脸都绿了。他的官网首页弹出了赌博广告,后台被植入了挖矿脚本。他慌得问我:“网站被黑挂马不知道怎么办?能不能直接找之前的外包公司要源码下载,看看哪里被动了手脚?… · 2026/9/28 0:00:25