MCPcopy Index your code
hub / github.com/Megvii-BaseDetection/YOLOX

github.com/Megvii-BaseDetection/YOLOX @0.3.0 sqlite

repository ↗ · DeepWiki ↗ · release 0.3.0 ↗
486 symbols 1,542 edges 91 files 132 documented · 27%
README

Introduction

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 our report on Arxiv.

This repo is an implementation of PyTorch version YOLOX, there is also a MegEngine implementation.

Updates!!

  • 【2022/04/14】 We suport jit compile op.
  • 【2021/08/19】 We optimize the training process with 2x faster training and ~1% higher performance! See notes for more details.
  • 【2021/08/05】 We release MegEngine version YOLOX.
  • 【2021/07/28】 We fix the fatal error of memory leak
  • 【2021/07/26】 We now support MegEngine deployment.
  • 【2021/07/20】 We have released our technical report on Arxiv.

Coming soon

  • [ ] YOLOX-P6 and larger model.
  • [ ] Objects365 pretrain.
  • [ ] Transformer modules.
  • [ ] More features in need.

Benchmark

Standard Models.

|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 |

Light Models.

|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 |

Quick Start

Installation

Step1. Install YOLOX from source.

git clone git@github.com:Megvii-BaseDetection/YOLOX.git
cd YOLOX
pip3 install -v -e .  # or  python3 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

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

Deployment

  1. MegEngine in C++ and Python
  2. ONNX export and an ONNXRuntime
  3. TensorRT in C++ and Python
  4. ncnn in C++ and Java
  5. OpenVINO in C++ and Python

Third-party resources

Cite YOLOX

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}
}

Core symbols most depended-on inside this repo

load
called by 17
yolox/layers/jit_ops.py
eval
called by 13
yolox/exp/yolox_base.py
update
called by 8
yolox/utils/ema.py
get_exp
called by 8
yolox/exp/build.py
_make_cbl
called by 7
yolox/models/yolo_fpn.py
create_yolox_model
called by 7
yolox/models/build.py
_make_cbl
called by 7
demo/MegEngine/python/models/yolo_fpn.py
adjust_status
called by 6
yolox/utils/model_utils.py

Shape

Method 266
Function 138
Class 78
Route 4

Languages

Python97%
Java3%

Modules by API surface

demo/MegEngine/python/models/network_blocks.py28 symbols
yolox/models/network_blocks.py25 symbols
yolox/utils/metric.py19 symbols
yolox/data/datasets/voc.py19 symbols
yolox/layers/jit_ops.py17 symbols
yolox/core/trainer.py16 symbols
yolox/utils/dist.py15 symbols
yolox/data/datasets/coco.py14 symbols
yolox/utils/logger.py13 symbols
yolox/exp/yolox_base.py13 symbols
yolox/data/data_augment.py13 symbols
yolox/data/datasets/datasets_wrapper.py12 symbols

Dependencies from manifests, versioned

docutils0.16 · 1×
hydra-core1.1.0.dev5 · 1×
omegaconf2.1.0.dev24 · 1×
onnx1.8.1 · 1×
onnx-simplifier0.3.5 · 1×
onnxruntime1.8.0 · 1×
pycocotools2.0.2 · 1×
recommonmark0.6.0 · 1×
sphinx3.2.0 · 1×
sphinx-markdown-tables0.0.15 · 1×
torch1.7 · 1×

For agents

$ claude mcp add YOLOX \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact