Torchreid est une bibliothèque pour la réidentification de la personne d'apprentissage en profondeur, écrite en pytorch et développée pour notre projet ICCV'19, l'apprentissage des fonctionnalités omni-échelle pour la réidentification des personnes.
Il s'agit de fonctionnalités:
Code: https://github.com/kaiyangzhou/deep-serson-reid.
Documentation: https://kaiyangzhou.github.io/deep-serson-reid/.
Instructions pratiques: https://kaiyangzhou.github.io/deep-serson-reid/user_guide.
Modèle Zoo: https://kaiyangzhou.github.io/deep-serson-reid/model_zoo.
Rapport technologique: https://arxiv.org/abs/1910.10093.
Vous pouvez trouver des projets de recherche construits sur Torchreid ici.
osnet_ain_x0_75 , osnet_ain_x0_5 et osnet_ain_x0_25 . La configuration de pré-formation suit les PYCL.tools/parse_test_res.py .v1.4.0 : Nous avons ajouté l'ensemble de données de recherche de personne, Cuhk-Sysu. Veuillez consulter la documentation sur la façon de télécharger l'ensemble de données (il contient des images de personne recadrées).v1.3.6 Ajout de l'université-1652, un nouvel ensemble de données pour la géo-localisation multi-visualités (crédit à Zhedong Zheng).v1.3.5 : Maintenant, le code cython fonctionne sur Windows (crédit à Lablabla).v1.3.3 : Correction du bug dans visrank (causé par le non-déballage dsetid ).v1.3.2 : Ajout _junk_pids à grid et prid . Cela évite d'utiliser des images de galerie mal étiquetées pour la formation lors de la définition combineall=True .v1.3.0 : (1) Ajout dsetid à la source de données à 3-Tupile existante, résultant en (impath, pid, camid, dsetid) . Cette variable désigne l'ID de jeu de données et est utile lors de la combinaison de plusieurs ensembles de données pour la formation (en tant qu'indicateur de jeu de données). Par exemple, lors de la combinaison market1501 et cuhk03 , le premier sera attribué dsetid=0 tandis que le second sera attribué dsetid=1 . (2) Ajout de RandomDatasetSampler . Analogue à RandomDomainSampler , RandomDatasetSampler échantillonne un certain nombre d'images ( batch_size // num_datasets ) de chacun des ensembles de données spécifiés (la quantité est déterminée par num_datasets ).v1.2.6 : Ajout de RandomDomainSampler (il échantillonne les caméras num_cams chacune avec des images batch_size // num_cams pour former un mini-lots).v1.2.5 : (1) La sortie de Dataloader de __getitem__ est passée de list en passant par dict . Auparavant, un élément, par exemple, le tenseur d'image, a été récupéré avec imgs=data[0] . Maintenant, il doit être obtenu par imgs=data['img'] . Voir cet engagement pour des changements détaillés. (2) Ajout k_tfm en option de chargeur de données d'image, ce qui permet à l'augmentation des données d'être appliquée k_tfm à des heures indépendamment à une image. Si k_tfm > 1 , imgs=data['img'] renvoie une liste avec les tenseurs d'image k_tfm .projects/attribute_recognition/ .v1.2.1 : Ajout d'une API simple pour l'extraction de fonctionnalités ( torchreid/utils/feature_extractor.py ). Voir la documentation de l'instruction.projects/DML .v1.2.0 . La classe moteur a été rendue plus agnostique du modèle pour améliorer l'extensibilité. Voir le moteur et les images ImagesoftMaxEngine pour plus de détails. Crédit à dassl.pytorch.ImageDataManager peut charger des données de formation à partir de ensembles de données cibles en définissant load_train_targets=True , et le trains est accessible avec train_loader_t = datamanager.train_loader_t . Cette fonctionnalité est utile pour la recherche sur l'adaptation du domaine. Assurez-vous que Conda est installé.
# cd to your preferred directory and clone this repo
git clone https://github.com/KaiyangZhou/deep-person-reid.git
# create environment
cd deep-person-reid/
conda create --name torchreid python=3.7
conda activate torchreid
# install dependencies
# make sure `which python` and `which pip` point to the correct path
pip install -r requirements.txt
# install torch and torchvision (select the proper cuda version to suit your machine)
conda install pytorch torchvision cudatoolkit=9.0 -c pytorch
# install torchreid (don't need to re-build it if you modify the source code)
python setup.py developUne autre façon d'installer est d'exécuter tout dans le conteneur Docker:
make build-imagemake run torchreid import torchreid datamanager = torchreid . data . ImageDataManager (
root = "reid-data" ,
sources = "market1501" ,
targets = "market1501" ,
height = 256 ,
width = 128 ,
batch_size_train = 32 ,
batch_size_test = 100 ,
transforms = [ "random_flip" , "random_crop" ]
)3 Modèle de construction, Optimiseur et LR_Scheduler
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
) engine = torchreid . engine . ImageSoftmaxEngine (
datamanager ,
model ,
optimizer = optimizer ,
scheduler = scheduler ,
label_smooth = True
) engine . run (
save_dir = "log/resnet50" ,
max_epoch = 60 ,
eval_freq = 10 ,
print_freq = 10 ,
test_only = False
)Dans "Deep-Person-Reid / Scripts /", nous fournissons une interface unifiée pour entraîner et tester un modèle. Voir "scripts / main.py" et "scripts / default_config.py" pour plus de détails. Le dossier "Configs /" contient des configurations prédéfinies que vous pouvez utiliser comme point de départ.
Ci-dessous, nous fournissons un exemple pour former et tester OSNET (Zhou et al. ICCV'19). Supposons que PATH_TO_DATA soit le répertoire contenant des ensembles de données REID. La variable environnementale CUDA_VISIBLE_DEVICES est omise, ce que vous devez spécifier si vous avez un pool de GPU et que vous souhaitez en utiliser un ensemble spécifique.
Pour former OSNET sur Market1501, faites
python scripts/main.py
--config-file configs/im_osnet_x1_0_softmax_256x128_amsgrad_cosine.yaml
--transforms random_flip random_erase
--root $PATH_TO_DATALe fichier config définit Market1501 comme ensemble de données par défaut. Si vous voulez utiliser dukemtmc-reid, faites
python scripts/main.py
--config-file configs/im_osnet_x1_0_softmax_256x128_amsgrad_cosine.yaml
-s dukemtmcreid
-t dukemtmcreid
--transforms random_flip random_erase
--root $PATH_TO_DATA
data.save_dir log/osnet_x1_0_dukemtmcreid_softmax_cosinelr Le code sera automatiquement (télécharger et) charger les poids pré-entraînés ImageNet. Une fois la formation terminée, le modèle sera enregistré comme "Log / OSNET_X1_0_MARKET1501_SOFTMAX_COSINELR / MODÈLE.PTH.TAR-250". Dans le même dossier, vous pouvez trouver le fichier Tensorboard. Pour visualiser les courbes d'apprentissage à l'aide de Tensorboard, vous pouvez exécuter tensorboard --logdir=log/osnet_x1_0_market1501_softmax_cosinelr dans le terminal et visitez http://localhost:6006/ dans votre navigateur Web.
L'évaluation est automatiquement effectuée à la fin de la formation. Pour exécuter le test à nouveau en utilisant le modèle formé, faites
python scripts/main.py
--config-file configs/im_osnet_x1_0_softmax_256x128_amsgrad_cosine.yaml
--root $PATH_TO_DATA
model.load_weights log/osnet_x1_0_market1501_softmax_cosinelr/model.pth.tar-250
test.evaluate TrueSupposons que vous vouliez former OSNET sur Dukemtmc-Reid et tester ses performances sur Market1501, vous pouvez faire
python scripts/main.py
--config-file configs/im_osnet_x1_0_softmax_256x128_amsgrad.yaml
-s dukemtmcreid
-t market1501
--transforms random_flip color_jitter
--root $PATH_TO_DATA Ici, nous ne testons que les performances du domaine croisé. Cependant, si vous souhaitez également tester les performances sur l'ensemble de données source, c'est-à-dire Dukemtmc-Reid, vous pouvez définir -t dukemtmcreid market1501 , qui évaluera le modèle sur les deux ensembles de données séparément.
Différent du paramètre de même domaine, nous remplaçons ici random_erase par color_jitter . Cela peut améliorer les performances de généralisation sur l'ensemble de données cible invisible.
Des modèles pré-entraînés sont disponibles dans le Zoo du modèle.
Si vous utilisez ce code ou les modèles dans votre recherche, veuillez rendre hommage aux articles suivants:
@article{torchreid,
title={Torchreid: A Library for Deep Learning Person Re-Identification in Pytorch},
author={Zhou, Kaiyang and Xiang, Tao},
journal={arXiv preprint arXiv:1910.10093},
year={2019}
}
@inproceedings{zhou2019osnet,
title={Omni-Scale Feature Learning for Person Re-Identification},
author={Zhou, Kaiyang and Yang, Yongxin and Cavallaro, Andrea and Xiang, Tao},
booktitle={ICCV},
year={2019}
}
@article{zhou2021osnet,
title={Learning Generalisable Omni-Scale Representations for Person Re-Identification},
author={Zhou, Kaiyang and Yang, Yongxin and Cavallaro, Andrea and Xiang, Tao},
journal={TPAMI},
year={2021}
}