Torchreid เป็นห้องสมุดสำหรับการระบุตัวตนของบุคคลที่เรียนรู้อย่างลึกซึ้งซึ่งเขียนขึ้นใน Pytorch และพัฒนาขึ้นสำหรับโครงการ ICCV'19 ของเราการเรียนรู้คุณสมบัติ Omni-Scale สำหรับการระบุตัวตนของบุคคล
มันมีคุณสมบัติ:
รหัส: https://github.com/kaiyyangzhou/deep-person-reid
เอกสาร: https://kaiyangzhou.github.io/deep-person-reid/
คำแนะนำวิธีการ: https://kaiyyangzhou.github.io/deep-person-reid/user_guide
Model Zoo: 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 การตั้งค่า pretraining ติดตาม pyclstools/parse_test_res.pyv1.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=Truev1.3.0 : (1) เพิ่ม dsetid ลงในแหล่งข้อมูล 3-tuple ที่มีอยู่ส่งผลให้ (impath, pid, camid, dsetid) ตัวแปรนี้แสดงถึง ID ชุดข้อมูลและมีประโยชน์เมื่อรวมชุดข้อมูลหลายชุดสำหรับการฝึกอบรม (เป็นตัวบ่งชี้ชุดข้อมูล) เช่นเมื่อรวม market1501 และ cuhk03 อดีตจะได้รับมอบหมาย dsetid=0 ในขณะที่หลังจะได้รับมอบหมาย dsetid=1 (2) เพิ่ม RandomDatasetSampler แบบสุ่ม RandomDatasetSampler RandomDomainSampler แบบสุ่มตัวอย่างจำนวนภาพ ( 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_tfmprojects/attribute_recognition/v1.2.1 : เพิ่ม API อย่างง่ายสำหรับการแยกคุณสมบัติ ( torchreid/utils/feature_extractor.py ) ดูเอกสารสำหรับคำแนะนำprojects/DMLv1.2.0 คลาสเครื่องยนต์ได้รับการสร้างแบบจำลองที่ไม่เชื่อเรื่องพระเจ้ามากขึ้นเพื่อปรับปรุงการขยายความสามารถ ดูรายละเอียดเพิ่มเติมเกี่ยวกับเอ็นจิ้นและ imagesoftmaxengine เครดิตถึง dassl.pytorchImageDataManager สามารถโหลดข้อมูลการฝึกอบรมจากชุดข้อมูลเป้าหมายโดยการตั้งค่า 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 Build Model, Optimizer และ 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/Scripts/" Deep-Person-Reid/"เรามีอินเทอร์เฟซแบบครบวงจรเพื่อฝึกอบรมและทดสอบโมเดล ดู "Scripts/main.py" และ "scripts/default_config.py" สำหรับรายละเอียดเพิ่มเติม โฟลเดอร์ "configs/" มีการกำหนดค่าที่กำหนดไว้ล่วงหน้าซึ่งคุณสามารถใช้เป็นจุดเริ่มต้น
ด้านล่างเราให้ตัวอย่างในการฝึกอบรมและทดสอบ OSNET (Zhou et al. ICCV'19) สมมติว่า PATH_TO_DATA เป็นไดเรกทอรีที่มีชุดข้อมูล Reid ตัวแปรสิ่งแวดล้อม CUDA_VISIBLE_DEVICES ถูกละไว้ซึ่งคุณต้องระบุว่าคุณมีกลุ่ม GPU และต้องการใช้ชุดเฉพาะของพวกเขา
เพื่อฝึก Osnet ในตลาด 15501 ทำ
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 และทดสอบประสิทธิภาพของตลาด 1501 คุณสามารถทำได้
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}
}