113 lines
4.5 KiB
Markdown
113 lines
4.5 KiB
Markdown
# Bags of Tricks and A Strong ReID Baseline
|
||
Paper:
|
||
The codes are expanded on a [ReID-baseline](https://github.com/L1aoXingyu/reid_baseline) , which is open sourced by our co-author Xingyu Liao.
|
||
|
||
We support
|
||
- [x] easy dataset preparation
|
||
- [x] end-to-end training and evaluation
|
||
- [x] high modular management
|
||
|
||
Bag of tricks
|
||
- Warm up learning rate
|
||
- Random erasing augmentation
|
||
- Label smoothing
|
||
- Last stride
|
||
- BNNeck
|
||
- Center loss
|
||
|
||
## Get Started
|
||
The designed architecture follows this guide [PyTorch-Project-Template](https://github.com/L1aoXingyu/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... `
|
||
|
||
3. Install dependencies:
|
||
- [pytorch 1.0](https://pytorch.org/)
|
||
- torchvision
|
||
- [ignite](https://github.com/pytorch/ignite)
|
||
- [yacs](https://github.com/rbgirshick/yacs)
|
||
|
||
4. Prepare dataset
|
||
|
||
Create a directory to store reid datasets under this repo via
|
||
```bash
|
||
cd reid_baseline
|
||
mkdir data
|
||
```
|
||
(1)Market1501
|
||
|
||
* Download dataset to `data/` from http://www.liangzheng.org/Project/project_reid.html
|
||
* Extract dataset and rename to `market1501`. The data structure would like:
|
||
|
||
```bash
|
||
data
|
||
market1501 # this folder contains 6 files.
|
||
bounding_box_test/
|
||
bounding_box_train/
|
||
......
|
||
```
|
||
(2)DukeMTMC-reID
|
||
|
||
* Download dataset to `data/` from https://github.com/layumi/DukeMTMC-reID_evaluation#download-dataset
|
||
* Extract dataset and rename to `dukemtmc-reid`. The data structure would like:
|
||
|
||
```bash
|
||
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
|
||
```python
|
||
from torchvision import models
|
||
models.resnet50(pretrained=True)
|
||
```
|
||
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/`.
|
||
|
||
6. If you want to know the detained 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
|
||
|
||
```bash
|
||
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')"
|
||
```
|
||
|
||
2. DukeMTMC-reID, cross entropy loss + triplet loss + center loss
|
||
|
||
|
||
```bash
|
||
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 and whether the feature is normalized (equivalent to use Cosine distance or Euclidean distance) for testing.
|
||
|
||
1. Test with Euclidean distance using feature before BN without re-ranking,.
|
||
|
||
```bash
|
||
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')"
|
||
```
|
||
2. Test with Cosine distance using feature after BN without re-ranking,.
|
||
|
||
```bash
|
||
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')"
|
||
```
|
||
3. Test with Cosine distance using feature after BN with re-ranking
|
||
|
||
```bash
|
||
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')"
|
||
```
|
||
|
||
## Results
|
||
|
||
**Network architecture**
|
||
|
||
|