安装配置YOLOX —— 并改写训练数据集,设置常用功能

前言

在安装YOLOX的过程中,可能会遇到一些问题,这些问题可能不是特别好找,现在就直接开整吧,记录一下配置YOLOX的全过程。

主要写了一下一些内容:

  1. 配置YOLOX,并自定义数据集进行训练、验证和测试
  2. 给YOLOX增加了P、R、F1指标
  3. 增加了一个训练过程的验证结果的输出,并保存验证的结果为csv表格

这里参考了一些文章: 超详细!手把手教你使用YOLOX进行物体检测(附数据集)

1,配置YOLOX

基本按照官方文档readme.md,但是有一些细节部分没有提到,这里也整体过一遍。

git clone git@github.com:Megvii-BaseDetection/YOLOX.git

选择文件路径,打开命令行,输入以上内容,下载YOLOX。(如果没有Git需要自己安装)

或者直接去Github官网下载YOLOX: https://github.com/Megvii-BaseDetection/YOLOX

cd YOLOX
pip install -r requirements.txt

然后执行

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

两者任意选择一个就行,官方使用第二条,第二条也有两种写法,注意e后边的空格加·

安装apex

git clone https://github.com/NVIDIA/apex

或手动下载apex到本地,我选择下载到YOLOX的目录中:https://github.com/NVIDIA/apex

cd apex
pip install -r requirements.txt
python setup.py install

安装pycocotools

pip install pycocotools

下载与训练权重,放在YOLOX的根目录下:
https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.pth

执行以下命令验证:

python tools/demo.py image -f exps/default/yolox_s.py -c ./yolox_s.pth --path assets/dog.jpg --conf 0.3 --nms 0.65 --tsize 640 --save_result --device gpu

如果报错,没有tools/demo.py文件,则将tools/demo.py文件复制到根目录下,再执行:

python demo.py image -f exps/default/yolox_s.py -c ./yolox_s.pth --path assets/dog.jpg --conf 0.3 --nms 0.65 --tsize 640 --save_result --device gpu

运行成功,看到保存的图片,则基本配置完成。
在这里插入图片描述

2,配置个人数据集

作者这里提供了两种读取数据集的方式:COCOVOC

我这里先使用VOC格式进行读取。

首先准备好图片和标签数据,放在同一个文件夹中。

使用如下代码生成训练、验证的数据集的文件名集合的txt文件。

import os
import random

random.seed(0)

xmlfilepath = r'D:\DATA\datas\voc\car\Annotations'  # xml文件存放地址,在训练自己数据集的时候,改成自己的数据路径
saveBasePath = r"D:\DATA\datas\voc\car\ImageSets\new"  # 存放test.txt,train.txt,trainval.txt,val.txt文件路径

# ----------------------------------------------------------------------#
#   根据自己的需求更改trainval_percent和train_percent的比例
# ----------------------------------------------------------------------#
trainval_percent = 0.9
train_percent = 1

if not os.path.exists(saveBasePath):
    os.mkdir(saveBasePath)

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()

只需要修改地址、训练集验证集的比例即可,会在相应的保存目录下生成一个文件夹。

然后将所有的文件按照以下方式排列:

|-- VOCdevkit
   |-- VOC2007
       |-- Annotations
           |-- ***.xml
       |-- ImageSets
           |-- Main
               |-- test.txt
               |-- train.txt
               |-- trainval.txt
               |-- val.txt
       |-- JPEGImages
           |-- ***.jpg

然后放在yolox的根目录下的datasets文件夹中。

修改个人数据集配置

在 yolox/exp/yolox_base.py 中,改文件为最基本的YOLOX的相关配置,exps/example/yolox_voc/yolox_voc_s.py 继承了yolox_base.py,所以一般来说,还是修改yolox_voc_s.py

包括__init__中的基础设置,或者重新定义yolox_base的一些属性,比如self.max_epoch=2、self.no_aug_epochs = 1(方便我们调试,测试整个网络的运行是否有问题):

self.num_classes = 自定义数据集的类别

yolox/data/datasets/voc_classes.py

VOC_CLASSES = (
‘car’,
)

自定义数据集类别名称,别忘记加上逗号

修改读取数据目录:yolox_voc_s.py

45行和104行附近

dataset = VOCDetection(
                data_dir=os.path.join(get_yolox_datadir(), "VOCdevkit"),
                # data_dir='./datasets/VOCdevkit',
                image_sets=[('2007', 'trainval')],
                img_size=self.input_size,
                preproc=TrainTransform(

删去image_sets的 2012 train_val,如果使用第一个data_dir不能获取数据,则手动改成第二种(一般情况下应该没问题,测试过了)

然后修改voc.py文件中的第316行:

annopath = os.path.join(rootpath, “Annotations”, “{}.xml”)

删去":s",不然在最终验证的时候可能读不到文件。

到此,基本的配置已经完成。

3,训练

打开train.py,配置训练参数,修改完成后执行:

python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 4 --fp16 -c yolox_s.pth

还是那个建议,如果运行报错,没有找到train.py,就复制到根目录下执行。

4,验证

同样,打开val.py,修改验证参数,执行:

python tools/val.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 4 --fp16 -c best.pth

5,保存训练过程结果

打算再写一点保存训练过程的数据,另存为csv格式,就等下次再补上吧 [doge]

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值