Adaptive Feeding: Achieving Fast and Accurate Detections by Adaptively Combining Object Detectors
Code in Python 2.7 for paper in ICCV 2017.
Note
This code aims at reproducing the experimental results when combining R-FCN and SSD300 reported in the paper. If you want to replace R-FCN with SSD500, the procedure can be quite simple.
Step 1
Since we use SSD and R-FCN in our experiments, it is necessary to merge branches in Single Shot Multibox Detector and R-FCN. You can either do this by yourself or simply compile our code on the basis of Single Shot Multibox Detector, which means you should download the SSD CAFFE BRANCH before running our code and configure the DATASET (especially Pascal VOC) following the instruction written by Wei Liu.
Step 2
In this step you may need to download our code and merge it into aforementioned caffe folder. Now your folder should be structured like this:
caffe-ssd
cmake
AF
output_files
data
docker
docs
examples
include
matlab
python
models
scripts
src
tools
.......
Our code lies in AF/ and we also provide indices of images in output_files/. Please do remember to download our models and put them under AF/. Now you might have such a structure
AF
cal_mAP
indices
R-FCN
SSD300
SVM
tiny_yolo
......
Step 3
After configure the dataset path and caffe branch, you are able to run our code (besides, you might still need to modify some variables in the code, like home_path in all four python files)
cd caffe-ssd/
# Get Easy vs. Hard split
python AF/get_Easy_Hard.py
# Train an AF classifier
python AF/train_AF.py
# Get the mAP of the combination
python AF/cal_mAP.py
For your convenience, we already provided extracted proposals from Tiny-YOLO (under AF/tiny_yolo). If you want to speed up the detection process, implementing the YOLO under caffe is necessary. Please refer to caffe-YOLO.
Miscellaneous
In addition to the official experimental code, we also provided a file named video_demo.py under AF/ in order to help you make a demo like this. To produce such a video, you need to follow the instructions in code and employ ffmpeg to organize frames. If you have any question, please feel free to contact me at [email protected].