2018-03-12 18:29:35 +08:00
# deep-person-reid
2018-03-12 18:56:27 +08:00
This repo contains [pytorch ](http://pytorch.org/ ) implementations of deep person re-identification approaches.
2018-03-12 18:29:35 +08:00
2018-03-12 18:56:27 +08:00
We will actively maintain this repo.
2018-03-12 18:29:35 +08:00
2018-03-12 22:20:51 +08:00
## Install
2018-03-12 22:21:14 +08:00
1. `cd` to the folder where you want to download this repo.
2. run `git clone https://github.com/KaiyangZhou/deep-person-reid` .
2018-03-12 22:20:51 +08:00
2018-03-12 18:56:27 +08:00
## Prepare data
2018-03-12 22:22:20 +08:00
Create a directory to store reid datasets under this repo via
```
2018-03-12 23:04:26 +08:00
cd deep-person-reid/
2018-03-12 22:22:20 +08:00
mkdir data/
```
2018-03-12 19:25:37 +08:00
Market1501 [7]:
1. download dataset to `data/` from http://www.liangzheng.org/Project/project_reid.html.
2. extract dataset and rename to `market1501` .
MARS [8]:
2018-03-12 19:28:11 +08:00
1. create a directory named `mars/` under `data/` .
2018-03-12 19:25:37 +08:00
2. download dataset to `data/mars/` from http://www.liangzheng.com.cn/Project/project_mars.html.
3. extract `bbox_train.zip` and `bbox_test.zip` .
2018-03-12 19:26:39 +08:00
4. download split information from https://github.com/liangzheng06/MARS-evaluation/tree/master/info and put `info/` in `data/mars` . (we want to follow the standard split in [8])
2018-03-12 22:25:31 +08:00
2018-03-12 22:33:52 +08:00
## Models
* `models/ResNet.py` : ResNet50 [1], ResNet50M [2].
* `models/DenseNet.py` : DenseNet121 [3].
2018-03-12 18:56:27 +08:00
## Train
2018-03-12 22:25:31 +08:00
Training codes are implemented in
* `train_img_model_xent.py` : train image model with cross entropy loss.
* `train_img_model_xent_htri.py` : train image model with combination of cross entropy loss and hard triplet loss.
* `train_vid_model_xent.py` : train video model with cross entropy loss.
* `train_vid_model_xent_htri.py` : train video model with combination of cross entropy loss and hard triplet loss.
2018-03-12 22:33:52 +08:00
For example, to train an image reid model using ResNet50 and cross entropy loss, run
```
2018-03-12 22:35:53 +08:00
python train_img_model_xent.py -d market1501 -a resnet50 --max-epoch 60 --train-batch 32 --test-batch 32 --stepsize 20 --eval-step 20 --save-dir log/resnet50 --gpu-devices 0
2018-03-12 22:33:52 +08:00
```
2018-03-12 18:29:35 +08:00
## Results
2018-03-12 19:04:39 +08:00
### Setup
2018-03-12 19:11:24 +08:00
* Image size: 256-by-128 < br />
2018-03-12 20:12:49 +08:00
* Batch: 32 < br />
2018-03-12 19:06:31 +08:00
* Optimizer: Adam [6] < br />
2018-03-12 19:04:39 +08:00
* Loss functions: < br />
2018-03-12 19:00:14 +08:00
xent: cross entropy + label smoothing regularizer [5] < br / >
htri: triplet loss with hard positive/negative mining [4] < br / >
2018-03-12 19:04:39 +08:00
2018-03-13 03:18:39 +08:00
Note: size of the same model may vary across different datasets due to different number of identities.
2018-03-12 20:12:49 +08:00
### Image person reid
#### Market1501
2018-03-12 18:29:35 +08:00
2018-03-13 02:38:12 +08:00
| Model | Size (M) | Loss | Rank-1/5/10 (%) | mAP (%) | Model weights | Published Rank | Published mAP |
2018-03-12 23:24:05 +08:00
| --- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
2018-03-13 02:38:12 +08:00
| DenseNet121 | 7.72 | xent | 86.5/93.6/95.7 | 67.8 | [download ](http://www.eecs.qmul.ac.uk/~kz303/deep-person-reid/model-zoo/image-models/densenet121_xent_market1501.pth.tar ) | | |
| DenseNet121 | 7.72 | xent+htri | 89.5/96.3/97.5 | 72.6 | [download ](http://www.eecs.qmul.ac.uk/~kz303/deep-person-reid/model-zoo/image-models/densenet121_xent_htri_market1501.pth.tar ) | | |
| ResNet50 | 25.05 | xent | 85.4/94.1/95.9 | 68.8 | [download ](http://www.eecs.qmul.ac.uk/~kz303/deep-person-reid/model-zoo/image-models/resnet50_xent_market1501.pth.tar ) | 87.3/-/- | 67.6 |
| ResNet50 | 25.05 | xent+htri | 87.5/95.3/97.3 | 72.3 | [download ](http://www.eecs.qmul.ac.uk/~kz303/deep-person-reid/model-zoo/image-models/resnet50_xent_htri_market1501.pth.tar ) | | |
| ResNet50M | 30.01 | xent | 89.0/95.5/97.3 | 75.0 | [download ](http://www.eecs.qmul.ac.uk/~kz303/deep-person-reid/model-zoo/image-models/resnet50m_xent_market1501.pth.tar ) | 89.9/-/- | 75.6 |
2018-03-13 03:01:01 +08:00
| ResNet50M | 30.01 | xent+htri | 90.4/96.7/98.0 | 76.6 | [download ](http://www.eecs.qmul.ac.uk/~kz303/deep-person-reid/model-zoo/image-models/resnet50m_xent_htri_market1501.pth.tar ) | | |
2018-03-12 18:29:35 +08:00
2018-03-12 20:12:49 +08:00
### Video person reid
#### MARS
2018-03-13 03:18:39 +08:00
| Model | Size (M) | Loss | Rank-1/5/10 (%) | mAP (%) | Model weights | Published Rank | Published mAP |
| --- | :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| ResNet50 | 24.79 | xent | | | [download]() | | |
| ResNet50 | 24.79 | xent+htri | | | [download]() | | |
| ResNet50M | | xent | | | [download]() | | |
| ResNet50M | | xent+htri | | | [download]() | | |
2018-03-13 03:01:01 +08:00
## Test
2018-03-12 23:20:06 +08:00
Say you have downloaded ResNet50 trained with `xent` on `market1501` . The path to this model is `'saved-models/resnet50-xent-market1501.pth.tar'` (create a directory to store model weights `mkdir saved-models/` ). Then, run the following command to test
2018-03-12 23:04:26 +08:00
```
2018-03-12 23:07:52 +08:00
python train_img_model_xent.py -d market1501 -a resnet50 --evaluate --resume saved-models/resnet50_xent_market1501.pth.tar
2018-03-12 23:04:26 +08:00
```
2018-03-12 23:04:04 +08:00
2018-03-12 18:56:27 +08:00
## References
2018-03-12 18:59:35 +08:00
[1] [He et al. Deep Residual Learning for Image Recognition. CVPR 2016. ](https://arxiv.org/abs/1512.03385 )< br />
[2] [Yu et al. The Devil is in the Middle: Exploiting Mid-level Representations for Cross-Domain Instance Matching. arXiv:1711.08106. ](https://arxiv.org/abs/1711.08106 ) < br />
[3] [Huang et al. Densely Connected Convolutional Networks. CVPR 2017. ](https://arxiv.org/abs/1608.06993 ) < br />
[4] [Hermans et al. In Defense of the Triplet Loss for Person Re-Identification. arXiv:1703.07737. ](https://arxiv.org/abs/1703.07737 ) < br />
2018-03-12 19:06:31 +08:00
[5] [Szegedy et al. Rethinking the Inception Architecture for Computer Vision. CVPR 2016. ](https://arxiv.org/abs/1512.00567 ) < br />
2018-03-12 19:25:37 +08:00
[6] [Kingma and Ba. Adam: A Method for Stochastic Optimization. ICLR 2015. ](https://arxiv.org/abs/1412.6980 ) < br />
[7] [Zheng et al. Scalable Person Re-identification: A Benchmark. ICCV 2015. ](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Zheng_Scalable_Person_Re-Identification_ICCV_2015_paper.pdf ) < br />
[8] [Zheng et al. MARS: A Video Benchmark for Large-Scale Person Re-identification. ECCV 2016. ](http://www.liangzheng.com.cn/Project/project_mars.html ) < br />