Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
lbborkowski committed Jun 27, 2019
1 parent b736fff commit 5eeb95b
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,21 @@
# Wind Turbine Object Detection from Aerial Imagery Using TensorFlow Object Detection API and Google Colab
*Google Colab notebook to detect wind turbines from aerial images*
*Google Colab notebook to detect wind turbines from aerial images using TensorFlow*

## Overview
This repo contains a Jupyter notebook and supporting files to train a wind turbine object detector using [TensorFlow Object Detection API](https://github.com/tensorflow/models/tree/master/research/object_detection). The notebook is run in [Google Colaboratory](https://colab.research.google.com/notebooks/welcome.ipynb) which provides a free virtual machine with TensorFlow preinstalled and access to a GPU. This simplifies the setup process required to start using TensorFlow for interesting things like object detection. Coupling Google Colab with the open source TensorFlow Object Detection API provides all the tools necessary to train a custom object detection model.

In this repo, wind turbines are detected from aerial images taken over west-central Iowa. The full pipeline from training to inference is contained in the notebook with detailed explanations for each step in the process. This can serve as a tutorial for those interested in training their own custom object detection model. The figure below demonstrates a typical input image and the resulting output images with each wind turbine properly detected and classified.
In this repo, wind turbines are detected from aerial images taken over Iowa. The full pipeline from training to inference is contained in the notebook with detailed explanations for each step in the process. This can serve as a tutorial for those interested in training their own custom object detection model. The process is broken down into three steps: 1. Training, 2. Validation, and 3. Wind Turbine Detection and Localization. A brief overview of each of these steps is provided here. Further details of each step are included in the Jupyter notebook.

## Training
Training was performed on labeled 300 x 300 pixels images that were chipped from the original ### x #### pixel NAIP images. Each image contained at least one wind turbine which was labeled using labelIm. A few of the labeled images are shown below. In total, ### images were used for training. This training set included wind turbines of different capacity, manufacturer, and design.

## Validation
A set of validation images was kept separate from the train and test sets in order to validate the model. A total of ### images were used for validation. Due to random image augmentation performed during training, the validation results vary. However, I've found that at least 15 of the 17 wind turbines in the validation set images are detected with high probability. I have experienced a 100% accuracy (all wind turbines detected correctly) however due to the randomness in training, each trained model will likely provide different results. A few results from the validation step are shown below.

## Wind Turbine Detection and Localization
Finally, the trained model is applied to large NAIP images covering a 4 mile by 4 mile area, approximately. To perform detection over this large area, a sliding window approach is used to analyze 300 x 300 pixel images over the the ### x ### pixel original image. Once this analysis is performed, a marker is plotted on the original NAIP image for each detected wind turbine. In addition, the latitude and longitude of each wind turbine is output for verification. Two NAIP images with all the detected wind turbines denoted with red markers are presented below. In addition, a table containing a subset of the latitude and longitude coordinates is shown below.

The figure below demonstrates a typical input image and the resulting output images with each wind turbine properly detected and classified.

Launch the notebook in Google Colab by clicking on this badge: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/lbborkowski/wind-turbine-detector/blob/master/WindTurbineDetector.ipynb)
> *Note: After launching the notebook, verify that "Python2" and "GPU" are selected for the "Runtime type" and "Hardware accelerator" in Runtime -> Change runtime type.*
Expand Down

0 comments on commit 5eeb95b

Please sign in to comment.