/DG-Net-PP

Joint Disentangling and Adaptation for Cross-Domain Person Re-Identification. ECCV'20 (Oral)

Primary LanguagePythonOtherNOASSERTION

Joint Disentangling and Adaptation for Cross-Domain Person Re-Identification

[Project] [Paper] [Supp] [Slides]

Joint Disentangling and Adaptation for Cross-Domain Person Re-Identification, ECCV 2020 (Oral)
Yang Zou, Xiaodong Yang, Zhiding Yu, Vijayakumar Bhagavatula, Jan Kautz

Table of Contents

Features

We have supported:

  • Single-GPU training (fp32)
  • Random erasing
  • Visualize training curves

Prerequisites

  • Python 3.6
  • GPU memory >= 15G (fp32)
  • NumPy
  • PyTorch 1.1
  • torchvision 0.2.1

Check requirements_full.txt for more details about packages and versions.

Getting Started

Installation

For example:

conda install pytorch==1.1.0 torchvision==0.2.1 cudatoolkit=10.0 -c pytorch
pip install -r requirements.txt

Dataset Preparation

Download the dataset Market-1501 ([Google Drive] or [Baidu Disk] with password: rqvf)

Download the dataset DukeMTMC-reID ([Google Drive] or [Baidu Disk] with password: bhbh)

Preparation: put the images with the same identity in one folder. You may use

python prepare-market.py # for Market-1501
python prepare-duke.py # for DukeMTMC-reID

Note to modify the dataset path to your own path.

Testing

We provide the trained DG-Net++ models which can be used for DG-Net++ performance evaluation. You may download the models from [Google Drive] or [Baidu Disk] with password: r3d4, and then move these models to the outputs/

├── outputs/
│   ├── best-market2duke/
│   ├── best-duke2market/

Follow instructions in reid_eval/ to evaluate the trained DG-Net++ models on Market2Duke and Duke2Market.

DG-Net++ evaluation

Rank@1 Rank@5 Rank@10 mAP
Market2Duke 79.3% 87.9% 89.9% 64.4%
Duke2Market 82.6% 91.4% 93.9% 64.0%

Training

Download the initial models

Models to start DG-Net++ training are provided at [Google Drive] or [Baidu Disk] with password: b3xn. Download and move them to the folder models/.

├── models
│   ├── imagenet-pretrained/
│   ├── dgnet/
│   ├── teacher/

The zip file contains (1) the model pre-trained on ImageNet; 2) DG-Net trained in source domain as the warm-up model for DG-Net++; 3) the teacher model. If you want to train DG-Net, please check DG-Net. If you want to train the teacher model, please check person re-id baseline. And the trained DG-Net and teacher model should be placed in models/dgnet and models/teacher respectively.

Train DG-Net++

  • Market2Duke
  1. Setup the yaml file. Check out configs/market2duke.yaml. Change the data_root field to the path of your prepared folder-based dataset, e.g. ../Market-1501/pytorch.

  2. Start training

python train.py --config configs/market2duke.yaml

Intermediate image outputs and model binary files are saved in outputs/market2duke.

  1. Check the metrics and loss log
tensorboard --logdir logs/market2duke
  • Duke2Market
  1. Setup the yaml file. Check out configs/duke2market.yaml. Change the data_root field to the path of your prepared folder-based dataset, e.g. ../DukeMTMC-reID/pytorch.

  2. Start training

python train.py --config configs/duke2market.yaml

Intermediate image outputs and model binary files are saved in outputs/duke2market.

  1. Check the metrics and loss log
tensorboard --logdir logs/duke2market

Tips

We try our best to make our code deterministic by setting the random seeds. However, the randomness still exists. We run our code 10 times for each benchmark. For Duke2Market, the mAP ranges in [61.7%, 64.0%] with the average 63.2% and standard deviation 0.83%. For Market2Duke, the mAP ranges in [62%, 64.2%] with the average 62.8% and standard deviation 0.73%. You are welcome to let us know if you could fully fix the randomness issue.

Note the format of camera id and number of cameras. For some datasets (e.g., MSMT17), there are more than 10 cameras. You need to modify the preparation and evaluation code to read the double-digit camera id. For some vehicle re-id datasets (e.g., VeRi) having different naming rules, you also need to modify the preparation and evaluation code.

Citation

Please cite the following papers if this repo helps your research:

@inproceedings{zou2020joint,
  title={Joint disentangling and adaptation for cross-domain person re-identification},
  author={Zou, Yang and Yang, Xiaodong and Yu, Zhiding and Vijayakumar, Bhagavatula and Kautz, Jan},
  booktitle={Proceedings of the European Conference on Computer Vision (ECCV)},
  year={2020}
}

@inproceedings{zheng2019joint,
  title={Joint discriminative and generative learning for person re-identification},
  author={Zheng, Zhedong and Yang, Xiaodong and Yu, Zhiding and Zheng, Liang and Yang, Yi and Kautz, Jan},
  booktitle={IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
  year={2019}
}

Related Work

We would like to thank to the great project DG-Net, which DG-Net++ is implemented upon.

License

Please check the LICENSE file. DG-Net++ may be used non-commercially, meaning for research or evaluation purposes only. For business inquiries, please contact researchinquiries@nvidia.com.