This is the implementation of CVPR 2018 work 'Domain Adaptive Faster R-CNN for Object Detection in the Wild'. The aim is to improve the cross-domain robustness of object detection, in the screnario where training and test data are drawn from different distributions. The original paper can be found here
If you want to use this repo with your dataset follow the following guide.
Please leave a star ⭐ if you use this repository for your project.
You can use this repo following one of these three methods:
NB: Detectron2 0.6 is required, installing other versions this code will not work.
Or load the DA-Faster-RCNN.ipynb
notebook on Google Colab and follow the instructions inside.
Follow the official guide to install Detectron2 0.6
Follow the official guide to install Detectron2 0.6
You can find at the following links two datasets for Unsupervised Domain Adaptation for Object Detection:
Create the Cityscapes-Foggy Cityscapes dataset following the instructions available here
Synthetic to Real Artwork UDA-CH
This implementation work with C4, DC5 and FPN backbones (R50 and R101). FPN backbones should have higher performance.
If you want to use this code with your dataset arrange the dataset in the format of COCO or PASCAL VOC. For COCO annotations, inside the script uda_train.py register your dataset using:
register_coco_instances("dataset_name_source_training",{},"path_annotations","path_images")
register_coco_instances("dataset_name_target_training",{},"path_annotations","path_images")
register_coco_instances("dataset_name_target_test",{},"path_annotations","path_images")
For PASCAL VOC annotations register your dataset using:
register_pascal_voc("city_trainS", "cityscape/VOC2007/", "train_s", 2007, ['car','person','rider','truck','bus','train','motorcycle','bicycle'])
register_pascal_voc("city_trainT", "cityscape/VOC2007/", "train_t", 2007, ['car','person','rider','truck','bus','train','motorcycle','bicycle'])
register_pascal_voc("city_testT", "cityscape/VOC2007/", "test_t", 2007, ['car','person','rider','truck','bus','train','motorcycle','bicycle'])
You need to replace the parameters inside the register_pascal_voc() function according to your dataset name and classes.
Replace at the following path if you use Google Colab ../usr/local/lib/python3.7/dist-packages/detectron2/modeling/meta_arch/
the rcnn.py
script with my rcnn.py
.
Do the same for the roi_heads.py
file at the path ../usr/local/lib/python3.7/dist-packages/detectron2/modeling/roi_heads/
Inside the folder ../usr/local/lib/python3.7/dist-packages/detectron2/modeling/
create a folder called da_modules
and upload the three files:grad_rev_layer.py
image_level_discriminators.py
instance_level_discriminators.py
NB: Python version may vary
If you use your pc you need to replace the files that you will find in the Detectron2 folder that you have cloned from the official GitHub repo.
detectron2/modeling/meta_arch/
detectron2/modeling/roi_heads/
If you want to test the model load the new weights, set to 0 the number of iterations and rerun the same script used for the training. If the annotations are in PASCAL VOC use the PascalVOCDetectionEvaluator
otherwise COCOEvaluator