Unsupervised Domain Adaptive Re-Identification
Implementation of the paper Unsupervised Domain Adaptive Re-Identification: Theory and Practice.
The selftraining scheme proposed in the paper is simple yet effective.
Running the experiments
Step 1: Train on source dataset
Run source_train.py
via
python source_train.py \
--dataset <name_of_source_dataset>\
--resume <dir_of_source_trained_model>\
--data_dir <dir_of_source_data>\
--logs_dir <dir_to_save_source_trained_model>
To replicate the results in the paper, you can download pre-trained models on Market1501 from GoogleDrive and on DukeMTMC from GoogleDrive. Our models are trained with PyTorch 0.3.
Step 2: Run self-training
python selftraining.py \
--src_dataset <name_of_source_dataset>\
--tgt_dataset <name_of_target_dataset>\
--resume <dir_of_source_trained_model>\
--data_dir <dir_of_source_target_data>\
--logs_dir <dir_to_save_model_after_adaptation>
Other code
dw_example.ipynb
is the file for replicating Figure 6 in the paper.
Results
Step 1: After training on source dataset
Source Dataset | Rank-1 | mAP |
---|---|---|
DukeMTMC | 80.8 | 65.4 |
Market1501 | 91.6 | 78.2 |
CUHK03 | 48.79 | 46.95 |
MSMT17 | 69.82 | 42.48 |
Step 2: After adaptation
SRC --> TGT | Before Adaptation | After Adaptation | Settings | ||
---|---|---|---|---|---|
Rank-1 | mAP | Rank-1 | mAP | ||
CUHK --> Market | 43.26 | 19.95 | 77.14 | 56.60 | default |
CUHK --> DUKE | 19.52 | 8.74 | 62.48 | 42.26 | default |
CUHK --> MSMT | 8.64 | 2.49 | 29.57 | 11.28 | 4GPU |
Market --> DUKE | 27.3 | 11.9 | 68.4 | 49.0 | default |
Market --> CUHK | 4.07 | 4.53 | 20.32 | 20.85 | default |
Market --> MSMT | 8.37 | 2.54 | 30.54 | 12.04 | 4GPU, num_instances=8 |
DUKE --> Market | 46.8 | 19.1 | 75.8 | 53.7 | default |
DUKE --> CUHK | 4.43 | 4.56 | 9.89 | 10.32 | default |
DUKE --> MSMT | 12.38 | 3.82 | 39.22 | 15.99 | 4GPU, num_instances=8 |
MSMT --> Market | 49.47 | 23.71 | 80.94 | 59.97 | 4GPU |
MSMT --> DUKE | 46.54 | 27.01 | 74.96 | 57.05 | 4GPU |
MSMT --> CUHK | 10.71 | 11.59 | 16.21 | 16.56 | 4GPU |
FAQ
If you found difficulty in reproducing our reported results, please check the number of GPUs in your experiments. This may be caused by the un-sync BN layer implementation of PyTorch. Below we provide some training logs with the setting Duke --> Market, for helping you check your experiment settings.
With 1 GPU
Job ID | 24312 | 24313 | 24314 | 24315 | 24316 | 24317 |
---|---|---|---|---|---|---|
Rank 1 | 72.7 | 72.8 | 73.1 | 72.9 | 73.8 | 73.0 |
With 2 GPU
Job ID | 24306 | 24307 | 24308 | 24309 | 24310 | 24311 |
---|---|---|---|---|---|---|
Rank 1 | 75.1 | 75.7 | 77.5 | 76.1 | 77.5 | 77.3 |
Acknowledgement
Our code is based on open-reid.