yjh0410 / PyTorch_YOLOF

A PyTorch version of You Only Look at One-level Feature object detector
37 stars 9 forks source link

YOLOF: You Only Look At One-level Feature

This is a PyTorch version of YOLOF.

Requirements

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.

My environment:

Main results on COCO-val

Model scale FPS AP AP50 Weight
YOLOF-R18-C5_1x 800,1333 100 32.6 51.3 github
YOLOF-R50-C5_1x 800,1333 50 37.5 57.4 github
YOLOF-R50-DC5_1x 800,1333 32 38.7 58.5 github
YOLOF-R101-C5_1x 800,1333 [github]()
YOLOF-R101-DC5_1x 800,1333 [github]()
YOLOF-RT-R50_3x 512,736 60 39.4 58.6 github

Limited by my computing resources, I cannot train YOLOF_R101_C5_1x, YOLOF_R101_DC5_1x. I would be very grateful if you used this project to train them and would like to share weight files.

(YOLOF_R50-C5_1x)

image

Model scale FPS AP AP50 Weight
FCOS-R18_1x 800,1333 42 33.0 51.3 github
FCOS-R50_1x 800,1333 30 38.2 58.0 github
FCOS-RT-R18_4x 512,736 83 33.8 51.5 github
FCOS-RT-R50_4x 512,736 60 38.7 58.0 github
FCOS-RT-R18-OTA_4x 512,736
FCOS-RT-R50-OTA_4x 512,736

FCOS-RT-R18-OTA_4x means that we use the SimOTA to train the FCOS-RT-R18.

Model scale FPS AP AP50 Weight
RetinaNet-R18_1x 800,1333 30.8 49.6 github
RetinaNet-R50_1x 800,1333
RetinaNet-RT-R18_4x 512,736
RetinaNet-RT-R50_4x 512,736

Train

You can run the following command:

python train.py \
        --cuda \
        -d coco \
        --root /mnt/share/ssd2/dataset/ \
        -v yolof-r50 \
        --batch_size 16 \
        --schedule 1x \
        --grad_clip_norm 4.0 \

or, you just run the script:

sh train.sh

You can change the configurations of train.sh, according to your own situation.

You can run the following command:

# 2 GPUs
python -m torch.distributed.run --nproc_per_node=2 train.py \
                                                    --cuda \
                                                    -dist \
                                                    -d coco \
                                                    --root /mnt/share/ssd2/dataset/ \
                                                    -v yolof-r50 \
                                                    --batch_size 8 \
                                                    --grad_clip_norm 4.0 \
                                                    --num_workers 4 \
                                                    --schedule 1x \

or, you just run the script:

sh train_ddp.sh

Test

python test.py -d coco \
               --cuda \
               -v yolof-r50 \
               --weight path/to/weight \
               --root path/to/dataset/ \
               --show

Evaluate

python eval.py -d coco-val \
               --cuda \
               -v yolof-r50 \
               --weight path/to/weight \
               --root path/to/dataset/ \

Our AP results of YOLOF-R50-C5-1x on COCO-val:

Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.375
Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.574
Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.399
Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.185
Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.421
Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.522
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.312
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.507
Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.552
Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.332
Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.625
Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.739

Demo

I 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 yolof-r50 \
               --cuda \
               --weight path/to/weight \
               --show

If 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 yolof-r50 \
               --cuda \
               --weight path/to/weight \
               --show

If you want run video detection with your camera, you need to set --mode to camera

python demo.py --mode camera \
               -v yolof-r50 \
               --cuda \
               --weight path/to/weight \
               --show