This project is my library of One-stage Object Detection. My code is clean and concise, without too deep encapsulation, so it is easy to understand the function of each module.
For example,
- If you want to know how to pull data from
COCO, you just opendataset/coco.py. - If you want to know how to build
RetinaNet, you just openmodels/detector/retinanet/andconfig/retinanet_config.py. - If you want to know how to build
FPN, you just openmodels/neck/fpn.py/. - If you want to know the whole pipeline of training, you just open
train.py. - If you want to know the whole pipeline of evaluation, you just open
eval.pyandevaluator/coco_evaluator.py. - If you want to know how to visualize the detection results on detection benchmark like
COCOorVOC, you just opentest.py. - If you want to know how to run a demo with images or videos on your own device, you just open
demo.py. - If you want to know how to run a demo with your own camero, you just also open
demo.py.
So, it is very friendly, right?
I am sure you will soon become familiar with this benchmark and add your own modules to it.
However, limited by my computing resources, I cannot use larger backbone networks like ResNet-101
and ResNeXt-101 to train more powerful detectors. If you have sufficient computing resources and are already using these larger backbone
networks to train the detectors in this benchmark, I look forward to your open source
weight files to complement this project. Thanks a lot.
- YOLOF
- RetinaNet
- FCOS
- We recommend you to use Anaconda to create a conda environment:
conda create -n detection python=3.6- Then, activate the environment:
conda activate detection- Requirements:
pip install -r requirements.txt We suggest that PyTorch should be higher than 1.9.0 and Torchvision should be higher than 0.10.3. At least, please make sure your torch is version 1.x.
| Model | scale | mAP | Weight |
|---|---|---|---|
| YOLOF_R_18_C5_1x | 800,1333 | 31.6 | github |
| YOLOF_R_50_C5_1x | 800,1333 | 37.6 | github |
| YOLOF-RT_R_50_DC5_3x | 640,640 | 38.1 | github |
| Model | scale | mAP | Weight |
|---|---|---|---|
| RetinaNet_R_18_1x | 800,1333 | 29.3 | github |
| RetinaNet_R_50_1x | 800,1333 | 35.8 | github |
| RetinaNet-RT_R_50_3x | 512,736 | 32.0 | github |
In my RetinaNet:
- For regression head,
GIoU Lossis deployed rather thanSmoothL1Loss
| Model | scale | mAP | Weight |
|---|---|---|---|
| FCOS_R_18_1x | 800,1333 | 31.3 | github |
| FCOS_R_50_1x | 800,1333 | 37.6 | github |
| FCOS_R_50_OTA_1x | 800,1333 | ||
| FCOS-RT_R_50_OTA_3x | 640,640 | 36.7 | github |
In my FCOS:
- For regression head,
GIoU lossis deployed rather thanIoU loss - For real-time FCOS, the
PaFPNis deployed for fpn
sh train.shYou can change the configurations of train.sh, according to your own situation.
sh train_ddp.shYou can change the configurations of train_ddp.sh, according to your own situation.
python test.py -d coco \
--cuda \
-v yolof50 \
--weight path/to/weight \
--root path/to/dataset/ \
--showI have provide some images in data/demo/images/, so you can run following command to run a demo:
python demo.py --mode image \
--path_to_img data/demo/images/ \
-v yolof50 \
--cuda \
--weight path/to/weight \
--showIf you want run a demo of streaming video detection, you need to set --mode to video, and give the path to video --path_to_vid。
python demo.py --mode video \
--path_to_img data/demo/videos/your_video \
-v yolof50 \
--cuda \
--weight path/to/weight \
--showIf you want run video detection with your camera, you need to set --mode to camera。
python demo.py --mode camera \
-v yolof50 \
--cuda \
--weight path/to/weight \
--show