A Simple and Versatile Framework for Object Detection and Instance Recognition
We provide a setup script for install simpledet and preppare the coco dataset. If you use this script, you can skip to the Quick Start.
We provide a conda installation here for Debian/Ubuntu system. To use a pre-built docker or singularity images, please refer to INSTALL.md for more information.
# install dependency
sudo apt update && sudo apt install -y git wget make python3-dev libglib2.0-0 libsm6 libxext6 libxrender-dev unzip
# create conda env
conda create -n simpledet python=3.7
conda activate simpledet
# fetch CUDA environment
conda install cudatoolkit=10.1
# install python dependency
pip install 'matplotlib<3.1' opencv-python pytz
# download and intall pre-built wheel for CUDA 10.1
pip install https://1dv.aflat.top/mxnet_cu101-1.6.0b20191214-py2.py3-none-manylinux1_x86_64.whl
# install pycocotools
pip install 'git+https://github.com/RogerChern/cocoapi.git#subdirectory=PythonAPI'
# install mxnext, a wrapper around MXNet symbolic API
pip install 'git+https://github.com/RogerChern/mxnext#egg=mxnext'
# get simpledet
git clone https://github.com/tusimple/simpledet
cd simpledet
make
# test simpledet installation
mkdir -p experiments/faster_r50v1_fpn_1x
python detection_infer_speed.py --config config/faster_r50v1_fpn_1x.py --shape 800 1333
If the last line execute successfully, the average running speed of Faster R-CNN R-50 FPN will be reported. And you have successfuly setup SimpleDet. Now you can head up to the next section to prepare your dataset.
We provide a step by step preparation for the COCO dataset below.
cd simpledet
# make data dir
mkdir -p data/coco/images data/src
# skip this if you have the zip files
wget -c http://images.cocodataset.org/zips/train2017.zip -O data/src/train2017.zip
wget -c http://images.cocodataset.org/zips/val2017.zip -O data/src/val2017.zip
wget -c http://images.cocodataset.org/zips/test2017.zip -O data/src/test2017.zip
wget -c http://images.cocodataset.org/annotations/annotations_trainval2017.zip -O data/src/annotations_trainval2017.zip
wget -c http://images.cocodataset.org/annotations/image_info_test2017.zip -O data/src/image_info_test2017.zip
unzip data/src/train2017.zip -d data/coco/images
unzip data/src/val2017.zip -d data/coco/images
unzip data/src/test2017.zip -d data/coco/images
unzip data/src/annotations_trainval2017.zip -d data/coco
unzip data/src/image_info_test2017.zip -d data/coco
python utils/create_coco_roidb.py --dataset coco --dataset-split train2017
python utils/create_coco_roidb.py --dataset coco --dataset-split val2017
python utils/create_coco_roidb.py --dataset coco --dataset-split test-dev2017
For other datasets or your own data, please check DATASET.md for more details.
# train
python detection_train.py --config config/faster_r50v1_fpn_1x.py
# test
python detection_test.py --config config/faster_r50v1_fpn_1x.py
Please check FINTUNE.md
Please refer to MODEL_ZOO.md for available models
Please refer to DISTRIBUTED.md
detection_train.py
detection_test.py
config/
detection_config.py
core/
detection_input.py
detection_metric.py
detection_module.py
models/
FPN/
tridentnet/
maskrcnn/
cascade_rcnn/
retinanet/
mxnext/
symbol/
builder.py
Everything is configurable from the config file, all the changes should be out of source.
One experiment is a directory in experiments folder with the same name as the config file.
E.g. r50_fixbn_1x.py is the name of a config file
config/
r50_fixbn_1x.py
experiments/
r50_fixbn_1x/
checkpoint.params
log.txt
coco_minival2014_result.json
The models
directory contains SOTA models implemented in SimpletDet.
Simpledet supports many popular detection methods and here we take Faster R-CNN as a typical example to show how a detector is built.
DetectionAugmentation
.
Norm2DImage
and Resize2DImageBbox
.AnchorTarget2D
, which generates anchors and corresponding anchor targets for training RPN.FasterRcnn
. The key components are listed as follow:
Backbone
provides interfaces to build backbone networks, e.g. ResNet and ResNext.Neck
provides interfaces to build complementary feature extraction layers for backbone networks, e.g. FPNNeck
builds Top-down pathway for Feature Pyramid Network.RpnHead
aims to build classification and regression layers to generate proposal outputs for RPN. Meanwhile, it also provides interplace to generate sampled proposals for the subsequent R-CNN.RoiExtractor
extracts features for each roi (proposal) based on the R-CNN features generated by Backbone
and Neck
.BboxHead
builds the R-CNN layers for proposal refinement.The flexibility of simpledet framework makes it easy to build different detectors. We take TridentNet as an example to demonstrate how to build a custom detector simply based on the Faster R-CNN framework.
DetectionAugmentation
.
TridentAnchorTarget2D
is implemented to generate anchors for multiple branches and filter anchors for scale-aware training scheme.Backbone
according to the descriptions in the paper. We also provide a TridentRpnHead
to generate filtered proposals in RPN to implement the scale-aware scheme. Other components are shared the same with original Faster-RCNN.Yuntao Chen, Chenxia Han, Yanghao Li, Zehao Huang, Naiyan Wang, Xiaotao Chen, Jingqiu Zhou, Zhen Wei, Zehui Chen, Zhaoxiang Zhang, Bo Ke
This project is release under the Apache 2.0 license for non-commercial usage. For commercial usage, please contact us for another license.
If you find our project helpful, please consider cite our tech report.
@article{JMLR:v20:19-205,
author = {Yuntao Chen and Chenxia Han and Yanghao Li and Zehao Huang and Yi Jiang and Naiyan Wang and Zhaoxiang Zhang},
title = {SimpleDet: A Simple and Versatile Distributed Framework for Object Detection and Instance Recognition},
journal = {Journal of Machine Learning Research},
year = {2019},
volume = {20},
number = {156},
pages = {1-8},
url = {http://jmlr.org/papers/v20/19-205.html}
}