By Songtao Liu, Di Huang, Yunhong Wang
Inspired by the structure of Receptive Fields (RFs) in human visual systems, we propose a novel RF Block (RFB) module, which takes the relationship between the size and eccentricity of RFs into account, to enhance the discriminability and robustness of features. We further assemble the RFB module to the top of SSD with a lightweight CNN model, constructing the RFB Net detector. You can use the code to train/evaluate the RFB Net for object detection. For more details, please refer to our arXiv paper.
System | mAP | FPS (Titan X Maxwell) |
---|---|---|
Faster R-CNN (VGG16) | 73.2 | 7 |
YOLOv2 (Darknet-19) | 78.6 | 40 |
R-FCN (ResNet-101) | 80.5 | 9 |
SSD300* (VGG16) | 77.2 | 46 |
SSD512* (VGG16) | 79.8 | 19 |
RFBNet300 (VGG16) | 80.5 | 83* |
RFBNet512 (VGG16) | 82.2 | 38* |
System | test-dev mAP | Time (Titan X Maxwell) |
---|---|---|
Faster R-CNN++ (ResNet-101) | 34.9 | 3.36s |
YOLOv2 (Darknet-19) | 21.6 | 25ms |
SSD300* (VGG16) | 25.1 | 22ms |
SSD512* (VGG16) | 28.8 | 53ms |
RetinaNet500 (ResNet-101-FPN) | 34.4 | 90ms |
RFBNet300 (VGG16) | 29.9 | 15ms* |
RFBNet512 (VGG16) | 33.8 | 30ms* |
RFBNet512-E (VGG16) | 34.4 | 33ms* |
Note: * The speed here is tested on the newest pytorch and cudnn version (0.2.0 and cudnnV6), which is obviously faster than the speed reported in the paper (using pytorch-0.1.12 and cudnnV5).
System | COCO minival mAP | #parameters |
---|---|---|
SSD MobileNet | 19.3 | 6.8M |
RFB MobileNet | 20.7* | 7.4M |
*: slightly better than the original ones in the paper (20.5).
Please cite our paper in your publications if it helps your research:
@article{liu2017RFB,
title = {Receptive Field Block Net for Accurate and Fast Object Detection},
author = {Songtao Liu, Di Huang and Yunhong Wang},
booktitle = {arxiv preprint arXiv:1711.07767},
year = {2017}
}
- Install PyTorch-0.2.0 by selecting your environment on the website and running the appropriate command.
- Clone this repository. This repository is mainly based on ssd.pytorch and Chainer-ssd, a huge thank to them.
- Note: We currently only support Python 3+.
- Compile the nms and coco tools:
./make.sh
Note: Check you GPU architecture support in utils/build.py, line 131. Default is:
'nvcc': ['-arch=sm_52',
- Install pyinn for MobileNet backbone:
pip install git+https://github.com/szagoruyko/pyinn.git@master
- Then download the dataset by following the instructions below and install opencv.
conda install opencv
Note: For training, we currently support VOC and COCO.
To make things easy, we provide simple VOC and COCO dataset loader that inherits torch.utils.data.Dataset
making it fully compatible with the torchvision.datasets
API.
# specify a directory for dataset to be downloaded into, else default is ~/data/
sh data/scripts/VOC2007.sh # <directory>
# specify a directory for dataset to be downloaded into, else default is ~/data/
sh data/scripts/VOC2012.sh # <directory>
Install the MS COCO dataset at /path/to/coco from official website, default is ~/data/COCO. Following the instructions to prepare minival2014 and valminusminival2014 annotations. All label files (.json) should be under the COCO/annotations/ folder. It should have this basic structure
$COCO/
$COCO/cache/
$COCO/annotations/
$COCO/images/
$COCO/images/test2015/
$COCO/images/train2014/
$COCO/images/val2014/
UPDATE: The current COCO dataset has released new train2017 and val2017 sets which are just new splits of the same image sets.
-
First download the fc-reduced VGG-16 PyTorch base network weights at: https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth or from our BaiduYun Driver
-
MobileNet pre-trained basenet is ported from MobileNet-Caffe, which achieves slightly better accuracy rates than the original one reported in the paper, weight file is available at: https://drive.google.com/open?id=13aZSApybBDjzfGIdqN1INBlPsddxCK14 or BaiduYun Driver.
-
By default, we assume you have downloaded the file in the
RFBNet/weights
dir:
mkdir weights
cd weights
wget https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth
- To train RFBNet using the train script simply specify the parameters listed in
train_RFB.py
as a flag or manually change them.
python train_RFB.py -d VOC -v RFB_vgg -s 300
- Note:
- -d: choose datasets, VOC or COCO.
- -v: choose backbone version, RFB_VGG, RFB_E_VGG or RFB_mobile.
- -s: image size, 300 or 512.
- You can pick-up training from a checkpoint by specifying the path as one of the training parameters (again, see
train_RFB.py
for options) - If you want to reproduce the results in the paper, the VOC model should be trained about 240 epoches while the COCO version need 130 epoches.
To evaluate a trained network:
python test_RFB.py -d VOC -v RFB_vgg -s 300 --trained_model /path/to/model/weights
By default, it will directly output the mAP results on VOC2007 test or COCO minival2014. For VOC2012 test and COCO test-dev results, you can manually change the datasets in the test_RFB.py
file, then save the detection results and submitted to the server.
- 07+12 RFB_Net300, BaiduYun Driver
- COCO RFB_Net512_E, BaiduYun Driver
- COCO RFB_Mobile Net300, BaiduYun Driver