Two open access geospatial imaging datasets have been used to train the segmentation models:
- Massachusetts Roads Dataset
- 1438 images with masks
- 1500x1500 resolution
- Urban terrain
- DeepGlobe Road Extraction Dataset
- 6226 images with masks
- 1024x1024 resolution
- Semi-Urban & Rural terrain
Two models have been used to train on respective datasets, imported from segmentation_models_pytorch
:
- UNet
- Encoder: ResNet-34 pretrained on imagenet
- Activation : Sigmoid
- Loss fn : DiceLoss , Optimizer : Adam(lr=4e-5)
- Batch Size : 16, epochs : 6
- Dataset : Massachusetts
- DeepLabV3+
- Encoder : ResNet-50 pretrained on imagenet
- Activation : Sigmoid
- Loss fn : DiceLoss , Optimizer : Adam(lr=8e-5)
- Batch Size : 4, epochs : 4
- Dataset : DeepGlobe
- Image Processing
- opening : erosion + dilation
- closing : dilation + erosion
- Skeletonize (scikit-image)
- Route Finding
- BFS : considering adjacent pixels of same color as connected
- Dijkstra : using [0.1*d + sum{(c1-c2)^2}] as weights of edges followed by pruning of redundant nodes
- A* : using a heuristic that underestimates the distance to the goal
Input Satellite Image |
→ |
Generate Road Mask |
→ |
Skeletonize Road Map |
↓ | ||||
Shortest Road Path |
← |
Prune & Smoothen Path |
← |
Find Shortest Path |