赞
踩
第一步:
文件格式照代码官网按如下分布,建议记录文件路径名字的txt文件(test_list.txt、train_list.txt)也放这个大文件下。划分的图片和标签数据集一定要按该目录形式存放,即images下为训练、测试、验证的图片,labels下为相对应的txt标签。存放后建议检查下数量是否一一对应。
第二步:
***_list.txt文件下保存的是images下对应图片的路径名,用在yaml文件中。
第三步:
修改/cfg/training/目录下所使用的预训练权重对应的yaml文件,这里使用的yolov7x,所以修改对应的yaml文件,只需改nc预测的数目即可。
第四步:
修改--weights、--cfg、--data为所需使用的文件或路径,给定--epochs和--batch-size。
就可以开始训练了,报错大概率是第一步文件不对或文件存放格式不对。
第一步用到的相关代码:
获取文件夹下文件和目录的路径名称并写入txt文件
- import os
-
- def listdir(path, list_name): # 传入存储的list
- for file in os.listdir(path):
- file_path = os.path.join(path, file)
- if os.path.isdir(file_path):
- listdir(file_path, list_name)
- else:
- list_name.append(file_path)
-
- if __name__ == '__main__':
- list_name = []
- path = '/home/king/Projects/lwf/yolov7-main/apple/datasets/images/val/' # 文件夹路径
- listdir(path, list_name)
- # print(list_name)
- with open('/home/king/Projects/lwf/yolov7-main/apple/datasets/val_list.txt', 'w') as f: # 要存入的txt
- write = ''
- for i in list_name:
- write = write + str(i) + '\n'
- f.write(write)
对数据集进行随机划分,训练验证:测试=9:1,并将划分后的路径写入对应txt文件下:
- import os
- import random
-
- trainval_percent = 0.9
- train_percent = 0.9
- xmlfilepath = '/home/king/Projects/lwf/yolov7-main/apple/苹果数据集/txt'
- txtsavepath = '/home/king/Projects/lwf/yolov7-main/apple/苹果数据集/JPEGImages'
- total_xml = os.listdir(xmlfilepath)
- total_img = os.listdir(txtsavepath)
-
- num = len(total_xml)
- list = range(num)
- tv = int(num * trainval_percent)
- tr = int(tv * train_percent)
- trainval = random.sample(list, tv)
- train = random.sample(trainval, tr)
-
- ftrainval = open('/home/king/Projects/lwf/yolov7-main/apple/苹果数据集/trainval.txt', 'w')
- ftest = open('/home/king/Projects/lwf/yolov7-main/apple/苹果数据集/test.txt', 'w')
- ftrain = open('/home/king/Projects/lwf/yolov7-main/apple/苹果数据集/train.txt', 'w')
- fval = open('/home/king/Projects/lwf/yolov7-main/apple/苹果数据集/val.txt', 'w')
-
- for i in list:
- name = txtsavepath + '/' + total_img[i] + '\n'
- if i in trainval:
- ftrainval.write(name)
- if i in train:
- ftrain.write(name)
- else:
- fval.write(name)
- else:
- ftest.write(name)
-
- ftrainval.close()
- ftrain.close()
- fval.close()
- ftest.close()
参考博文:
YOLOv7训练自己的数据集(超详细)_Mr Dinosaur的博客-CSDN博客_yolo官方数据集
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。