Files
dmlc--dgl/examples/pytorch/hilander/README.md
T
2026-07-13 13:35:51 +08:00

93 lines
4.0 KiB
Markdown

Learning Hierarchical Graph Neural Networks for Image Clustering
================================================================
This folder contains the official code for [Learning Hierarchical Graph Neural Networks for Image Clustering](https://arxiv.org/abs/2107.01319).
## Setup
We use python 3.7. The CUDA version needs to be 10.2. Besides DGL (>=0.8), we depend on several packages. To install dependencies using conda:
```bash
conda create -n Hilander # create env
conda activate Hilander # activate env
conda install pytorch==1.7.0 torchvision==0.8.0 cudatoolkit=10.2 -c pytorch # install pytorch 1.7 version
conda install -y cudatoolkit=10.2 faiss-gpu=1.6.5 -c pytorch # install faiss gpu version matching cuda 10.2
pip install dgl-cu102 dglgo -f https://data.dgl.ai/wheels/repo.html # install the latest dgl for cuda 10.2
pip install tqdm # install tqdm
git clone https://github.com/yjxiong/clustering-benchmark.git # install clustering-benchmark for evaluation
cd clustering-benchmark
python setup.py install
cd ../
```
## Data
The datasets used for training and test are hosted by several services.
[AWS S3](https://dgl-data.s3.us-west-2.amazonaws.com/dataset/hilander/data.tar.gz) | [Google Drive](https://drive.google.com/file/d/1KLa3uu9ndaCc7YjnSVRLHpcJVMSz868v/view?usp=sharing) | [BaiduPan](https://pan.baidu.com/s/11iRcp84esfkkvdcw3kmPAw) (pwd: wbmh)
After download, unpack the pickled files into `data/`.
## Training
We provide training scripts for different datasets.
For training on DeepGlint, one can run
```bash
bash scripts/train_deepglint.sh
```
Deepglint is a large-scale dataset, we randomly select 10% of the classes to construct a subset to train.
For training on full iNatualist dataset, one can run
```bash
bash scripts/train_inat.sh
```
For training on re-sampled iNatualist dataset, one can run
```bash
bash scripts/train_inat_resampled_1_in_6_per_class.sh
```
We sample a subset of the full iNat2018-Train to attain a drastically different train-time cluster size distribution as iNat2018-Test, which is named as inat_resampled_1_in_6_per_class.
## Inference
In the paper, we have two experiment settings: Clustering with Seen Test Data Distribution and Clustering with Unseen Test Data Distribution.
For Clustering with Seen Test Data Distribution, one can run
```bash
bash scripts/test_deepglint_imbd_sampled_as_deepglint.sh
bash scripts/test_inat.sh
```
**Clustering with Seen Test Data Distribution Performance**
| | IMDB-Test-SameDist | iNat2018-Test |
| ------------------ | ------------------------------: | ------------------------------: |
| Fp | 0.779 | 0.330 |
| Fb | 0.819 | 0.350 |
| NMI | 0.949 | 0.774 |
* The results might fluctuate a little due to the randomness introduced by gpu knn building using faiss-gpu.
For Clustering with Unseen Test Data Distribution, one can run
```bash
bash scripts/test_deepglint_hannah.sh
bash scripts/test_deepglint_imdb.sh
bash scripts/test_inat_train_on_resampled_1_in_6_per_class.sh
```
**Clustering with Unseen Test Data Distribution Performance**
| | Hannah | IMDB | iNat2018-Test |
| ------------------ | ------------------------------: | ------------------------------: | ------------------------------: |
| Fp | 0.741 | 0.717 | 0.294 |
| Fb | 0.706 | 0.810 | 0.352 |
| NMI | 0.810 | 0.953 | 0.764 |
* The results might fluctuate a little due to the randomness introduced by gpu knn building using faiss-gpu.