mapbox / robosat

Semantic segmentation on aerial and satellite imagery. Extracts features such as: buildings, parking lots, roads, water, clouds
MIT License
2.02k stars 383 forks source link

Functional Testing in Robosat #95

Closed bkowshik closed 5 years ago

bkowshik commented 6 years ago

There are couple of open PRs in Robosat that affect multiple files and folders. I am thinking having a system test in place gives us more confidence in rebase and merging these PRs. Having this run for every commit on Travis would be amazing!

Steps

The different steps in the Robosat pipeline can be grouped into the following 4 groups. Grouping makes thinking about writing tests a little easier with clarity of what are inputs and outputs for each group and for a lot of cases, the output of the previous step is used as input for the next step.

Group 1. Data preparation

This group begins with a pbf file. So, ideally we create a small pbf file representing it and store it in the repository itself so that all tests are repeatable with examples based on this testing dataset.

Group 2. Model training

Since, we want these tests to run on CPUs from TravisCI, the current strategy would be to keep the numbers of samples in the training and validation dataset small, 25-50 samples maybe.

Group 3. Post-processing

Need to make sure that the samples in the testing dataset as split across multiple tiles so that we can test the behavior of the merge step. Similarly, for the testing dataset, we could draw out a few polygons to represent parking lots mapped in OpenStreetMap instead of using raw OpenStreetMap data.

Group 4. Infrastructure

Tests for this group are of a lesser priority in comparison to the above three steps. So, this can definitely come later once we have the system tests for the above three groups finalized.

bkowshik commented 6 years ago

Spent an hour researching into System Testing in general and following are my notes:

Hyperlinks

Next actions

bkowshik commented 6 years ago

Looked around for examples for system tests, particularly in Python; not sure if I am looking for right things. Would love to :eyes: some example projects with functional tests.

Tests for Robosat cli

Taking inspiration from how Mercantile has tests for it's cli, we could have a similar setup where we have a tests/test_cli.py file that tests the different steps in the Robosat pipeline like rs extract, rs cover etc. Something I want to try out is when a tests file has all the test function laid out, will the test runner run them in order or is that not predictable. If the tests are run in order, we could potentially wire-up in such a way that outputs of one step become the inputs to the next step. 😃

jqtrde commented 5 years ago

Think this is stale - going to close but please yell if that's not the case!