计算机视觉深度学习YOLOV8模型训练车辆种类检测数据集 车辆类别检测数据集的训练及应用 推理识别检测大巴车 卡车 汽车巴士等进行检测识别


以下文字及代码仅供参考学习使用。

在这里插入图片描述

车辆种类检测数据集信息表

数据集概述
项目 内容
数据集名称 车辆种类检测数据集
总图像数量 4,058 张
应用场景 智能交通系统(ITS)、自动驾驶、交通管理、路径规划、避让决策
目标类别 12 类车辆类型,具体如下表
标注格式 .txt(YOLO 格式,归一化坐标)
适用模型 YOLO 系列(直接用于训练)

类别标签对照表

类别编号 英文名称 中文名称 描述
0 big bus 大巴 大型公共汽车
1 big truck 大卡车 大型货运车辆
2 bus-l- 大客车-L 长款大型公共汽车
3 bus-s- 巴士-S- 短款大型公共汽车
4 car 汽车 小型乘用车
5 mid truck 中型卡车 中型货运车辆
6 small bus 小巴士 小型公共汽车
7 small truck 小卡车 小型货运车辆
8 truck-l- 卡车-L- 长款卡车
9 truck-m- 卡车-M- 中长款卡车
10 truck-s- 卡车-S- 短款卡车
11 truck-xl- 卡车-XL- 特大型卡车

数据集划分及标注统计

数据集类型 图像数量 占比 用途
训练集 3,246 张 80% 用于模型训练
验证集 405 张 10% 用于评估模型性能,调参
测试集 407 张 10% 用于最终模型评估,确保泛化能力
总计 4,058 张 100% ——

数据集

  • 大规模数据集:包含 4,058 张高清图片,覆盖多种类型的车辆。
  • 详细分类:细分为 12 类车辆,涵盖从小型汽车到特大型卡车的不同类型。
  • 标准格式:提供 .txt 标注文件,兼容 YOLO 系列模型,可以直接用于训练。
  • 科学划分:按照 8:1:1 的比例进行训练集、验证集和测试集的划分,确保模型的有效性和泛化能力。

研究意义

车辆种类检测数据集的研究背景主要关注于以下几个方面:

  1. 智能交通系统(ITS)

    • 准确识别不同类型的车辆帮助交通管理部门实时监控车流情况,优化交通信号控制,减少拥堵。
  2. 自动驾驶技术

    • 自动驾驶车辆需要能够准确识别周围的车辆类型,以便做出合理的路径规划和避让决策,提高行驶安全性和效率。
  3. 交通管理和安全

    • 基于计算机视觉的车辆检测技术可以快速、准确地分类各类车辆,有助于提升交通管理效率,减少交通事故的发生。
  4. 智慧城市建设

    • 通过高效、准确的车辆检测技术,助力智慧城市的建设和发展,改善城市交通状况,提升居民生活质量。

data.yaml 示例内容
train: ./vehicle-detection-dataset/images/train
val: ./vehicle-detection-dataset/images/val
test: ./vehicle-detection-dataset/images/test

nc: 12  # 类别数量
names: ['big bus', 'big truck', 'bus-l-', 'bus-s-', 'car', 'mid truck', 'small bus', 'small truck', 'truck-l-', 'truck-m-', 'truck-s-', 'truck-xl-']

在这里插入图片描述
1
在这里插入图片描述
1
在这里插入图片描述
你提供的 车辆种类检测数据集(12类,共4058张图像,YOLO格式)非常适合用于智能交通系统(ITS)和自动驾驶场景中的精细化车辆分类任务。以下是完整的 环境搭建 → 数据准备 → YOLOv8 训练 → 推理 → 评估 → 部署建议 的全流程技术指导。


✅ 一、环境配置

1. 安装 CUDA 驱动(GPU 加速)

确保你的 NVIDIA 显卡驱动已安装:

nvidia-smi

输出应显示 GPU 信息。推荐使用 CUDA 11.8 或 12.1


2. 安装 Anaconda

下载并安装 Anaconda(Python 3.9+ 推荐)。


3. 创建 Python 虚拟环境

conda create -n vehicle_yolo python=3.9
conda activate vehicle_yolo

4. 安装必要依赖

# 安装 PyTorch(以 CUDA 11.8 为例)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

# 安装 YOLOv8 官方库
pip install ultralytics opencv-python numpy matplotlib tqdm scikit-learn pandas

# 可选:TensorBoard 可视化
pip install tensorboard

# 图像查看工具
pip install pillow

验证 GPU 是否可用:

python -c "import torch; print(torch.cuda.is_available())"
# 应输出 True

✅ 二、数据集结构与 data.yaml 配置

数据目录结构

vehicle_dataset/
├── images/
│   ├── train/      # 3246 张
│   ├── val/        # 405 张
│   └── test/       # 407 张
├── labels/
│   ├── train/      # 对应的 .txt 文件 (YOLO 格式)
│   ├── val/
│   └── test/
└── data.yaml       # 数据配置文件

创建 data.yaml

在项目根目录创建 data.yaml 文件:

# data.yaml
train: ./vehicle_dataset/images/train
val: ./vehicle_dataset/images/val
test: ./vehicle_dataset/images/test  # 支持独立测试集评估

# 类别数量
nc: 12

# 英文类别名称(与标签顺序一致)
names:
  - big bus
  - big truck
  - bus-l-
  - bus-s-
  - car
  - mid truck
  - small bus
  - small truck
  - truck-l-
  - truck-m-
  - truck-s-
  - truck-xl-

# 中文映射(用于可视化)
names_zh:
  - 大巴
  - 大卡车
  - 大客车-L
  - 巴士-S-
  - 汽车
  - 中型卡车
  - 小巴士
  - 小卡车
  - 卡车-L-
  - 卡车-M-
  - 卡车-S-
  - 卡车-XL-

⚠️ 注意:YOLOv8 要求 names 列表中的顺序与 .txt 标注中的类别 ID 完全对应(从 0 开始)。


✅ 三、调用 YOLOv8 官方预训练模型进行训练

由于类别较多(12类),建议使用 YOLOv8m 或 YOLOv8l 以提升分类精度。

from ultralytics import YOLO

# 加载官方预训练模型(推荐使用 yolov8m.pt)
model = YOLO('yolov8m.pt')  # 自动下载预训练权重

# 开始训练
results = model.train(
    data='data.yaml',           # 数据配置文件
    epochs=150,                 # 训练轮数
    batch=32,                   # 根据显存调整(RTX 3090 可用 64)
    imgsz=640,                  # 输入尺寸(可尝试 800 提升小车检测)
    optimizer='AdamW',          # 更稳定优化器
    lr0=0.001,                  # 初始学习率
    weight_decay=0.0005,
    momentum=0.937,

    # 数据增强(提升泛化能力)
    augment=True,
    hsv_h=0.015,                # 色调扰动
    hsv_s=0.7,
    hsv_v=0.4,
    degrees=10.0,               # 随机旋转
    translate=0.1,
    scale=0.5,
    shear=0.0,
    flipud=0.0,
    fliplr=0.5,                 # 左右翻转
    mosaic=1.0,                 # Mosaic 增强
    mixup=0.1,                  # MixUp
    copy_paste=0.1,             # Copy-Paste(对小车有效)

    # 正则化
    dropout=0.2,
    label_smoothing=0.1,        # 标签平滑,防止过拟合

    # 学习率调度
    cos_lr=True,                # 余弦退火学习率

    # 保存与日志
    project='runs/train',
    name='vehicle_yolov8m',
    save=True,
    save_period=10,
    exist_ok=False,

    # 缓存(内存充足时开启)
    cache=False
)

💡 建议

  • 若显存不足,改用 yolov8s.pt 或降低 batch=16
  • 可尝试 imgsz=800 提升远处小车检测能力
  • 使用 copy_paste 增强稀有类别(如 truck-xl-

✅ 四、推理代码(单图 / 批量 / 视频)

1. 单张图像推理

from ultralytics import YOLO
from PIL import Image

# 加载最佳模型
model = YOLO('runs/train/vehicle_yolov8m/weights/best.pt')

# 推理
results = model('test_car.jpg', conf=0.4)  # 设置置信度阈值

# 显示结果
for r in results:
    im_array = r.plot()  # 绘制边界框和标签
    im = Image.fromarray(im_array[..., ::-1])  # BGR to RGB
    im.show()

2. 批量图像推理

results = model.predict(
    source='vehicle_dataset/images/test',
    save=True,
    project='runs/detect',
    name='vehicle_test_results',
    conf=0.4,
    imgsz=640
)
print("批量推理完成")

3. 视频检测(如交通监控视频)

results = model.predict(
    source='traffic_video.mp4',
    save=True,
    project='runs/detect/video',
    name='traffic_result',
    show=False,
    conf=0.4
)
print("视频检测完成")

4. 实时摄像头检测(OpenCV)

import cv2

cap = cv2.VideoCapture(0)

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    results = model(frame, conf=0.4)
    annotated_frame = results[0].plot()

    cv2.imshow('Vehicle Detection', annotated_frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

✅ 五、模型评估(验证集 + 测试集)

1. 在验证集上评估

metrics = model.val(
    data='data.yaml',
    split='val',
    batch=32,
    imgsz=640,
    save_json=False,
    project='runs/val',
    name='vehicle_eval'
)

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
for i, name in enumerate(model.names):
    print(f"{name} (AP@0.5): {metrics.box.ap[i]:.4f}")

2. 在测试集上独立评估(推荐)

# 使用 test split 进行最终性能评估
test_metrics = model.val(
    data='data.yaml',
    split='test',
    save_json=True,
    name='test_final'
)

print(f"Test mAP@0.5: {test_metrics.box.map50:.4f}")

✅ 六、可视化与分析

1. 使用中文标签显示

# 修改模型类名显示为中文
model.names = ['大巴', '大卡车', '大客车-L', '巴士-S-', '汽车', '中型卡车',
               '小巴士', '小卡车', '卡车-L-', '卡车-M-', '卡车-S-', '卡车-XL-']

results = model('test.jpg')
results[0].plot()  # 显示中文标签

2. 查看训练曲线

tensorboard --logdir runs/train/vehicle_yolov8m

✅ 七、模型导出(ONNX / TensorRT / TFLite)

# 导出为 ONNX(通用部署)
model.export(format='onnx', dynamic=True, opset=13, imgsz=640)

# 导出为 TensorRT(NVIDIA GPU 加速)
model.export(format='engine', half=True, dynamic=True)

# 导出为 TFLite(移动端)
model.export(format='tflite', int8=True)

# 导出为 CoreML(iOS)
model.export(format='coreml')

✅ 八、优化建议(多类别车辆检测)

问题 建议
类别相似(如 bus-l- vs small bus) 使用更高分辨率(imgsz=800),增加训练 epoch
小目标(远处车辆) 启用 mosaic, copy_paste,使用 yolov8l
类别不平衡 检查 labels/ 中各类别分布,使用 class weights
过拟合 添加 dropout, label_smoothing, 早停

以上文字及代码仅供参考学习使用。

Logo

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

更多推荐