1.安装labelimg——pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple
2.建立相应的数据集存放文件夹

3.打开labelimg,直接在命令行输入labelimg即可,并初始化

4.开始标注,设置标注好后自动保存view——Auto Save mode


详细可参考博文:目标检测---利用labelimg制作自己的深度学习目标检测数据集-CSDN博客
1.数据分割:训练集占比70%,测试集占比30%
2.数据分割的详细步骤
1)确认是否已经建立测试集文件夹,如果没有,则通过python指令建立相应的测试集文件夹
- # 训练集的路径
- train_p = r"C:\Users\82370\.conda\envs\Ayolo8\Lib\site-packages\ultralytics\dataset\train"
- # 验证集的路径
- val_p = r"C:\Users\82370\.conda\envs\Ayolo8\Lib\site-packages\ultralytics\dataset\val"
- # 图像数据的路径
- imgs_p = "images"
- # 标签数据的路径
- labels_p = "labels"
-
- # 创建训练集
- # 首先判断训练集的地址是否存在,不存在就创建路径
- if not os.path.exists(train_p): # 指定要创建的目录
- os.mkdir(train_p)
- # 在训练集的地址下添加两个文件夹:images和labels
- tp1 = os.path.join(train_p, imgs_p)
- tp2 = os.path.join(train_p, labels_p)
- # 打印images和labels的存放地址tp1和tp2
- print(tp1, tp2)
- # 如果没有这两个文件夹,就创建相应文件夹
- if not os.path.exists(tp1): # 指定要创建的目录
- os.mkdir(tp1)
- if not os.path.exists(tp2): # 指定要创建的目录
- os.mkdir(tp2)
-
- # 创建测试集文件夹与上述训练集文件夹创建方法已知
- if not os.path.exists(val_p):
- os.mkdir(val_p)
- vp1 = os.path.join(val_p, imgs_p)
- vp2 = os.path.join(val_p, labels_p)
- print(vp1, vp2)
- if not os.path.exists(vp1):
- os.mkdir(vp1)
- if not os.path.exists(vp2):
- os.mkdir(vp2)

2)划分数据集:
确认训练集占比——将list列表随机排序,并按照比例及逆行分割——判断i是在哪个list里面,并对其图片和标签进行分类复制存储。
将list列表随机排序并分割的代码
- # 此函数用于将full_list按照ratio比例进行切割
- def data_split(full_list, ratio):
- n_total = len(full_list) # list的长度
- offset = int(n_total * ratio) # 总长度乘以相应的比例
- # 如果按照比例得到的offest小于1,则表明没有训练集,返回空
- if n_total == 0 or offset < 1:
- return [], full_list
- # 对列表进行随机排序
- random.shuffle(full_list)
- # 对列表按照offset进行分割,得到两个子列表
- sublist_1 = full_list[:offset] # 这里不包括offset
- sublist_2 = full_list[offset:]
- # 返回分割后的两个列表
- return sublist_1, sublist_2
判断i在哪个list里面,并实现复制存储
- # 数据集源文件放置的路径
- images_dir = "C:/Users/82370/.conda/envs/Ayolo8/Lib/site-packages/ultralytics/dataset/images"
- labels_dir = "C:/Users/82370/.conda/envs/Ayolo8/Lib/site-packages/ultralytics/dataset/labels"
-
- # 划分数据集,设置数据集数量占比
- proportion_ = 0.7 # 训练集占比
- # 使用python的os模块来获取指定目录下的所有文件名,并赋值给total_file
- total_file = os.listdir(images_dir)
- print(total_file)
- # 统计所有的已标注文件数量
- num = len(total_file)
- # 初始化一个空列表
- list_ = []
- # 将0,num-1的整数添加到list_列表中
- for i in range(0, num):
- list_.append(i)
- # 将list随机排序后再分割成两个列表
- list1, list2 = data_split(list_, proportion_)
-
- for i in range(0, num):
- # 遍历total_file列表的每一个文件
- file = total_file[i]
- # 打印出文件的索引和文件名,即每一个编号对应的图片文件名称
- print(i, ' - ', total_file[i])
- # 将文件名进行分割“1.txt”则name的值=1
- name = file.split('.')[0]
- # 如果i再列表1中表明该对应的图片需要放到训练集中
- if i in list1:
- # 以下两个语句用于获取相应的第i个图片的地址
- # 将images_dir,file合并成一个路径,并存储到jpg_1这个变量中
- # 将train_p,images_p,file合并成一个路径,并存储到jpg_2这个变量中
- jpg_1 = os.path.join(images_dir, file)
- jpg_2 = os.path.join(train_p, imgs_p, file)
- # 得到相应的label文件的两个地址
- txt_1 = os.path.join(labels_dir, name + '.txt')
- txt_2 = os.path.join(train_p, labels_p, name + '.txt')
- # 如果有待复制的文件和标签,则进行相应的复制工作
- if os.path.exists(txt_1) and os.path.exists(jpg_1):
- shutil.copyfile(jpg_1, jpg_2) # 将1复制到2中
- shutil.copyfile(txt_1, txt_2) # 将1复制到2中
- # elif==>表示else if的意思
- # 如果只有txt_1存在,则打印相应的标签地址,否则打印图片的地址
- elif os.path.exists(txt_1):
- print(txt_1) # txt_1存在
- else:
- print(jpg_1) # txt_1不存在
- # 如果i在列表2中执行以下程序段
- elif i in list2:
- jpg_1 = os.path.join(images_dir, file)
- jpg_2 = os.path.join(val_p, imgs_p, file)
- txt_1 = os.path.join(labels_dir, name + '.txt')
- txt_2 = os.path.join(val_p, labels_p, name + '.txt')
- shutil.copyfile(jpg_1, jpg_2)
- shutil.copyfile(txt_1, txt_2)
相应的运行结果
