首页 > 其他分享 >如何训练自己的数据集之,智慧化生产工地检测数据集

如何训练自己的数据集之,智慧化生产工地检测数据集

时间:2024-10-29 17:20:10浏览次数:6  
标签:-- image ConstructionSiteDetectionDataset self train 集之 数据 工地 dir

 7a12ec7ba8fa4d85a653ddba5f259280.png智慧工地检测数据集,基础生产要素篇,采用voc标注(可提供yolo方式标注),无人机,监控摄像,手持拍照等方式,对工地中工人、材料、机器和环境等共计15类对象类别(分别为人,板,砖,切割机,挂钩,反光背心,木头,脚手架,电箱,护栏,安全帽,钢筋,手推车,漏斗,宣传横幅标语)进行标注。从多个建筑工地收集了超过20,000张图像,涵盖了不同情况、天气条件和建设阶段,覆盖了不同的角度和视角。共24GB数据量

cfacde4ee45c4d93b95dd742a8d00bc9.png

  • 智慧工地检测数据集(基础生产要素篇)
  • 规模:超过20,000张图像,数据量约24GB
  • 类别:15类检测目标
    • 切割机
    • 挂钩
    • 反光背心
    • 木头
    • 脚手架
    • 电箱
    • 护栏
    • 安全帽
    • 钢筋
    • 手推车
    • 漏斗
    • 宣传横幅标语
  • 标注格式:支持VOC格式标注,同时提供YOLO格式标注

数据集特点

  • 高质量影像:所有图像均为高分辨率的图像,适合用于精确的目标检测。
  • 详细标注:每张图像都有详细的边界框标注,采用VOC和YOLO格式。这些标注可以用于训练模型来识别工地中的工人、材料、机器和环境等。
  • 多样性:包含多种环境下拍摄的图像,如不同的建筑工地、不同的天气条件、不同的建设阶段等,适用于各种应用场景。
  • 广泛适用性:支持多种深度学习框架,特别是VOC和YOLO系列模型。

数据集统计efd66456dec4465ab8076bd658b8a477.png

目标类别图片张数标注个数
  
  
  
切割机  
挂钩  
反光背心  
木头  
脚手架  
电箱  
护栏  
安全帽  
钢筋  
手推车  
漏斗  
宣传横幅标语  
总计>20,000 

数据集结构

ConstructionSiteDetectionDataset/
├── images/  # 图像文件
│   ├── train/  # 训练集图像
│   │   ├── image_00001.jpg
│   │   ├── image_00002.jpg
│   │   └── ...
│   ├── val/  # 验证集图像
│   │   ├── image_00001.jpg
│   │   ├── image_00002.jpg
│   │   └── ...
│   └── test/  # 测试集图像
│       ├── image_00001.jpg
│       ├── image_00002.jpg
│       └── ...
├── annotations/  # VOC格式标签
│   ├── train/  # 训练集标签
│   │   ├── image_00001.xml
│   │   ├── image_00002.xml
│   │   └── ...
│   ├── val/  # 验证集标签
│   │   ├── image_00001.xml
│   │   ├── image_00002.xml
│   │   └── ...
│   └── test/  # 测试集标签
│       ├── image_00001.xml
│       ├── image_00002.xml
│       └── ...
├── labels/  # YOLO格式标签
│   ├── train/  # 训练集标签
│   │   ├── image_00001.txt
│   │   ├── image_00002.txt
│   │   └── ...
│   ├── val/  # 验证集标签
│   │   ├── image_00001.txt
│   │   ├── image_00002.txt
│   │   └── ...
│   └── test/  # 测试集标签
│       ├── image_00001.txt
│       ├── image_00002.txt
│       └── ...
└── data.yaml  # 数据配置文件

标注格式示例

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

YOLO格式

class_id cx cy w h
  • class_id:类别ID(从0开始编号)
    • 0: 
    • 1: 
    • 2: 
    • 3: 切割机
    • 4: 挂钩
    • 5: 反光背心
    • 6: 木头
    • 7: 脚手架
    • 8: 电箱
    • 9: 护栏
    • 10: 安全帽
    • 11: 钢筋
    • 12: 手推车
    • 13: 漏斗
    • 14: 宣传横幅标语
  • cx:目标框中心点x坐标 / 图像宽度。
  • cy:目标框中心点y坐标 / 图像高度。
  • w:目标框宽度 / 图像宽度。
  • h:目标框高度 / 图像高度。

例如:

0 0.453646 0.623148 0.234375 0.461111

VOC格式

<annotation>
    <folder>train</folder>
    <filename>image_00001.jpg</filename>
    <path>/path/to/dataset/train/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>人</name>
        <pose>Unspecified</pose>
        <truncated>0</truncated>
        <difficult>0</difficult>
        <bndbox>
            <xmin>100</xmin>
            <ymin>200</ymin>
            <xmax>300</xmax>
            <ymax>400</ymax>
        </bndbox>
    </object>
    <!-- 更多对象 -->
</annotation>

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

1. 数据预处理与加载

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

import os
from PIL import Image
import torch
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms

class ConstructionSiteDetectionDataset(Dataset):
    def __init__(self, image_dir, label_dir, transform=None):
        self.image_dir = image_dir
        self.label_dir = label_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)
        label_path = os.path.join(self.label_dir, img_name.replace('.jpg', '.txt'))

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

        # 加载标注
        with open(label_path, 'r') as f:
            lines = f.readlines()
        
        boxes = []
        labels = []
        for line in lines:
            class_id, cx, cy, w, h = map(float, line.strip().split())
            boxes.append([cx, cy, w, h])
            labels.append(int(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 = ConstructionSiteDetectionDataset(image_dir='ConstructionSiteDetectionDataset/images/train/', label_dir='ConstructionSiteDetectionDataset/labels/train/', transform=transform)
val_dataset = ConstructionSiteDetectionDataset(image_dir='ConstructionSiteDetectionDataset/images/val/', label_dir='ConstructionSiteDetectionDataset/labels/val/', transform=transform)
test_dataset = ConstructionSiteDetectionDataset(image_dir='ConstructionSiteDetectionDataset/images/test/', label_dir='ConstructionSiteDetectionDataset/labels/test/', 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)
test_loader = DataLoader(test_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/construction_site_detection.yaml

train: path/to/ConstructionSiteDetectionDataset/images/train
val: path/to/ConstructionSiteDetectionDataset/images/val
test: path/to/ConstructionSiteDetectionDataset/images/test

nc: 15  # 类别数
names: ['人', '板', '砖', '切割机', '挂钩', '反光背心', '木头', '脚手架', '电箱', '护栏', '安全帽', '钢筋', '手推车', '漏斗', '宣传横幅标语']

3. 训练模型

使用YOLOv5进行训练。

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

4. 评估模型

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

python val.py --img 640 --batch 16 --data data/construction_site_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框架,可以方便地构建和训练高性能的目标检测模型。实验报告可以帮助你更好地理解和分析模型的表现,并为进一步的研究提供参考。

 

 

 

标签:--,image,ConstructionSiteDetectionDataset,self,train,集之,数据,工地,dir
From: https://blog.csdn.net/2401_88441190/article/details/143234415

相关文章

  • 如何训练自己的数据集之,大量火灾烟雾识别数据集,识别
    大量火焰烟雾识别数据集,46000余张图像,22GB数据量,提供voc标注,yolo标注,涵盖高位摄像头,无人机拍摄,日常场景拍摄等多种场景,+yolo训练代码火焰数据集烟雾数据集森林火灾数据集大规模火焰与烟雾识别数据集规模:46,000余张图像,数据量约22GB类别:主要检测两类目标火焰烟雾标注格......
  • 如何训练自己的数据集之,超大规模滑坡分割数据集
     超大规模滑坡分割数据集,共34604张图像,全部处理为512×512尺度,涵盖航空,无人机,卫星多种传感器类型,涵盖0.1m-10m不同分辨率影像,数据量3.6GB,标注质量高,全部为原始数据,无增强滑坡分割数据集规模:共34,604张图像,数据量约3.6GB图像尺寸:统一处理为512×512像素传感器类型:涵盖航空、......
  • 如何训练自己的数据集之火灾应急救援——
     火灾应急救援——智慧化无人机,直升机等航拍视角下火灾应急救援检测数据集,数据分别标注了火,人,车辆这三个要素内容,29810张高清航拍影像,共31GB,适合森林防火,应急救援等方向的学术研究,落地应用 火灾应急救援检测数据集规模:共29,810张高清航拍影像,数据量约31GB检测要素:火源、人......
  • C#基础数据类型
    C# 数据类型在C#中,变量分为以下几种类型:值类型(Valuetypes)引用类型(Referencetypes)指针类型(Pointertypes)值类型(Valuetypes)值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。值类型直接包含数据。比如 int、char、float,它们分别存储数字......
  • 袋鼠云产品功能更新报告12期|让数据资产管理更高效
    本期,我们更新和优化了数据资产平台相关功能,为您提供更高效的产品能力。以下为第12期袋鼠云产品功能更新报告,请继续阅读。一、【元数据】重点更新|01元数据管理优化,支持配置表生命周期之前系统中缺少一个可以基于数据源和数据库维度,批量配置数据表生命周期的入口,导致用户在处理......
  • 重装系统数据会丢失吗?重装系统数据丢了怎么找回来
    重装系统是许多电脑用户在进行系统维护或升级时经常遇到的操作。然而,关于重装系统后数据是否会丢失,以及如何找回丢失的数据,这两个问题常常困扰着用户。本文将详细探讨这两个问题,并提供实用的解决方案。图片来源于网络,如有侵权请告知一、重装系统数据会丢失吗?首先,我们来解......
  • 队列与树 数据结构复习笔记
    2.3队列队列(Queue),它是一种运算受限的线性表,先进先出(FIFOFirstInFirstOut)队列是一种受限的线性结构受限之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作Python标准库中的queue模块提供了多种队列实现,包括普通队列、双端队列、优先队......
  • 【数据资产化】数据资产入表——成本可靠计量
            在当今的商业环境中,数据的价值已经超越了传统的资产类别,成为企业竞争的关键资源。随着数据资产化的概念逐渐被接受和实践,企业如何对这些资产进行有效的计量和会计处理,成为了一个亟待解决的问题。特别是在资产确认的过程中,成本的可靠计量成为了一个核心条件,它直......
  • springboot:调用接口返回的数据乱码解决
    从git拉下来项目后,运行服务,启动正常,但是使用swagger和postman调用服务接口出现乱码问题每一个接口返回的数据是乱码,但是控制台打印的日志都是正常的,后续发现数据的返回类型不是常见的application/json,而是application/x-jackson-smile,所以要通过改变数据类型解决问题通过在接......
  • 数据结构-栈的顺序存储结构
    第三章栈3.1栈的定义                                   线性表                       栈只能选取同一个端点进行插入和删除操作允许进行插入......