YOLOX——Win10下训练自定义VOC数据集

前言

上个博客试着把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文件。
在这里插入图片描述
重新训练就可以了。

猜你喜欢

转载自blog.csdn.net/matt45m/article/details/119791813