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


    一、数据集准备——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指令建立相应的测试集文件夹

    1. # 训练集的路径
    2. train_p = r"C:\Users\82370\.conda\envs\Ayolo8\Lib\site-packages\ultralytics\dataset\train"
    3. # 验证集的路径
    4. val_p = r"C:\Users\82370\.conda\envs\Ayolo8\Lib\site-packages\ultralytics\dataset\val"
    5. # 图像数据的路径
    6. imgs_p = "images"
    7. # 标签数据的路径
    8. labels_p = "labels"
    9. # 创建训练集
    10. # 首先判断训练集的地址是否存在,不存在就创建路径
    11. if not os.path.exists(train_p): # 指定要创建的目录
    12. os.mkdir(train_p)
    13. # 在训练集的地址下添加两个文件夹:images和labels
    14. tp1 = os.path.join(train_p, imgs_p)
    15. tp2 = os.path.join(train_p, labels_p)
    16. # 打印images和labels的存放地址tp1和tp2
    17. print(tp1, tp2)
    18. # 如果没有这两个文件夹,就创建相应文件夹
    19. if not os.path.exists(tp1): # 指定要创建的目录
    20. os.mkdir(tp1)
    21. if not os.path.exists(tp2): # 指定要创建的目录
    22. os.mkdir(tp2)
    23. # 创建测试集文件夹与上述训练集文件夹创建方法已知
    24. if not os.path.exists(val_p):
    25. os.mkdir(val_p)
    26. vp1 = os.path.join(val_p, imgs_p)
    27. vp2 = os.path.join(val_p, labels_p)
    28. print(vp1, vp2)
    29. if not os.path.exists(vp1):
    30. os.mkdir(vp1)
    31. if not os.path.exists(vp2):
    32. os.mkdir(vp2)

            2)划分数据集:

            确认训练集占比——将list列表随机排序,并按照比例及逆行分割——判断i是在哪个list里面,并对其图片和标签进行分类复制存储。

            将list列表随机排序并分割的代码

    1. # 此函数用于将full_list按照ratio比例进行切割
    2. def data_split(full_list, ratio):
    3. n_total = len(full_list) # list的长度
    4. offset = int(n_total * ratio) # 总长度乘以相应的比例
    5. # 如果按照比例得到的offest小于1,则表明没有训练集,返回空
    6. if n_total == 0 or offset < 1:
    7. return [], full_list
    8. # 对列表进行随机排序
    9. random.shuffle(full_list)
    10. # 对列表按照offset进行分割,得到两个子列表
    11. sublist_1 = full_list[:offset] # 这里不包括offset
    12. sublist_2 = full_list[offset:]
    13. # 返回分割后的两个列表
    14. return sublist_1, sublist_2

            判断i在哪个list里面,并实现复制存储        

    1. # 数据集源文件放置的路径
    2. images_dir = "C:/Users/82370/.conda/envs/Ayolo8/Lib/site-packages/ultralytics/dataset/images"
    3. labels_dir = "C:/Users/82370/.conda/envs/Ayolo8/Lib/site-packages/ultralytics/dataset/labels"
    4. # 划分数据集,设置数据集数量占比
    5. proportion_ = 0.7 # 训练集占比
    6. # 使用python的os模块来获取指定目录下的所有文件名,并赋值给total_file
    7. total_file = os.listdir(images_dir)
    8. print(total_file)
    9. # 统计所有的已标注文件数量
    10. num = len(total_file)
    11. # 初始化一个空列表
    12. list_ = []
    13. # 将0,num-1的整数添加到list_列表中
    14. for i in range(0, num):
    15. list_.append(i)
    16. # 将list随机排序后再分割成两个列表
    17. list1, list2 = data_split(list_, proportion_)
    18. for i in range(0, num):
    19. # 遍历total_file列表的每一个文件
    20. file = total_file[i]
    21. # 打印出文件的索引和文件名,即每一个编号对应的图片文件名称
    22. print(i, ' - ', total_file[i])
    23. # 将文件名进行分割“1.txt”则name的值=1
    24. name = file.split('.')[0]
    25. # 如果i再列表1中表明该对应的图片需要放到训练集中
    26. if i in list1:
    27. # 以下两个语句用于获取相应的第i个图片的地址
    28. # 将images_dir,file合并成一个路径,并存储到jpg_1这个变量中
    29. # 将train_p,images_p,file合并成一个路径,并存储到jpg_2这个变量中
    30. jpg_1 = os.path.join(images_dir, file)
    31. jpg_2 = os.path.join(train_p, imgs_p, file)
    32. # 得到相应的label文件的两个地址
    33. txt_1 = os.path.join(labels_dir, name + '.txt')
    34. txt_2 = os.path.join(train_p, labels_p, name + '.txt')
    35. # 如果有待复制的文件和标签,则进行相应的复制工作
    36. if os.path.exists(txt_1) and os.path.exists(jpg_1):
    37. shutil.copyfile(jpg_1, jpg_2) # 将1复制到2
    38. shutil.copyfile(txt_1, txt_2) # 将1复制到2
    39. # elif==>表示else if的意思
    40. # 如果只有txt_1存在,则打印相应的标签地址,否则打印图片的地址
    41. elif os.path.exists(txt_1):
    42. print(txt_1) # txt_1存在
    43. else:
    44. print(jpg_1) # txt_1不存在
    45. # 如果i在列表2中执行以下程序段
    46. elif i in list2:
    47. jpg_1 = os.path.join(images_dir, file)
    48. jpg_2 = os.path.join(val_p, imgs_p, file)
    49. txt_1 = os.path.join(labels_dir, name + '.txt')
    50. txt_2 = os.path.join(val_p, labels_p, name + '.txt')
    51. shutil.copyfile(jpg_1, jpg_2)
    52. shutil.copyfile(txt_1, txt_2)

    相应的运行结果

  • 相关阅读:
    基于QT的学生考勤系统
    2022爱分析· 虚拟化活动厂商全景报告 | 爱分析报告
    java计算机毕业设计基于安卓Android的在线心理咨询与健康App(源码+系统+mysql数据库+Lw文档)
    保腿还是保命,这是个问题
    【前端】CSS-Flex弹性盒模型布局
    计算机毕设 opencv python 深度学习垃圾图像分类系统
    Java Stream
    Redis夺命十二问,你能扛到第几问?
    施耐德PLC如何进行远程维护?
    户外花园藤条吊椅出口欧盟CE认证范围
  • 原文地址:https://blog.csdn.net/doudou2weiwei/article/details/139987734