1.必要环境
2.YOLOX安装及模型推理
3.训练自己数据集及测试
我的环境是:Windows10+python3.9+CUDA11.1+CUDNN8.1.1
在此环境配置不再多说,网上有很多的教程。本篇主要还是记录YOLOX的使用。(这里安装torch有个小坑,如果起初未安装torch,使用requirements.txt安装,则安装的为cpu版本,而此处我们使用的是gpu版本,注意别踩坑)
配置YOLOX的环境
2.1 进入github官网下载源码: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/https://github.com/Megvii-BaseDetection/YOLOX
2.2 安装依赖包:
pip install -r requirements.txt
2.3 安装yolox
python setup.py install
2.4 下载apex,解压到项目文件夹内 地址:mirrors / nvidia / apex · GIT CODE
2.5 cd到apex文件夹内,安装apex
cd apex-master
python setup.py install
2.6 返回yolox的主文件夹下,安装pycocotools
pip install pycocotools
2.7下载预训练模型,在2.1步骤给的网址中即可下载
2.8测试效果
测试图片指令:
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
效果:
此处制作数据集的步骤不再赘述。
3.1 首先按要求设置文件夹目录:
将图片放入JPEGImages中,xml文件放入Annotations
3.2 使用txt_write.py,划分数据集,并写入main文件夹下,生成trainval.txt和test.txt。
import os
import random
trainval_percent = 0.1
train_percent = 0.9
xmlfilepath = 'E:/YOLOX-main/datasets/VOC/VOCdevkit/VOC2007/Annotations'
txtsavepath = 'E:/YOLOX-main/datasets/VOC\VOCdevkit/VOC2007/ImageSets'
total_xml = os.listdir(xmlfilepath)
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)
ftest = open('E:/YOLOX-main/datasets/VOC/VOCdevkit/VOC2007/ImageSets/Main/test.txt', 'w')
ftrain = open('E:/YOLOX-main/datasets/VOC/VOCdevkit/VOC2007/ImageSets/Main/trainval.txt', 'w')
for i in list:
name = total_xml[i][:-4] + '\n'
if i in trainval:
ftest.write(name)
else:
ftrain.write(name)
ftrain.close()
ftest.close()
3.3 修改 yolox/data/dataloading.py 如下:
3.4 修改exps/example/yolox_voc/yolox_voc_s.py如下:
修改num_classes改为自己的类别数量
3.5 修改yolox/data/datasets/voc_classes.py为自己的类别
3.6 修改yolox/evaluators/voc_eval.py 如下
在yolox/exp/yolox_base.py
修改self.data_num_workers = 0
执行python setup.py install 更新yolox
此时运行训练代码报如下错误:Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
方法解决:在train.py文件中添加代码:
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'
3.7 运行代码开始训练 :
python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 4 --fp16 -o -c yolox_s.pth
-d 使用显卡个数
-b 批次大小
–fp16 是否开启半精度训练
-c 加载预训练模型
如果出现CUDA out of memory内存溢出,将–fp16 -o去掉,代码改为如下:
python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 4 -c yolox_s.pth
继续上一批次恢复训练的话,改成如下形式:
将—resume改为True,-c后面跟接要继续训练的权重文件
代码如下:
python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 4 -c YOLOX_outputs/yolox_voc_s/latest_ckpt.pth
运行截图:
结果存入:
4.1 测试前修改demo.py如下:
注释掉COCO_CLASSES,加入VOC_CLASSES
4.2 测试代码
python tools/demo.py image -f exps/example/yolox_voc/yolox_voc_s.py -c YOLOX_outputs/yolox_voc_s/latest_ckpt.pth --path assets/001.jpg --conf 0.3 --nms 0.65 --tsize 640 --save_result --device gpu
因为训练轮数为2轮,所以识别框不是很准确。
到此,YOLOX复现成功。
完结!