0


对yolov5的数据集进行划分【训练集、验证集、测试集】7:2:1和【训练集、验证集】8:2

参考的这位博主:

(487条消息) YOLOv5数据集划分脚本(train、val、test)_yolov5 val_叱咤风云灬龙的博客-CSDN博客

训练集:验证集:测试集 (7:2:1)

  1. import os, shutil, random
  2. from tqdm import tqdm
  3. def split_img(img_path, label_path, split_list):
  4. try :
  5. Data = 'DataSet'
  6. # Data是你要将要创建的文件夹路径(路径一定是相对于你当前的这个脚本而言的)
  7. os.mkdir(Data)
  8. train_img_dir = Data + '/images/train'
  9. val_img_dir = Data + '/images/val'
  10. test_img_dir = Data + '/images/test'
  11. train_label_dir = Data + '/labels/train'
  12. val_label_dir = Data + '/labels/val'
  13. test_label_dir = Data + '/labels/test'
  14. # 创建文件夹
  15. os.makedirs(train_img_dir)
  16. os.makedirs(train_label_dir)
  17. os.makedirs(val_img_dir)
  18. os.makedirs(val_label_dir)
  19. os.makedirs(test_img_dir)
  20. os.makedirs(test_label_dir)
  21. except:
  22. print('文件目录已存在')
  23. train, val, test = split_list
  24. all_img = os.listdir(img_path)
  25. all_img_path = [os.path.join(img_path, img) for img in all_img]
  26. # all_label = os.listdir(label_path)
  27. # all_label_path = [os.path.join(label_path, label) for label in all_label]
  28. train_img = random.sample(all_img_path, int(train * len(all_img_path)))
  29. train_img_copy = [os.path.join(train_img_dir, img.split('\\')[-1]) for img in train_img]
  30. train_label = [toLabelPath(img, label_path) for img in train_img]
  31. train_label_copy = [os.path.join(train_label_dir, label.split('\\')[-1]) for label in train_label]
  32. for i in tqdm(range(len(train_img)), desc='train ', ncols=80, unit='img'):
  33. _copy(train_img[i], train_img_dir)
  34. _copy(train_label[i], train_label_dir)
  35. all_img_path.remove(train_img[i])
  36. val_img = random.sample(all_img_path, int(val / (val + test) * len(all_img_path)))
  37. val_label = [toLabelPath(img, label_path) for img in val_img]
  38. for i in tqdm(range(len(val_img)), desc='val ', ncols=80, unit='img'):
  39. _copy(val_img[i], val_img_dir)
  40. _copy(val_label[i], val_label_dir)
  41. all_img_path.remove(val_img[i])
  42. test_img = all_img_path
  43. test_label = [toLabelPath(img, label_path) for img in test_img]
  44. for i in tqdm(range(len(test_img)), desc='test ', ncols=80, unit='img'):
  45. _copy(test_img[i], test_img_dir)
  46. _copy(test_label[i], test_label_dir)
  47. def _copy(from_path, to_path):
  48. shutil.copy(from_path, to_path)
  49. def toLabelPath(img_path, label_path):
  50. img = img_path.split('\\')[-1]
  51. label = img.split('.jpg')[0] + '.txt'
  52. return os.path.join(label_path, label)
  53. def main():
  54. img_path = 你的图片存放的路径(路径一定是相对于你当前的这个脚本文件而言的)
  55. label_path = 你的txt文件存放的路径(路径一定是相对于你当前的这个脚本文件而言的)
  56. split_list = [0.7, 0.2, 0.1] # 数据集划分比例[train:val:test]
  57. split_img(img_path, label_path, split_list)
  58. if __name__ == '__main__':
  59. main()

训练集:验证集 (8:2)

  1. import os
  2. import shutil
  3. import random
  4. from tqdm import tqdm
  5. def split_img(img_path, label_path, split_list):
  6. try: # 创建数据集文件夹
  7. Data = 'DataSet2parts'
  8. os.mkdir(Data)
  9. train_img_dir = Data + '/images/train'
  10. val_img_dir = Data + '/images/val'
  11. # test_img_dir = Data + '/images/test'
  12. train_label_dir = Data + '/labels/train'
  13. val_label_dir = Data + '/labels/val'
  14. # test_label_dir = Data + '/labels/test'
  15. # 创建文件夹
  16. os.makedirs(train_img_dir)
  17. os.makedirs(train_label_dir)
  18. os.makedirs(val_img_dir)
  19. os.makedirs(val_label_dir)
  20. # os.makedirs(test_img_dir)
  21. # os.makedirs(test_label_dir)
  22. except:
  23. print('文件目录已存在')
  24. train, val = split_list
  25. all_img = os.listdir(img_path)
  26. all_img_path = [os.path.join(img_path, img) for img in all_img]
  27. # all_label = os.listdir(label_path)
  28. # all_label_path = [os.path.join(label_path, label) for label in all_label]
  29. train_img = random.sample(all_img_path, int(train * len(all_img_path)))
  30. train_img_copy = [os.path.join(train_img_dir, img.split('\\')[-1]) for img in train_img]
  31. train_label = [toLabelPath(img, label_path) for img in train_img]
  32. train_label_copy = [os.path.join(train_label_dir, label.split('\\')[-1]) for label in train_label]
  33. for i in tqdm(range(len(train_img)), desc='train ', ncols=80, unit='img'):
  34. _copy(train_img[i], train_img_dir)
  35. _copy(train_label[i], train_label_dir)
  36. all_img_path.remove(train_img[i])
  37. val_img = all_img_path
  38. val_label = [toLabelPath(img, label_path) for img in val_img]
  39. for i in tqdm(range(len(val_img)), desc='val ', ncols=80, unit='img'):
  40. _copy(val_img[i], val_img_dir)
  41. _copy(val_label[i], val_label_dir)
  42. def _copy(from_path, to_path):
  43. shutil.copy(from_path, to_path)
  44. def toLabelPath(img_path, label_path):
  45. img = img_path.split('\\')[-1]
  46. label = img.split('.jpg')[0] + '.txt'
  47. return os.path.join(label_path, label)
  48. def main():
  49. img_path = 'datasets/500'
  50. label_path = 'datasets/txtresults'
  51. split_list = [0.8, 0.2] # 数据集划分比例[train:val]
  52. split_img(img_path, label_path, split_list)
  53. if __name__ == '__main__':
  54. main()

本文转载自: https://blog.csdn.net/qq_44133071/article/details/129845817
版权归原作者 一鹿向晗99 所有, 如有侵权,请联系我们删除。

“对yolov5的数据集进行划分【训练集、验证集、测试集】7:2:1和【训练集、验证集】8:2”的评论:

还没有评论