Sen Jia, Shuguo Jiang, Shuyu Zhang, Meng Xu, Xiuping Jia
The first two authors contribute equally to this work
Abstract: With the development of hyperspectral sensors, accessible hyperspectral images (HSIs) are increasing, and pixel-oriented classification has attracted much attention. Recently, graph convolutional networks (GCN) have been proposed to process graph-structured data in non-euclidean domains, and have been employed in HSI classification. But most methods based on GCN are hard to sufficiently exploit information of ground objects due to feature aggregation. To solve this issue, in this paper, we proposed a graph-in-graph (GiG) model and a related GiG convolutional network (GiGCN) for HSI classification from superpixel viewpoint. The graph-in-graph representation covers information inside and outside superpixels, respectively corresponding to the local and global characteristics of ground objects. Concretely, after segmenting HSI into disjoint superpixels, each one is converted to an internal graph. Meanwhile, an external graph is constructed according to the spatial adjacent relationships among superpixels. Significantly, each node in the external graph embeds a corresponding internal graph, forming the so-called graph-in-graph structure. Then, GiGCN composed of internal and external graph convolution is designed to extract hierarchical features and integrate them into multiple scales, improving the discriminability of GiGCN. Ensemble learning is incorporated to further boost the robustness of GiGCN. It is worth noting that we are the first to propose graph-in-graph framework from superpixel point and the GiGCN scheme for HSI classification. Experiment results on four benchmark data sets demonstrate that our proposed method is effective and feasible for HSI classification with limited labeled samples. For study replication, the code developed for this study is available at https://github.com/ShuGuoJ/GiGCN.git.
This is our ensemble flowchart. With the ensmeble learning, GiGCN is more robust in various scenes.
In comparative experiments, GiGCN is compared with other eight state-of-the-art methods for hyperspectral image classification. Ten samples for each class is chosen for training models and the others are used to test. To alleviate biases, the above operation is run ten times.
<style> th.head {border-style:none;} </style>PaviaU | Salinas | GF5 | YC | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
OA (%) | AA (%) | kappa | OA (%) | AA (%) | kappa | OA (%) | AA (%) | kappa | OA (%) | AA (%) | kappa | |
Two-CNN | 78.20 | 76.02 | 0.71 | 76.37 | 85.25 | 0.74 | 87.08 | 82.37 | 0.85 | 85.20 | 81.18 | 0.82 |
3DVSCNN | 76.43 | 75.47 | 0.69 | 89.17 | 94.07 | 0.88 | 84.99 | 79.02 | 0.83 | 77.33 | 75.14 | 0.73 |
HSGAN | 72.17 | 74.66 | 0.64 | 83.44 | 89.67 | 0.82 | 88.84 | 81.50 | 0.87 | 92.74 | 88.46 | 0.91 |
SSLstm | 69.59 | 72.77 | 0.62 | 81.20 | 87.04 | 0.79 | 70.29 | 58.55 | 0.66 | 89.01 | 78.20 | 0.87 |
MDGCN | 75.44 | 79.75 | 0.69 | 93.49 | 95.60 | 0.93 | 85.23 | 75.60 | 0.83 | 92.28 | 88.09 | 0.91 |
S-DMM | 83.77 | 90.98 | 0.79 | 88.53 | 94.53 | 0.87 | 88.72 | 84.20 | 0.87 | 81.17 | 82.85 | 0.78 |
3DCAE | 59.14 | 71.58 | 0.51 | 72.64 | 75.58 | 0.70 | 70.58 | 60.98 | 0.66 | 70.65 | 81.47 | 0.68 |
MDL4OW | 76.55 | 81.42 | 0.70 | 82.44 | 90.57 | 0.81 | 87.46 | 83.41 | 0.86 | 93.65 | 94.98 | 0.92 |
GiGCN | 93.51 | 94.07 | 0.92 | 97.34 | 98.34 | 0.97 | 92.50 | 86.52 | 0.91 | 97.51 | 95.88 | 0.97 |
Our GiGCN siginificantly outperforms other methods especially when labeled samples are a few.
Note: access code for Baidu Disk
is mst1
.
-
Python 3 (Recommend to use Anaconda)
-
NVIDIA GPU + CUDA
-
Python packages:
cd graph-in-graph pip install -r requirements.txt
-
Download the data including raw
.mat
files and corresponding.jpg
files used in superpixel segmentation from here (code: 4zyf) for a quick start and place them inGiGCN/
. -
Before trainig, every data set is split by runing
trainTestSplit.py
, shown as follow:python trainTestSplit.py --name PaviaU (data set name)
To train a model, run
# Training on PaviaU data set
python train.py --name PaviaU --block 100 --gpu 0
Here, --block
denots the number of superpixel, which lies in [50, 100, 150, 200]
in our ensemble setup.
The model with best accuracy will be saved.
Note: The scikit-image
package in our experimental configuaration is of version 0.15.0 whose parameter start_label
defaults to 0. However, in the lastest version, it defaults to 1. So when encountering the problem that indexes are out of the bounder at Line 54
in Trainer.py
, you should set start_label
as 0 explicitly.
To test a trained model, run
# Testing on PaviaU data set
python predict.py --name PaviaU --block 100 --gpu 0
The code will load the best model in the last phase automatically.
If this repo helps you, please consider citing our works:
@ARTICLE{9801664,
author={Jia, Sen and Jiang, Shuguo and Zhang, Shuyu and Xu, Meng and Jia, Xiuping},
journal={IEEE Transactions on Neural Networks and Learning Systems},
title={Graph-in-Graph Convolutional Network for Hyperspectral Image Classification},
year={2022},
volume={},
number={},
pages={1-15},
}