|
|
--- |
|
|
license: mit |
|
|
tags: |
|
|
- pytorch |
|
|
- pytorch-lightning |
|
|
- dem |
|
|
- super-resolution |
|
|
- remote-sensing |
|
|
- geospatial |
|
|
--- |
|
|
|
|
|
# DEM Super-Resolution |
|
|
|
|
|
This repository contains a pipeline for generating synthetic high-resolution Digital Elevation Models (DEMs) by super-resolving 30m SRTM data to 10m resolution, fused with Sentinel-2 imagery. The model is trained on high-resolution LiDAR DEM data from McKinley Mine, NM, and applied to generate DEMs for Marrakech, Morocco. |
|
|
|
|
|
## Overview |
|
|
|
|
|
The implementation uses an adapted DeepDEM model with a U-Net architecture (ResNet34 encoder) that takes 7 input channels: |
|
|
- SRTM DEM (30m) |
|
|
- Sentinel-2 RGB bands (10m) |
|
|
- Sentinel-2 NIR band (10m) |
|
|
- NDVI |
|
|
- Nodata mask |
|
|
|
|
|
The model predicts residual corrections to be added to a smoothed SRTM trend, producing 10m synthetic DEMs. |
|
|
|
|
|
## Requirements |
|
|
|
|
|
- Python 3.8+ |
|
|
- PyTorch 2.0+ |
|
|
- PyTorch Lightning |
|
|
- Segmentation Models PyTorch |
|
|
- Rasterio |
|
|
- Geopandas |
|
|
- Albumentations |
|
|
- Earth Engine API (for data acquisition) |
|
|
- GDAL |
|
|
- Boto3 (for LiDAR data download) |
|
|
|
|
|
## Installation |
|
|
|
|
|
1. Clone the repository: |
|
|
```bash |
|
|
git clone https://github.com/nfl0/DEM_SuperRes.git |
|
|
cd DEM_SuperRes |
|
|
``` |
|
|
|
|
|
2. Install dependencies: |
|
|
```bash |
|
|
pip install torch torchvision torchaudio pytorch-lightning segmentation-models-pytorch rasterio geopandas albumentations scipy gdown earthengine-api boto3 |
|
|
``` |
|
|
|
|
|
3. Install system dependencies: |
|
|
```bash |
|
|
apt-get install libspatialindex-dev libgdal-dev gdal-bin |
|
|
pip install gdal |
|
|
``` |
|
|
|
|
|
## Data Acquisition |
|
|
|
|
|
The notebook handles data acquisition from: |
|
|
- **SRTM 30m DEM**: CGIAR/SRTM90_V4 via Google Earth Engine |
|
|
- **Sentinel-2 10m imagery**: COPERNICUS/S2_SR_HARMONIZED via Google Earth Engine |
|
|
- **High-resolution LiDAR DEM**: OpenTopography (McKinley Mine, NM) |
|
|
|
|
|
Authenticate with Google Earth Engine and ensure access to required datasets. |
|
|
|
|
|
## Usage |
|
|
|
|
|
1. Open `DEM_SuperRes.ipynb` in Google Colab or Jupyter. |
|
|
2. Run cells sequentially to: |
|
|
- Acquire and preprocess training data (McKinley) |
|
|
- Train the model |
|
|
- Acquire and preprocess inference data (Marrakech) |
|
|
- Generate synthetic DEM |
|
|
- Run validation checks |
|
|
|
|
|
3. Key outputs: |
|
|
- Trained model: `Models/deepdem_model.ckpt` |
|
|
- Synthetic DEM: `synth_dem_marrakech.tif` |
|
|
|
|
|
## Model Training |
|
|
|
|
|
- **Architecture**: U-Net with ResNet34 encoder, 7 input channels, 1 output channel (residuals) |
|
|
- **Loss**: L1 loss |
|
|
- **Optimizer**: Adam (lr=1e-4) |
|
|
- **Training**: 5 epochs on random crops from McKinley DEM |
|
|
- **Data Augmentation**: Random crops, rotations, flips, noise |
|
|
|
|
|
## Validation |
|
|
|
|
|
The notebook includes checks for: |
|
|
- Input data statistics and validity |
|
|
- Training fit (MAE/RMSE on validation crops) |
|
|
- Output alignment and correlation with SRTM trend |