前言

ok,现在是2025.2.21 19:39,来写一下怎么制作数据集,这里的数据集是图像的数据集,分为两部分,使用labelimg标注图像完成数据集,再用python代码将数据集划分为训练集和验证集

参考

跳转

  1. 使用labelimg制作数据集
  2. 划分数据集

使用labelimg制作数据集

准备图片集

  1. 网上寻找相关图片放入images文件夹
  2. 在images同目录下创建labels和classes.txt
  3. classes.txt内写入待检测物体的名称,一行一个

安装labelimg

1
pip install labelimg

使用labelimg

  1. 运行labelimg

    1
    labelimg D:\a安建大\实验室\机器人创新实验室\三轮考核\c第三次任务__模式识别\datas\images classes.txt

    将路径替换为你的真实路径

  2. labelimg基础
    labelimg基础

  • 快捷键
    • d:下一张
    • a:上一张
    • w:创建矩形
  • 注意
    • 矩形框尽量完整的包围物体
    • 保存格式
    • View里面可以开启自动保存,当切换下一张时自动保存
    • 若要切换识别新的图片,注意需要指定新的保存路径,否则会加载上一次的保存路径

划分数据集

运行以下代码划分数据集,注意备份原始文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import os
import random
import shutil

# 原始图像和标注文件所在目录
source_image_dir = "images"
source_label_dir = "labels"

# 划分后的训练集和验证集目录
train_image_dir = "train/images"
train_label_dir = "train/labels"
val_image_dir = "val/images"
val_label_dir = "val/labels"

# 创建目录
os.makedirs(train_image_dir, exist_ok=True)
os.makedirs(train_label_dir, exist_ok=True)
os.makedirs(val_image_dir, exist_ok=True)
os.makedirs(val_label_dir, exist_ok=True)

# 获取图像文件列表
image_files = os.listdir(source_image_dir)

# 随机打乱图像文件列表
random.shuffle(image_files)

# 计算划分索引
split_index = int(0.8 * len(image_files))

# 划分训练集和验证集
train_files = image_files[:split_index]
val_files = image_files[split_index:]

# 移动文件
def move_files(files, source_image_dir, source_label_dir, target_image_dir, target_label_dir):
for file in files:
image_path = os.path.join(source_image_dir, file)
label_path = os.path.join(source_label_dir, os.path.splitext(file)[0] + ".txt")
shutil.move(image_path, os.path.join(target_image_dir, file))
shutil.move(label_path, os.path.join(target_label_dir, os.path.splitext(file)[0] + ".txt"))

move_files(train_files, source_image_dir, source_label_dir, train_image_dir, train_label_dir)
move_files(val_files, source_image_dir, source_label_dir, val_image_dir, val_label_dir)

print("数据集划分完成!")