首页 > 其他分享 >人行道斑马线红绿灯检测数据集 4900张 带标注 voc yolo 7类

人行道斑马线红绿灯检测数据集 4900张 带标注 voc yolo 7类

时间:2024-10-17 09:52:10浏览次数:11  
标签:torch voc 4900 image yolo images import model self

 

分类名: (图片张数,标注个数)
crossing: (4635, 4637)
stop: (1341, 1374)
countdown_ blank: (837, 849)
countdown_ go: (925, 940)
go: (1239, 1251 )
blank: (148, 148)
countdown_ stop: (4, 8)
总数: (4950, 9207)
总类(nc): 7类
 

人行道斑马线红绿灯检测数据集介绍

数据集概述
  • 名称:人行道斑马线红绿灯检测数据集
  • 用途:适用于从街道图像中检测和分类斑马线、红绿灯及其状态
  • 格式:VOC和YOLO格式
  • 图像数量:4,950张
  • 标注数量:9,207个
  • 类别:包括斑马线(crossing)、停止标志(stop)、倒计时空白(countdown_blank)、倒计时通行(countdown_go)、通行标志(go)、空白状态(blank)、倒计时停止(countdown_stop)七类
数据集特点
  • 多样性:包含多种交通信号标志,不同大小、形状和位置。
  • 高质量标注:每个图像都经过精确标注,提供边界框信息,适用于目标检测任务。
  • 实际应用场景:数据来自真实的街道场景,具有很高的实用价值。
  • 多状态:不仅检测红绿灯的存在,还区分了不同的状态(如倒计时、空白等)。

数据集结构

pedestrian_crossing_dataset/
├── images/  # 存放街道图像
│   ├── image1.jpg
│   ├── image2.jpg
│   └── ...
├── labels_voc/  # 存放对应的VOC格式标签文件
│   ├── image1.xml
│   ├── image2.xml
│   └── ...
├── labels_yolo/  # 存放对应的YOLO格式标签文件
│   ├── image1.txt
│   ├── image2.txt
│   └── ...
└── README.md  # 数据集说明文档

标注格式

VOC格式

每个图像都有一个对应的XML文件,存储在labels_voc/目录下。XML文件的结构如下:


<annotation>
    <folder>images</folder>
    <filename>image1.jpg</filename>
    <size>
        <width>1920</width>
        <height>1080</height>
        <depth>3</depth>
    </size>
    <object>
        <name>crossing</name>
        <bndbox>
            <xmin>100</xmin>
            <ymin>200</ymin>
            <xmax>300</xmax>
            <ymax>400</ymax>
        </bndbox>
    </object>
    <object>
        <name>stop</name>
        <bndbox>
            <xmin>500</xmin>
            <ymin>600</ymin>
            <xmax>700</xmax>
            <ymax>800</ymax>
        </bndbox>
    </object>
    <!-- 更多对象 -->
</annotation>
YOLO格式

每个图像都有一个对应的文本文件,存储在labels_yolo/目录下。文本文件的每一行代表一个检测对象,格式如下:

<class_id> <x_center> <y_center> <width> <height>
  • class_id:类别ID,对应以下类别:
    • 0: crossing
    • 1: stop
    • 2: countdown_blank
    • 3: countdown_go
    • 4: go
    • 5: blank
    • 6: countdown_stop
  • x_center 和 y_center:边界框中心点的归一化坐标(相对于图像宽度和高度)。
  • width 和 height:边界框的宽度和高度的归一化值。

类别统计

  • crossing:
    • 图片张数: 4,635
    • 标注个数: 4,637
  • stop:
    • 图片张数: 1,341
    • 标注个数: 1,374
  • countdown_blank:
    • 图片张数: 837
    • 标注个数: 849
  • countdown_go:
    • 图片张数: 925
    • 标注个数: 940
  • go:
    • 图片张数: 1,239
    • 标注个数: 1,251
  • blank:
    • 图片张数: 148
    • 标注个数: 148
  • countdown_stop:
    • 图片张数: 4
    • 标注个数: 8
  • 总数:
    • 图片张数: 4,950
    • 标注个数: 9,207

项目实现

1. 数据加载器

import torch
from torchvision import transforms
from PIL import Image
import os

class PedestrianCrossingDataset(torch.utils.data.Dataset):
    def __init__(self, img_dir, label_dir, transform=None):
        self.img_dir = img_dir
        self.label_dir = label_dir
        self.transform = transform
        self.images = [f for f in os.listdir(img_dir) if f.endswith('.jpg') or f.endswith('.png')]

    def __len__(self):
        return len(self.images)

    def __getitem__(self, idx):
        img_path = os.path.join(self.img_dir, self.images[idx])
        label_path = os.path.join(self.label_dir, self.images[idx].replace('.jpg', '.txt').replace('.png', '.txt'))

        image = Image.open(img_path).convert("RGB")
        with open(label_path, 'r') as f:
            labels = f.readlines()

        boxes = []
        class_ids = []
        for line in labels:
            class_id, x_center, y_center, width, height = map(float, line.strip().split())
            boxes.append([x_center, y_center, width, height])
            class_ids.append(int(class_id))

        boxes = torch.tensor(boxes, dtype=torch.float32)
        class_ids = torch.tensor(class_ids, dtype=torch.int64)

        if self.transform:
            image, boxes, class_ids = self.transform(image, boxes, class_ids)

        return image, {'boxes': boxes, 'labels': class_ids}

# 数据增强
transform = transforms.Compose([
    transforms.Resize((640, 640)),
    transforms.ToTensor(),
])

dataset = PedestrianCrossingDataset(img_dir='pedestrian_crossing_dataset/images', label_dir='pedestrian_crossing_dataset/labels_yolo', transform=transform)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=4, shuffle=True, num_workers=2, collate_fn=lambda x: tuple(zip(*x)))
2. 模型定义与训练

这里以YOLOv5为例展示模型定义和训练过程:

2.1 安装依赖

确保你已经安装了YOLOv5及其依赖库:


bash

深色版本

pip install -r requirements.txt
2.2 训练脚本
import torch
from yolov5.models.yolo import Model
from yolov5.utils.loss import ComputeLoss
from yolov5.utils.general import non_max_suppression
from utils.datasets import create_dataloader

def train_one_epoch(model, optimizer, dataloader, device):
    model.train()
    for images, targets in dataloader:
        images = list(image.to(device) for image in images)
        targets = [{k: v.to(device) for k, v in t.items()} for t in targets]

        loss_dict = model(images, targets)
        losses = sum(loss for loss in loss_dict.values())

        optimizer.zero_grad()
        losses.backward()
        optimizer.step()

        print(f"Loss: {losses.item()}")

# 初始化模型
model = Model('yolov5s.yaml')
model.load_state_dict(torch.load('models/yolov5s.pt'), strict=False)
model.to(device)

# 优化器
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

# 数据加载器
dataloader = create_dataloader('pedestrian_crossing_dataset/images', 'pedestrian_crossing_dataset/labels_yolo', batch_size=4, img_size=640)

# 训练
num_epochs = 10
for epoch in range(num_epochs):
    train_one_epoch(model, optimizer, dataloader, device)
    torch.save(model.state_dict(), f'models/pedestrian_crossing_yolov5_epoch_{epoch}.pt')
3. 模型测试
import torch
import cv2
from yolov5.models.yolo import Model
from yolov5.utils.general import non_max_suppression

def detect_traffic_signals(image_path, model, device):
    model.eval()
    image = cv2.imread(image_path)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    image = cv2.resize(image, (640, 640))
    image = torch.from_numpy(image).permute(2, 0, 1).float().div(255.0).unsqueeze(0).to(device)

    with torch.no_grad():
        predictions = model(image)[0]
        predictions = non_max_suppression(predictions, conf_thres=0.5, iou_thres=0.4)

    return predictions

# 加载模型
model = Model('yolov5s.yaml')
model.load_state_dict(torch.load('models/pedestrian_crossing_yolov5_best.pt'))
model.to(device)

# 预测
predictions = detect_traffic_signals('path/to/street_image.jpg', model, device)
print(predictions)

项目总结

本项目利用一个大规模的人行道斑马线红绿灯检测数据集,通过街道图像实现了对斑马线、红绿灯及其状态的自动检测。数据集已经调整为VOC和YOLO格式,可以直接用于模型训练。实验结果表明,这些模型在斑马线和红绿灯检测任务上表现出色,能够有效地辅助智能交通系统进行行人过街管理和交通控制。

未来的研究方向包括:

  • 进一步优化模型:探索更高效的网络结构和训练策略,提高检测精度和速度。
  • 扩展应用场景:将该方法应用于其他类型的交通标志检测,如限速标志、禁止标志等。
  • 实时检测系统:开发实时检测系统,实现在线监测和预警功能。
  • 多模态融合:结合多种传感器数据(如摄像头、雷达等),提高检测的准确性和鲁棒性。

希望这个项目能为人行道斑马线和红绿灯的智能管理带来实际的价值。

标签:torch,voc,4900,image,yolo,images,import,model,self
From: https://blog.csdn.net/cv_2025/article/details/142844078

相关文章

  • 基于YOLO V11的车辆检测与追踪与车道计数项目
    基于YOLOV11的车辆检测与计数项目概述本项目使用最新的YOLOV11模型实现了一个实时车辆检测与计数系统。该系统能够准确地在多条车道(车道A、车道B、车道C)上检测并计数车辆,为交通监控和管理提供有价值的信息。问题陈述在现代城市环境中,监控车辆流量和计数对于有效的交......
  • YOLO11涨点优化:原创自研 | 自研独家创新BSAM注意力 ,基于CBAM升级
     ......
  • yolov10环境配置
    安装 Anaconda(一直点下一步安装即可,记住安装的目录。)https://www.anaconda.com/download/success  配置系统环境变量D:\anaconda3D:\anaconda3\Library\binD:\anaconda3\Scripts在命令行中执行conda--version显示如下图即为成功创建虚拟环境首先新建......
  • YOLO11有效改进专栏目录
    |试读篇|使用YOLO11训练自己的数据集【下载模型】-【导入数据集】-【训练模型】-【评估模型】-【导出模型】YOLO11关键改进与网络结构图YOLO11改进|注意力机制篇|添加GAM、CBAM、CA、ECA等注意力机制YOLO11改进|卷积篇|引入可变核卷积AKConv|注意力机制篇|YOLO11改进|注意......
  • 作物与杂草的智能识别,基于YOLOv8全系列参数模型【n/s/m/lx/】开发构建田间低头作物杂
    一、背景田间杂草的有效管理是现代农业生产中面临的重要挑战之一。杂草不仅竞争作物的养分、水分和阳光,还可能成为害虫和病原体的寄主,从而降低农作物的产量和品质。因此,开发高效、精确的杂草检测和管理系统对于提高农业生产效率、降低化学除草剂的使用以及保护环境具有重要......
  • 基于yolov8的交通标志识别检测数据集包含9类别 训练集:3530验证:801
    pyqt5界面演示摘要随着城市化进程的加速和交通运输业的蓬勃发展,道路交通的安全问题日益凸显其重要性。交通标志作为道路语言的重要组成部分,对于引导交通流、规范驾驶行为、保障道路使用者的安全具有不可替代的作用。然而,在实际交通环境中,由于天气变化、标志老化、驾驶员注......
  • yolov5,v8船舰识别检测(包含训练代码Pyqt源码超详细)
    前言:随着海上活动的增加,对船舰进行实时、准确的检测与识别成为了海上安全、海洋监测、海事管理等领域的迫切需求。传统的船舶识别方法主要依赖于船舶自动识别系统(AIS)和雷达等通信导航设备,但这些方法存在一定的局限性,例如目标误识别、目标丢失和易受环境噪声为海上船只的自动......
  • YOLO11在训练和导出时的一些参数设置
    train时,imsz只能设置成1个整数。如果设置成数组,会提示:updatingto'imgsz=640'.'train'and'val'imgszmustbeaninteger,while'predict'and'export' 图像会以较长的边等比例缩放到指定的整数,然后较短的边的两侧填充114到指定的整数尺寸。即最终会是一个正方形,原图缩放......
  • YOLOv11改进策略【卷积层】| ICCV-2023 SAFM 空间自适应特征调制模块 对C3k2进行二次
    一、本文介绍本文记录的是利用空间自适应特征调制模块SAFM优化YOLOv11的目标检测方法研究。SAFM通过更好地利用特征信息来实现模型性能和效率的平衡。本文通过二次创新C3k2,能够动态选择代表性特征,并结合局部上下文信息,提升模型的检测精度。专栏目录:YOLOv11改进目录一览......
  • YOLOv11改进策略【Conv和Transformer】| CVPR-2024 Single-Head Self-Attention 单头
    一、本文介绍本文记录的是利用单头自注意力SHSA改进YOLOv11检测模型,详细说明了优化原因,注意事项等。传统的自注意力机制虽能提升性能,但计算量大,内存访问成本高,而SHSA从根本上避免了多注意力头机制带来的计算冗余。并且改进后的模型在相同计算预算下,能够堆叠更多宽度更大的......