TorchReid-это библиотека для глубоководного человека, написанного в Pytorch и разработанной для нашего проекта ICCV'19, Omni-Scale Feature Learning для повторной идентификации человека.
Это особенности:
Код: https://github.com/kaiyangzhou/deep-person-reid.
Документация: https://kaiyangzhou.github.io/deep-person-reid/.
Как сделать инструкции: https://kaiyangzhou.github.io/deep-person-reid/user_guide.
Зоопарк модели: https://kaiyangzhou.github.io/deep-person-reid/model_zoo.
Технический отчет: https://arxiv.org/abs/1910.10093.
Вы можете найти некоторые исследовательские проекты, которые создаются здесь на вершине Torchreid.
osnet_ain_x0_75 , osnet_ain_x0_5 и osnet_ain_x0_25 . Предварительная установка следует за Pycls.tools/parse_test_res.py .v1.4.0 : Мы добавили набор данных по поиску человека, Cuhk-Sysu. Пожалуйста, смотрите документацию о том, как загрузить набор данных (он содержит обрезанные изображения человека).v1.3.6 Добавлен Университет-1652, новый набор данных для геолокализации с несколькими источниками (кредит Чжедона Чжэн).v1.3.5 : Теперь код цинтона работает в Windows (кредит на Lablabla).v1.3.3 : Исправлена ошибка в visrank (вызванная не распаковкой dsetid ).v1.3.2 : добавлен _junk_pids в grid и prid . Это избегает использования неправильных изображений галереи для обучения при установке combineall=True .v1.3.0 : (1) Добавлен dsetid к существующему источнику данных с 3-чиплом, что приводит к (impath, pid, camid, dsetid) . Эта переменная обозначает идентификатор набора данных и полезна при объединении нескольких наборов данных для обучения (в качестве индикатора набора данных). Например, при объединении market1501 и cuhk03 первым будет назначено dsetid=0 в то время как последнему будет назначено dsetid=1 . (2) Добавлен RandomDatasetSampler . Аналогично RandomDomainSampler , RandomDatasetSampler образцы образцов определенного количества изображений ( batch_size // num_datasets ) из каждого из указанных наборов данных (сумма определяется num_datasets ).v1.2.6 : добавлен RandomDomainSampler (он вызывает камеры num_cams , каждая с изображениями batch_size // num_cams чтобы сформировать мини-партию).v1.2.5 : (1) Вывод DataLoader от __getitem__ был изменен с list на dict . Ранее элемент, например, тензор изображения, был получен с помощью imgs=data[0] . Теперь это должно быть получено с помощью imgs=data['img'] . Смотрите этот коммит для подробных изменений. (2) Добавлен k_tfm в качестве опции для загрузчика данных изображения, что позволяет независимо применяться к увеличению данных k_tfm к изображению. Если k_tfm > 1 , imgs=data['img'] возвращает список с Tensors k_tfm .projects/attribute_recognition/ .v1.2.1 : добавил простой API для извлечения функций ( torchreid/utils/feature_extractor.py ). Смотрите документацию для инструкции.projects/DML .v1.2.0 . Класс двигателя стал более модельным агротом для улучшения расширяемости. См. Двигатель и Imagesoftmaxengine для получения более подробной информации. Кредит Dassl.pytorch.ImageDataManager может загружать обучающие данные из целевых наборов данных, установив load_train_targets=True , и можно получить доступ к поезду с помощью train_loader_t = datamanager.train_loader_t . Эта функция полезна для исследований адаптации доменов. Убедитесь, что Conda установлена.
# 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 developДругой способ установить - запустить все в контейнере 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 Модель сборки, оптимизатор и 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
)В «Скриптах/сценариях/сценариях/сценариях» мы предоставляем унифицированный интерфейс для обучения и тестирования модели. См. «Scripts/main.py» и «Scripts/default_config.py» для получения более подробной информации. Папка «configs/» содержит некоторые предопределенные конфигурации, которые вы можете использовать в качестве отправной точки.
Ниже мы приведем пример для обучения и тестирования OSNET (Zhou et al. ICCV'19). Предположим, что PATH_TO_DATA - это каталог, содержащий наборы данных REID. Переменная среда CUDA_VISIBLE_DEVICES опущена, которая необходимо указать, есть ли у вас пул GPU и вы хотите использовать конкретный набор из них.
Чтобы тренировать OSNET на Market1501, сделайте
python scripts/main.py
--config-file configs/im_osnet_x1_0_softmax_256x128_amsgrad_cosine.yaml
--transforms random_flip random_erase
--root $PATH_TO_DATAФайл конфигурации устанавливает Market1501 в качестве набора данных по умолчанию. Если вы хотите использовать dukemtmc-reid, сделайте
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 Код автоматически (загрузите и) загружает веса ImageNet. После того, как обучение будет выполнено, модель будет сохранена как «log/usnet_x1_0_market1501_softmax_cosinelr/model.pth.tar-250». Под одной и той же папкой вы можете найти файл Tensorboard. Чтобы визуализировать кривые обучения с помощью Tensorboard, вы можете запустить tensorboard --logdir=log/osnet_x1_0_market1501_softmax_cosinelr в терминале и посетите http://localhost:6006/ в вашем веб -браузере.
Оценка автоматически проводится в конце обучения. Чтобы снова запустить тест, используя обученную модель, сделайте
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 TrueПредположим, что вы хотите обучить OSNET на DukeMTMC-REID и проверить его производительность на Market1501, вы можете сделать
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 Здесь мы тестируем только перекрестную производительность. Однако, если вы также хотите проверить производительность в наборе данных источника, то есть DUKEMTMC -REID, вы можете установить -t dukemtmcreid market1501 , который будет оценивать модель на двух наборах данных отдельно.
В отличие от той же доменной настройки, здесь мы заменяем random_erase на color_jitter . Это может улучшить производительность обобщения на невидимом наборе данных целевого.
Предварительные модели доступны в модельном зоопарке.
Если вы используете этот код или модели в своем исследовании, сообщите о следующих документах:
@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}
}