深度学习目标检测算法如何训练自己的数据集之—智慧化生产工地检测数据集 对工地中工人、材料、机器和环境等对象类别分别为人,板,砖,切割机,挂钩,反光背心,木头,脚手架,电箱,护栏,安全帽 等进行检测。
@[toc]
智慧工地检测数据集,基础生产要素篇,采用voc标注(可提供yolo方式标注),无人机,监控摄像,手持拍照等方式,对工地中工人、材料、机器和环境等共计15类对象类别(分别为人,板,砖,切割机,挂钩,反光背心,木头,脚手架,电箱,护栏,安全帽,钢筋,手推车,漏斗,宣传横幅标语)进行标注。从多个建筑工地收集了超过20,000张图像,涵盖了不同情况、天气条件和建设阶段,覆盖了不同的角度和视角。共24GB数据量
,基础生产要素,voc标注,无人机,监控摄像,手持拍照等方式,对工地中工人、材料、机器和环境等共计15类对象类别标注,过20,000张图像,不同情况、天气条件和建设阶段24G数据
目标类别 | 图片张数 | 标注个数 |
---|---|---|
人 | ||
板 | ||
砖 | ||
切割机 | ||
挂钩 | ||
反光背心 | ||
木头 | ||
脚手架 | ||
电箱 | ||
护栏 | ||
安全帽 | ||
钢筋 | ||
手推车 | ||
漏斗 | ||
宣传横幅标语 | ||
总计 | >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 # 数据配置文件
每行表示一个物体的边界框和类别:
class_id cx cy w h
class_id
:类别ID(从0开始编号)
人
板
砖
切割机
挂钩
反光背心
木头
脚手架
电箱
护栏
安全帽
钢筋
手推车
漏斗
宣传横幅标语
cx
:目标框中心点x坐标 / 图像宽度。cy
:目标框中心点y坐标 / 图像高度。w
:目标框宽度 / 图像宽度。h
:目标框高度 / 图像高度。例如:
0 0.453646 0.623148 0.234375 0.461111
train
image_00001.jpg
/path/to/dataset/train/image_00001.jpg
Unknown
640
480
3
0
首先,我们需要加载数据并将其转换为适合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)
我们可以使用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: ['人', '板', '砖', '切割机', '挂钩', '反光背心', '木头', '脚手架', '电箱', '护栏', '安全帽', '钢筋', '手推车', '漏斗', '宣传横幅标语']
使用YOLOv5进行训练。
python train.py --img 640 --batch 16 --epochs 100 --data data/construction_site_detection.yaml --weights yolov5s.pt --cache
在验证集上评估模型性能。
python val.py --img 640 --batch 16 --data data/construction_site_detection.yaml --weights runs/train/exp/weights/best.pt --task test
使用训练好的模型进行推理。
python detect.py --source path/to/test/image.jpg --weights runs/train/exp/weights/best.pt --conf 0.5
实验报告应包括以下内容:
确保安装了以下依赖库:
pip install torch torchvision
pip install -r yolov5/requirements.txt
这个智慧工地检测数据集提供了丰富的标注数据,非常适合用于训练和评估目标检测模型。通过YOLOv5框架,可以方便地构建和训练高性能的目标检测模型。实验报告可以帮助你更好地理解和分析模型的表现,并为进一步的研究提供参考。