智慧交通-yolo 车辆闯红灯目标检测数据集
【数据内容】
7049张图片,包含车、左转绿箭头、右转绿箭头、直行绿箭头、绿灯圆形、左转红箭头、红灯圆形、停车线、黄灯圆形等目标,图片清晰标注,适合目标检测模型训练
【格式支持】
数据集已标注好,支持yolo格式输出,直接可用
1
YOLO车辆闯红灯目标检测数据集 — 结构化信息表
| 字段 | 内容描述 |
|---|---|
| 数据集名称 | 车辆闯红灯目标检测数据集 |
| 图像数量 | 7,049 张 |
| 目标类别 | 车、左转绿箭头、右转绿箭头、直行绿箭头、绿灯圆形、左转红箭头、红灯圆形、停车线、黄灯圆形(共9类) |
| 数据内容 | 包含城市路口典型场景下的交通灯与车辆状态图像,重点标注与闯红灯行为相关的关键视觉元素 |
| 图像质量 | 图片清晰,分辨率高,标注精准,适合用于目标检测模型训练 |
| 标注格式 | 已完成标注,支持 YOLO 格式输出(.txt标签文件,每行格式:class_id center_x center_y width height,归一化坐标) |
| 数据用途 | 适用于交通违规检测、智能监控、信号灯识别、车辆行为分析等计算机视觉任务 |
| 使用建议 | 可直接用于 YOLO 系列模型(如 YOLOv5/v8/v11)的训练与推理;建议结合数据增强策略提升模型在复杂光照和遮挡场景下的鲁棒性 |
| 应用场景扩展 | 支持扩展至交通信号状态识别系统(Traffic Light Recognition, TLR)、智能交通监控系统(ITS)等实际工程落地项目 |
说明:该数据集聚焦于闯红灯行为检测的核心要素,不仅标注车辆,还精细标注各类信号灯状态及停车线位置,有助于构建端到端的违规判别模型。结合YOLO的高效检测能力,可实现对路口动态的实时理解与预警。
为了充分利用这些数据,我为您编写了基于YOLOv8的训练代码。考虑到数据集中包含“箭头”和“圆形”等不同形状的信号灯,我在代码中特别优化了小目标检测和多类别区分的参数。
1. 准备工作:配置文件
在运行代码前,请确保您的目录结构清晰,并创建traffic_violation.yaml配置文件。
目录结构建议:
Dataset/ ├── images/ │ ├── train/ (存放约5600张训练图) │ └── val/ (存放约1400张验证图) ├── labels/ │ ├── train/ (对应的YOLO格式txt标签) │ └── val/ └── traffic_violation.yamltraffic_violation.yaml内容:
path:./Dataset# 数据集根目录train:images/trainval:images/val# 类别数量:9类nc:9# 类别名称 (顺序需与您的标注一致)names:0:vehicle# 车1:green_left_arrow# 左转绿箭头2:green_right_arrow# 右转绿箭头3:green_straight# 直行绿箭头4:green_circle# 绿灯圆形5:red_left_arrow# 左转红箭头6:red_circle# 红灯圆形7:stop_line# 停车线8:yellow_circle# 黄灯圆形2. 训练代码 (train_rush_light.py)
这段代码针对您的9类目标进行了定制,使用了YOLOv8m(中等大小模型),因为它在识别细微的“箭头”形状和“圆形”灯光时,比 nano 模型具有更高的精度。
importosfromultralyticsimportYOLOimporttorchdeftrain_traffic_model():# 1. 设备配置# 优先使用 GPU,如果没有则使用 CPUdevice='0'iftorch.cuda.is_available()else'cpu'print(f"🚀 正在使用设备:{device}")# 2. 加载模型# 建议使用 yolov8m.pt,因为数据集包含9类目标且包含细小箭头,m模型特征提取能力更强# 如果显存不足,可改为 'yolov8s.pt'model=YOLO('yolov8m.pt')# 3. 训练参数配置results=model.train(data='traffic_violation.yaml',# 数据集配置文件epochs=200,# 训练轮数 (7000张图建议 100-300 轮)imgsz=640,# 输入图像尺寸batch=16,# 批次大小 (根据显存调整,显存不够设为 8)device=device,workers=8,# 数据加载线程数# --- 优化器设置 ---optimizer='AdamW',# AdamW 收敛更稳定lr0=0.001,# 初始学习率lrf=0.01,# 最终学习率momentum=0.937,# 动量weight_decay=0.0005,# 权重衰减# --- 针对交通场景的增强 ---# 交通灯通常较小,开启 Mosaic 和 MixUp 有助于提升鲁棒性mosaic=1.0,# Mosaic 增强 (100%概率)mixup=0.1,# MixUp 增强copy_paste=0.0,# 复制粘贴增强 (对重叠车辆有效,这里暂关)# 几何变换degrees=0.0,# 旋转角度 (交通场景通常水平,不建议大角度旋转)translate=0.1,# 平移scale=0.5,# 缩放 (增强不同距离的车辆/灯光检测能力)shear=0.0,# 剪切# 颜色变换 (适应白天/夜晚/阴雨天)hsv_h=0.015,# 色调hsv_s=0.7,# 饱和度hsv_v=0.4,# 亮度# --- 其他设置 ---patience=100,# 早停机制 (100轮无提升则停止)save=True,# 保存模型save_period=-1,# 仅保存最佳模型project='runs/traffic_detect',# 项目保存路径name='rush_light_v1',# 实验名称exist_ok=False,verbose=True)print("✅ 训练完成!模型保存在 runs/traffic_detect/rush_light_v1/weights/best.pt")# 4. 验证模型# 在验证集上测试性能metrics=model.val()print(f"📊 mAP50:{metrics.box.map50:.4f}")print(f"📊 mAP50-95:{metrics.box.map:.4f}")if__name__=='__main__':train_traffic_model()3. 代码关键点解析
- 模型选择 (
yolov8m.pt):- 您的数据集中包含“左转绿箭头”、“直行绿箭头”等相似类别。
yolov8n虽然速度快,但在区分这些细微差别的形状时可能精度不足。yolov8m参数量更大,能更好地提取箭头特征。
- 您的数据集中包含“左转绿箭头”、“直行绿箭头”等相似类别。
- 数据增强策略:
mosaic=1.0:Mosaic 增强将4张图片拼接成1张,这对于检测小目标(远处的红绿灯)非常有效,因为它增加了背景复杂度和目标密度。degrees=0.0:交通监控摄像头通常是固定角度的(俯视或平视),因此不需要像自然图像那样进行大角度旋转,设为0可以避免产生不符合物理规律的样本。
- 类别平衡:
- 数据集中“车”的数量可能远多于“箭头”。YOLOv8 内部会自动处理类别权重,但如果训练后发现“箭头”识别率低,可以在
yaml文件中增加hyp参数中的cls_loss权重。
- 数据集中“车”的数量可能远多于“箭头”。YOLOv8 内部会自动处理类别权重,但如果训练后发现“箭头”识别率低,可以在
4. 训练后的应用思路
训练完成后,您可以利用生成的best.pt模型实现“闯红灯”逻辑:
- 检测:识别画面中的
vehicle、stop_line和red_circle(或红色箭头)。 - 逻辑判断:
- 计算车辆中心点与
stop_line的相对位置。 - 如果车辆越线(中心点在停车线前方)且当前信号灯类别为
red_circle/red_left_arrow。 - 判定:触发违规报警。
- 计算车辆中心点与