The official repository for Cluster Contrast for Unsupervised Person Re-Identification. We achieve state-of-the-art performances on unsupervised learning tasks for object re-ID, including person re-ID and vehicle re-ID.
git clone https://github.com/alibaba/cluster-contrast-reid.git
cd ClusterContrast
python setup.py develop
cd examples && mkdir data
Download the person datasets Market-1501,MSMT17,PersonX,DukeMTMC-reID and the vehicle datasets VeRi-776 from aliyun. Then unzip them under the directory like
ClusterContrast/examples/data
├── market1501
│ └── Market-1501-v15.09.15
├── msmt17
│ └── MSMT17_V1
├── personx
│ └── PersonX
├── dukemtmcreid
│ └── DukeMTMC-reID
└── veri
└── VeRi
When training with the backbone of IBN-ResNet, you need to download the ImageNet-pretrained model from this link and save it under the path of examples/pretrained/
.
ImageNet-pretrained models for ResNet-50 will be automatically downloaded in the python script.
We utilize 4 GTX-2080TI GPUs for training. For more parameter configuration, please check run_code.sh
.
examples:
Market-1501:
CUDA_VISIBLE_DEVICES=0,1,2,3 python examples/cluster_contrast_train_usl.py -b 256 -a resnet50 -d market1501 --iters 200 --momentum 0.1 --eps 0.4 --num-instances 16
MSMT17:
CUDA_VISIBLE_DEVICES=0,1,2,3 python examples/cluster_contrast_train_usl.py -b 256 -a resnet50 -d msmt17 --iters 400 --momentum 0.1 --eps 0.7 --num-instances 16
DukeMTMC-reID:
CUDA_VISIBLE_DEVICES=0,1,2,3 python examples/cluster_contrast_train_usl.py -b 256 -a resnet50 -d dukemtmcreid --iters 200 --momentum 0.1 --eps 0.7 --num-instances 16
We utilize 1 GTX-2080TI GPU for testing. Note that
-
use
--width 128 --height 256
(default) for person datasets, and--height 224 --width 224
for vehicle datasets; -
use
-a resnet50
(default) for the backbone of ResNet-50, and-a resnet_ibn50a
for the backbone of IBN-ResNet.
To evaluate the model, run:
CUDA_VISIBLE_DEVICES=0 \
python examples/test.py \
-d $DATASET --resume $PATH
Some examples:
### Market-1501 ###
CUDA_VISIBLE_DEVICES=0 \
python examples/test.py \
-d market1501 --resume logs/spcl_usl/market_resnet50/model_best.pth.tar
You can download the above models in the paper from aliyun
For fair comparision, we use the simple global average pooling in paper. Generalized Mean Pooling (GEM) pooling could further improve performances, making Cluster Contraster performans better than many supervised methods:
CUDA_VISIBLE_DEVICES=0,1,2,3 python examples/cluster_contrast_train_usl.py -b 256 -a resnet_ibn50a -d market1501 --iters 400 --momentum 0.1 --eps 0.4 --num-instances 16 --pooling-type gem --use-hard
CUDA_VISIBLE_DEVICES=0,1,2,3 python examples/cluster_contrast_train_usl.py -b 256 -a resnet_ibn50a -d dukemtmcreid --iters 400 --momentum 0.1 --eps 0.6 --num-instances 16 --pooling-type gem --use-hard
Market1501
Method | mAP(%) | R@1(%) | R@5(%) | R@10(%) |
---|---|---|---|---|
Cluster Contrast | 84.1 | 93.2 | 97.6 | 98.1 |
Cluster Contrast + GEM | 87.0 | 94.6 | 98.2 | 98.8 |
DukeMTMC
Method | mAP(%) | R@1(%) | R@5(%) | R@10(%) |
---|---|---|---|---|
Cluster Contrast | 74.2 | 85.8 | 92.1 | 94.2 |
Cluster Contrast + GEM | 76.0 | 86.8 | 93.1 | 94.7 |
If you find this code useful for your research, please cite our paper
@article{dai2021cluster,
title={Cluster Contrast for Unsupervised Person Re-Identification},
author={Dai, Zuozhuo and Wang, Guangyuan and Zhu, Siyu and Yuan, Weihao and Tan, Ping},
journal={arXiv preprint arXiv:2103.11568},
year={2021}
}
Thanks to Yixiao Ge for opening source of his excellent works SpCL.