Goal: The objective of this study is to verify locations of base transceiver stations (BTS) in a particular region by utilizing a deep neural network with which to classify geo-referenced image tiles for presence or non-presence of BTS.
This code base allows the reader to replicate the results of this study.
Programming Language: Python 3.6 (can be modified for Python 2.x)
Required Packages: Pillow, overpass, numpy, scipy
For questions and bug reports, please email Aldre Jota at aldrejota[at]gmail.com.
Accuracy on Hold-out Sample (Test Set): 96.57%
The architecture of the neural network is similar to the base layers of VGG16* (Simonyan & Zisserman, 2014) topped with a single 256-node fully-connected layer regularized with 50% dropout.
Optimized using stochastic gradient descent with 0.0001 learning rate and 0.9 momentum.
You can access the trained model here.
*Simonyan & Zisserman, 2014, Very Deep Convolutional Networks for Large-Scale Image Recognition [Arxiv]
- Generate an API key for Google Static Maps API (free).
- Select areas of interest in OpenStreetMap (OSM) and create a file listing the area boundary IDs delimited by new line. Note: keep the boundaries small for faster searches; no continent-level boundaries.
- Install required Python packages:
pip install -r requirements.txt
- Run the scripts scrape_bts.py and scrape_non-bts.py with inputs from (1) and (2) .
- The scripts locate coordinates in OSM with tags for BTS (communication towers, mobile communications) and Non-BTS (highways, residential lands, bridges, parking spaces, natural water, etc).
- Then, the scripts download image tiles from Google Static Maps specified by the latitude and longitude coordinates to the data/bts_images/[area] directory.
- Important: Manually filter images for inconsistencies and mistags.
- Check out the application examples from the Keras website.
- Download the keras_model.json from this repository to recreate the architecture.
json_model = open('keras_model.json', 'r').read()
BTS_model = model_from_json(json_model)
- "Transfer learning" approach: use the pretrained model of the original VGG16 for the initial weight of the base layers.