
简介面向自动驾驶感知系统研发与智能交通监控该数据集收录汽车、行人、路标、红绿灯等7大类146个精细类别的真实道路场景图片。包体共1878个文件含938张JPG原图、938份TXT格式YOLO边界框标注另有YAML配置及说明文档压缩包整体104.37MB。数据按训练656张、验证188张、测试94张划分覆盖城市道路、高速、山区以及日间/黄昏/夜间的不同光照条件单图最大标注实例达15个可直接兼容YOLOv5/v7/v8等主流检测框架。已有90人学习下载可支撑自动驾驶感知、交通违规监测、风险预警等模型训练适合目标检测与实例分割方向的研究者及开发者使用。1. 自动驾驶多类别交通物体与交通标志检测数据集先别急着解压一个zip拿到手多数人的第一反应是解压、装环境、扔进训练脚本。但这个标题里“多类别”和“交通标志”放在一起意味着它和普通的目标检测数据集不是一回事。交通物体车、人、骑车人是运动目标交通标志是静止的小目标两者在尺度分布、类别平衡、标注约定上差异很大用同一套参数硬训模型往往在车辆上表现不错、在标志上惨不忍睹。这篇笔记围绕这份数据集讲清楚三件事它该按什么逻辑组织、怎么接进检测训练管线、以及哪些让你反复调参却提不了分的坑。适合正在为车辆与标志联合检测挑数据集的工程师也适合刚入行想做自动驾驶感知方向的同学。2. 打开数据集之前先弄懂多类别与标志检测的三大基本盘2.1 交通物体与交通标志为什么不能当同一类任务来管从检测器的角度看车辆、行人、骑行者属于“大尺度 运动”目标宽高比相对稳定遮挡常见而限速牌、停止牌、禁令标志属于“小尺度 静止”目标在1080p的图里一个标志可能只有30×30像素。模型在小目标上的特征表达能力本来就弱如果数据集没有针对这类目标做场景采样训练出来的模型会在近距离有效、远距离失效。另一个区别是类别间的关系车辆和行人可以同时出现在一个锚点附近而交通标志通常独立出现在路边这让NMS阈值和后处理的参数取向完全不同。我一般会在拿到数据后先按类别粒度做一次统计把每个类别的框面积、宽高比分布画出来。如果标志类别的中位面积不到车辆类别的十分之一后面就要在小目标增强和图像缩放上做专门处理如果宽高比集中分布在0.8到1.2之间说明这类标志基本是方形版面在设计锚点或做标注裁剪时可以直接利用这个先验。这一步不需要复杂工具用Python读一遍标注文件按category_id分组做describe()统计就够用。2.2 标注格式决定了你三小时还是三天跑通COCO、VOC、YOLO这类数据集常见三种标注格式各有各的坑。COCO格式用JSON存每个标注带image_id和category_id适合大多数检测框架的现成脚本但读取时需要先建一张id到类别名的映射很多人直接在类别名上做判断导致漏标。VOC格式是XML一个文件对应一张图优点是方便按文件粒度做数据划分缺点是标签字段多、写解析器容易出错。YOLO格式是txt每行是“类别id 中心x 中心y 宽 高”全部用相对坐标目录结构最简单但id必须和类别配置文件严格对齐换一个类别顺序整个训练就乱了。我的习惯是不管原始格式是什么先统一转成YOLO格式再进训练管线因为相对坐标对图像缩放免疫跑数据增强时坐标不用跟着改。转之前先确认图片原始宽高YOLO坐标系里所有值都是归一化的如果直接从XML或JSON里把绝对坐标拷贝进去宽高比会错训练时损失会异常震荡。一个容易被忽略的细节是目标框超出图像边界时要不要裁剪。远程短焦相机采集的数据常常有目标出框我倾向于先把坐标裁剪到[0,1]范围内再过滤掉面积过小的框而不是把非法坐标直接交给训练脚本。2.3 解压后先确认哪几样东西文件树、类别文件、标签样本解压一个数据集我最先做的不是看训练脚本而是确认三个东西图片和标签是否一一对应、类别清单是否和预期任务一致、有没有样本缺标签或标签是空的。一个常见情况是数据集的“标志”类别包含子类别比如把“限速30”和“限速60”都归到“限速牌”大类如果你的任务需要区分具体数值就要做二次拆分。一个典型的目录结构长这样dataset/ ├── images/ │ ├── train/ # 训练图片 │ ├── val/ # 验证图片 │ └── test/ # 测试图片 ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ ├── classes.txt # 类别清单一行一个类别 └── data.yaml # 数据集配置确认这一步的意义在于避免“标签漂移”训练到一半发现某个类别在训练图片里有、在验证图片里没有或者类别文件顺序和标签id对不上。我通常写一个十几行的脚本对一下图片和标签数量再随机抽几十张图把检测框画出来人工过一眼确认标注内容和你要建模的目标一致。3. 把数据集变成可训练的检测任务配置、划分与首次训练3.1 类别文件与标签映射最容易翻车的一步类别文件是整个训练管线里最容易出问题的地方。YOLO格式的标签里存的不是类别名而是idid从0开始按classes.txt的行顺序递增。如果数据集的原始标注里“车辆”的id是1而你的classes.txt把“行人”放在第一行模型会把所有车辆当成行人去训练损失看起来正常mAP却始终不高。排查方式很直接随机看一张图的标签内容再对照classes.txt反推出类别名。# check_labels.py from pathlib import Path classes Path(classes.txt).read_text().splitlines() label_file Path(labels/train/000001.txt) for line in label_file.read_text().strip().splitlines(): cls_id, x, y, w, h line.split() print(classes[int(cls_id)], x, y, w, h)这段脚本把标签第一列解析成类别id再映射回类别名。如果打印出来的类别和图片内容明显不符就不是模型问题而是类别顺序错了。处理方式是把classes.txt按数据集原始定义重排同时把标签文件里的id统一重写而不是在训练配置里做映射。3.2 数据划分按场景而不是按文件序号很多数据集在打包时已经按train/val/test分好了但如果是自己重新划分要注意一个原则不能按文件序号随机切而应该按场景来源切。同一段路连续采的几百张图如果一部分进train、一部分进val验证集难度会被严重低估因为模型已经在上下相邻帧里见过了几乎一样的场景。自动驾驶数据大多是序列帧这个问题尤其突出。我一般先把图片按文件名前缀分组判断哪些来自同一采集片段再以组为单位划分。划分比例上train/val/test用8:1:1起步但如果数据量不大val可以适当扩大避免个别难例类别在验证集里一帧都没出现。用文件名做序列分组的脚本大致是这样# 按文件名前缀分组整组划分到不同集合 ls raw_images/*.jpg | sed -E s#(raw_images/)?([a-z]_[0-9])_.*#\2# | sort -u scene_groups.txt这个脚本只做分组不做划分。正式训练时建议用Python按场景分组划分特别是包含连续帧的数据集否则验证集里很容易混入几乎相同的画面导致训练曲线好看、真实验证翻车。3.3 首次训练的最小命令与参数选择数据整理好后用一份最小配置先把管线跑通不要一上来就上多卡大模型。第一次训练的目标是验证数据读取、模型结构、损失计算三个环节都正常所以batch size和分辨率取模型默认值epochs给少一点。训练时重点看两类内容前几个batch的loss是否在稳定下降以及验证集上每个类别的AP是否有区分度。一个常见做法是用YOLO系的检测框架配置文件里指定data.yaml路径和类别数命令大致是python train.py --data data.yaml --img 640 --batch 16 --epochs 50 --weights pretrained.pt这里最关键的是--img的选择。交通标志是小目标如果把图片缩到640很多标志只有十几像素训练出来的模型精度会很差但如果直接用1280显存和训练时间都会涨。我的做法是先看目标尺寸分布标志中位尺寸如果有30×30像素选640就会丢失大量细节可以先跑一个1280的短实验对比同一个epoch下交通物体和标志两类AP的差距再决定主力训练用多大分辨率。pre-trained权重最好选在类似场景上预训练过的版本直接扔一个COCO权重也能跑但收敛速度会慢不少。4. 训练中的三类典型坑小目标、样本不均衡、标志误检4.1 交通标志在远距离下变成小目标loss异常震荡的解法现象整体loss在下降但标志类别的AP一直趴着不动甚至小标志被全部漏检。训练曲线看起来正常验证集上单独拉出标志类别一看精度远低于车辆类别。原因模型的特征金字塔浅层对小目标表达能力不足加上图像缩放让标志细节直接丢失。另一个常见错觉是以为“图片里能看清”模型就一定学得会实际上标注框越小正样本在训练时能贡献的梯度信号越弱需要多尺度增强来补偿。解决分三步走。第一步提高输入分辨率把训练和推理分辨率从640提到960或1280代价是训练时间增加但标志类别的收益通常非常明显。第二步开启小目标增强比如随机裁剪放大路边区域或者在Mosaic增强里提高小框的生成概率。第三步回头检查数据集中标志框的面积分布如果中位面积本身太小说明采集距离过远这时候靠模型硬学不如在标注阶段把远距离标志单独复制增强。4.2 类别样本数差十倍以上精度两极分化的处理现象车辆类别的AP有90%停止标志AP有80%但某个冷门禁令标志AP不到30%而且不是因为这个类别本身难纯粹是样本太少。原因样本不均衡。数据集中部分标志类别只有几十个实例模型见过的次数太少学不到稳定的特征表达。自动驾驶数据里车辆和行人天然占多数标志类别又细分成很多子类这个问题几乎无法避免。解决第一手段是类别重采样让每个类别每个epoch出现的样本数尽量接近简单做法是给少样本类别提高采样权重。第二手段是给少样本类别设置更高的loss权重。第三手段是数据增强时对这些类别的实例做复制粘贴增强把标志贴到不同的路面背景上。需要注意重采样不等于无限复制样本量极小的类别靠复制粘贴能提升框回归但语义特征还是依赖真实样本的多样性效果有明显的边际递减。4.3 标志与车辆互相误检类间混淆的排查思路现象验证集上卡车被识别成禁令标志或者红色标志被识别成尾灯置信度还不低。看整体mAP问题不大单独看混淆矩阵才发现是某一对类别互相干扰。原因颜色和纹理特征接近模型把“红色圆形”当成了判别特征。比如尾灯和禁令标志都是红色圆形夜间场景下边界更模糊。这其实是标注问题和模型问题的叠加。解决先看混淆矩阵确认是哪一对类别互相干扰再检查标注是否规范同一块标志在不同距离、不同光照下是否被统一标注成同一类别。如果标注本身不一致模型内部会学到两套特征表示表现就是训练震荡、验证AP忽高忽低。处理标注后再考虑增加负样本把容易被误检的车辆局部图作为背景样本加进训练集让模型学会区分“这是车的一部分”和“这是一个标志”。5. 验证不能只看mAP坏样本分析才是数据集价值的第二层5.1 mAP涨了但路测还是翻车指标和场景的gap很多人在训练集上mAP涨到很高拿到真实道路上一测发现远距离标志还是丢、逆光场景全崩。原因不一定是模型不行而是验证集本身和真实场景分布不一致。数据集里的val往往和train来自同一批采集天气、时间段、路段都很接近模型只要记住场景就能拿高分。建议单独切一个“场景验证集”里面包含晴天、逆光、夜间、雨天、远距离和遮挡六类场景每类场景单独算一遍AP而不是合并成一个整体mAP。对比场景间AP的差距能直接定位模型盲区如果夜间AP比晴天低一半说明训练数据里夜间样本占比不足或者标注框在夜间有系统性偏移。这时候再去加数据、调参数方向就明确了。做这个分析时把各类场景的AP画成柱状图能明显看到哪些场景是短板。我习惯把这个场景验证集固定保存下来每次训练完都跑一遍作为模型的“体检报告”。5.2 用混淆矩阵和置信度曲线定位问题类别训练结束后导出混淆矩阵看类别间误检再画每个类别的置信度-召回曲线。标志类别如果在低置信度区间召回掉得很快说明模型对这类目标的判别特征不足如果高置信度区间还有大量误检说明类别间的特征边界不清。这两个现象的处理方向完全不同前者靠加数据、加强小目标增强后者靠样本清洗和加负样本。具体做法是固定一个召回率目标比如召回率0.9时看各类别需要的置信度阈值。阈值越高说明该类别的置信度输出越保守推理时越容易被过滤掉。发现某个类别阈值明显高于其他类别就要单独查它的样本质量和数量。5.3 错误标注的清洗流程一次能提几个点的操作数据集的标注质量直接决定模型上限而这个上限不是靠换网络结构能突破的。我一般会在第一次训练后做一轮坏样本分析把验证集里预测错误且置信度高的图片全部导出人工检查是标注框偏移、类别错误还是漏标。把错误标注修正后重新训练往往比加数据更有效。这个流程的关键是高频批量筛选而非逐张看。一次导出几百张图按错误类型分组框偏移一类、类别错一类、漏标一类每类挑最有代表性的几张看确定错误规律后再写脚本批量修正。如果发现某个类别的标注偏差是系统性的比如所有标志框都偏左两个像素直接写脚本做整体偏移修正就行不需要人工逐张改。6. 把这套数据集的剩余价值榨干半监督标注与难例挖掘6.1 用训练好的模型做自动标注人工只做校正数据集标注是成本大头尤其交通标志这种小目标人工标注一帧图要花不少时间。真正划算的方式是用第一轮训练好的模型做预标注把置信度高于0.9且类别明确的预测结果直接当成伪标签人工只需要处理置信度在0.5到0.9之间的样本。这个过程能让标注效率翻倍但要注意伪标签的类别分布要和真实分布接近否则模型会被自己的输出带偏。我一般会在自动标注后随机抽5%做二次校验确认伪标签的准确率在可接受范围内。6.2 难例挖掘把丢检和误检的图加回去重训把错误预测的样本收集起来分成两类处理模型漏检的直接作为新增难例加进训练集模型误检的需要修正标注或作为负样本。重训时不要重新随机打乱整个数据集而是在原有训练集基础上把难例样本提高采样权重这样收敛更快也不会破坏已有的类别平衡。难例挖掘的效果往往在推理阶段体现得最明显模型的召回率不变但误检明显减少。6.3 类别合并与粒度再平衡的收尾技巧如果数据集中部分标志子类样本太少比如“限速30”只有十几张、“限速60”只有十几张强行区分会让模型学不清楚。可以把这些子类别合并成“限速标志”大类训练推理时再通过模板匹配或版面识别做细分。这个做法在样本总量不够时比硬训多分类可靠得多我习惯把它作为数据集的兜底策略。训练时多花一小时做类别和样本分布核查比事后反复调参省出几天时间希望这个方向的做法能帮到你。本文还有配套的精品资源点击获取