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,如更改数据集,之前保存的有,则还是调用之前生成的文件,导致训练错误。