无人机智能交通监控、城市安防、自动驾驶辅助等场景。深度学习YOLOV11模型如何训练交通违规检测数据集 识别检测电动车头盔佩戴 行人闯红灯 横穿马路车辆闯红灯检测数据集

在这里插入图片描述

交通违规检测数据集

Yolo算法进行车辆、行人的交通违规检测任务,txt格式

7类,分别为:[‘Crossing_Violation’, ‘Crosswalk_Violation’, ‘Helmet_Violation’, ‘Normal’, ‘Passenger_Violation’, ‘Pedestrian_Violation’, ‘Trafficlight_Violation’]

训练集:4742张
验证集:390张

在这里插入图片描述


📊 数据集总体统计

项目 数值
总图像数量 5,132 张(训练集 4,742 + 验证集 390)
图像尺寸 可变(常见为 1920×1080 或 1280×720,适用于监控与车载视角)
类别数量 7 类
标注格式 .txt(YOLO 格式,归一化坐标)
适用任务 车辆与行人交通违规行为识别
可直接用于 YOLOv5 / YOLOv8 / YOLOv11 等系列模型训练

在这里插入图片描述

🏷️ 类别定义与说明

类别编号 类别名称(英文) 中文含义 备注
0 Crossing_Violation 横穿马路违规 行人或非机动车闯入禁止区域
1 Crosswalk_Violation 不走斑马线 行人未在斑马线上通行
2 Helmet_Violation 未戴头盔 骑电动车/摩托车未佩戴头盔
3 Normal 正常行为 无违规行为,作为负样本基准
4 Passenger_Violation 乘客违规 如副驾未系安全带、车窗探头等
5 Pedestrian_Violation 行人其他违规 如翻护栏、逆行等综合行为
6 Trafficlight_Violation 闯红灯 车辆或行人违反交通信号灯

在这里插入图片描述

🔢 数据集划分情况

数据集类型 图像数量 占比 用途
训练集(train) 4,742 张 ~92.4% 模型学习特征与规则
验证集(val) 390 张 ~7.6% 超参数调优与性能评估

⚠️ 注意:测试集未提供,建议从训练集中划分出独立测试集(如 5%)用于最终评估。


✅ YOLO 训练配置文件示例(data.yaml

# data.yaml
train: ./dataset/images/train
val: ./dataset/images/val

# 类别数量
nc: 7

# 类别名称(按索引顺序)
names: ['Crossing_Violation', 'Crosswalk_Violation', 'Helmet_Violation',
        'Normal', 'Passenger_Violation', 'Pedestrian_Violation', 'Trafficlight_Violation']

💡 使用建议

  • 应用场景:智能交通监控、城市安防、自动驾驶辅助系统。

🚦 交通违规检测数据集 + YOLOv11 训练方案

✅ 支持:车辆 & 行人 违规行为识别
✅ 标签格式:txt(YOLO 格式)
✅ 类别数:7
✅ 可直接用于 YOLO 系列模型训练
✅ 提供完整 Python 训练脚本


📊 数据集概览

项目 内容
总类别数 7 类
类别名称 ['Crossing_Violation', 'Crosswalk_Violation', 'Helmet_Violation', 'Normal', 'Passenger_Violation', 'Pedestrian_Violation', 'Trafficlight_Violation']
图像总数 5132 张
- 训练集 4742 张
- 验证集 390 张
标签格式 .txt 文件(每行:class_id center_x center_y width height,归一化)
应用方向 智能交通监管、AI 视频分析、违章自动抓拍

🔍 类别含义详解

类别英文名 中文解释 典型场景
Crossing_Violation 跨越道路中心线/双黄线 机动车压线变道、逆行
Crosswalk_Violation 不礼让斑马线 车辆在行人过街时未停车让行
Helmet_Violation 未佩戴头盔 电动车骑乘人员无头盔
Normal 正常状态 合规通行,作为背景参考
Passenger_Violation 乘客违规 副驾未系安全带、车窗探头等
Pedestrian_Violation 行人违规 闯红灯、翻护栏、非斑马线横穿
Trafficlight_Violation 闯红灯 机动车或非机动车红灯通行

⚠️ 注意:该数据集可能是以“图像级分类+目标定位”形式标注,也可能为“逐目标检测框+类别”,请确认是否每个对象都有独立边界框。以下按标准目标检测任务设计。


🗂️ 推荐目录结构

traffic_violation_dataset/
├── images/
│   ├── train/          # 4742 张
│   └── val/            # 390 张
├── labels/
│   ├── train/          # 对应的 .txt 标签文件
│   └── val/
├── traffic.yaml        # YOLO 配置文件
└── train.py            # 训练主程序

🛠️ YOLO 配置文件:traffic.yaml

# traffic.yaml
train: ./traffic_violation_dataset/images/train
val: ./traffic_violation_dataset/images/val

nc: 7
names: ['Crossing_Violation', 'Crosswalk_Violation', 'Helmet_Violation', 
        'Normal', 'Passenger_Violation', 'Pedestrian_Violation', 'Trafficlight_Violation']

✅ 将此文件保存在项目根目录下。


🚀 YOLOv11 完整训练代码:train.py

# train.py
from ultralytics import YOLO
import os
import time

# ======================= 参数配置 =======================
MODEL_NAME = "yolov11s.pt"               # 推荐使用 yolov11n/s/m;小显存选 n,精度高选 m/l
CONFIG_FILE = "traffic.yaml"             # 数据集配置路径
EPOCHS = 100
BATCH_SIZE = 16                          # 若显存不足可设为 8 或 4
IMG_SIZE = 640                           # 输入尺寸(可调整为 1280 提升小目标检测能力)
PROJECT_NAME = "traffic_violation_detection"
EXPERIMENT_NAME = "exp_traffic_yolo11"

DEVICE = 0 if os.environ.get("CUDA_AVAILABLE") else "cpu"  # 自动选择 GPU/CPU

# 检查配置文件是否存在
if not os.path.exists(CONFIG_FILE):
    raise FileNotFoundError(f"[ERROR] 找不到配置文件: {CONFIG_FILE}")

# ======================= 加载模型 =======================
print("🚀 加载 YOLOv11 模型...")
model = YOLO(MODEL_NAME)  # 自动下载预训练权重

# ======================= 开始训练 =======================
print("🔥 开始训练交通违规检测模型...")
start_time = time.time()

results = model.train(
    data=CONFIG_FILE,
    epochs=EPOCHS,
    batch=BATCH_SIZE,
    imgsz=IMG_SIZE,
    device=DEVICE,
    project=PROJECT_NAME,
    name=EXPERIMENT_NAME,
    exist_ok=True,
    patience=30,                         # 早停机制:验证损失连续30轮不降则停止
    save=True,
    save_period=10,                      # 每10轮保存一次检查点
    cache=False,                         # 设置为 True 可加快加载速度(需足够内存)
    workers=4,

    # 优化器设置
    optimizer='AdamW',
    lr0=0.001,                           # 初始学习率
    lrf=0.01,                            # 最终学习率 = lr0 * lrf
    momentum=0.937,
    weight_decay=0.0005,

    # 数据增强策略(适合交通场景)
    hsv_h=0.015,                         # 色调扰动
    hsv_s=0.7,
    hsv_v=0.4,
    degrees=10.0,                        # 轻微旋转模拟摄像头角度变化
    translate=0.2,
    scale=0.5,
    shear=2.0,
    flipud=0.0,                          # 上下翻转不合理(天空/地面不对称)
    fliplr=0.5,                          # 左右翻转增强
    mosaic=1.0,                          # Mosaic 增强提升小目标和遮挡鲁棒性
    mixup=0.1,                           # MixUp 缓解过拟合
    copy_paste=0.1,                      # 对 Helmet_Violation 等稀疏类有帮助
)

# ======================= 输出训练耗时 =======================
training_time = (time.time() - start_time) / 60
print(f"✅ 训练完成!总耗时: {training_time:.2f} 分钟")
print(f"📍 模型保存路径: {results.save_dir}")

# ======================= 验证模型性能 =======================
print("🔍 开始验证...")
metrics = model.val()
print(f"mAP@0.5: {metrics.box.map50:.4f}")
print(f"mAP@0.5:0.95: {metrics.box.map:.4f}")
print(f"Precision: {metrics.box.p:.4f}")
print(f"Recall: {metrics.box.r:.4f}")

# 显示各类别 AP @0.5
print("\n📊 各类别 mAP@0.5:")
for i, cls_name in enumerate(model.names):
    print(f"  {cls_name}: {metrics.box.maps[i]:.4f}")

# ======================= 导出 ONNX 模型(便于部署) =======================
print("📦 导出 ONNX 模型...")
onnx_path = model.export(format="onnx", dynamic=True, simplify=True)
print(f"ONNX 模型已保存至: {onnx_path}")

🧪 推理示例代码:inference.py

# inference.py
from ultralytics import YOLO
import cv2

# 加载训练好的模型
model = YOLO("traffic_violation_detection/exp_traffic_yolo11/weights/best.pt")

# 单张图片推理
image_path = "test.jpg"
results = model(image_path, conf=0.4, iou=0.5, imgsz=640)

# 可视化结果
for r in results:
    im_array = r.plot()  # 绘制检测框和标签
    im = cv2.cvtColor(im_array, cv2.COLOR_RGB2BGR)
    cv2.imshow("Traffic Violation Detection", im)
    cv2.waitKey(0)
    cv2.imwrite("result_detected.jpg", im)

# 打印检测详情
for r in results:
    boxes = r.boxes
    for box in boxes:
        cls_id = int(box.cls[0])
        conf = float(box.conf[0])
        class_name = model.names[cls_id]
        print(f"检测到违规行为: {class_name} (置信度: {conf:.2f})")

🎯 应用场景建议

场景 实现方式
🚦 电子警察系统升级 替代传统触发式抓拍,实现全天候 AI 主动识别
🏙️ 智慧路口管理平台 接入多个摄像头,统计违规类型分布与热点区域
🛵 电动车头盔佩戴监管 重点识别 Helmet_Violation,联动广播提醒
🚶 行人闯红灯预警 检测 Pedestrian_Violation + Trafficlight_Violation 联合判断
📊 交通治理数据分析 导出 CSV 报表,辅助交管部门制定政策

⚠️ 注意事项与优化建议

问题 解决方案
Normal 类干扰检测 在推理阶段可只关注前6个“违规”类,或将 Normal 视为负样本
小目标难检(如远处头盔) 使用更高分辨率输入(如 imgsz=1280)或添加超分模块
类别不平衡 Helmet_ViolationPassenger_Violation 使用 Copy-Paste 增强
标注模糊 检查 .txt 文件是否为每辆车/人单独标注,避免整图打标
实时性要求高 导出为 TensorRT,在 Jetson 设备上运行

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐