Dense Label Encoding for Boundary Discontinuity Free Rotation Detection

December 4, 2020 · View on GitHub

License arXiv

Abstract

This repo is based on Focal Loss for Dense Object Detection, and it is completed by YangXue.

We also recommend a tensorflow-based rotation detection benchmark, which is led by YangXue.

Techniques:

Pipeline

5

Latest Performance

DOTA1.0 (Task1)

ModelBackboneTraining dataVal datamAPModel LinkAnchorAngle Pred.Reg. LossAngle Rangelr schdData AugmentationGPUImage/GPUConfigs
RetinaNet-HResNet50_v1d 600->800DOTA1.0 trainvalDOTA1.0 test64.17Baidu Drive (j5l0)HReg.smooth L11802x×3X GeForce RTX 2080 Ti1cfgs_res50_dota_v15.py
RetinaNet-CSLResNet50_v1 600->800DOTA1.0 trainvalDOTA1.0 test65.69Baidu Drive (kgr3)HCls.: Gaussian (r=6, w=1)smooth L11802x×3X GeForce RTX 2080 Ti1cfgs_res50_dota_v1.py
RetinaNet-DCLResNet50_v1 600->800DOTA1.0 trainvalDOTA1.0 test67.39Baidu Drive (p9tu)HCls.: BCL (w=180/256)smooth L11802x×3X GeForce RTX 2080 Ti1cfgs_res50_dota_dcl_v5.py
RetinaNet-DCLResNet50_v1 600->800DOTA1.0 trainvalDOTA1.0 test67.02Baidu Drive (mcfg)HCls.: GCL (w=180/256)smooth L11802x×3X GeForce RTX 2080 Ti1cfgs_res50_dota_dcl_v10.py
RetinaNet-DCLResNet152_v1 600->MSDOTA1.0 trainvalDOTA1.0 test73.88Baidu Drive (a7du)HCls.: BCL (w=180/256)smooth L11802x3X GeForce RTX 2080 Ti1cfgs_res152_dota_dcl_v1.py
Refine-DCLResNet50_v1 600->800DOTA1.0 trainvalDOTA1.0 test70.63Baidu Drive (6bv5)H->RCls.: BCL (w=180/256)iou-smooth L190->1802x×3X GeForce RTX 2080 Ti1cfgs_res50_dota_refine_dcl_v1.py
R3Det-DCLResNet50_v1 600->800DOTA1.0 trainvalDOTA1.0 test71.21Baidu Drive (jueq)H->RCls.: BCL (w=180/256)iou-smooth L190->1802x×3X GeForce RTX 2080 Ti1cfgs_res50_dota_r3det_dcl_v1.py
R3Det-DCLResNet152_v1 600->MS (+Flip)DOTA1.0 trainvalDOTA1.0 test76.70 (+0.27)Baidu Drive (2iov)H->RCls.: BCL (w=180/256)iou-smooth L190->1804x4X GeForce RTX 2080 Ti1cfgs_res152_dota_r3det_dcl_v1.py

Visualization

1

My Development Environment

docker images: docker pull yangxue2docker/yx-tf-det:tensorflow1.13.1-cuda10-gpu-py3
1、python3.5 (anaconda recommend)
2、cuda 10.0
3、opencv(cv2)
4、tfplot 0.2.0 (optional)
5、tensorflow-gpu 1.13

Download Model

Pretrain weights

1、Please download resnet50_v1, resnet101_v1, resnet152_v1, efficientnet, mobilenet_v2 pre-trained models on Imagenet, put it to data/pretrained_weights.
2、(Recommend in this repo) Or you can choose to use a better backbone (resnet_v1d), refer to gluon2TF.

Compile

cd $PATH_ROOT/libs/box_utils/cython_utils
python setup.py build_ext --inplace (or make)

cd $PATH_ROOT/libs/box_utils/
python setup.py build_ext --inplace

Train

1、If you want to train your own data, please note:

(1) Modify parameters (such as CLASS_NUM, DATASET_NAME, VERSION, etc.) in $PATH_ROOT/libs/configs/cfgs.py
(2) Add category information in $PATH_ROOT/libs/label_name_dict/label_dict.py     
(3) Add data_name to $PATH_ROOT/data/io/read_tfrecord_multi_gpu.py  

2、Make tfrecord
For DOTA dataset:

cd $PATH_ROOT/data/io/DOTA
python data_crop.py
cd $PATH_ROOT/data/io/  
python convert_data_to_tfrecord.py --VOC_dir='/PATH/TO/DOTA/' 
                                   --xml_dir='labeltxt'
                                   --image_dir='images'
                                   --save_name='train' 
                                   --img_format='.png' 
                                   --dataset='DOTA'

3、Multi-gpu train

cd $PATH_ROOT/tools
python multi_gpu_train_dcl.py

Test

cd $PATH_ROOT/tools
python test_dota_dcl_ms.py --test_dir='/PATH/TO/IMAGES/'  
                           --gpus=0,1,2,3,4,5,6,7  
                           -ms (multi-scale testing, optional)
                           -s (visualization, optional)

Notice: In order to set the breakpoint conveniently, the read and write mode of the file is' a+'. If the model of the same #VERSION needs to be tested again, the original test results need to be deleted.

Feature Visualization

cd $PATH_ROOT/tsne
python feature_extract_dcl.py
python tsne.py
cd $PATH_ROOT/tsne/dcl_log
tensorboard --logdir=.

6

Tensorboard

cd $PATH_ROOT/output/summary
tensorboard --logdir=.

3

4

Citation

If this is useful for your research, please consider cite.

@article{yang2020dense,
    title={Dense Label Encoding for Boundary Discontinuity Free Rotation Detection},
    author={Yang, Xue and Hou, Liping and Zhou, Yue and Wang, Wentao and Yan, Junchi},
    journal={arXiv preprint arXiv:2011.09670},
    year={2020}
}

@article{yang2020arbitrary,
    title={Arbitrary-Oriented Object Detection with Circular Smooth Label},
    author={Yang, Xue and Yan, Junchi},
    journal={European Conference on Computer Vision (ECCV)},
    year={2020}
    organization={Springer}
}

@article{yang2019r3det,
    title={R3Det: Refined Single-Stage Detector with Feature Refinement for Rotating Object},
    author={Yang, Xue and Yan, Junchi and Feng, Ziming and He, Tao},
    journal={arXiv preprint arXiv:1908.05612},
    year={2019}
}

@inproceedings{xia2018dota,
    title={DOTA: A large-scale dataset for object detection in aerial images},
    author={Xia, Gui-Song and Bai, Xiang and Ding, Jian and Zhu, Zhen and Belongie, Serge and Luo, Jiebo and Datcu, Mihai and Pelillo, Marcello and Zhang, Liangpei},
    booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
    pages={3974--3983},
    year={2018}
}

Reference

1、https://github.com/endernewton/tf-faster-rcnn
2、https://github.com/zengarden/light_head_rcnn
3、https://github.com/tensorflow/models/tree/master/research/object_detection
4、https://github.com/fizyr/keras-retinanet