赞
踩
上个博客试着把yolox在win下的环境配置,然后就要试着训练自己的数据集,我这里用的是VOC格式的数据集,训练环境是win10 x64,CUDA11.0 cudnn 8.1 GPU 是GTX 3080,Anaconda 3.7,数据标注工具是LabelImg。
1.在XXX/YOLOX/datasets/下创建一个VOCdevkit目录,在VOCdevkit下VOC2007目录,VOC2007目录下再创建三个空目录,分别是Annotations、ImageSets、JPEGImages,此时VOC2007目录下只有三个空的目录。
2.把要训练的图像放到JPEGImags目录下,如果有标注过的数据就把对应的xml文件放到Annotations目录,要从头标注则打开LabelImg,选择数据集路径(JPEGImags),选择保存标签文件路径(Annotations),开始标注。
3.把所有数据标注完成之后,在ImageSets目录下创建一个Main的目录,这个目录是用来保存数据配置文件的。
4.处理数据,把数据分成训练集和测试集,并生成对应的txt文件,处理数据python代码:
CreateVOCData.py
import os
import random
trainval_percent = 0.1
train_percent = 0.9
data_root_path = 'D:/DL/YOLOX/datasets/VOCdevkit/VOC2007/'
total_xml = os.listdir(os.path.join(data_root_path,"Annotations"))
label_num = len(total_xml)
list = range(label_num)
tv = int(label_num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)
train_file = open(os.path.join(data_root_path,"ImageSets/Main/train.txt"), 'w')
val_file = open(os.path.join(data_root_path,"ImageSets/Main/val.txt"), 'w')
for i in list:
name = total_xml[i][:-4] + '\n'
if i in trainval:
val_file.write(name)
else:
train_file.write(name)
train_file.close()
val_file.close()
运行之后,在XXX/YOLOX/datasets/VOCdevkit/VOC2007/ImageSets/Main下有两个txt文件,这个就是训练集和验证集的目录标签。
1.打开YOLOX\exps\example\yolox_voc\yolo_voc_s.py,把训练集和测试集路径改成自己的路径,在win下建议写绝对路径。
训练数据路径:
验证数据路径:
更改标签类数:
2.打开YOLOX/yolox/data/datasets/voc_classes.py
3.开始训练,我训练的是yolox_s的模型,从yolox官网下载yolox_s的权重放到YOLOX目录下,然后激活环境,开始训练。
cd YOLOX
activate yolox
python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 16 --fp16 -o -c yolox_s.pth
-d 使用多少张显卡训练
-b 批次大小
-fp16 是否开启半精度训练
-c 权重文件
如果出现这个代表已在开始,但也别高兴得太早,到10 epoch 之后开始验证,有可能报FileNotFoundError: [Errno 2] No such file or directory: ‘xxxxx.xml’ 这个错,然后打开val.txt文件,这xxx.xml文件是验证集的第一个文件,这是读不到目录引起的,更改YOLOX\yolox\evaluators\voc_eval.py文件。
重新训练就可以了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。