前端框架选型是企业提升开发效率与用户体验的关键因素
1016
2022-11-01
SimpleDet - 用于对象检测和实例识别的简单通用框架
SimpleDet - A Simple and Versatile Framework for Object Detection and Instance Recognition
Major Features
FP16 training for memory saving and up to 2.5X accelerationHighly scalable distributed training available out of boxFull coverage of state-of-the-art models including FasterRCNN, MaskRCNN, CascadeRCNN, RetinaNet, DCNv1/v2, TridentNet, NASFPN , EfficientNet, and Kownledge DistillationExtensive feature set including large batch BN, loss synchronization, automatic BN fusion, soft NMS, multi-scale train/testModular design for coding-free exploration of new experiment settingsExtensive documentations including annotated config, Fintuning Guide
Recent Updates
Add RPN test (2019.05.28)Add NASFPN (2019.06.04)Add new ResNetV1b baselines from GluonCV (2019.06.07)Add Cascade R-CNN with FPN backbone (2019.06.11)Speed up FPN up to 70% (2019.06.16)Update NASFPN to include larger models (2019.07.01)Automatic BN fusion for fixed BN training, saving up to 50% GPU memory (2019.07.04)Speed up MaskRCNN by 80% (2019.07.23)Update MaskRCNN baselines (2019.07.25)Add EfficientNet and DCN (2019.08.06)Add python wheel for easy local installation (2019.08.20)Add FitNet based Knowledge Distill (2019.08.27)Add SE and train from scratch (2019.08.30)Add a lot of docs (2019.09.03)Add support for INT8 training(contributed by Xiaotao Chen & Jingqiu Zhou) (2019.10.24)Add support for FCOS(contributed by Zhen Wei) (2019.11)Add support for Mask Scoring RCNN(contributed by Zehui Chen) (2019.12)Add support for RepPoints(contributed by Bo Ke) (2020.02)Add support for FreeAnchor (2020.03)Add support for Feature Pyramid Grids & PAFPN (2020.06)
Setup
All-in-one Script
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.
Install
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 dependencysudo apt update && sudo apt install -y git wget make python3-dev libglib2.0-0 libsm6 libxext6 libxrender-dev unzip# create conda envconda create -n simpledet python=3.7conda activate simpledet# fetch CUDA environmentconda install cudatoolkit=10.1# install python dependencypip install 'matplotlib<3.1' opencv-python pytz# download and intall pre-built wheel for CUDA 10.1pip install https://1dv.aflat-/mxnet_cu101-1.6.0b20191214-py2.py3-none-manylinux1_x86_64.whl# install pycocotoolspip install 'git+https://github.com/RogerChern/cocoapi.git#subdirectory=PythonAPI'# install mxnext, a wrapper around MXNet symbolic APIpip install 'git+https://github.com/RogerChern/mxnext#egg=mxnext'# get simpledetgit clone https://github.com/tusimple/simpledetcd simpledetmake# test simpledet installationmkdir -p experiments/faster_r50v1_fpn_1xpython 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.
Preparing Data
We provide a step by step preparation for the COCO dataset below.
cd simpledet# make data dirmkdir -p data/coco/images data/src# skip this if you have the zip fileswget -c http://images.cocodataset.org/zips/train2017.zip -O data/src/train2017.zipwget -c http://images.cocodataset.org/zips/val2017.zip -O data/src/val2017.zipwget -c http://images.cocodataset.org/zips/test2017.zip -O data/src/test2017.zipwget -c http://images.cocodataset.org/annotations/annotations_trainval2017.zip -O data/src/annotations_trainval2017.zipwget -c http://images.cocodataset.org/annotations/image_info_test2017.zip -O data/src/image_info_test2017.zipunzip data/src/train2017.zip -d data/coco/imagesunzip data/src/val2017.zip -d data/coco/imagesunzip data/src/test2017.zip -d data/coco/imagesunzip data/src/annotations_trainval2017.zip -d data/cocounzip data/src/image_info_test2017.zip -d data/cocopython utils/create_coco_roidb.py --dataset coco --dataset-split train2017python utils/create_coco_roidb.py --dataset coco --dataset-split val2017python 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.
Quick Start
# trainpython detection_train.py --config config/faster_r50v1_fpn_1x.py# testpython detection_test.py --config config/faster_r50v1_fpn_1x.py
Finetune
Please check FINTUNE.md
Model Zoo
Please refer to MODEL_ZOO.md for available models
Distributed Training
Please refer to DISTRIBUTED.md
Project Organization
Code Structure
detection_train.pydetection_test.pyconfig/ detection_config.pycore/ detection_input.py detection_metric.py detection_module.pymodels/ FPN/ tridentnet/ maskrcnn/ cascade_rcnn/ retinanet/mxnext/symbol/ builder.py
Config
Everything is configurable from the config file, all the changes should be out of source.
Experiments
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.pyexperiments/ r50_fixbn_1x/ checkpoint.params log.txt coco_minival2014_result.json
Models
The models directory contains SOTA models implemented in SimpletDet.
How is Faster R-CNN built
Simpledet supports many popular detection methods and here we take Faster R-CNN as a typical example to show how a detector is built.
Preprocessing. The preprocessing methods of the detector is implemented through DetectionAugmentation. Image/bbox-related preprocessing, such as Norm2DImage and Resize2DImageBbox.Anchor generator AnchorTarget2D, which generates anchors and corresponding anchor targets for training RPN. Network Structure. The training and testing symbols of Faster-RCNN detector is defined in FasterRcnn. The key components are listed as follow: Backbone. Backbone provides interfaces to build backbone networks, e.g. ResNet and ResNext.Neck. Neck provides interfaces to build complementary feature extraction layers for backbone networks, e.g. FPNNeck builds Top-down pathway for Feature Pyramid Network.RPN head. 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.Roi Extractor. RoiExtractor extracts features for each roi (proposal) based on the R-CNN features generated by Backbone and Neck.Bounding Box Head. BboxHead builds the R-CNN layers for proposal refinement.
How to build a custom detector
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.
Preprocessing. The additional processing methods could be provided accordingly by inheriting from DetectionAugmentation. In TridentNet, a new TridentAnchorTarget2D is implemented to generate anchors for multiple branches and filter anchors for scale-aware training scheme. Network Structure. The new network structure could be constructed easily for a custom detector by modifying some required components as needed and For TridentNet, we build trident blocks in the 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.
Contributors
Yuntao Chen, Chenxia Han, Yanghao Li, Zehao Huang, Naiyan Wang, Xiaotao Chen, Jingqiu Zhou, Zhen Wei, Zehui Chen, Zhaoxiang Zhang, Bo Ke
License and Citation
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}}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~