Torchreid ist eine Bibliothek für eine tiefe Lernperson, die in Pytorch geschrieben und für unser ICCV'19-Projekt, Omni-Scale-Feature-Lernen für Person-Identifizierung, entwickelt wurde.
Es enthält:
Code: https://github.com/kaiyangzhou/deep-person-reid.
Dokumentation: https://kaiyangzhou.github.io/deep-person-reid/.
Anweisungen: https://kaiyangzhou.github.io/deep-person-reid/user_guide.
Modellzoo: https://kaiyangzhou.github.io/deep-person-reid/model_zoo.
Tech -Bericht: https://arxiv.org/abs/1910.10093.
Hier finden Sie einige Forschungsprojekte, die hier auf Torchreid aufgebaut sind.
osnet_ain_x0_75 , osnet_ain_x0_5 und osnet_ain_x0_25 veröffentlicht. Das Vorab -Setup folgt Pycls.tools/parse_test_res.py .v1.4.0 : Wir haben den Person-Such-Datensatz CUHK-SYSU hinzugefügt. Bitte beachten Sie die Dokumentation zum Herunterladen des Datensatzes (es enthält Bilder mit gekruften Personen).v1.3.6 Fügte University-1652 hinzu, einen neuen Datensatz für Multi-View-Multi-Source-Geo-Lokalisierung (Kredit an Zhedong Zheng).v1.3.5 : Jetzt funktioniert der Cython -Code unter Windows (Kredit an Lablaba).v1.3.3 : Fehler in visrank behoben (verursacht durch das Nichtpacken dsetid ).v1.3.2 : Hinzufügen _junk_pids zu grid und prid . Dadurch wird vermieden, dass bei der Festlegung combineall=True fälschliche Galeriebilder für das Training verwendet werden.v1.3.0 : (1) der vorhandenen 3-Tupel-Datenquelle dsetid hinzugefügt, was zu (impath, pid, camid, dsetid) führt. Diese Variable bezeichnet die Datensatz -ID und ist nützlich, um mehrere Datensätze für das Training zu kombinieren (als Datensatzanzeige). Zum Beispiel wird bei der Kombination market1501 und cuhk03 dem ersteren dsetid=0 zugeordnet, während der letzteren dsetid=1 zugeordnet wird. (2) RandomDatasetSampler hinzugefügt. Analog zu RandomDomainSampler , RandomDatasetSampler probiert eine bestimmte Anzahl von Bildern ( batch_size // num_datasets ) aus jedem der angegebenen Datensätze (der Betrag wird durch num_datasets bestimmt).v1.2.6 : RandomDomainSampler hinzugefügt (es probiert num_cams cameras mit jeweils batch_size // num_cams imags, um eine Mini-Batch zu bilden).v1.2.5 : (1) Die Ausgabe von Dataloader von __getitem__ wurde von list in dict geändert. Zuvor wurde ein Element, z. B. Bild -Tensor, mit imgs=data[0] abgerufen. Jetzt sollte es von imgs=data['img'] erhalten werden. In diesem Commit finden Sie detaillierte Änderungen. (2) k_tfm als Option zum Bilddatenladegerät hinzugefügt, mit dem die k_tfm unabhängig auf ein Bild angewendet werden kann. Wenn k_tfm > 1 , imgs=data['img'] eine Liste mit k_tfm -Bild -Tensoren zurück.projects/attribute_recognition/ .v1.2.1 : Eine einfache API für die Feature -Extraktion ( torchreid/utils/feature_extractor.py ) hinzugefügt. Siehe Dokumentation für die Anweisung.projects/DML veröffentlicht.v1.2.0 . Die Motorklasse wurde mehr modellagnostisch gemacht, um die Erweiterbarkeit zu verbessern. Weitere Informationen finden Sie unter Engine und ImagesoftMaxEngine. Gutschrift an Dassl.pytorch.ImageDataManager kann Trainingsdaten aus Zieldatensätzen laden, indem sie load_train_targets=True einstellen, und auf die Zuglader kann mit train_loader_t = datamanager.train_loader_t zugegriffen werden. Diese Funktion ist nützlich für die Forschung an der Domänenanpassung. Stellen Sie sicher, dass Conda installiert ist.
# 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 developEine weitere Möglichkeit, alles in Docker -Container auszuführen, besteht darin, alles auszuführen:
make build-imagemake run torchreid importieren 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 Build -Modell, Optimierer und 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
)In "Deep-Person-Reid/Skrips/" bieten wir eine einheitliche Schnittstelle zum Trainieren und Testen eines Modells. Weitere Informationen finden Sie unter "Skripts/Main.py" und "Skripts/default_config.py". Der Ordner "configs/" enthält einige vordefinierte Konfigurationen, die Sie als Ausgangspunkt verwenden können.
Im Folgenden geben wir ein Beispiel zum Training und Test OSNet (Zhou et al. ICCV'19). Angenommen, PATH_TO_DATA ist das Verzeichnis, das Reid -Datensätze enthält. Die Umgebungsvariable CUDA_VISIBLE_DEVICES wird weggelassen, die Sie angeben müssen, wenn Sie einen GPU -Pool haben und einen bestimmten Satz davon verwenden möchten.
OSNET auf Market1501 trainieren, tun Sie dies
python scripts/main.py
--config-file configs/im_osnet_x1_0_softmax_256x128_amsgrad_cosine.yaml
--transforms random_flip random_erase
--root $PATH_TO_DATADie Konfigurationsdatei setzt Market1501 als Standarddatensatz fest. Wenn Sie Dukemtmc-Reid verwenden möchten, tun Sie dies
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 Der Code wird automatisch die vorgefertigten ImageNet -Gewichte (herunterladen und) laden und laden. Nachdem das Training abgeschlossen ist, wird das Modell als "log/osnet_x1_0_market1501_softmax_cosinelr/model.pth.tar-25" gespeichert. Unter demselben Ordner finden Sie die Tensorboard -Datei. Um die Lernkurven mithilfe von Tensorboard zu visualisieren, können Sie tensorboard --logdir=log/osnet_x1_0_market1501_softmax_cosinelr im Terminal und besuchen Sie http://localhost:6006/ in Ihrem Webbrowser.
Die Bewertung wird am Ende des Trainings automatisch durchgeführt. Um den Test mit dem trainierten Modell erneut durchzuführen, tun Sie dies
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 TrueAngenommen, Sie möchten OSNet auf Dukemtmc-Reid trainieren und seine Leistung auf Market1501 testen, können Sie dies tun
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 Hier testen wir nur die Cross-Domänen-Leistung. Wenn Sie jedoch auch die Leistung im Quelldatensatz testen möchten, dh Dukemtmc -Reid, können Sie -t dukemtmcreid market1501 festlegen, wodurch das Modell auf den beiden Datensätzen getrennt bewertet wird.
Anders als bei der gleichdomänener Einstellung ersetzen wir random_erase durch color_jitter . Dies kann die Generalisierungsleistung im unsichtbaren Zieldatensatz verbessern.
Vorbereitete Modelle sind im Modellzoo erhältlich.
Wenn Sie diesen Code oder die Modelle in Ihrer Forschung verwenden, geben Sie den folgenden Papieren bitte eine Gutschrift an:
@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}
}