A Python tool to perform deep learning experiments on various hyperspectral datasets.
This toolbox was used for our review paper in Geoscience and Remote Sensing Magazine :
N. Audebert, B. Le Saux and S. Lefevre, "Deep Learning for Classification of Hyperspectral Data: A Comparative Review," in IEEE Geoscience and Remote Sensing Magazine, vol. 7, no. 2, pp. 159-173, June 2019.
Bibtex format :
@article{8738045, author={N. {Audebert} and B. {Le Saux} and S. {Lefèvre}}, journal={IEEE Geoscience and Remote Sensing Magazine}, title={Deep Learning for Classification of Hyperspectral Data: A Comparative Review}, year={2019}, volume={7}, number={2}, pages={159-173}, doi={10.1109/MGRS.2019.2912563}, ISSN={2373-7468}, month={June},}
This tool is compatible with Python 2.7 and Python 3.5+.
It is based on the PyTorch deep learning and GPU computing framework and use the Visdom visualization server.
The easiest way to install this code is to create a Python virtual environment and to install dependencies using:
pip install -r requirements.txt
(on Windows you should use pip install -r requirements.txt -f https://download.pytorch.org/whl/torch_stable.html
)
Alternatively, it is possible to run the Docker image.
Grab the image using:
docker pull registry.gitlab.inria.fr/naudeber/deephyperx:preview
And then run the image using:
docker run -p 9999:8097 -ti --rm -v `pwd`:/workspace/DeepHyperX/ registry.gitlab.inria.fr/naudeber/deephyperx:preview
This command:
registry.gitlab.inria.fr/naudeber/deephyperx:preview
-ti
/workspace/DeepHyperX/
path of the container--rm
when the user has finished.All data and products are stored in the current folder.
Users can build the Docker image locally using the Dockerfile
using the command docker build .
.
Several public hyperspectral datasets are available on the UPV/EHU wiki. Users can download those beforehand or let the tool download them. The default dataset folder is ./Datasets/
, although this can be modified at runtime using the --folder
arg.
At this time, the tool automatically downloads the following public datasets:
The [Data Fusion Contest 2018 hyperspectral dataset]() is also preconfigured, although users need to download it on the DASE website and store it in the dataset folder under DFC2018_HSI
.
An example dataset folder has the following structure:
Datasets
├── Botswana
│ ├── Botswana_gt.mat
│ └── Botswana.mat
├── DFC2018_HSI
│ ├── 2018_IEEE_GRSS_DFC_GT_TR.tif
│ ├── 2018_IEEE_GRSS_DFC_HSI_TR
│ ├── 2018_IEEE_GRSS_DFC_HSI_TR.aux.xml
│ ├── 2018_IEEE_GRSS_DFC_HSI_TR.HDR
├── IndianPines
│ ├── Indian_pines_corrected.mat
│ ├── Indian_pines_gt.mat
├── KSC
│ ├── KSC_gt.mat
│ └── KSC.mat
├── PaviaC
│ ├── Pavia_gt.mat
│ └── Pavia.mat
└── PaviaU
├── PaviaU_gt.mat
└── PaviaU.mat
Adding a custom dataset can be done by modifying the custom_datasets.py
file. Developers should add a new entry to the CUSTOM_DATASETS_CONFIG
variable and define a specific data loader for their use case.
Currently, this tool implements several SVM variants from the scikit-learn library and many state-of-the-art deep networks implemented in PyTorch.
Adding a custom deep network can be done by modifying the models.py
file. This implies creating a new class for the custom deep network and altering the get_model
function.
Start a Visdom server:
python -m visdom.server
and go to http://localhost:8097
to see the visualizations (or http://localhost:9999
if you use Docker).
Then, run the script main.py
.
The most useful arguments are:
--model
to specify the model (e.g. 'svm', 'nn', 'hamida', 'lee', 'chen', 'li'),--dataset
to specify which dataset to use (e.g. 'PaviaC', 'PaviaU', 'IndianPines', 'KSC', 'Botswana'),--cuda
switch to run the neural nets on GPU. The tool fallbacks on CPU if this switch is not specified.There are more parameters that can be used to control more finely the behaviour of the tool. See python main.py -h
for more information.
Examples:
python main.py --model SVM --dataset IndianPines --training_sample 0.3
This runs a grid search on SVM on the Indian Pines dataset, using 30% of the samples for training and the rest for testing. Results are displayed in the visdom panel.python main.py --model nn --dataset PaviaU --training_sample 0.1 --cuda
This runs on GPU a basic 4-layers fully connected neural network on the Pavia University dataset, using 10% of the samples for training.python main.py --model hamida --dataset PaviaU --training_sample 0.5 --patch_size 7 --epoch 50 --cuda
This runs on GPU the 3D CNN from Hamida et al. on the Pavia University dataset with a patch size of 7, using 50% of the samples for training and optimizing for 50 epochs.