README.md 7.9 KB
Newer Older
Z
Zhi Tian 已提交
1
# FCOS: Fully Convolutional One-Stage Object Detection
F
Francisco Massa 已提交
2

C
chhshen 已提交
3
This project hosts the code for implementing the FCOS algorithm for object detection, as presented in our paper:
F
Francisco Massa 已提交
4

T
Tian Zhi 已提交
5 6
    FCOS: Fully Convolutional One-Stage Object Detection;
    Tian Zhi, Chunhua Shen, Hao Chen, and Tong He;
C
chhshen 已提交
7 8
    In: Proc. Int. Conf. Computer Vision (ICCV), 2019.
    arXiv preprint arXiv:1904.01355 
Z
Zhi Tian 已提交
9 10

The full paper is available at: [https://arxiv.org/abs/1904.01355](https://arxiv.org/abs/1904.01355). 
F
Francisco Massa 已提交
11 12

## Highlights
Z
Zhi Tian 已提交
13 14
- **Totally anchor-free:**  FCOS completely avoids the complicated computation related to anchor boxes and all hyper-parameters of anchor boxes.   
- **Memory-efficient:** FCOS uses 2x less training memory footprint than its anchor-based counterpart RetinaNet.
T
Tian Zhi 已提交
15
- **Better performance:** The very simple detector achieves better performance (37.1 vs. 36.8) than Faster R-CNN.
Z
Zhi Tian 已提交
16
- **Faster training:** With the same hardwares, FCOS also requires less training hours (6.5h vs. 8.8h) than Faster R-CNN.
Z
Zhi Tian 已提交
17
- **State-of-the-art performance:** Without bells and whistles, FCOS achieves state-of-the-art performances.
T
Tian Zhi 已提交
18
It achieves **41.5%** (ResNet-101-FPN) and **43.2%** (ResNeXt-64x4d-101) in AP on coco test-dev.
F
Francisco Massa 已提交
19

T
Tian Zhi 已提交
20
## Updates
C
chhshen 已提交
21 22 23
### 23 July 2019
   - A trick of using a small central region of the BBox for training improves AP by nearly 1 point [as shown here](https://github.com/yqyao/FCOS_PLUS).

Z
Zhi Tian 已提交
24 25 26
### 3 July 2019
   - FCOS with HRNet backbones is available at [HRNet-FCOS](https://github.com/HRNet/HRNet-FCOS).
    
C
chhshen 已提交
27 28 29
### 30 June 2019
   - FCOS with AutoML searched FPN (R50, R101, ResNeXt101 and MobileNetV2 backbones) is available at [NAS-FCOS](https://github.com/Lausannen/NAS-FCOS).
    
T
Tian Zhi 已提交
30 31 32
### 17 May 2019
   - FCOS has been implemented in [mmdetection](https://github.com/open-mmlab/mmdetection). Many thanks to [@yhcao6](https://github.com/yhcao6) and [@hellock](https://github.com/hellock).

Z
Zhi Tian 已提交
33 34 35
## Required hardware
We use 8 Nvidia V100 GPUs. \
But 4 1080Ti GPUs can also train a fully-fledged ResNet-50-FPN based FCOS since FCOS is memory-efficient.  
F
Francisco Massa 已提交
36 37

## Installation
Z
Zhi Tian 已提交
38
#### Testing-only installation 
Z
Zhi Tian 已提交
39
For users who only want to use FCOS as an object detector in their projects, they can install it by pip. To do so, run:
Z
Zhi Tian 已提交
40 41 42 43
```
pip install torch  # install pytorch if you do not have it
pip install fcos
```
Z
Zhi Tian 已提交
44
Please check out [here](fcos/bin/fcos) for the usage.
Z
Zhi Tian 已提交
45 46

#### For a complete installation 
C
chhshen 已提交
47
This FCOS implementation is based on [maskrcnn-benchmark](https://github.com/facebookresearch/maskrcnn-benchmark). Therefore the installation is the same as original maskrcnn-benchmark.
F
Francisco Massa 已提交
48

Z
Zhi Tian 已提交
49 50
Please check [INSTALL.md](INSTALL.md) for installation instructions.
You may also want to see the original [README.md](MASKRCNN_README.md) of maskrcnn-benchmark.
F
Francisco Massa 已提交
51

Z
Zhi Tian 已提交
52 53 54
## A quick demo
Once the installation is done, you can follow the below steps to run a quick demo.
    
Z
Zhi Tian 已提交
55 56
    # assume that you are under the root directory of this project,
    # and you have activated your virtual environment if needed.
Z
Zhi Tian 已提交
57 58 59 60
    wget https://cloudstor.aarnet.edu.au/plus/s/dDeDPBLEAt19Xrl/download -O FCOS_R_50_FPN_1x.pth
    python demo/fcos_demo.py


Z
Zhi Tian 已提交
61 62
## Inference
The inference command line on coco minival split:
F
Francisco Massa 已提交
63

Z
Zhi Tian 已提交
64 65
    python tools/test_net.py \
        --config-file configs/fcos/fcos_R_50_FPN_1x.yaml \
T
Tian Zhi 已提交
66
        MODEL.WEIGHT FCOS_R_50_FPN_1x.pth \
Z
Zhi Tian 已提交
67
        TEST.IMS_PER_BATCH 4    
F
Francisco Massa 已提交
68

Z
Zhi Tian 已提交
69
Please note that:
T
Tian Zhi 已提交
70
1) If your model's name is different, please replace `FCOS_R_50_FPN_1x.pth` with your own.
Z
Zhi Tian 已提交
71
2) If you enounter out-of-memory error, please try to reduce `TEST.IMS_PER_BATCH` to 1.
T
Tian Zhi 已提交
72
3) If you want to evaluate a different model, please change `--config-file` to its config file (in [configs/fcos](configs/fcos)) and `MODEL.WEIGHT` to its weights file.
F
Francisco Massa 已提交
73

Z
Zhi Tian 已提交
74
For your convenience, we provide the following trained models (more models are coming soon).
F
Francisco Massa 已提交
75

Z
Zhi Tian 已提交
76 77
**ResNe(x)ts:**

Z
Zhi Tian 已提交
78
*All ResNe(x)t based models are trained with 16 images in a mini-batch and frozen batch normalization (i.e., consistent with models in [maskrcnn_benchmark](https://github.com/facebookresearch/maskrcnn-benchmark)).*
Z
Zhi Tian 已提交
79

Z
Zhi Tian 已提交
80 81
Model | Total training mem (GB) | Multi-scale training | Testing time / im | AP (minival) | AP (test-dev) | Link
--- |:---:|:---:|:---:|:---:|:--:|:---:
T
Tian Zhi 已提交
82 83 84 85
FCOS_R_50_FPN_1x | 29.3 | No | 71ms | 37.1 | 37.4 | [download](https://cloudstor.aarnet.edu.au/plus/s/dDeDPBLEAt19Xrl/download)
FCOS_R_101_FPN_2x | 44.1 | Yes | 74ms | 41.4 | 41.5 | [download](https://cloudstor.aarnet.edu.au/plus/s/vjL3L0AW7vnhRTo/download)
FCOS_X_101_32x8d_FPN_2x | 72.9 | Yes | 122ms | 42.5 | 42.7 | [download](https://cloudstor.aarnet.edu.au/plus/s/U5myBfGF7MviZ97/download)
FCOS_X_101_64x4d_FPN_2x | 77.7 | Yes | 140ms | 43.0 | 43.2 | [download](https://cloudstor.aarnet.edu.au/plus/s/wpwoCi4S8iajFi9/download)
86

Z
Zhi Tian 已提交
87
**MobileNets:**
Z
Zhi Tian 已提交
88

T
Tian Zhi 已提交
89
*We update batch normalization for MobileNet based models. If you want to use SyncBN, please install pytorch 1.1 or later.*
Z
Zhi Tian 已提交
90

Z
Zhi Tian 已提交
91 92
Model | Training batch size | Multi-scale training | Testing time / im | AP (minival) | Link
--- |:---:|:---:|:---:|:---:|:---:
Z
Zhi Tian 已提交
93 94 95
FCOS_syncbn_bs32_c128_MNV2_FPN_1x | 32 | No | 19ms | 30.9 | [download](https://cloudstor.aarnet.edu.au/plus/s/3GKwaxZhDSOlCZ0/download)
FCOS_syncbn_bs32_MNV2_FPN_1x | 32 | No | 59ms | 33.1 | [download](https://cloudstor.aarnet.edu.au/plus/s/OpJtCJLj104i2Yc/download)
FCOS_bn_bs16_MNV2_FPN_1x | 16 | No | 59ms | 31.0 | [download](https://cloudstor.aarnet.edu.au/plus/s/B6BrLAiAEAYQkcy/download)
Z
Zhi Tian 已提交
96

T
Tian Zhi 已提交
97 98 99
[1] *1x and 2x mean the model is trained for 90K and 180K iterations, respectively.* \
[2] *We report total training memory footprint on all GPUs instead of the memory footprint per GPU as in maskrcnn-benchmark*. \
[3] *All results are obtained with a single model and without any test time data augmentation such as multi-scale, flipping and etc..* \
Z
Zhi Tian 已提交
100
[4] *Our results have been improved since our initial release. If you want to check out our original results, please checkout commit [f4fd589](https://github.com/tianzhi0549/FCOS/tree/f4fd58966f45e64608c00b072c801de7f86b4f3a)*. \
Z
Zhi Tian 已提交
101
[5] *`c128` denotes the model has 128 (instead of 256) channels in towers (i.e., `MODEL.RESNETS.BACKBONE_OUT_CHANNELS` in [config](https://github.com/tianzhi0549/FCOS/blob/master/configs/fcos/fcos_syncbn_bs32_c128_MNV2_FPN_1x.yaml#L10)).*
Z
Zhi Tian 已提交
102
## Training
F
Francisco Massa 已提交
103

Z
Zhi Tian 已提交
104
The following command line will train FCOS_R_50_FPN_1x on 8 GPUs with Synchronous Stochastic Gradient Descent (SGD):
105

Z
Zhi Tian 已提交
106 107 108 109 110 111 112 113 114 115
    python -m torch.distributed.launch \
        --nproc_per_node=8 \
        --master_port=$((RANDOM + 10000)) \
        tools/train_net.py \
        --skip-test \
        --config-file configs/fcos/fcos_R_50_FPN_1x.yaml \
        DATALOADER.NUM_WORKERS 2 \
        OUTPUT_DIR training_dir/fcos_R_50_FPN_1x
        
Note that:
T
Tian Zhi 已提交
116
1) If you want to use fewer GPUs, please change `--nproc_per_node` to the number of GPUs. No other settings need to be changed. The total batch size does not depends on `nproc_per_node`. If you want to change the total batch size, please change `SOLVER.IMS_PER_BATCH` in [configs/fcos/fcos_R_50_FPN_1x.yaml](configs/fcos/fcos_R_50_FPN_1x.yaml).
Z
Zhi Tian 已提交
117 118
2) The models will be saved into `OUTPUT_DIR`.
3) If you want to train FCOS with other backbones, please change `--config-file`.
T
Tian Zhi 已提交
119 120
4) The link of ImageNet pre-training X-101-64x4d in the code is invalid. Please download the model [here](https://cloudstor.aarnet.edu.au/plus/s/k3ys35075jmU1RP/download).
5) If you want to train FCOS on your own dataset, please follow this instruction [#54](https://github.com/tianzhi0549/FCOS/issues/54#issuecomment-497558687).
Z
Zhi Tian 已提交
121
## Contributing to the project
F
Francisco Massa 已提交
122

T
Tian Zhi 已提交
123
Any pull requests or issues are welcome.
124

125
## Citations
C
chhshen 已提交
126
Please consider citing our paper in your publications if the project helps your research. BibTeX reference is as follows.
127
```
C
chhshen 已提交
128
@inproceedings{tian2019fcos,
T
Tian Zhi 已提交
129 130
  title   =  {{FCOS}: Fully Convolutional One-Stage Object Detection},
  author  =  {Tian, Zhi and Shen, Chunhua and Chen, Hao and He, Tong},
C
chhshen 已提交
131
  booktitle =  {Proc. Int. Conf. Computer Vision (ICCV)},
T
Tian Zhi 已提交
132
  year    =  {2019}
133 134 135
}
```

136

F
Francisco Massa 已提交
137 138
## License

Z
Zhi Tian 已提交
139
For academic use, this project is licensed under the 2-clause BSD License - see the LICENSE file for details. For commercial use, please contact the authors.