YOLOX is an anchor-free version of YOLO, with a simpler design but better performance! It aims to bridge the gap between research and industrial communities. For more details, please refer to ourreport on Arxiv.
This repo is an implementation of PyTorch version YOLOX, there is also aMegEngine implementation.
- 【2023/02/28】 We support assignment visualization tool, see dochere.
- 【2022/04/14】 We support jit compile op.
- 【2021/08/19】 We optimize the training process with2xfaster training and~1%higher performance! Seenotesfor more details.
- 【2021/08/05】 We releaseMegEngine version YOLOX.
- 【2021/07/28】 We fix the fatal error ofmemory leak
- 【2021/07/26】 We now supportMegEnginedeployment.
- 【2021/07/20】 We have released our technical report onArxiv.
- YOLOX-P6 and larger model.
- Objects365 pretrain.
- Transformer modules.
- More features in need.
Model | size | mAPval 0.5:0.95 |
mAPtest 0.5:0.95 |
Speed V100 (ms) |
Params (M) |
FLOPs (G) |
weights |
---|---|---|---|---|---|---|---|
YOLOX-s | 640 | 40.5 | 40.5 | 9.8 | 9.0 | 26.8 | github |
YOLOX-m | 640 | 46.9 | 47.2 | 12.3 | 25.3 | 73.8 | github |
YOLOX-l | 640 | 49.7 | 50.1 | 14.5 | 54.2 | 155.6 | github |
YOLOX-x | 640 | 51.1 | 51.5 | 17.3 | 99.1 | 281.9 | github |
YOLOX-Darknet53 | 640 | 47.7 | 48.0 | 11.1 | 63.7 | 185.3 | github |
Legacy models
Model | size | mAPtest 0.5:0.95 |
Speed V100 (ms) |
Params (M) |
FLOPs (G) |
weights |
---|---|---|---|---|---|---|
YOLOX-s | 640 | 39.6 | 9.8 | 9.0 | 26.8 | onedrive/github |
YOLOX-m | 640 | 46.4 | 12.3 | 25.3 | 73.8 | onedrive/github |
YOLOX-l | 640 | 50.0 | 14.5 | 54.2 | 155.6 | onedrive/github |
YOLOX-x | 640 | 51.2 | 17.3 | 99.1 | 281.9 | onedrive/github |
YOLOX-Darknet53 | 640 | 47.4 | 11.1 | 63.7 | 185.3 | onedrive/github |
Model | size | mAPval 0.5:0.95 |
Params (M) |
FLOPs (G) |
weights |
---|---|---|---|---|---|
YOLOX-Nano | 416 | 25.8 | 0.91 | 1.08 | github |
YOLOX-Tiny | 416 | 32.8 | 5.06 | 6.45 | github |
Legacy models
Model | size | mAPval 0.5:0.95 |
Params (M) |
FLOPs (G) |
weights |
---|---|---|---|---|---|
YOLOX-Nano | 416 | 25.3 | 0.91 | 1.08 | github |
YOLOX-Tiny | 416 | 32.8 | 5.06 | 6.45 | github |
Installation
Step1. Install YOLOX from source.
git clone git@github:Megvii-BaseDetection/YOLOX.git
cdYOLOX
pip3 install -v -e.#or Python 3 setup.py develop
Demo
Step1. Download a pretrained model from the benchmark table.
Step2. Use either -n or -f to specify your detector's config. For example:
Python tools/demo.py image -n yolox-s -c /path/to/your/yolox_s.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device [cpu/gpu]
or
Python tools/demo.py image -f exps/default/yolox_s.py -c /path/to/your/yolox_s.pth --path assets/dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device [cpu/gpu]
Demo for video:
Python tools/demo.py video -n yolox-s -c /path/to/your/yolox_s.pth --path /path/to/your/video --conf 0.25 --nms 0.45 --tsize 640 --save_result --device [cpu/gpu]
Reproduce our results on COCO
Step1. Prepare COCO dataset
cd<YOLOX_HOME>
ln -s /path/to/your/COCO./datasets/COCO
Step2. Reproduce our results on COCO by specifying -n:
Python -m yolox.tools.train -n yolox-s -d 8 -b 64 --fp16 -o [--cache]
yolox-m
yolox-l
yolox-x
- -d: number of gpu devices
- -b: total batch size, the recommended number for -b is num-gpu * 8
- --fp16: mixed precision training
- --cache: caching imgs into RAM to accelarate training, which need large system RAM.
When using -f, the above commands are equivalent to:
Python -m yolox.tools.train -f exps/default/yolox_s.py -d 8 -b 64 --fp16 -o [--cache]
exps/default/yolox_m.py
exps/default/yolox_l.py
exps/default/yolox_x.py
Multi Machine Training
We also support multi-nodes training. Just add the following args:
- --num_machines: num of your total training nodes
- --machine_rank: specify the rank of each node
Suppose you want to train YOLOX on 2 machines, and your master machines's IP is 123.123.123.123, use port 12312 and TCP.
On master machine, run
Python tools/train.py -n yolox-s -b 128 --dist-url tcp://123.123.123.123:12312 --num_machines 2 --machine_rank 0
On the second machine, run
Python tools/train.py -n yolox-s -b 128 --dist-url tcp://123.123.123.123:12312 --num_machines 2 --machine_rank 1
Logging to Weights & Biases
To log metrics, predictions and model checkpoints toW&Buse the command line argument--logger wandb
and use the prefix "wandb-" to specify arguments for initializing the wandb run.
Python tools/train.py -n yolox-s -d 8 -b 64 --fp16 -o [--cache] --logger wandb wandb-project<project name>
yolox-m
yolox-l
yolox-x
An example wandb dashboard is availablehere
Others
See more information with the following command:
Python -m yolox.tools.train --help
Evaluation
We support batch testing for fast evaluation:
Python -m yolox.tools.eval -n yolox-s -c yolox_s.pth -b 64 -d 8 --conf 0.001 [--fp16] [--fuse]
yolox-m
yolox-l
yolox-x
- --fuse: fuse conv and bn
- -d: number of GPUs used for evaluation. DEFAULT: All GPUs available will be used.
- -b: total batch size across on all GPUs
To reproduce speed test, we use the following command:
Python -m yolox.tools.eval -n yolox-s -c yolox_s.pth -b 1 -d 1 --conf 0.001 --fp16 --fuse
yolox-m
yolox-l
yolox-x
Tutorials
- MegEngine in C++ and Python
- ONNX export and an ONNXRuntime
- TensorRT in C++ and Python
- ncnn in C++ and Java
- OpenVINO in C++ and Python
- Accelerate YOLOX inference with nebullvm in Python
- YOLOX for streaming perception:StreamYOLO (CVPR 2022 Oral)
- The YOLOX-s and YOLOX-nano are Integrated intoModelScope.Try out the Online Demo atYOLOX-sandYOLOX-Nanorespectively 🚀.
- Integrated intoHuggingface Spaces 🤗usingGradio.Try out the Web Demo:
- The ncnn android app with video support:ncnn-android-yoloxfromFeiGeChuanShu
- YOLOX with Tengine support:TenginefromBUG1989
- YOLOX + ROS2 Foxy:YOLOX-ROSfromAr-Ray
- YOLOX Deploy DeepStream:YOLOX-deepstreamfromnanmi
- YOLOX MNN/TNN/ONNXRuntime:YOLOX-MNN,YOLOX-TNNandYOLOX-ONNXRuntime C++fromDefTruth
- Converting darknet or yolov5 datasets to COCO format for YOLOX:YOLO2COCOfromDaniel
If you use YOLOX in your research, please cite our work by using the following BibTeX entry:
@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}
}
Without the guidance ofDr. Jian Sun,YOLOX would not have been released and open sourced to the community. The passing away of Dr. Jian is a huge loss to the Computer Vision field. We add this section here to express our remembrance and condolences to our captain Dr. Jian. It is hoped that every AI practitioner in the world will stick to the concept of "continuous innovation to expand cognitive boundaries, and extraordinary technology to achieve product value" and move forward all the way.
Không có tôn kiếm tiến sĩ chỉ đạo, YOLOX cũng sẽ không ra đời cũng khai nguyên cấp xã khu sử dụng. Tôn kiếm tiến sĩ rời đi là CV lĩnh vực một tổn thất lớn, chúng ta tại đây đặc biệt tăng thêm cái này bộ phận tới biểu đạt đối chúng ta “Thuyền trưởng” tôn lão sư kỷ niệm cùng thương nhớ. Hy vọng trên thế giới mỗi cái AI hành nghề giả lo liệu “Liên tục sáng tạo mở rộng nhận tri biên giới, phi phàm khoa học kỹ thuật thành tựu sản phẩm giá trị” quan niệm, một đường về phía trước.