Torchreid是一個深入學習的人重新識別的圖書館,用Pytorch編寫,並為我們的ICCV'19項目開發,“ Omni級”功能學習人員重新識別。
它的特徵:
代碼: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的Imagenet預測模型。預訓練的設置遵循PYCL。tools/parse_test_res.py 。v1.4.0 :我們添加了搜索數據集,cuhk-sysu。請參閱有關如何下載數據集的文檔(其中包含裁剪的人圖像)。v1.3.6添加了University-1652,這是一個用於多視圖多源地理位置化的新數據集(榮譽歸功於Zhedong Zheng)。v1.3.5 :現在,Cython代碼在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) 。該變量表示數據集ID,在組合多個用於培訓的數據集(作為數據集指標)時很有用。例如,當組合market1501和cuhk03時,前者將分配dsetid=0而後者將分配dsetid=1 。 (2)添加了RandomDatasetSampler 。類似於RandomDomainSampler , RandomDatasetSampler從每個指定的數據集中示例了一定數量的圖像( batch_size // num_datasets )(該量由num_datasets確定)。v1.2.6 :添加了RandomDomainSampler (它採樣了每個帶有batch_size // num_cams圖像num_cams攝像機以形成一個迷你批次)。v1.2.5 :(1) __getitem__的數據加載器的輸出已從list更改為dict 。以前,用imgs=data[0]獲取一個元素,例如圖像張量。現在應該通過imgs=data['img']獲得。請參閱此提交的詳細更改。 (2)添加了k_tfm作為圖像數據加載程序的選項,該選項允許將數據擴展k_tfm應用於圖像。如果k_tfm > 1 , imgs=data['img']返回帶有k_tfm圖像張量的列表。projects/attribute_recognition/ 。v1.2.1 :添加了一個簡單的API用於特徵提取( torchreid/utils/feature_extractor.py )。有關指令,請參見文檔。projects/DML上發布了OSNET論文中深度相互學習的實驗的代碼。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
)在“ Deep-Person-Reid/Scripts/”中,我們提供了一個統一的接口來訓練和測試模型。有關更多詳細信息,請參見“腳本/main.py”和“腳本/default_config.py”。文件夾“ Configs/”包含一些預定義的配置,您可以將其用作起點。
在下面,我們提供了訓練和測試OSNET的示例(Zhou等人ICCV'19)。假設PATH_TO_DATA是包含REID數據集的目錄。省略了環境變量CUDA_VISIBLE_DEVICES ,如果您有GPU池並想要使用特定的集合,則需要指定它。
在Market1501上訓練OSNET,請
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/osnet_x1_0_market1_softmax_cosinelr/model.pth.pth.tar-250”。在同一文件夾下,您可以找到張板文件。要使用張量板可視化學習曲線,您可以運行tensorboard --logdir=log/osnet_x1_0_market1501_softmax_cosinelr在終端中,並訪問http://localhost:6006/在您的Web瀏覽器中。
評估在培訓結束時自動進行。要使用受過訓練的模型再次進行測試,請
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假設您想在dukemtmc-reid上訓練OSNET並在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 ,該Market1501將分別評估兩個數據集中的模型。
與同一域設置不同,在這裡我們用color_jitter替換random_erase 。這可以改善看不見的目標數據集上的概括性能。
驗證的模型在模型動物園中可用。
如果您在研究中使用此代碼或模型,請歸功於以下論文:
@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}
}