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 . يتبع الإعداد المسبق pycls.tools/parse_test_res.py .v1.4.0 : لقد أضفنا مجموعة بيانات بحث الشخص ، Cuhk-Sysu. يرجى الاطلاع على الوثائق المتعلقة بكيفية تنزيل مجموعة البيانات (تحتوي على صور شخص محصور).v1.3.6 تمت إضافة جامعة-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-TUPLE الحالي ، مما أدى إلى (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'] إرجاع قائمة مع k_tfm صورة الموترات.projects/attribute_recognition/ .v1.2.1 : أضيفت واجهة برمجة تطبيقات بسيطة لاستخراج الميزات ( torchreid/utils/feature_extractor.py ). راجع وثائق التعليمات.projects/DML .v1.2.0 . لقد تم جعل فئة المحرك أكثر نماذج من النماذج لتحسين القابلية للتوسعة. انظر Engine و PicturesoftMaxEngine لمزيد من التفاصيل. الائتمان إلى dassl.pytorch.ImageDataManager تحميل بيانات التدريب من مجموعات البيانات المستهدفة عن طريق إعداد load_train_targets=True ، ويمكن الوصول إلى محمل القطار باستخدام train_loader_t = datamanager.train_loader_t . هذه الميزة مفيدة لأبحاث التكيف مع المجال. تأكد من تثبيت كوندا.
# 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" و "Scripts/Default_Config.py" لمزيد من التفاصيل. يحتوي المجلد "Configs/" على بعض التكوينات المحددة مسبقًا التي يمكنك استخدامها كنقطة انطلاق.
أدناه نقدم مثالًا لتدريب واختبار Osnet (Zhou et al. ICCV'19). افترض أن PATH_TO_DATA هو الدليل الذي يحتوي على مجموعات بيانات REID. تم حذف المتغير البيئي CUDA_VISIBLE_DEVICES ، وهو ما تحتاج إلى تحديد ما إذا كان لديك مجموعة من وحدات معالجة الرسومات وترغب في استخدام مجموعة محددة منها.
لتدريب 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/osnet_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 هنا نختبر فقط أداء المجال المتقاطع. ومع ذلك ، إذا كنت ترغب أيضًا في اختبار الأداء على مجموعة البيانات المصدر ، IE 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}
}