lsongx / DomainAdaptiveReID

MIT License
188 stars 50 forks source link

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.

Illustration of the selftraining scheme.

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 --> Market43.2619.9577.1456.60default
CUHK --> DUKE19.528.7462.4842.26default
CUHK --> MSMT8.642.4929.5711.284GPU
Market --> DUKE27.311.968.449.0default
Market --> CUHK4.074.5320.3220.85default
Market --> MSMT8.372.5430.5412.044GPU, num_instances=8
DUKE --> Market46.819.175.853.7default
DUKE --> CUHK4.434.569.8910.32default
DUKE --> MSMT12.383.8239.2215.994GPU, num_instances=8
MSMT --> Market49.4723.7180.9459.974GPU
MSMT --> DUKE46.5427.0174.9657.054GPU
MSMT --> CUHK10.7111.5916.2116.564GPU

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

OneDrive Download Link

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

OneDrive Download Link

Acknowledgement

Our code is based on open-reid.