Bag of Tricks and A Strong Baseline for Deep Person Re-identification
 
 
Go to file
shaoniangu 8cbe846f9d Update according to issue #12 2019-03-26 16:22:05 +08:00
config Update according to issue #12 2019-03-26 16:22:05 +08:00
configs Update according to issue #12 2019-03-26 16:22:05 +08:00
data Add config option for Dataset Root Directory 2019-03-22 09:10:11 -07:00
engine Update according to issue #12 2019-03-26 16:22:05 +08:00
imgs update readme 2019-03-17 21:55:33 +08:00
layers Open source codes 2019-03-17 20:12:28 +08:00
modeling Update according to issue #12 2019-03-26 16:22:05 +08:00
solver Open source codes 2019-03-17 20:12:28 +08:00
tests open source codes 2019-03-17 15:16:48 +08:00
tools Update according to issue #12 2019-03-26 16:22:05 +08:00
utils Open source codes 2019-03-17 20:12:28 +08:00
.gitignore update gitignore 2019-03-20 12:56:27 +08:00
Experiment-all_tricks-tri_center-duke.sh Modify after merging #9 2019-03-25 22:47:35 +08:00
Experiment-all_tricks-tri_center-market.sh Modify after merging #9 2019-03-25 22:47:35 +08:00
Experiment-all_tricks-without_center-duke.sh Modify after merging #9 2019-03-25 22:47:35 +08:00
Experiment-all_tricks-without_center-market.sh Modify after merging #9 2019-03-25 22:47:35 +08:00
Experiment-pretrain_choice-all_tricks-tri_center-market.sh Update according to issue #12 2019-03-26 16:22:05 +08:00
Experiment-seresnext50-all_tricks-tri_center-duke.sh Modify after merging #9 2019-03-25 22:47:35 +08:00
Experiment-seresnext50-all_tricks-tri_center-market.sh Modify after merging #9 2019-03-25 22:47:35 +08:00
LICENCE.md Open source codes 2019-03-17 20:13:37 +08:00
README.md Modify readme 2019-03-25 23:06:48 +08:00
Test-all_tricks-tri_center-feat_after_bn-cos-duke.sh Update according to issue #12 2019-03-26 16:22:05 +08:00
Test-all_tricks-tri_center-feat_after_bn-cos-market.sh Update according to issue #12 2019-03-26 16:22:05 +08:00
Test-all_tricks-without_center-feat_after_bn-cos-duke.sh Update according to issue #12 2019-03-26 16:22:05 +08:00
Test-all_tricks-without_center-feat_after_bn-cos-market.sh Update according to issue #12 2019-03-26 16:22:05 +08:00
Test-reranking-all_tricks-tri_center-feat_after_bn-cos-duke.sh Update according to issue #12 2019-03-26 16:22:05 +08:00
Test-reranking-all_tricks-tri_center-feat_after_bn-cos-market.sh Update according to issue #12 2019-03-26 16:22:05 +08:00

README.md

Bags of Tricks and A Strong ReID Baseline

Paper: "Bags of Tricks and A Strong Baseline for Deep Person Re-identification"[pdf]

The codes are expanded on a ReID-baseline , which is open sourced by our co-first author Xingyu Liao.

Authors

We support

  • easy dataset preparation
  • end-to-end training and evaluation
  • high modular management

Bag of tricks

  • Warm up learning rate
  • Random erasing augmentation
  • Label smoothing
  • Last stride
  • BNNeck
  • Center loss

TODO list

In the future, we will

  • [] support more datasets
  • [] support more models
  • [] speed up inference
  • [] support multi-gpus training
  • [] explore more tricks

Pipeline

Results (rank1/mAP)

Model Market1501 DukeMTMC-reID
Standard baseline 87.7 (74.0) 79.7 (63.8)
+Warmup 88.7 (75.2) 80.6(65.1)
+Random erasing augmentation 91.3 (79.3) 81.5 (68.3)
+Label smoothing 91.4 (80.3) 82.4 (69.3)
+Last stride=1 92.0 (81.7) 82.6 (70.6)
+BNNeck 94.1 (85.7) 86.2 (75.9)
+Center loss 94.5 (85.9) 86.4 (76.4)
+Reranking 95.4 (94.2) 90.3 (89.1)

model(Market1501)

model(DukeMTMC-reID)

Get Started

The designed architecture follows this guide PyTorch-Project-Template, you can check each folder's purpose by yourself.

  1. cd to folder where you want to download this repo

  2. Run git clone https://github.com/michuanhaohao/reid-strong-baseline.git

  3. Install dependencies:

  4. Prepare dataset

    Create a directory to store reid datasets under this repo or outside this repo. Remember to set your path to the root of the dataset in config/defaults.py for all training and testing or set in every single config file in configs/ or set in every single command.

    You can create a directory to store reid datasets under this repo via

    cd reid-strong-baseline
    mkdir data
    

    1Market1501

    data
        market1501 # this folder contains 6 files.
            bounding_box_test/
            bounding_box_train/
            ......
    

    2DukeMTMC-reID

    data
        dukemtmc-reid
        	DukeMTMC-reID # this folder contains 8 files.
            	bounding_box_test/
            	bounding_box_train/
            	......
    
  5. Prepare pretrained model if you don't have

    1resnet

    from torchvision import models
    models.resnet50(pretrained=True)
    

    2senet

    import torch.utils.model_zoo as model_zoo
    model_zoo.load_url('the pth you want to download (specific urls are listed in  ./modeling/backbones/senet.py)')
    

    Then it will automatically download model in ~/.torch/models/, you should set this path in config/defaults.py for all training or set in every single training config file in configs/ or set in every single command.

  6. If you want to know the detailed configurations and their meaning, please refer to config/defaults.py. If you want to set your own parameters, you can follow our method: create a new yml file, then set your own parameters. Add --config_file='configs/your yml file' int the commands described below, then our code will merge your configuration. automatically.

Train

You can run these commands in .sh files for training different datasets of differernt loss. You can also directly run code sh *.sh to run our demo.

  1. Market1501, cross entropy loss + triplet loss
python3 tools/train.py --config_file='configs/softmax_triplet.yml' MODEL.DEVICE_ID "('your device id')" DATASETS.NAMES "('market1501')" OUTPUT_DIR "('your path to save checkpoints and logs')"
  1. DukeMTMC-reID, cross entropy loss + triplet loss + center loss
python3 tools/train.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('your device id')" DATASETS.NAMES "('dukemtmc')" OUTPUT_DIR "('your path to save checkpoints and logs')"

Test

You can test your model's performance directly by running these commands in .sh files. You can also change the configuration to determine which feature of BNNeck is used and whether the feature is normalized (equivalent to use Cosine distance or Euclidean distance) for testing.

Please replace the data path of the model.

  1. Test with Euclidean distance using feature before BN without re-ranking,.
python3 tools/test.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('your device id')" DATASETS.NAMES "('market1501')" TEST.NECK_FEAT "('before')" TEST.FEAT_NORM "('no')" TEST.WEIGHT "('your path to trained checkpoints')"
  1. Test with Cosine distance using feature after BN without re-ranking,.
python3 tools/test.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('your device id')" DATASETS.NAMES "('market1501')" TEST.NECK_FEAT "('after')" TEST.FEAT_NORM "('yes')" TEST.WEIGHT "('your path to trained checkpoints')"
  1. Test with Cosine distance using feature after BN with re-ranking
python3 tools/test.py --config_file='configs/softmax_triplet_with_center.yml' MODEL.DEVICE_ID "('your device id')" DATASETS.NAMES "('dukemtmc')" TEST.NECK_FEAT "('after')" TEST.FEAT_NORM "('yes')" TEST.RE_RANKING "('yes')" TEST.WEIGHT "('your path to trained checkpoints')"