分享一下YOLO数据集如何划分,制作自己的YOLO数据集

首先准备好自己数据集,包括图像imgs、标签文件txt

运行以下代码,设置train,val,test之间的比例,一般0.8:0.1:0.1,本人一般设置为0.8:0.2:0

defect处可设置自己的数据集名称

设置自己数据集的图像路径,txt文件路径

import os
import random
import shutil
# 此处可以设置《数据集文件的名称》,如名称加上图片数量加上时间,方便日后区分
defect = 'wrapSegmentation455_20240528'
# 此处设置train、val、test数据集《划分的比例》,一般设置为8:1:1
train_ratio = 0.8
val_ratio = 0.1
test_ratio = 0.1
# 此处设置《图片与txt标签文件的保存路径》
image_original_path = r"D:\1. 缠绕项目\4.数据集\wrap20240528\imgs"
label_original_path = r"D:\1. 缠绕项目\4.数据集\wrap20240528\labels_txt"
cur_path = os.getcwd()
# 训练集路径
train_image_path = os.path.join(cur_path, f"datasets/{defect}/images/train/")
train_label_path = os.path.join(cur_path, f"datasets/{defect}/labels/train/")
# 验证集路径
val_image_path = os.path.join(cur_path, f"datasets/{defect}/images/val/")
val_label_path = os.path.join(cur_path, f"datasets/{defect}/labels/val/")
# 测试集路径
test_image_path = os.path.join(cur_path, f"datasets/{defect}/images/test/")
test_label_path = os.path.join(cur_path, f"datasets/{defect}/labels/test/")
# 训练集目录
list_train = os.path.join(cur_path, f"datasets/{defect}/train.txt")
list_val = os.path.join(cur_path, f"datasets/{defect}/val.txt")
list_test = os.path.join(cur_path, f"datasets/{defect}/test.txt")

# 创建训练集、验证集和测试集的目标文件夹
os.makedirs(train_image_path, exist_ok=True)
os.makedirs(train_label_path, exist_ok=True)
os.makedirs(val_image_path, exist_ok=True)
os.makedirs(val_label_path, exist_ok=True)
os.makedirs(test_image_path, exist_ok=True)
os.makedirs(test_label_path, exist_ok=True)

# 获取所有图片和标签的文件名
image_names = os.listdir(image_original_path)
label_names = os.listdir(label_original_path)

# 将图片和标签配对并打乱顺序
pairs = list(zip(image_names, label_names))
random.shuffle(pairs)

# 计算划分边界
num_pairs = len(pairs)
num_train = int(num_pairs * train_ratio)
num_val = int(num_pairs * val_ratio)

# 创建并打开输出文件
file_train = open(list_train, 'w')
file_val = open(list_val, 'w')
file_test = open(list_test, 'w')

# 将图片和标签分别复制到对应的目标文件夹下,并将图片路径写入对应的输出文件
for i, (image_name, label_name) in enumerate(pairs):
    name, ext = os.path.splitext(image_name)
    if i < num_train:
        dst_train_Image = os.path.join(train_image_path, name + ext)
        dst_train_Label = os.path.join(train_label_path, name + '.txt')
        srcImage = os.path.join(image_original_path, image_name)
        srcLabel = os.path.join(label_original_path, label_name)
        shutil.copyfile(srcImage, dst_train_Image)
        shutil.copyfile(srcLabel, dst_train_Label)
        file_train.write(dst_train_Image + '\n')
    elif i < num_train + num_val:
        dst_val_Image = os.path.join(val_image_path, name + ext)
        dst_val_Label = os.path.join(val_label_path, name + '.txt')
        srcImage = os.path.join(image_original_path, image_name)
        srcLabel = os.path.join(label_original_path, label_name)
        shutil.copyfile(srcImage, dst_val_Image)
        shutil.copyfile(srcLabel, dst_val_Label)
        file_val.write(dst_val_Image + '\n')
    else:
        dst_test_Image = os.path.join(test_image_path, name + ext)
        dst_test_Label = os.path.join(test_label_path, name + '.txt')
        srcImage = os.path.join(image_original_path, image_name)
        srcLabel = os.path.join(label_original_path, label_name)
        shutil.copyfile(srcImage, dst_test_Image)
        shutil.copyfile(srcLabel, dst_test_Label)
        file_test.write(dst_test_Image + '\n')

# 关闭输出文件
file_train.close()
file_val.close()
file_test.close()

运行完成后会生成以下效果,但不包含yaml文件!

通过本文生成的数据集,yaml文件可以如下编写,只需修改nc,names,编写成功后将yaml文件存放在如上路径

此时数据集已经准备完成,在训练代码中data选择上述yaml文件的路径,就可以进行自己的YOLO数据集训练了

 

 

### 制作适用于 YOLOv11 的数据集 制作适用于 YOLOv11 模型的数据集需要遵循特定的格式要求,以下是详细的说明: #### 1. 数据集准备 数据集可以通过两种方式获取: - **使用公开数据集**:可以从网络上找到与研究主题相关的公开数据集[^1]。这些数据集通常已经经过标注,可以直接用于训练模型。例如,在安全帽检测的研究中,可以选择已有的工业场景下的人员装备检测数据集。 - **自定义数据集**:如果找不到合适的公开数据集,则可以自行收集图像并进行标注。这一步骤包括拍摄所需的照片或从其他资源下载图片,并对其进行标记。 #### 2. 图像文件夹结构 YOLOv11 需要一个清晰的目录结构来存储图像和对应的标签文件。典型的文件夹结构如下所示: ``` dataset/ ├── images/ │ ├── train/ │ │ ├── image1.jpg │ │ ├── image2.jpg │ └── val/ │ ├── image3.jpg │ ├── image4.jpg └── labels/ ├── train/ │ ├── image1.txt │ ├── image2.txt └── val/ ├── image3.txt ├── image4.txt ``` 其中 `images` 文件夹下存放的是原始图像,而 `labels` 文件夹则对应每张图像的标注文件。训练集 (`train`) 和验证集 (`val`) 应该分开存放以便于后续评估模型性能。 #### 3. 标签文件格式 对于每一个 `.jpg` 或者其他类型的图像文件,都需要有一个同名但扩展名为 `.txt` 的标签文件与其配对。每个标签文件中的每一行代表一个边界框 (bounding box),其格式为: ``` <class_id> <x_center> <y_center> <width> <height> ``` 各字段含义解释如下: - `<class_id>` 是类别索引号(整数),表示当前物体属于哪一类; - `<x_center>` 表示边界框中心点相对于整个图像宽度的比例位置; - `<y_center>` 同理,只是沿高度方向计算比例; - `<width>` 边界框宽占总图宽度百分比; - `<height>` 边界框高占总图高度百分比;以上四个数值均为浮点数范围 [0, 1][^2]。 #### 4. 训练配置文件 为了使 YOLOv11 能够识别新创建的数据集路径以及类别的数量等参数信息,还需要编写相应的 YAML 配置文件。下面是一个简单的例子: ```yaml train: ../dataset/images/train/ # 训练图片所在的位置 val: ../dataset/images/val/ # 测试图片所在的地址 nc: 2 # 类别总数 names: ['hat', 'person'] # 所有类别的名称列表 ``` 通过这样的设置之后就可以顺利加载自制好的数据集来进行目标检测任务的学习过程了。 ```python import yaml with open('path/to/config.yaml') as f: config = yaml.safe_load(f) print(config['train']) # 输出训练集路径 print(config['val']) # 输出验证集路径 print(config['nc']) # 输出类别数目 print(config['names']) # 输出类别名字数组 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值