This repo contains the code and files necessary to reproduce the results published in our paper 'Height Prediction and Refinement from Aerial Images with Semantic and Geometric Guidance'. Our method relies on a two stage pipeline : First, a multi-task network is used to predict the height, semantic labels and surface normals of an input RGB aerial image. Next, we use a denoising autoencoder to refine our height prediction in order to produce higher quality height maps. Training and testing is conducted on two publicly available datasets : The ISPRS Vaihingen and the IEEE DFC2018.
If you find our work useful in your research, please consider citing our paper:
@misc{mahdi2020height,
title={Height Prediction and Refinement from Aerial Images with Semantic and Geometric Guidance},
author={Elhousni Mahdi and Huang Xinming and Zhang Ziming},
year={2020},
eprint={2011.10697},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
- Python 3.5
- Tensorflow 2.1 (with Cuda 10.0)
- Numpy 1.18.4
Both datasets can be found here. The data was organized and seperated into tiles to speed up the training process. No further pre-processing was done. Our checkpoints can be found here.
When unzipping the datasets and checkpoints, make sure to respect the following folder structure :
/
-datasets
--DFC2018
---RGB
---SEM
---DSM
---DEM
--Vaihingen
---RGB
---SEM
---NDSM
-checkpoints
--DFC2018
--Vaihingen
Next, use the test_dsm.py script to test the height prediction and refinement networks by using :
python test_dsm.py [dataset] [refinement_flag]
For example, to test the results of the prediction and refinement networks combined on the DFC2018 dataset, use :
python test_dsm.py DFC2018 True
To test the results of the prediction network only on the Vaihingen dataset, use :
python test_dsm.py Vaihingen False
The output files will be saved to the /output folder.
To train your own MTL prediction network, use:
python train_mtl.py [dataset]
For example, to train the MTL prediction network on the DFC2018 dataset, use :
python train_mtl.py DFC2018
To train your own refinement network, first you'll need a checkpoint for the MT prediction network, then you can use:
python train_ec.py [dataset]
For example, to train the refinement network on the Vaihingen dataset, use :
python train_ec.py Vaihingen