Skip to content
Code for "Deep learning for coastal resource conservation: automating detection of shellfish reefs" manuscript.
Jupyter Notebook
Branch: master
Clone or download

Latest commit

Fetching latest commit…
Cannot retrieve the latest commit at this time.


Type Name Latest commit message Commit time
Failed to load latest commit information.
data_mgmt overdue commit with all changes for paper and analysis Sep 27, 2019

Deep learning for coastal resource conservation: automating detection of shellfish reefs

This repository has the code needed to go along with the Remote Sensing in Ecology and Conservation paper "Deep learning for coastal resource conservation: automating detection of shellfish reefs." available at DOI: 10.1002/rse2.134. This work uses Mask R-CNN for detecting oyster reefs in aerial drone imagery.

All data, both preprocessed and original raw data, necessary to reproduce this work is available on the Duke Digital Repository at DOI: 10.7924/r4cv4gx0h


You can use the Dockerfile included in the training/ directory of this repository to train the CNN and you can use the Dockerfile in data_mgmt/ to manage the drone imagery and process everything. The training Docker container is created and run using this series of commands:

docker build -t training_img .
docker run --name training_container --runtime=nvidia -it -p 8888:8888 -p 6006:6006 -v ~/:/host training_img

Once this container is running you cans start the jupyter notebook running inside of the container with:

jupyter notebook --allow-root --ip /host

The data_mgmt container is similar except without the nvidia runtime

docker build -t data_mgmt_img .
docker run --name data_mgmt_container -it -p 8888:8888 -p 6006:6006 -v ~/:/host data_mgmt_img

You will need Mask_RCNN installed in a directory at an equal level with this one. From the Releases page page download version 2.1 and follow instructions here for setting up Mask R-CNN.

Directory structure should be:


Prepare Data

Convert the original drone mosaics into tiles appropriate for deep learning analysis through this notebook: data_mgmt/img_processing.ipynband shuffle and organize these tiles into training, validation, and testing datasets using data_mgmt/training_data_management.ipynb.

Inspect Data

Open the inspect_oyster_data.ipynb jupyter notebook to explore this prepared dataset.

Train the Oyster model

NOTE: pretrained models are available for all image sizes at:

Train a new model starting from pre-trained COCO weights

python3 train --dataset=/path/to/oyster/dataset --weights=coco

Train a model from the weights used in this paper.

python3 train --dataset=/path/to/oyster/dataset --weights=/path/to/weights

Resume training a model that you had trained earlier

python3 train --dataset=/path/to/oyster/dataset --weights=last

The code in is set to train for 25K steps (100 epochs of 250 steps each), and using a batch size of 2. Update the schedule to fit your needs.

Run the Model and Analyze Output

The model can be run at inspect_oyster_model.ipynb and users can both step through the detection pipelie or run it on a bulk set of images. The geolocation information for each tile output from data_mgmt/img_processing.ipynb can be used along with the detections to convert the CNN output back to a geolocated polygon such as a shapefile or geojson polygon.

You can’t perform that action at this time.