RarePlanes: Synthetic Data Takes Flight
This repository contains scripts for inspection, preparation and evaluation of the RarePlanes dataset.
The user guide provides a more detailed description of the dataset.
Paper
@misc{shermeyer2020rareplanes,
title={RarePlanes: Synthetic Data Takes Flight},
author={Jacob Shermeyer and Thomas Hossler and Adam Van Etten and Daniel Hogan and Ryan Lewis and Daeil Kim},
year={2020},
eprint={2006.02963},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
Please cite our paper if you find it useful for your research.
Getting Started
Using docker
We highly recommend using the available docker image as some of the dependencies can be strenous to install. You can either pull the image:
docker pull aireverie/rareplanes:latest
or build it locally:
docker build -t rareplanes .
Without docker
Follow the installation guidelines of solaris.
Download data
Instructions are available in the user guide and here.
Models and baselines
We provide all the baseline results and made the trained models available for download here
Create tiles from satellite images
Pre-tiled data can be found in the geojson_aircraft_tiled directory. These data have a size of 512x512 pixels with an overlap of 20% per tile. End users can retile their data if necessary.
For example to tile into 1024x1024 tiles with no overlap:
python tools/create_tiles.py --image_dir datasets/real/train/PS-RGB
--geojson_dir datasets/real/train/geojson_aircraft
--tile_image_dir datasets/real/train/retiled_images
--tile_geojson_dir datasets/real/train/retiled_geojson
--tile_size 1024
--overlap 0
Create coco files
Using the create_coco_real.py
or create_coco_synthetic.py
script, the user can select the attribute that they want to use as a category.
For aircraft detection
For example, to create a coco file where each object is labeled as aircraft, the following script is ran:
python tools/create_coco_real.py --image_dir datasets/real/train/PS-RGB_tiled
--geojson_dir datasets/real/train/geojson_aircraft_tiled
--output_path ./aircraft_real_coco.json
python tools/create_coco_synthetic.py --data_dir datasets/synthetic/
--segmentation simple
--output_path ./aircraft_synthetic_coco.json
For other attributes
If we want to classify the aircraft by number of engines instead:
python tools/create_coco_real.py --image_dir datasets/real/train/PS-RGB_tiled
--geojson_dir datasets/real/train/geojson_aircraft_tiled
--output_path ./num_engines_real_coco.json
--category_attribute num_engines
python tools/create_coco_synthetic.py --data_dir datasets/synthetic/
--segmentation simple
--output_path ./num_engines_synthetic_coco.json
--category_attribute num_engines
By role
python tools/create_coco_real.py --image_dir datasets/real/train/PS-RGB_tiled
--geojson_dir datasets/real/train/geojson_aircraft_tiled
--output_path ./role_real_coco.json
--category_attribute role
python tools/create_coco_synthetic.py --data_dir datasets/synthetic/
--segmentation simple
--output_path ./role_synthetic_coco.json
--category_attribute role
Create custom classes
If we want to identify aircraft based on a unique combination of classes:
python tools/create_custom_classes.py --all_annotations_geojson datasets/real/metadata_full_annotations/RarePlanes_Public_All_Annotations.geojson
--geojson_dir datasets/real/train/geojson_aircraft_tiled
--output_path datasets/real/train/geojson_aircraft_tiled_custom
--category_attributes ['num_engines', 'role', 'propulsion']
python tools/create_coco_real.py --image_dir datasets/real/train/PS-RGB_tiled
--geojson_dir datasets/real/train/geojson_aircraft_tiled_custom
--output_path ./custom_real_coco.json
--category_attribute custom_id
--custom_class_lookup_csv datasets/real/train/geojson_aircraft_tiled_custom/custom_class_lookup.csv
python tools/create_coco_synthetic.py --data_dir datasets/synthetic/
--segmentation simple
--output_path ./custom_synthetic_coco.json
--category_attribute custom_id
--custom_class_lookup_csv datasets/real/train/geojson_aircraft_tiled_custom/custom_class_lookup.csv