Torchreid =========== Torchreid is a library built on `PyTorch `_ for deep-learning person re-identification. It features: - multi-GPU training - support both image- and video-reid - end-to-end training and evaluation - incredibly easy preparation of reid datasets - multi-dataset training - cross-dataset evaluation - standard protocol used by most research papers - highly extensible (easy to add models, datasets, training methods, etc.) - implementations of state-of-the-art deep reid models - access to pretrained reid models - advanced training techniques - visualization tools (tensorboard, ranks, etc.) Documentation: https://kaiyangzhou.github.io/deep-person-reid/. Code: https://github.com/KaiyangZhou/deep-person-reid. Model zoo: https://kaiyangzhou.github.io/deep-person-reid/MODEL_ZOO. Installation --------------- We recommend using `conda `_ to manage the packages. 1. Clone ``deep-person-reid`` to your preferred directory. .. code-block:: bash $ git clone https://github.com/KaiyangZhou/deep-person-reid.git 2. Create a conda environment (the default name is ``torchreid``). .. code-block:: bash $ cd deep-person-reid/ $ conda env create -f environment.yml $ conda activate torchreid Do check whether ``which python`` and ``which pip`` point to the right path. 3. Install tensorboard. .. code-block:: bash $ pip install tb-nightly 4. Install PyTorch and torchvision (select the proper cuda version to suit your machine). .. code-block:: bash $ conda install pytorch torchvision cudatoolkit=9.0 -c pytorch 5. Install ``torchreid``. .. code-block:: bash $ python setup.py develop Get started: 30 seconds to Torchreid ------------------------------------- 1. Import ``torchreid`` .. code-block:: python import torchreid 2. Load data manager .. code-block:: python datamanager = torchreid.data.ImageDataManager( root='reid-data', sources='market1501', height=256, width=128, batch_size=32, transforms=['random_flip', 'random_crop'] ) 3 Build model, optimizer and lr_scheduler .. code-block:: python model = torchreid.models.build_model( name='resnet50', num_classes=datamanager.num_train_pids, loss='softmax', pretrained=True ) model = model.cuda() optimizer = torchreid.optim.build_optimizer( model, optim='adam', lr=0.0003 ) scheduler = torchreid.optim.build_lr_scheduler( optimizer, lr_scheduler='single_step', stepsize=20 ) 4. Build engine .. code-block:: python engine = torchreid.engine.ImageSoftmaxEngine( datamanager, model, optimizer=optimizer, scheduler=scheduler, label_smooth=True ) 5. Run training and test .. code-block:: python engine.run( save_dir='log/resnet50', max_epoch=60, eval_freq=10, print_freq=10, test_only=False ) A unified interface ----------------------- In "deep-person-reid/scripts/", we provide a unified interface including a default parser file ``default_parser.py`` and the main script ``main.py``. For example, to train an image reid model on Market1501 using softmax, you can do .. code-block:: bash python main.py \ --root path/to/reid-data \ --app image \ --loss softmax \ --label-smooth \ -s market1501 \ -a resnet50 \ --optim adam \ --lr 0.0003 \ --max-epoch 60 \ --stepsize 20 40 \ --batch-size 32 \ --transforms random_flip random_crop \ --save-dir log/resnet50-market1501-softmax \ --gpu-devices 0 Please refer to ``default_parser.py`` and ``main.py`` for more details. Datasets -------- Image-reid datasets ^^^^^^^^^^^^^^^^^^^^^ - `Market1501 `_ - `CUHK03 `_ - `DukeMTMC-reID `_ - `MSMT17 `_ - `VIPeR `_ - `GRID `_ - `CUHK01 `_ - `SenseReID `_ - `QMUL-iLIDS `_ - `PRID `_ Video-reid datasets ^^^^^^^^^^^^^^^^^^^^^^^ - `MARS `_ - `iLIDS-VID `_ - `PRID2011 `_ - `DukeMTMC-VideoReID `_ Models ------- ImageNet classification models ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - `ResNet `_ - `ResNeXt `_ - `SENet `_ - `DenseNet `_ - `Inception-ResNet-V2 `_ - `Inception-V4 `_ - `Xception `_ Lightweight models ^^^^^^^^^^^^^^^^^^^ - `NASNet `_ - `MobileNetV2 `_ - `ShuffleNet `_ - `ShuffleNetV2 `_ - `SqueezeNet `_ ReID-specific models ^^^^^^^^^^^^^^^^^^^^^^ - `MuDeep `_ - `ResNet-mid `_ - `HACNN `_ - `PCB `_ - `MLFN `_ - `OSNet `_ Losses ------ - `Softmax (cross entropy loss with label smoothing) `_ - `Triplet (hard example mining triplet loss) `_ Citation --------- If you find this code useful to your research, please cite the following publication. .. code-block:: bash @article{zhou2019osnet, title={Omni-Scale Feature Learning for Person Re-Identification}, author={Zhou, Kaiyang and Yang, Yongxin and Cavallaro, Andrea and Xiang, Tao}, journal={arXiv preprint arXiv:1905.00953}, year={2019} }