深度相机识别物体——实现数据集准备与数据集分割

一、数据集准备——Labelimg进行标定

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)

相应的运行结果

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值