Yolox训练VOC数据集

使用旷视科技发布的Yolox训练自己的VOC数据集,标注文件与yolov3、yolov4、yolov5格式相同。

一、搭建Yolox代码环境

1.下载Yolox代码

Yolox代码链接:GitHub - Megvii-BaseDetection/YOLOX: YOLOX is a high-performance anchor-free YOLO, exceeding yolov3~v5 with MegEngine, ONNX, TensorRT, ncnn, and OpenVINO supported. Documentation: https://yolox.readthedocs.io/

1.搭建测试环境

(1)新建Conda环境

输入代码

conda create -n Yolox_3.7 python=3.7

 

(2)进入Conda环境

输入代码

conda activate Yolox_3.7

(3)安装代码依赖库

进入下载好的YOLOX-main文件夹下面,输入代码:

pip3 install -U pip && pip3 install -r requirements.txt

(4)安装库文件

通过setup.py安装一些库文件,输入代码:

pip3 install -v -e .  # or  python3 setup.py develop

(5)下载pycocotools

输入代码:

pip3 install cython; pip3 install 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'

1.Demo效果测试

(1)下载权重

搭建好环境后,就可以下载官方的预训练模型,对图片进行测试了。预训练权重的下载链接,在官方代码的说明中。我们可先下载Yolox_s.pth文件,尝试测试效果。

下载好yolox_s.pth后,放到YOLOX-main/weigths代码的文件夹下。

(2)Demo测试

对代码中自带的图片进行Demo测试。

在YOLOX-main文件夹的终端页面输入:

python tools/demo.py image -n yolox-s -c weigths/yolox_s.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device [cpu/gpu]

二、Yolox训练自己的VOC数据集

1.准备数据

注意事项:

① 标注的工具:采用Labelimg标注软件

② 标注的图片:标记图片的jpg文件与生成xml图片分开存放

③ 标签的类别:英文、不包括特殊符号、空格

2.数据集划分

(1)数据准备

模仿VOC数据格式准备数据,VOC格式的分布:

在VOC这些文件夹中,主要用到:

① JPEGImages:jpg文件

② Annotations:xml文件

③ ImageSets/Main:训练集train.txt,验证集val.txt。

在YOLOX-main/datasets/下新建VOCdevkit/VOC2007文件夹

然后在文件夹中新建ImageSets/Main文件夹并且把JPEGImages 与Annotations文件夹放入该文件夹

(2)划分训练集与验证集

训练过程中,需要划分为训练集验证集,编写脚本,将数据集分为训练集和验证集,并且生成对应的train.txt,和val.txt,放在Main文件夹中。

终端进入YOLOX-main/datasets/VOCdevkit/VOC2007

输入代码:

vim train_val.py
import os
import random 
random.seed(0)
xmlfilepath=r'./Annotations'
saveBasePath=r"./ImageSets/Main/"
​
#----------------------------------------------------------------------#
#   想要增加测试集修改trainval_percent
#   train_percent不需要修改
#----------------------------------------------------------------------#
trainval_percent=0.8
train_percent=1
​
temp_xml = os.listdir(xmlfilepath)
total_xml = []
for xml in temp_xml:
    if xml.endswith(".xml"):
        total_xml.append(xml)
​
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)  
​
print("train and val size",tv)
print("traub suze",tr)
ftrainval = open(os.path.join(saveBasePath,'trainval.txt'), 'w')  
ftest = open(os.path.join(saveBasePath,'test.txt'), 'w')  
ftrain = open(os.path.join(saveBasePath,'train.txt'), 'w')  
fval = open(os.path.join(saveBasePath,'val.txt'), 'w')  
​
for i  in list:  
    name=total_xml[i][:-4]+'\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()
python train_val.py

运行代码后,在Main文件夹下生成下面四个txt文档:

3.修改参数

(1)修改参数标签

将yolox/data/datasets/voc_classes.py中的标签信息,进行修改。

注意:类别后面都要加逗号,例如“head”后面加了一个逗号“,”。

(2)修改模型结构

本次使用的yolox_x.pth 模型训练,所以复制YOLOX-main/exps/default/yolox_x.py文件中的网络调用结构至YOLOX-main/exps/example/yolox_voc/yolox_voc_s.py中,如下图所示:

至并且把文件名称改成yolox_voc_x.py

(3)修改类别数量

修改YOLOX-main/exps/example/yolox_voc/yolox_voc_s.py中的self.num_classes,根据自己的类别数量修改

(4)修改训练集与验证集信息

修改exps/example/yolox_voc/yolox_voc_s.py中的VOCDection,修改为自己的数据集

修改exps/example/yolox_voc/yolox_voc_s.py中的get_eval_loader函数。

三、训练

1.终端训练

将下载好的yolox_x.pth.放到YOLOX文件夹中,打开终端,在终端中输入:

python3 tools/train.py -f exps/example/yolox_voc/yolox_voc_x.py -d 0 -b 64 -c yolox_x.pth

2.代码训练

修改train.py文件

运行:

python tool/train.py
  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值