Skip to content

Latest commit

 

History

History
 
 

yolox

YOLOX (YOLOX: Exceeding YOLO Series in 2021)

Model Zoo

YOLOX on COCO

网络网络 输入尺寸 图片数/GPU 学习率策略 推理时间(fps) Box AP 下载链接 配置文件
YOLOX-nano 416 8 300e ---- 26.1 下载链接 配置文件
YOLOX-tiny 416 8 300e ---- 32.9 下载链接 配置文件
YOLOX-s 640 8 300e ---- 40.4 下载链接 配置文件
YOLOX-m 640 8 300e ---- 46.9 下载链接 配置文件
YOLOX-l 640 8 300e ---- 50.1 下载链接 配置文件
YOLOX-x 640 8 300e ---- 51.8 下载链接 配置文件

注意:

  • YOLOX模型训练使用COCO train2017作为训练集,Box AP为在COCO val2017上的mAP(IoU=0.5:0.95)结果;
  • YOLOX模型训练过程中默认使用8 GPUs进行混合精度训练,默认单卡batch_size为8,如果GPU卡数或者batch size发生了改变,你需要按照公式 lrnew = lrdefault * (batch_sizenew * GPU_numbernew) / (batch_sizedefault * GPU_numberdefault) 调整学习率;
  • 为保持高mAP的同时提高推理速度,可以将yolox_cspdarknet.yml中的nms_top_k修改为1000,将keep_top_k修改为100,mAP会下降约0.1~0.2%;
  • 为快速的demo演示效果,可以将yolox_cspdarknet.yml中的score_threshold修改为0.25,将nms_threshold修改为0.45,但mAP会下降较多;

使用教程

1. 训练

执行以下指令使用混合精度训练YOLOX

python -m paddle.distributed.launch --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/yolox/yolox_s_300e_coco.yml --fleet --amp --eval

注意: 使用默认配置训练需要设置--fleet--amp最好也设置以避免显存溢出,--eval表示边训边验证。

2. 评估

执行以下命令在单个GPU上评估COCO val2017数据集

CUDA_VISIBLE_DEVICES=0 python tools/eval.py -c configs/yolox/yolox_s_300e_coco.yml -o weights=https://paddledet.bj.bcebos.com/models/yolox_s_300e_coco.pdparams

3. 推理

使用以下命令在单张GPU上预测图片,使用--infer_img推理单张图片以及使用--infer_dir推理文件中的所有图片。

# 推理单张图片
CUDA_VISIBLE_DEVICES=0 python tools/infer.py -c configs/yolox/yolox_s_300e_coco.yml -o weights=https://paddledet.bj.bcebos.com/models/yolox_s_300e_coco.pdparams --infer_img=demo/000000014439_640x640.jpg

# 推理文件中的所有图片
CUDA_VISIBLE_DEVICES=0 python tools/infer.py -c configs/yolox/yolox_s_300e_coco.yml -o weights=https://paddledet.bj.bcebos.com/models/yolox_s_300e_coco.pdparams --infer_dir=demo

4. 部署

4.1. 导出模型

YOLOX在GPU上推理部署或benchmark测速等需要通过tools/export_model.py导出模型。 运行以下的命令进行导出:

python tools/export_model.py -c configs/yolox/yolox_s_300e_coco.yml -o weights=https://paddledet.bj.bcebos.com/models/yolox_s_300e_coco.pdparams

4.2. Python部署

deploy/python/infer.py使用上述导出后的Paddle Inference模型用于推理和benchnark测速,如果设置了--run_benchmark=True, 首先需要安装以下依赖pip install pynvml psutil GPUtil

# Python部署推理单张图片
python deploy/python/infer.py --model_dir=output_inference/yolox_s_300e_coco --image_file=demo/000000014439_640x640.jpg --device=gpu

# 推理文件夹下的所有图片
python deploy/python/infer.py --model_dir=output_inference/yolox_s_300e_coco --image_dir=demo/ --device=gpu

# benchmark测速
python deploy/python/infer.py --model_dir=output_inference/yolox_s_300e_coco --image_file=demo/000000014439_640x640.jpg --device=gpu --run_benchmark=True

# tensorRT-FP32测速
python deploy/python/infer.py --model_dir=output_inference/yolox_s_300e_coco --image_file=demo/000000014439_640x640.jpg --device=gpu --run_benchmark=True --trt_max_shape=640 --trt_min_shape=640 --trt_opt_shape=640 --run_mode=trt_fp32

# tensorRT-FP16测速
python deploy/python/infer.py --model_dir=output_inference/yolox_s_300e_coco --image_file=demo/000000014439_640x640.jpg --device=gpu --run_benchmark=True --trt_max_shape=640 --trt_min_shape=640 --trt_opt_shape=640 --run_mode=trt_fp16

4.2. C++部署

deploy/cpp/build/main使用上述导出后的Paddle Inference模型用于C++推理部署, 首先按照docs编译安装环境。

# C++部署推理单张图片
./deploy/cpp/build/main --model_dir=output_inference/yolox_s_300e_coco/ --image_file=demo/000000014439_640x640.jpg --run_mode=paddle --device=GPU --threshold=0.5 --output_dir=cpp_infer_output/yolox_s_300e_coco

Citations

 @article{yolox2021,
  title={YOLOX: Exceeding YOLO Series in 2021},
  author={Ge, Zheng and Liu, Songtao and Wang, Feng and Li, Zeming and Sun, Jian},
  journal={arXiv preprint arXiv:2107.08430},
  year={2021}
}