矿井人员数据集,用于目标检测,深度学习,采用txt打标签,即yolo格式,也有原文件可以自己转换。总共3500张图片的数据量,划分给训练集2446张
项目介绍:矿井人员目标检测数据集
项目名称
矿井人员目标检测数据集
项目概述
本项目提供了一个用于矿井环境中人员目标检测的数据集,包含3500张图片。这些图片已经用YOLO格式(即txt文件)进行了标注,可以直接用于训练和测试基于深度学习的目标检测模型。数据集分为训练集和测试集,其中2446张图片用于训练,其余1054张图片用于测试。
项目特点
- 高质量标注:所有图像都使用YOLO格式进行了精确标注。
- 大规模数据量:总共有3500张图片,足以训练出性能良好的目标检测模型。
- 真实场景:图片来自真实的矿井环境,具有很高的实用价值。
- 易于使用:提供了详细的说明文档,方便用户快速上手。
- 可扩展性:可以轻松地将数据集与其他数据集合并,以适应不同的需求。
项目结构
Mine_Person_Detection_Dataset/
├── images/ # 图像文件夹
│ ├── train/ # 训练集图像
│ └── test/ # 测试集图像
├── labels/ # 标签文件夹
│ ├── train/ # 训练集标签
│ └── test/ # 测试集标签
├── annotations/ # 其他标注格式(可选)
│ ├── train/ # 训练集其他标注
│ └── test/ # 测试集其他标注
├── README.md # 项目说明文档
└── data_split.py # 数据集划分脚本
项目内容
-
数据集
- 总数据量:3500张图片。
- 训练集:2446张图片。
- 测试集:1054张图片。
- 标注格式:YOLO格式(txt文件),每行表示一个目标,格式为
<class> <x_center> <y_center> <width> <height>
,其中<class>
是类别索引(0代表人员),<x_center>
、<y_center>
、<width>
和<height>
都是归一化后的值。
-
数据集划分
- 使用
data_split.py
脚本将原始数据集划分为训练集和测试集。 - 脚本会确保每个类别的样本在训练集和测试集中均匀分布。
- 使用
-
数据集使用
- 图像文件:存储在
images/
目录下,分为train/
和test/
两个子目录。 - 标签文件:存储在
labels/
目录下,同样分为train/
和test/
两个子目录。 - 其他标注格式:如果需要转换成其他标注格式(如Pascal VOC、COCO等),可以在
annotations/
目录下进行处理。
- 图像文件:存储在
代码示例
1. 数据集划分脚本 data_split.py
import os
import shutil
from sklearn.model_selection import train_test_split
import random
# 设置路径
dataset_dir = 'images'
train_dir = 'images/train'
test_dir = 'images/test'
train_label_dir = 'labels/train'
test_label_dir = 'labels/test'
# 创建目录
os.makedirs(train_dir, exist_ok=True)
os.makedirs(test_dir, exist_ok=True)
os.makedirs(train_label_dir, exist_ok=True)
os.makedirs(test_label_dir, exist_ok=True)
# 获取所有图像文件
image_files = [f for f in os.listdir(dataset_dir) if f.endswith('.jpg') or f.endswith('.png')]
random.shuffle(image_files)
# 划分训练集和测试集
train_files, test_files = train_test_split(image_files, test_size=0.3, random_state=42)
# 移动图像文件
for file in train_files:
shutil.move(os.path.join(dataset_dir, file), os.path.join(train_dir, file))
label_file = file.replace('.jpg', '.txt').replace('.png', '.txt')
shutil.move(os.path.join('labels', label_file), os.path.join(train_label_dir, label_file))
for file in test_files:
shutil.move(os.path.join(dataset_dir, file), os.path.join(test_dir, file))
label_file = file.replace('.jpg', '.txt').replace('.png', '.txt')
shutil.move(os.path.join('labels', label_file), os.path.join(test_label_dir, label_file))
print(f"Train set: {len(train_files)} images")
print(f"Test set: {len(test_files)} images")
使用说明
-
环境准备:
- 确保安装了Python及其相关库(如
shutil
、sklearn
等)。 - 下载并解压数据集到项目根目录。
- 确保安装了Python及其相关库(如
-
运行数据集划分脚本:
- 在命令行中运行
data_split.py
脚本,将数据集划分为训练集和测试集。 - 运行后,
images/
和labels/
目录下会生成train/
和test/
子目录。
- 在命令行中运行
-
加载数据集:
- 可以使用常见的深度学习框架(如PyTorch、TensorFlow等)来加载数据集。
- 示例代码如下:
import torch
from torchvision import transforms
from torch.utils.data import DataLoader, Dataset
import cv2
import os
class MinePersonDataset(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') or f.endswith('.png')]
def __len__(self):
return len(self.image_files)
def __getitem__(self, idx):
img_path = os.path.join(self.image_dir, self.image_files[idx])
label_path = os.path.join(self.label_dir, self.image_files[idx].replace('.jpg', '.txt').replace('.png', '.txt'))
image = cv2.imread(img_path)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
with open(label_path, 'r') as f:
lines = f.readlines()
boxes = []
labels = []
for line in lines:
class_id, x_center, y_center, width, height = map(float, line.strip().split())
boxes.append([x_center, y_center, width, height])
labels.append(int(class_id))
if self.transform:
image = self.transform(image)
return image, {'boxes': torch.tensor(boxes, dtype=torch.float32), 'labels': torch.tensor(labels, dtype=torch.int64)}
# 数据预处理
transform = transforms.Compose([
transforms.ToPILImage(),
transforms.Resize((416, 416)),
transforms.ToTensor(),
])
# 加载数据集
train_dataset = MinePersonDataset(image_dir='images/train', label_dir='labels/train', transform=transform)
test_dataset = MinePersonDataset(image_dir='images/test', label_dir='labels/test', transform=transform)
train_loader = DataLoader(train_dataset, batch_size=8, shuffle=True, num_workers=4)
test_loader = DataLoader(test_dataset, batch_size=8, shuffle=False, num_workers=4)
注意事项
- 数据格式:确保图像文件和标签文件的命名一致,以便正确匹配。
- 硬件要求:建议使用GPU进行训练和推理,以加快处理速度。如果没有足够的计算资源,可以考虑使用云服务提供商的GPU实例。
- 超参数调整:根据实际情况调整网络架构、学习率、批次大小等超参数,以获得更好的性能。
通过上述步骤,你可以轻松地使用这个矿井人员目标检测数据集,并将其应用于深度学习模型的训练和测试。希望这个项目能帮助你更好地理解和应用目标检测技术