YOLOX训练自己的VOC标注的数据

0. 前言

YOLOX是旷世在YOLO的基础上将anchor-free技术引入,从性能和速度上取得的更好的结果。具体可参考github相关代码及论文说明,此处介绍如何利用YOLOX训练自己的VOC数据集。

github:https://github.com/Megvii-BaseDetection/YOLOX

paper:https://arxiv.org/abs/2107.08430

1.环境配置

参考github上相关说明。

1)安装YOLOX

conda create -n yolox python=3.8
conda activate yolox
git clone git@github.com:Megvii-BaseDetection/YOLOX.git
cd YOLOX
pip3 install -U pip && pip3 install -r requirements.txt
pip3 install -v -e .  # or  python3 setup.py develop

2)安装apex

git clone https://github.com/NVIDIA/apex.git
cd apex
pip install -v --no-cache-dir --global-option="--cpp_ext" --global-option="--cuda_ext" ./
# pip install -v --no-cache-dir --global-option="--pyprof" --global-option="--cpp_ext" --global-option="--cuda_ext" ./
# python setup.py install --cpp_ext --cuda_ext

3)安装pycocotools

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

2.Demo

下载相关的训练模型。

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

3.训练VOC标注数据

1)准备数据

按照VOC的数据标注格式标注数据,数据目录如下:

--VOCdevkit
----VOC2007
------Annotations
------JPEGImages
------ImageSets
--------Main
----------test.txt
----------train.txt

2)修改配置文件

VOC的配置文件在YOLOX/exps/example/yolox_voc/yolox_voc_s.py

a)修改类别:

def __init__(self):
        super(Exp, self).__init__()
        self.num_classes = 20 ##类别
        self.depth = 0.33
        self.width = 0.50
        self.exp_name = os.path.split(os.path.realpath(__file__))[1].split(".")[0]

b)修改训练集目录

dataset = VOCDetection(
            data_dir=os.path.join(get_yolox_datadir(), "VOCdevkit"),
            image_sets=[('2007', 'trainval'), ('2012', 'trainval')], ## 训练集目录
            img_size=self.input_size,
            preproc=TrainTransform(
                rgb_means=(0.485, 0.456, 0.406),
                std=(0.229, 0.224, 0.225),
                max_labels=50,
            ),
        )

c)修改测试集目录

valdataset = VOCDetection(
            data_dir=os.path.join(get_yolox_datadir(), "VOCdevkit"),
            image_sets=[('2007', 'test')], ## 测试集目录
            img_size=self.test_size,
            preproc=ValTransform(
                rgb_means=(0.485, 0.456, 0.406),
                std=(0.229, 0.224, 0.225),
            ),
        )

3)修改类别

类别文件在YOLOX/yolox/data/datasets/voc_classes.py文件中,将自己对应的类别写入到这里即可。

4)训练模型

利用如下代码训练:

python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 8 -b 64 --fp16 -o -c /path/to/yolox_s.pth.tar

训练过程中的参数设置可以在文件yolox/exp/yolox_base.py中进行设置、

注意:更改测试集的时候,需要删除datasets/VOCdevkit下的annotations_cache文件,该文件存储的时候测试集数据GT,如更改数据集,之前保存的有,则还是调用之前生成的文件,导致训练错误。

上一篇:目标检测-数据集转换: csv转voc(xml)格式


下一篇:【经验分享】目标检测 VOC 格式数据集制作