An open source framework for deep learning on satellite and aerial imagery.
Clone or download
Latest commit 5dfff3c Nov 9, 2018
Permalink
Failed to load latest commit information.
.github Add PR template Jul 20, 2018
.travis Factor-out Commonalities into Base Image Oct 16, 2018
docker Factor-out Commonalities into Base Image Oct 16, 2018
docs Add release docs Oct 30, 2018
integration_tests Refactor update_for_command for speed and simplicity Oct 25, 2018
rastervision Merge pull request #555 from jamesmcclain/periodic-sync Nov 9, 2018
scripts Exclude Non-Core Utilities Oct 17, 2018
tests Merge pull request #538 from azavea/rde/feature/debug-logging-runner Oct 31, 2018
.codecov.yml Disable Codecov Statuses Oct 5, 2018
.coveragerc ~(Actual Commands Tested by Integration Tests) Oct 17, 2018
.flake8 Remove src directory and top-level all its contents Oct 7, 2018
.gitignore Don't ignore proto generated files Oct 7, 2018
.travis.yml Add travis quay publishing to release branches Oct 9, 2018
Dockerfile Factor-out Commonalities into Base Image Oct 16, 2018
Dockerfile-cpu Factor-out Commonalities into Base Image Oct 16, 2018
Dockerfile-gpu Factor-out Commonalities into Base Image Oct 16, 2018
LICENSE Move LICENSE to top level Mar 2, 2017
MANIFEST.in Remove src directory and top-level all its contents Oct 7, 2018
README.md Remove release notice banner in README Oct 10, 2018
extras_requirements.json Remove src directory and top-level all its contents Oct 7, 2018
requirements-dev.txt Ensure Compatible `moto` Nov 9, 2018
requirements.txt Remove src directory and top-level all its contents Oct 7, 2018
setup.py Replace image links in README with static links for pypi config Oct 10, 2018

README.md

Raster Vision Logo  

Pypi Docker Repository on Quay Join the chat at https://gitter.im/azavea/raster-vision License Build Status codecov

Raster Vision is an open source Python framework for building computer vision models on satellite, aerial, and other large imagery sets (including oblique drone imagery).

  • It allows users (who don't need to be experts in deep learning!) to quickly and repeatably configure experiments that execute a machine learning workflow including: analyzing training data, creating training chips, training models, creating predictions, evaluating models, and bundling the model files and configuration for easy deployment. Overview of Raster Vision workflow
  • There is built-in support for chip classification, object detection, and semantic segmentation using Tensorflow. Examples of chip classification, object detection and semantic segmentation
  • Experiments can be executed on CPUs and GPUs with built-in support for running in the cloud using AWS Batch.
  • The framework is extensible to new data sources, tasks (eg. object detection), backends (eg. TF Object Detection API), and cloud providers.
  • There is a QGIS plugin for viewing the results of experiments on a map.

See the documentation for more details: https://docs.rastervision.io

Example

The best way to get a feel for what Raster Vision enables is to look at an example of how to configure and run an experiment. Experiments are configured using a fluent builder pattern that makes configuration easy to read, reuse and maintain.

# tiny_spacenet.py

import rastervision as rv

class TinySpacenetExperimentSet(rv.ExperimentSet):
    def exp_main(self):
        base_uri = ('https://s3.amazonaws.com/azavea-research-public-data/'
                    'raster-vision/examples/spacenet')
        train_image_uri = '{}/RGB-PanSharpen_AOI_2_Vegas_img205.tif'.format(base_uri)
        train_label_uri = '{}/buildings_AOI_2_Vegas_img205.geojson'.format(base_uri)
        val_image_uri = '{}/RGB-PanSharpen_AOI_2_Vegas_img25.tif'.format(base_uri)
        val_label_uri = '{}/buildings_AOI_2_Vegas_img25.geojson'.format(base_uri)

        task = rv.TaskConfig.builder(rv.OBJECT_DETECTION) \
                            .with_chip_size(512) \
                            .with_classes({
                                'building': (1, 'red')
                            }) \
                            .with_chip_options(neg_ratio=1.0,
                                               ioa_thresh=0.8) \
                            .with_predict_options(merge_thresh=0.1,
                                                  score_thresh=0.5) \
                            .build()

        backend = rv.BackendConfig.builder(rv.TF_OBJECT_DETECTION) \
                                  .with_task(task) \
                                  .with_debug(True) \
                                  .with_batch_size(8) \
                                  .with_num_steps(5) \
                                  .with_model_defaults(rv.SSD_MOBILENET_V2_COCO)  \
                                  .build()

        train_raster_source = rv.RasterSourceConfig.builder(rv.GEOTIFF_SOURCE) \
                                                   .with_uri(train_image_uri) \
                                                   .with_stats_transformer() \
                                                   .build()

        train_scene =  rv.SceneConfig.builder() \
                                     .with_task(task) \
                                     .with_id('train_scene') \
                                     .with_raster_source(train_raster_source) \
                                     .with_label_source(train_label_uri) \
                                     .build()

        val_raster_source = rv.RasterSourceConfig.builder(rv.GEOTIFF_SOURCE) \
                                                 .with_uri(val_image_uri) \
                                                 .with_stats_transformer() \
                                                 .build()

        val_scene = rv.SceneConfig.builder() \
                                  .with_task(task) \
                                  .with_id('val_scene') \
                                  .with_raster_source(val_raster_source) \
                                  .with_label_source(val_label_uri) \
                                  .build()

        dataset = rv.DatasetConfig.builder() \
                                  .with_train_scene(train_scene) \
                                  .with_validation_scene(val_scene) \
                                  .build()

        experiment = rv.ExperimentConfig.builder() \
                                        .with_id('tiny-spacenet-experiment') \
                                        .with_root_uri('/opt/data/rv') \
                                        .with_task(task) \
                                        .with_backend(backend) \
                                        .with_dataset(dataset) \
                                        .with_stats_analyzer() \
                                        .build()

        return experiment


if __name__ == '__main__':
    rv.main()

Raster Vision uses a unittest-like method for executing experiments. For instance, if the above was defined in tiny_spacenet.py, with the proper setup you could run the experiment on AWS Batch by running:

> rastervision run aws_batch -p tiny_spacenet.py

See the Quickstart for a more complete description of running this example.

Resources

Contact and Support

You can find more information and talk to developers (let us know what you're working on!) at:

Docker images

Raster Vision is publishing docker images to quay.io. The tag for the raster-vision image determines what type of image it is:

  • The cpu-* tags are for running the CPU containers.
  • The gpu-* tags are for running the GPU containers.

We publish a new tag per merge into develop, which is tagged with the first 7 characters of the commit hash. To use the latest version, pull the latest suffix, e.g. raster-vision:gpu-latest. Git tags are also published, with the github tag name as the docker tag suffix.

Contributing

We are happy to take contributions! It is best to get in touch with the maintainers about larger features or design changes before starting the work, as it will make the process of accepting changes smoother.

Everyone who contributes code to Raster Vision will be asked to sign the Azavea CLA, which is based off of the Apache CLA.

  1. Download a copy of the Raster Vision Individual Contributor License Agreement or the Raster Vision Corporate Contributor License Agreement

  2. Print out the CLAs and sign them, or use PDF software that allows placement of a signature image.

  3. Send the CLAs to Azavea by one of:

  • Scanning and emailing the document to cla@azavea.com
  • Faxing a copy to +1-215-925-2600.
  • Mailing a hardcopy to: Azavea, 990 Spring Garden Street, 5th Floor, Philadelphia, PA 19107 USA