This is an implementation of CenterNet for object detection on keras and Tensorflow. The project is based on fizyr/keras-retinanet and the official implementation xingyizhou/CenterNet. Thanks for their hard work.
The network is anchor-free. It is quite simple, fast and accurate.
- I trained on Pascal VOC2012 trainval.txt + Pascal VOC2007 train.txt, and validated on Pascal VOC2007 val.txt. There are 14041 images for training and 2510 images for validation.
- The best evaluation results (score_threshold=0.01, flip_test=True, nms=True) on VOC2007 test are:
backbone | mAP50 |
---|---|
resnet50 | 0.7290 |
- The weights of resnet backbones can be downloaded from fizyr/keras-models.
Pretrained centernet model is here. baidu netdisk extract code: pti9 google driver python3 inference.py
to test your image by specifying image path and model path there.
build dataset (Pascal VOC, other types please refer to fizyr/keras-retinanet)
- Download VOC2007 and VOC2012, copy all image files from VOC2007 to VOC2012.
- Append VOC2007 train.txt to VOC2012 trainval.txt.
- Overwrite VOC2012 val.txt by VOC2007 val.txt.
- STEP1:
python3 train.py --freeze-backbone --gpu 0 --random-transform --compute-val-loss --batch-size 32 --steps 1000 pascal datasets/VOC2012
to start training. The init lr is 1e-3 and decays to 1e-4 when loss stops dropping down. - STEP2:
python3 train.py --snapshot xxx.h5 --gpu 0 --random-transform --compute-val-loss --batch-size 32 --steps 1000 pascal datasets/VOC2012
to start training when val mAP can not increase during STEP1. The init lr is 1e-4 and decays to 1e-5 when loss stops dropping down.
python3 eval/common.py
to evaluate by specifying model path there.
This project is released under the Apache License. Some parts are borrowed from fizyr/keras-retinanet and xingyizhou/CenterNet. Please take their licenses into consideration too when use this project.