/DRN_CVPR2020

Code and Dataset for CVPR2020 "Dynamic Refinement Network for Oriented and Densely Packed Object Detection"

Primary LanguageJupyter NotebookGNU General Public License v2.0GPL-2.0

DRN and SKU110K-R

Xingjia Pan, Yuqiang Ren, Kekai Sheng, Weiming Dong, Haolei Yuan, Xiaowei Guo, Chongyang Ma, Changsheng Xu

Work in process.

Dynamic Refinement Network for Oriented and Densely Packed Object Detection[Paper Link]

Figure 1. Overall framework of our Dynamic Refinement Network. The backbone network is followed by two modules, i.e., feature selection module (FSM) and dynamic refinement heads (DRHs). FSM selects the most suitable features by adaptively adjusting receptive fields. The DRHs dynamically refine the predictions in an object-aware manner.

SKU110K-R

Figure 2. Some sample images from SKU110K. The images in top row are annotated with horizontal bounding boxes while the images in bottom row are with oriented bounding boxes.

To use SKU110K-R,

  1. Download the original SKU110K data set from website and extract images

  2. Generate SKU110K-R using our rotate augment script

   python rotate_augment.py path/to/images
  1. Download the annotations for SKU110K-R from website

The annotation is in coco format.

Evaluation tools

cocoapi_ro

we provide a variant of cocoapi for evaluation of rotated bounding boxes.

  1. Install cocoapi_ro(similar with cocoapi)
   cd PythonAPi
   make
  1. Replace pycocotools with pycocotools_ro

FROM

   import pycocotools.coco as coco
   from pycocotools.cocoeval import COCOeval

TO

   import pycocotools_ro.coco as coco
   from pycocotools_ro.cocoeval import COCOeval
  1. Update the evaluation code.

FROM

   coco_eval = COCOeval(self.coco, coco_dets, "bbox")

TO

   coco_eval = COCOeval(self.coco, coco_dets, "rbbox")
   coco_eval.params.maxDets = [1, 10, 300]

angle_nms

we provide angle_nms for nms of rotated bounding box in post process.

   from angle_nms.angle_soft_nms import angle_soft_nms
   # Example
   result_after_nms = angle_soft_nms(all_dets, Nt=0.5, method=1,threshold=0.05)
   # all_dets: detection results
   # Nt: iou threshold 
   # method: 1, linear soft nms; 2, gaussian soft nms; other, nms
   # threshold: the minimum confidence valu to retain the detection bbox

Rotation Conv Layer

  1. To use the rotation conv layer, you need to install dcn_v2 first,
    # git clone -b pytorch_1.0.0 https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch.git
    # mv Deformable-Convolution-V2-PyTorch DCNv2
    cd DCNv2
    ./make.sh
  1. Then you need to modify the import path of dcnv2 in rotation_conv_utils.py.
from path\to\DCNv1.modules.modulated_deform_conv import ModulatedDeformConv
from path\to\DCNv2.functions.modulated_deform_conv_func import ModulatedDeformConvFunction

  1. We provide a simple example to use the rotation conv layer in test_rcl.py.

Citation

If you find this project useful for your research, please use the following BibTeX entry.

@article{pan2020dynamic,
  title={Dynamic Refinement Network for Oriented and Densely Packed Object Detection},
  author={Xingjia Pan and Yuqiang Ren and Kekai Sheng and Weiming Dong and Haolei Yuan and Xiaowei Guo and Chongyang Ma and Changsheng Xu},
  booktitle={CVPR},
  pages={1--8},
  year={2020}
}

Contacts

If you have any questions about our work, please do not hesitate to contact us by emails.
Xingjia Pan: xingjia.pan@nlpr.ia.ac.cn
Yuqiang Ren: condiren@tencent.com