Skip to content

xytpai/fcos

Repository files navigation

FCOS in Pytorch

An unofficial implementation of FCOS in Pytorch. FCOS: Fully Convolutional One-Stage Object Detection.

https://arxiv.org/abs/1904.01355

Some modifies are adopted:

  • Remove center-ness branch for simplicity.
  • Add center sample mechanism to improve performance.
  • Predect yxhw instead of tlbr +0.3Map.
  • Note: GPU Compute Capability >= 6.1 (pytorch>=1.0.0)

Download:

paper (800px) official (800px) ours (nearly 700px)
36.6 38.7 37.3

Some cuda operations are provided for acceleration.

cd libs/nms_cuda
python setup.py install
cd libs/sigmoid_focal_loss_cuda
python setup.py install
cd libs/assign_box_cuda
python setup.py install

Inference

  1. Copy your images (xxx.jpg) to /images.
  2. Command: python run_demo.py

COCO (2x)

  1. Copy configs/detector_coco.py to ./detector.py
  2. Copy configs/train_coco_2x.json to ./train.json
  3. Configure train.json file, add your root.
  4. Command: python run_train.py to start schedule, it takes about 30 hours with 8x Titan-XP.
  5. Command: python run_analyze.py to get mAP curves.
  6. Command: python run_cocoeval.py to get mAP.
map_mean
[0.1345 0.1984 0.2192 0.2468 0.2496 0.2606 0.2729 0.2708 0.2768 0.2872
 0.2924 0.295  0.2973 0.3041 0.2927 0.3027 0.3565 0.3583 0.3622 0.3642
 0.3659 0.3679 0.3689 0.37  ]
map_50
[0.2482 0.3404 0.3749 0.3997 0.4059 0.4182 0.4401 0.4393 0.4389 0.4496
 0.4584 0.4646 0.4618 0.4719 0.4584 0.4741 0.535  0.5385 0.5405 0.5436
 0.5457 0.5489 0.5497 0.5511]
map_75
[0.1304 0.2044 0.2265 0.2596 0.2595 0.2758 0.2895 0.283  0.2914 0.3037
 0.311  0.315  0.3145 0.3246 0.3136 0.3232 0.3804 0.3829 0.3869 0.3906
 0.3917 0.3924 0.3943 0.3962]
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.373
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.556
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.398
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.198
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.411
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.486
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.303
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.482
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.525
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.326
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.575
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.639

VOC0712 (30 epoches)

  1. Copy configs/detector_voc.py to ./detector.py
  2. Copy configs/train_voc.json to ./train.json
  3. Configure train.json file, add your root.
  4. Command: python run_train.py to start schedule.
  5. Command: python run_analyze.py to get mAP curves.
map_mean
[0.0315 0.174  0.2992 0.3442 0.3567 0.3983 0.4329 0.4475 0.44   0.4525
 0.4397 0.472  0.4743 0.475  0.464  0.4885 0.4855 0.4908 0.4923 0.4776
 0.529  0.5331 0.535  0.5375 0.5371 0.5348 0.538  0.537  0.5378 0.5368]
map_50
[0.0721 0.3466 0.5524 0.594  0.6051 0.6488 0.6968 0.7062 0.7001 0.7205
 0.6982 0.7211 0.7258 0.7276 0.7092 0.7408 0.7381 0.7362 0.7295 0.7246
 0.7682 0.7718 0.7736 0.7771 0.7741 0.7725 0.7767 0.7737 0.7744 0.7732]
map_75
[0.0219 0.1561 0.2932 0.3555 0.3639 0.4224 0.4618 0.4781 0.4718 0.4849
 0.479  0.5084 0.5147 0.5116 0.4989 0.5293 0.5259 0.5244 0.5292 0.5174
 0.574  0.5789 0.5797 0.5792 0.5794 0.5805 0.5858 0.5814 0.5829 0.5819]

How to change resolution ?

To change the prediction resolution, you need to modify the following parameters. Note that the resolution must be 128*n+1 (n=1,2,3...).

# ---------------------------
self.view_size = 1025 # 128*n+1
self.phpw = [[129, 129], [65, 65], [33, 33], [17, 17], [9, 9]]
# [[16n+1, 16n+1], [8n+1, 8n+1], [4n+1, 4n+1], [2n+1, 2n+1], [n+1, n+1]]
# ---------------------------

How to train your own data ?

  1. Create data_name.txt
background
classname1
classname2
classname3
  1. Create data_train.txt
xxx1.jpg 237 411 480 504 1 313 9 391 151 3
xxx2.jpg 261 234 553 134 2
# img_name ymin xmin ymax xmax class_id ymin xmin ymax xmax class_id ... \n 
  1. Create data_eval.txt (same format as data_train.txt)
  2. Config train.json file, add your root.

Call for suggestions !

We can't achieve the above results in standard 12-epoch training, even if we add the center branch. The possible reasons are: 1. Instead of set minimum side to 800, we set the maxmal side to 1025. 2. There are some tricks we haven't adopted.

About

An unofficial implementation of FCOS in Pytorch: 37.3-resnet50-700px

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published