1如何训练自己的数据集之—停车位数据集类

4bb4ab5fee0a4fbe99b932a94bade583.png

1停车位数据集类 停车场停车位检测数据集 2类 1200张 违停 带标注 voc yolo

停车场停车位检测数据集介绍

1a54b087ca114fab91c0a09e697425bd.png

数据集概述

此数据集主要用于停车场内的停车位检测任务,涵盖了两类不同的状态:占用(occupied)和空闲(empty)。该数据集包含1230张高清JPG图像,每张图像对应一个VOC XML格式的标签文件或YOLO TXT格式的标签文件。数据集按照标准VOC和YOLO格式标注,可以直接用于基于这两种格式的目标检测算法模型训练。

5f75f24d08914a7dbde2d1f7c67b4dcc.png

数据集特点

  • 高清影像:所有图像均为高清影像,适合用于精确的停车位检测。
  • 详细标注:每张图像都标注了两种不同状态的位置,可以用于训练模型来识别这些状态。
  • 多样性:涵盖了不同情境下的停车位场景,适用于多种环境下的应用。
  • 直接可用性:数据集已按照标准VOC XML和YOLO TXT格式标注,无需进一步处理即可直接用于模型训练。
  • 双类别:数据集中标注了两类状态,适合进行二分类或多目标检测任务。

数据集统计

283195bd29b54b88b62ec0ab903a97ba.png

状态类别ID图片数量标注个数
占用010352634
空闲111314280
总计12306914

数据集结构

ParkingSpotDetectionDataset/
├── images/  # 图像文件
│   ├── train/  # 训练集图像
│   │   ├── image_00001.jpg
│   │   ├── image_00002.jpg
│   │   └── ...
│   ├── val/  # 验证集图像
│   │   ├── image_00001.jpg
│   │   ├── image_00002.jpg
│   │   └── ...
│   └── test/  # 测试集图像(如果存在)
│       ├── image_00001.jpg
│       ├── image_00002.jpg
│       └── ...
└── annotations/  # 标注文件夹
    ├── annotations_voc/  # VOC/Pascal VOC格式标注
    │   ├── train/  # 训练集标注
    │   │   ├── image_00001.xml
    │   │   ├── image_00002.xml
    │   │   └── ...
    │   ├── val/  # 验证集标注
    │   │   ├── image_00001.xml
    │   │   ├── image_00002.xml
    │   │   └── ...
    │   └── test/  # 测试集标注(如果存在)
    │       ├── image_00001.xml
    │       ├── image_00002.xml
    │       └── ...
    └── annotations_yolo/  # YOLO格式标注
        ├── train/  # 训练集标签
        │   ├── image_00001.txt
        │   ├── image_00002.txt
        │   └── ...
        ├── val/  # 验证集标签
        │   ├── image_00001.txt
        │   ├── image_00002.txt
        │   └── ...
        └── test/  # 测试集标签(如果存在)
            ├── image_00001.txt
            ├── image_00002.txt
            └── ...

标注格式示例

VOC/Pascal VOC格式

每个XML文件包含图像信息和标注信息:

<annotation>
    <folder>images</folder>
    <filename>image_00001.jpg</filename>
    <path>/path/to/images/image_00001.jpg</path>
    <source>
        <database>Unknown</database>
    </source>
    <size>
        <width>640</width>
        <height>480</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    <object>
        <name>occupied</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>100</xmin>
            <ymin>150</ymin>
            <xmax>200</xmax>
            <ymax>300</ymax>
        </bndbox>
    </object>
    <object>
        <name>empty</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>300</xmin>
            <ymin>250</ymin>
            <xmax>400</xmax>
            <ymax>350</ymax>
        </bndbox>
    </object>
</annotation>

YOLO格式

每行表示一个物体的边界框和类别:

class_id cx cy w h
  • class_id:类别ID(从0开始编号)
    • 0: occupied
    • 1: empty
  • cx:目标框中心点x坐标 / 图像宽度。
  • cy:目标框中心点y坐标 / 图像高度。
  • w:目标框宽度 / 图像宽度。
  • h:目标框高度 / 图像高度。

例如:

0 0.453646 0.623148 0.234375 0.461111
1 0.553646 0.723148 0.134375 0.361111

使用该数据集进行模型训练

1. 数据预处理与加载

首先,我们需要加载数据并将其转换为适合YOLOv5等模型使用的格式。假设你已经安装了PyTorch和YOLOv5。

import os
from PIL import Image
import torch
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms
import xml.etree.ElementTree as ET

class ParkingSpotDetectionDataset(Dataset):
    def __init__(self, image_dir, annotation_dir, transform=None):
        self.image_dir = image_dir
        self.annotation_dir = annotation_dir
        self.transform = transform
        self.image_files = [f for f in os.listdir(image_dir) if f.endswith('.jpg')]

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

    def __getitem__(self, idx):
        img_name = self.image_files[idx]
        img_path = os.path.join(self.image_dir, img_name)
        annotation_path = os.path.join(self.annotation_dir, img_name.replace('.jpg', '.xml'))

        # 加载图像
        image = Image.open(img_path).convert('RGB')
        if self.transform:
            image = self.transform(image)

        # 加载标注
        tree = ET.parse(annotation_path)
        root = tree.getroot()

        boxes = []
        labels = []
        for obj in root.findall('object'):
            category = obj.find('name').text.lower()
            if category == 'occupied':
                class_id = 0
            elif category == 'empty':
                class_id = 1
            else:
                continue
            
            bbox = obj.find('bndbox')
            xmin = int(bbox.find('xmin').text)
            ymin = int(bbox.find('ymin').text)
            xmax = int(bbox.find('xmax').text)
            ymax = int(bbox.find('ymax').text)
            
            boxes.append([xmin, ymin, xmax, ymax])
            labels.append(class_id)

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

        return image, boxes, labels

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

# 创建数据集
train_dataset = ParkingSpotDetectionDataset(image_dir='ParkingSpotDetectionDataset/images/train/', annotation_dir='ParkingSpotDetectionDataset/annotations_voc/train/', transform=transform)
val_dataset = ParkingSpotDetectionDataset(image_dir='ParkingSpotDetectionDataset/images/val/', annotation_dir='ParkingSpotDetectionDataset/annotations_voc/val/', transform=transform)

train_loader = DataLoader(train_dataset, batch_size=4, shuffle=True, num_workers=4)
val_loader = DataLoader(val_dataset, batch_size=4, shuffle=False, num_workers=4)

2. 构建模型

我们可以使用YOLOv5模型进行目标检测任务。假设你已经克隆了YOLOv5仓库,并按照其文档进行了环境设置。

git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt

创建数据配置文件 data/parking_spot_detection.yaml

train: path/to/ParkingSpotDetectionDataset/images/train
val: path/to/ParkingSpotDetectionDataset/images/val
test: path/to/ParkingSpotDetectionDataset/images/val  # 如果没有单独的测试集,可使用验证集作为测试集

nc: 2  # 类别数
names: ['occupied', 'empty']

3. 训练模型

使用YOLOv5进行训练。

 

bash

深色版本

python train.py --img 640 --batch 16 --epochs 100 --data data/parking_spot_detection.yaml --weights yolov5s.pt --cache

4. 评估模型

在验证集上评估模型性能。

python val.py --img 640 --batch 16 --data data/parking_spot_detection.yaml --weights runs/train/exp/weights/best.pt --task test

5. 推理

使用训练好的模型进行推理。

python detect.py --source path/to/test/image.jpg --weights runs/train/exp/weights/best.pt --conf 0.5

实验报告

实验报告应包括以下内容:

  1. 项目简介:简要描述项目的背景、目标和意义。
  2. 数据集介绍:详细介绍数据集的来源、规模、标注格式等。
  3. 模型选择与配置:说明选择的模型及其配置参数。
  4. 训练过程:记录训练过程中的损失变化、学习率调整等。
  5. 评估结果:展示模型在验证集上的性能指标(如mAP、准确率)。
  6. 可视化结果:提供一些典型样本的检测结果可视化图。
  7. 结论与讨论:总结实验结果,讨论可能的改进方向。
  8. 附录:包含代码片段、图表等补充材料。

依赖库

确保安装了以下依赖库:

pip install torch torchvision
pip install -r yolov5/requirements.txt

总结

这个停车场停车位检测数据集提供了丰富的标注数据,非常适合用于训练和评估停车位检测模型。通过YOLOv5框架,可以方便地构建和训练高性能的停车位检测模型。实验报告可以帮助你更好地理解和分析模型的表现,并为进一步的研究提供参考。由于数据集规模较大且多样,建议在训练过程中使用数据增强技术以提高模型的泛化能力。

2.监控航拍视角停车位数据集 停车位识别系统+模型+界面 停车位数据集12416xml和txt标签 yolo

c82dabf901ba4d809df40d646fa2e5d4.png

停车场停车位检测数据集与系统

数据集概述c7143fc41be44d9096bc029ca598b164.png

此数据集专为停车场停车位检测设计,包含了从监控摄像头帧中提取的12,416张停车场图像,涵盖晴天、阴天和雨天等多种天气条件下的图像。图像中的停车位被明确标记为“space-empty”(空闲)或“space-occupied”(占用)两种状态。数据集提供了VOC XML和YOLO TXT两种格式的标注文件,可以直接用于基于这两种格式的目标检测算法模型训练。

数据集特点

  • 高清影像:所有图像均为高清影像,适合用于精确的停车位检测。
  • 详细标注:每张图像都标注了两种不同状态的位置,可以用于训练模型来识别这些状态。
  • 多样性:涵盖了不同天气条件和时间段下的停车位场景,适用于多种环境下的应用。
  • 直接可用性:数据集已按照标准VOC XML和YOLO TXT格式标注,无需进一步处理即可直接用于模型训练。
  • 双类别:数据集中标注了两类状态,适合进行二分类或多目标检测任务。

数据集统计

状态类别ID图片数量标注个数
空闲0未知未知
占用1未知未知
总计12,416未知

数据集结构

ParkingSpaceDetectionDataset/
├── images/  # 图像文件
│   ├── train/  # 训练集图像
│   │   ├── image_00001.jpg
│   │   ├── image_00002.jpg
│   │   └── ...
│   ├── val/  # 验证集图像
│   │   ├── image_00001.jpg
│   │   ├── image_00002.jpg
│   │   └── ...
│   └── test/  # 测试集图像(如果存在)
│       ├── image_00001.jpg
│       ├── image_00002.jpg
│       └── ...
└── annotations/  # 标注文件夹
    ├── annotations_voc/  # VOC/Pascal VOC格式标注
    │   ├── train/  # 训练集标注
    │   │   ├── image_00001.xml
    │   │   ├── image_00002.xml
    │   │   └── ...
    │   ├── val/  # 验证集标注
    │   │   ├── image_00001.xml
    │   │   ├── image_00002.xml
    │   │   └── ...
    │   └── test/  # 测试集标注(如果存在)
    │       ├── image_00001.xml
    │       ├── image_00002.xml
    │       └── ...
    └── annotations_yolo/  # YOLO格式标注
        ├── train/  # 训练集标签
        │   ├── image_00001.txt
        │   ├── image_00002.txt
        │   └── ...
        ├── val/  # 验证集标签
        │   ├── image_00001.txt
        │   ├── image_00002.txt
        │   └── ...
        └── test/  # 测试集标签(如果存在)
            ├── image_00001.txt
            ├── image_00002.txt
            └── ...

标注格式示例

VOC/Pascal VOC格式

每个XML文件包含图像信息和标注信息:

<annotation>
    <folder>images</folder>
    <filename>image_00001.jpg</filename>
    <path>/path/to/images/image_00001.jpg</path>
    <source>
        <database>Unknown</database>
    </source>
    <size>
        <width>640</width>
        <height>480</height>
        <depth>3</depth>
    </size>
    <segmented>0</segmented>
    <object>
        <name>space-empty</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>100</xmin>
            <ymin>150</ymin>
            <xmax>200</xmax>
            <ymax>300</ymax>
        </bndbox>
    </object>
    <object>
        <name>space-occupied</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>300</xmin>
            <ymin>250</ymin>
            <xmax>400</xmax>
            <ymax>350</ymax>
        </bndbox>
    </object>
</annotation>

YOLO格式

每行表示一个物体的边界框和类别:

class_id cx cy w h
  • class_id:类别ID(从0开始编号)
    • 0: space-empty
    • 1: space-occupied
  • cx:目标框中心点x坐标 / 图像宽度。
  • cy:目标框中心点y坐标 / 图像高度。
  • w:目标框宽度 / 图像宽度。
  • h:目标框高度 / 图像高度。

例如:

0 0.453646 0.623148 0.234375 0.461111
1 0.553646 0.723148 0.134375 0.361111

数据集与系统的购买选项

  • 数据集+训练好的模型:购买即获得标注好的数据集以及已经训练好的模型,可以立即投入使用。
  • 数据集+模型+可视化界面:除了上述内容外,还包括一个可视化的界面,方便用户查看检测结果。

使用该数据集进行模型训练

1. 数据预处理与加载

首先,我们需要加载数据并将其转换为适合YOLOv5等模型使用的格式。假设你已经安装了PyTorch和YOLOv5。

import os
from PIL import Image
import torch
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms
import xml.etree.ElementTree as ET

class ParkingSpaceDetectionDataset(Dataset):
    def __init__(self, image_dir, annotation_dir, transform=None):
        self.image_dir = image_dir
        self.annotation_dir = annotation_dir
        self.transform = transform
        self.image_files = [f for f in os.listdir(image_dir) if f.endswith('.jpg')]

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

    def __getitem__(self, idx):
        img_name = self.image_files[idx]
        img_path = os.path.join(self.image_dir, img_name)
        annotation_path = os.path.join(self.annotation_dir, img_name.replace('.jpg', '.xml'))

        # 加载图像
        image = Image.open(img_path).convert('RGB')
        if self.transform:
            image = self.transform(image)

        # 加载标注
        tree = ET.parse(annotation_path)
        root = tree.getroot()

        boxes = []
        labels = []
        for obj in root.findall('object'):
            category = obj.find('name').text.lower()
            if category == 'space-empty':
                class_id = 0
            elif category == 'space-occupied':
                class_id = 1
            else:
                continue
            
            bbox = obj.find('bndbox')
            xmin = int(bbox.find('xmin').text)
            ymin = int(bbox.find('ymin').text)
            xmax = int(bbox.find('xmax').text)
            ymax = int(bbox.find('ymax').text)
            
            boxes.append([xmin, ymin, xmax, ymax])
            labels.append(class_id)

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

        return image, boxes, labels

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

# 创建数据集
train_dataset = ParkingSpaceDetectionDataset(image_dir='ParkingSpaceDetectionDataset/images/train/', annotation_dir='ParkingSpaceDetectionDataset/annotations_voc/train/', transform=transform)
val_dataset = ParkingSpaceDetectionDataset(image_dir='ParkingSpaceDetectionDataset/images/val/', annotation_dir='ParkingSpaceDetectionDataset/annotations_voc/val/', transform=transform)

train_loader = DataLoader(train_dataset, batch_size=4, shuffle=True, num_workers=4)
val_loader = DataLoader(val_dataset, batch_size=4, shuffle=False, num_workers=4)

2. 构建模型

我们可以使用YOLOv5模型进行目标检测任务。假设你已经克隆了YOLOv5仓库,并按照其文档进行了环境设置。

git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt

创建数据配置文件 data/parking_space_detection.yaml

train: path/to/ParkingSpaceDetectionDataset/images/train
val: path/to/ParkingSpaceDetectionDataset/images/val
test: path/to/ParkingSpaceDetectionDataset/images/val  # 如果没有单独的测试集,可使用验证集作为测试集

nc: 2  # 类别数
names: ['space-empty', 'space-occupied']

3. 训练模型

使用YOLOv5进行训练。

python train.py --img 640 --batch 16 --epochs 100 --data data/parking_space_detection.yaml --weights yolov5s.pt --cache

4. 评估模型

在验证集上评估模型性能。

python val.py --img 640 --batch 16 --data data/parking_space_detection.yaml --weights runs/train/exp/weights/best.pt --task test

5. 推理

python detect.py --source path/to/test/image.jpg --weights runs/train/exp/weights/best.pt --conf 0.5

可视化界面

该选项包括了一个用户友好的可视化界面,用户可以通过该界面上传图片或者视频流,实时查看停车位的状态。界面设计通常包括:

  • 实时检测:上传图像或视频流后,实时显示检测结果。
  • 历史记录:保存历史检测结果,方便用户查看。
  • 配置管理:允许用户调整检测阈值、模型等参数。
  • 帮助文档:提供详细的使用指南和技术支持。

应用场景

  • 停车场管理:实时监测停车场内车位状态,提高车位利用率。
  • 智能交通系统:结合其他智能交通系统,提供综合解决方案。
  • 城市规划:为城市规划提供数据支持,优化停车资源配置。

实验报告

实验报告应包括以下内容:

  1. 项目简介:简要描述项目的背景、目标和意义。
  2. 数据集介绍:详细介绍数据集的来源、规模、标注格式等。
  3. 模型选择与配置:说明选择的模型及其配置参数。
  4. 训练过程:记录训练过程中的损失变化、学习率调整等。
  5. 评估结果:展示模型在验证集上的性能指标(如mAP、准确率)。
  6. 可视化结果:提供一些典型样本的检测结果可视化图。
  7. 结论与讨论:总结实验结果,讨论可能的改进方向。
  8. 附录:包含代码片段、图表等补充材料。

依赖库

确保安装了以下依赖库:

pip install torch torchvision
pip install -r yolov5/requirements.txt

总结

这个停车场停车位检测数据集和系统提供了丰富的标注数据和现成的应用方案,非常适合用于训练和部署停车位检测模型。通过YOLOv5框架,可以方便地构建和训练高性能的停车位检测模型。实验报告可以帮助你更好地理解和分析模型的表现,并为进一步的研究提供参考。由于数据集规模较大且多样,建议在训练过程中使用数据增强技术以提高模型的泛化能力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值