Torchreid es una biblioteca para la reidentificación de la persona de aprendizaje profundo, escrita en Pytorch y desarrollada para nuestro proyecto ICCV'19, aprendizaje de características omni a escala para la reidentificación de la persona.
Cuenta:
Código: https://github.com/kaiyangzhou/deep-person-reid.
Documentación: https://kaiyangzhou.github.io/deep-person-reid/.
Instrucciones sobre cómo hacer: https://kaiyangzhou.github.io/deep-person-reid/user_guide.
Model Zoo: https://kaiyangzhou.github.io/deep-person-reid/model_zoo.
Informe tecnológico: https://arxiv.org/abs/1910.10093.
Puede encontrar algunos proyectos de investigación construidos sobre Torchreid aquí.
osnet_ain_x0_75 , osnet_ain_x0_5 y osnet_ain_x0_25 . La configuración de previación sigue a Pycls.tools/parse_test_res.py .v1.4.0 : Agregamos el conjunto de datos de búsqueda de persona, Cuhk-Sysu. Consulte la documentación sobre cómo descargar el conjunto de datos (contiene imágenes de personas recortadas).v1.3.6 Agregado University-1652, un nuevo conjunto de datos para la geo-localización de múltiples fuentes múltiples (crédito a Zhedong Zheng).v1.3.5 : Ahora el código Cython funciona en Windows (crédito a Lablabla).v1.3.3 : Se corrigió el error en visrank (causado por no desempaquetar dsetid ).v1.3.2 : Se agregó _junk_pids a grid y prid . Esto evita el uso de imágenes de la galería mal etiquetadas para entrenar al configurar combineall=True .v1.3.0 : (1) Se agregó dsetid a la fuente de datos de 3-Tuple existente, lo que resulta en (impath, pid, camid, dsetid) . Esta variable denota la ID de conjunto de datos y es útil al combinar múltiples conjuntos de datos para capacitación (como indicador de conjunto de datos). Por ejemplo, al combinar market1501 y cuhk03 , al primero se le asignará dsetid=0 mientras que el segundo se asignará dsetid=1 . (2) Se agregó RandomDatasetSampler . Análogo a RandomDomainSampler , RandomDatasetSampler muestras un cierto número de imágenes ( batch_size // num_datasets ) de cada uno de los conjuntos de datos especificados (la cantidad está determinada por num_datasets ).v1.2.6 : Se agregó RandomDomainSampler (muestras cámaras num_cams cada una con imágenes batch_size // num_cams para formar un mini lote).v1.2.5 : (1) La salida de DataLoader de __getitem__ se ha cambiado de list a dict . Anteriormente, un elemento, por ejemplo, el tensor de imagen, se obtuvo con imgs=data[0] . Ahora debe obtenerse por imgs=data['img'] . Vea este compromiso para cambios detallados. (2) Se agregó k_tfm como una opción para obtener imágenes del cargador de datos, que permite que el aumento de datos se aplique k_tfm veces de forma independiente a una imagen. Si k_tfm > 1 , imgs=data['img'] devuelve una lista con tensores de imagen k_tfm .projects/attribute_recognition/ .v1.2.1 : Se agregó una API simple para la extracción de características ( torchreid/utils/feature_extractor.py ). Consulte la documentación para la instrucción.projects/DML .v1.2.0 . La clase de motor se ha hecho más agnóstico del modelo para mejorar la extensibilidad. Consulte el motor e ImagesoftMaxEngine para obtener más detalles. Crédito a dassl.pytorch.ImageDataManager puede cargar datos de entrenamiento de los conjuntos de datos de destino configurando load_train_targets=True , y se puede acceder al cargador de trenes con train_loader_t = datamanager.train_loader_t . Esta característica es útil para la investigación de adaptación de dominio. Asegúrese de que se instale 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 developOtra forma de instalar es ejecutar todo dentro del contenedor 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 Modelo de compilación, optimizador y 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
)En "Deeperson-Reid/Scripts/", proporcionamos una interfaz unificada para entrenar y probar un modelo. Consulte "scripts/main.py" y "scripts/default_config.py" para obtener más detalles. La carpeta "Configs/" contiene algunas configuraciones predefinidas que puede usar como punto de partida.
A continuación proporcionamos un ejemplo para entrenar y probar Osnet (Zhou et al. ICCV'19). Suponga que PATH_TO_DATA es el directorio que contiene conjuntos de datos REID. Se omite la variable ambiental CUDA_VISIBLE_DEVICES , que debe especificar si tiene un grupo de GPU y desea usar un conjunto específico de ellas.
Para entrenar Osnet en el mercado1501, hacer
python scripts/main.py
--config-file configs/im_osnet_x1_0_softmax_256x128_amsgrad_cosine.yaml
--transforms random_flip random_erase
--root $PATH_TO_DATAEl archivo de configuración establece el mercado1501 como el conjunto de datos predeterminado. Si quieres usar dukemtmc-reid, haz
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 El código automáticamente (descargará y) cargará los pesos previos al estado de Imagenet. Una vez realizado la capacitación, el modelo se guardará como "Log/Osnet_X1_0_Market1501_softmax_cosinelr/model.pth.tar-250". En la misma carpeta, puede encontrar el archivo Tensorboard. Para visualizar las curvas de aprendizaje usando TensorBoard, puede ejecutar tensorboard --logdir=log/osnet_x1_0_market1501_softmax_cosinelr en el terminal y visite http://localhost:6006/ en su navegador web.
La evaluación se realiza automáticamente al final de la capacitación. Para ejecutar la prueba nuevamente usando el modelo entrenado, do
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 TrueSupongamos que quiere entrenar a Osnet en dukemtmc-reid y probar su rendimiento en Market1501, puede hacer
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 Aquí solo probamos el rendimiento del dominio cruzado. Sin embargo, si también desea probar el rendimiento en el conjunto de datos de origen, es decir, dukemtmc -reid, puede establecer -t dukemtmcreid market1501 , que evaluará el modelo en los dos conjuntos de datos por separado.
A diferencia de la configuración del mismo dominio, aquí reemplazamos random_erase con color_jitter . Esto puede mejorar el rendimiento de la generalización en el conjunto de datos de objetivos invisibles.
Los modelos previos a la aparición están disponibles en el zoológico del modelo.
Si usa este código o los modelos en su investigación, dé crédito a los siguientes documentos:
@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}
}