Advertisement

如何训练自己的数据集之——【交通信号灯检测数据集】

阅读量:

交通信号灯检测数据集

交通信号灯检测数据集

交通信号检测数据集

0175be7dbe8f4d7e8edbbf2d1cd7524d.png

【交通信号灯检测数据集】10742张,3类

851c45b9bdb54f15bd6dd2b90487142e.png

名称类别包括['绿灯','红灯','黄灯']。
总计共有 10,742 张图片采用 8:1:1 的比例划分为训练集、验证集和测试集。
其中:
训练集占用了 8,593 张图片;
验证集使用了 1,074 张图片;
测试集则分配了 1,075 张图片。
这些标注文件均为YOLO格式 txt 格式文件,
可以直接导入模型进行训练流程。
评估结果显示 map@50 达到了 87.8%,
具体分类准确率为:
绿灯类目识别准确率高达 80.3%;
红灯类目识别准确率为 84%;
黄灯类目识别准确率达到最佳水平 98.9%。

e9b4ac5a1f494c26ac794451ee7ebf28.png
6eb0e69d66554304bf744d06b8990980.png

交通信号灯检测数据集介绍

0db3056e582e4f68bc4ad9d4d26f2170.png

数据集概述

本数据集特意针对交通信号灯检测领域设计,并共计包括了10742幅图像。每一张图像都特别地带有YOLO格式的.txt标签文件。同时,在数量上按照8:1:1的比例将这些图像分配给训练集、验证集和测试集,并依照8:1:1的比例将这些图像分配给训练集、验证集和测试集。以下是该数据集的详细信息:

  1. 数据量 :共10742张图像。
  2. 类别 :三类交通信号灯(绿灯、红灯、黄灯)。
  3. 数据格式 :每张图像均附有.txt标签文件(YOLO格式)。
  4. 数据划分
    • 训练集:8593张图像。
    • 验证集:1074张图像。
    • 测试集:1075张图像。
  5. 性能指标
    • mAP50:87.8%
    • green:80.3%
    • red:84%
    • yellow:98.9%

数据集特点

  1. 该方法基于交通信号灯检测需求设计,并广泛应用于智能交通系统和自动驾驶技术领域。
  2. 每张图像均附有丰富且详实的标签信息,这些细节有助于提升模型的学习效果。
  3. 所有的标签均按照YOLO格式规范化编码, 这一做法因其高效性而广受欢迎.
  4. 配置文档中包含一份.yaml文件, 其中具体记录了数据集的完整配置参数.
  5. 该方法在各类别检测任务中表现尤为突出, 在黄灯识别任务中更是达到了令人瞩目的98.9%的准确率.

数据集内容

694f3c98633b4197900e6d9dcf3cb60e.png
  • 图像数据集:包含了总共10742张JPG和PNG格式的图片。
  • 标注数据:对于每一张图片而言,在其对应的.txt文本中包含了目标物体边界框的位置信息。
  • 配置参数:整个数据集的基本设置由一个.yaml参数文档来完成描述。

数据集结构示例

假设数据集的主目录为traffic_light_detection_dataset ,其可能的组织架构如下所示:

复制代码
 traffic_light_detection_dataset/

    
 ├── train/
    
 │   ├── images/
    
 │   │   ├── image_000001.jpg
    
 │   │   ├── image_000002.jpg
    
 │   │   └── ...
    
 │   ├── labels/
    
 │   │   ├── image_000001.txt
    
 │   │   ├── image_000002.txt
    
 │   │   └── ...
    
 ├── valid/
    
 │   ├── images/
    
 │   │   ├── image_000001.jpg
    
 │   │   ├── image_000002.jpg
    
 │   │   └── ...
    
 │   ├── labels/
    
 │   │   ├── image_000001.txt
    
 │   │   ├── image_000002.txt
    
 │   │   └── ...
    
 ├── test/
    
 │   ├── images/
    
 │   │   ├── image_000001.jpg
    
 │   │   ├── image_000002.jpg
    
 │   │   └── ...
    
 │   ├── labels/
    
 │   │   ├── image_000001.txt
    
 │   │   ├── image_000002.txt
    
 │   │   └── ...
    
 └── data.yaml  # 数据集配置文件
    
    
    
    
    AI写代码

数据集配置文件 data.yaml

请建立一个名为data.yaml的数据文档来详细描述该数据集。假设该数据集被存储在一个名为traffic_light_detection_dataset的目录中,并且包含train、valid和test子目录。

复制代码
 # data.yaml 文件

    
 train: ../traffic_light_detection_dataset/train/images/
    
 val: ../traffic_light_detection_dataset/valid/images/
    
 test: ../traffic_light_detection_dataset/test/images/
    
  
    
 nc: 3  # number of classes
    
 names: ['green', 'red', 'yellow']  # 类别名称
    
    
    
    
    AI写代码

关键训练代码

安装YOLOv7

如果您还没有安装YOLOv7框架,请按照官方文档执行以下命令:

复制代码
 git clone https://github.com/WongKinYiu/yolov7.git  # 克隆YOLOv7仓库

    
 cd yolov7
    
 pip install -r requirements.txt  # 安装依赖项
    
    
    
    
    AI写代码

使用YOLOv7训练

使用以下命令开始训练模型:

复制代码
 cd yolov7

    
 python train.py --img 640 --batch 16 --epochs 100 --data ../traffic_light_detection_dataset/data.yaml --weights yolov7.pt --cache
    
    
    
    
    AI写代码

自定义训练脚本

当希望实现更为精细的调控时

复制代码
 import torch

    
 from yolov7.utils.datasets import LoadImagesAndLabels
    
 from yolov7.models.yolo import Model
    
  
    
 def train_model():
    
     device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    
     data_yaml = '../traffic_light_detection_dataset/data.yaml'
    
     
    
     # 加载数据集
    
     train_loader = LoadImagesAndLabels(data_yaml, img_size=(640, 640), batch_size=16, augment=True)
    
     
    
     # 加载预训练模型
    
     model = Model('yolov7.yaml').to(device)
    
     
    
     # 设置训练参数
    
     epochs = 100
    
     optimizer = torch.optim.SGD(model.parameters(), lr=0.001, momentum=0.9, weight_decay=0.0005)
    
     scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=30, gamma=0.1)
    
     
    
     # 开始训练
    
     for epoch in range(epochs):
    
     model.train()
    
     for batch_idx, (images, targets) in enumerate(train_loader):
    
         images = images.to(device)
    
         targets = [t.to(device) for t in targets]
    
         
    
         # 前向传播
    
         output = model(images)
    
         
    
         # 计算损失
    
         loss = model.loss(output, targets)
    
         
    
         # 反向传播
    
         optimizer.zero_grad()
    
         loss.backward()
    
         optimizer.step()
    
     
    
     # 更新学习率
    
     scheduler.step()
    
     
    
     # 保存模型
    
     torch.save(model.state_dict(), 'trained_model.pt')
    
     print('Training complete.')
    
  
    
 if __name__ == '__main__':
    
     train_model()
    
    
    
    
    AI写代码

使用训练好的权重文件进行测试

对于已经拥有的经过训练的模型权重文件,可以直接利用其进行测试。假设权重文件的名称为 best.pt ,可以通过以下命令进行操作。

复制代码
    python detect.py --weights best.pt --img 640 --conf 0.4 --source ../traffic_light_detection_dataset/test/images/
    
    AI写代码

总结

此案例说明了YOLOv7框架在交通信号灯检测数据集上的应用过程。借助此数据集以及相应的训练代码配置文件中的设置与流程结构, 您能够适应不同环境条件下的交通信号灯检测任务, 并获得较为精确的结果。在实际应用环境中, 根据具体需求优化模型架构以及配置文件中的设置, 可以显著提高算法性能并满足现实场景下的多样化需求。另外, 提供的完整代码不仅帮助您快速启动并完成整个训练流程, 而且可使您获得令人满意的检测效果, 从而更好地支持智能交通系统等相关技术实现

当您希望对现有的分类系统进行扩展或引入新的数据划分方案时(例如考虑增加更多的训练样本、验证样本以及测试样本),可以通过修改 data.yaml 文件来实现这一功能,并在设置训练与测试参数时指定相关路径以确保数据加载过程的有效性

全部评论 (0)

还没有任何评论哟~