This project hosts the official implementation for our AAAI 2021 paper:
Dynamic Anchor Learning for Arbitrary-Oriented Object Detection [paper] [comments].
In this paper, we propose a dynamic anchor learning (DAL) method, which utilizes the newly defined matching degree to comprehensively evaluate the localization potential of the anchors and carry out a more efficient label assignment process. In this way, the detector can dynamically select high-quality anchors to achieve accurate object detection, and the divergence between classification and regression will be alleviated.
The codes build Rotated RetinaNet with the proposed DAL method for rotation object detection. The supported datasets include: DOTA, HRSC2016, ICDAR2013, ICDAR2015, UCAS-AOD, NWPU VHR-10, VOC.
Insatll requirements:
pip install -r requirements.txt
pip install git+git:https://github.com/lehduong/torch-warmup-lr.git
Build the Cython and CUDA modules:
cd $ROOT/utils
sh make.sh
cd $ROOT/utils/overlaps_cuda
python setup.py build_ext --inplace
Installation for DOTA_devkit:
cd $ROOT/datasets/DOTA_devkit
sudo apt-get install swig
swig -c++ -python polyiou.i
python setup.py build_ext --inplace
You can use the following command to test a dataset. Note that weight
, img_dir
, dataset
,hyp
should be modified as appropriate.
python demo.py
- Move the dataset to the
$ROOT
directory. - Generate imageset files for daatset division via:
cd $ROOT/datasets
python generate_imageset.py
- Modify the configuration file
hyp.py
and arguments intrain.py
, then start training:
python train.py
Different datasets use different test methods. For UCAS-AOD/HRSC2016/VOC/NWPU VHR-10, you need to prepare labels in the appropriate format in advance. Take evaluation on HRSC2016 for example:
cd $ROOT/datasets/evaluate
python hrsc2gt.py
then you can conduct evaluation:
python eval.py
Note that :
- the script needs to be executed only once, but testing on different datasets needs to be executed again.
- the imageset file used in
hrsc2gt.py
is generated fromgenerate_imageset.py
.
Method | Dataset | Bbox | Backbone | Input Size | mAP/F1 |
---|---|---|---|---|---|
DAL | DOTA | OBB | ResNet-101 | 800 x 800 | 71.78 |
DAL | UCAS-AOD | OBB | ResNet-101 | 800 x 800 | 89.87 |
DAL | HRSC2016 | OBB | ResNet-50 | 416 x 416 | 88.60 |
DAL | ICDAR2015 | OBB | ResNet-101 | 800 x 800 | 82.4 |
DAL | ICDAR2013 | HBB | ResNet-101 | 800 x 800 | 81.3 |
DAL | NWPU VHR-10 | HBB | ResNet-101 | 800 x 800 | 88.3 |
DAL | VOC 2007 | HBB | ResNet-101 | 800 x 800 | 76.1 |
If you find our work or code useful in your research, please consider citing:
@inproceedings{ming2021dynamic,
title={Dynamic Anchor Learning for Arbitrary-Oriented Object Detection},
author={Ming, Qi and Zhou, Zhiqiang and Miao, Lingjuan and Zhang, Hongwei and Li, Linhao},
booktitle={Proceedings of the AAAI Conference on Artificial Intelligence},
volume={35},
number={3},
pages={2355--2363},
year={2021}
}
If you have any questions, please contact me via issue or email.