Torchreid adalah perpustakaan untuk identifikasi ulang orang belajar yang dalam, ditulis dalam Pytorch dan dikembangkan untuk proyek ICCV'19 kami, pembelajaran fitur skala omni untuk identifikasi ulang orang.
Fiturnya:
Kode: https://github.com/kaiyangzhou/deep-person-reid.
Dokumentasi: https://kaiyangzhou.github.io/deep-person-reid/.
Instruksi cara-cara: https://kaiyangzhou.github.io/deep-person-reid/user_guide.
Model Zoo: https://kaiyangzhou.github.io/deep-person-reid/model_zoo.
Laporan Teknologi: https://arxiv.org/abs/1910.10093.
Anda dapat menemukan beberapa proyek penelitian yang dibangun di atas Torchreid di sini.
osnet_ain_x0_75 , osnet_ain_x0_5 dan osnet_ain_x0_25 . Pengaturan pretraining mengikuti pycls.tools/parse_test_res.py .v1.4.0 : Kami menambahkan dataset pencarian orang, Cuhk-Sysu. Silakan lihat dokumentasi tentang cara mengunduh dataset (berisi gambar orang yang dipotong).v1.3.6 Menambahkan Universitas-1652, dataset baru untuk multi-view geo-localization multi-sumber (kredit ke Zhedong Zheng).v1.3.5 : Sekarang kode Cython berfungsi pada windows (kredit ke lablabla).v1.3.3 : Memperbaiki bug di visrank (disebabkan oleh tidak membongkar dsetid ).v1.3.2 : Ditambahkan _junk_pids ke grid dan prid . Ini menghindari penggunaan gambar galeri yang salah berlabel untuk pelatihan saat mengatur combineall=True .v1.3.0 : (1) Menambahkan dsetid ke sumber data 3-tuple yang ada, yang dihasilkan (impath, pid, camid, dsetid) . Variabel ini menunjukkan ID dataset dan berguna saat menggabungkan beberapa set data untuk pelatihan (sebagai indikator dataset). Misalnya, saat menggabungkan market1501 dan cuhk03 , yang pertama akan ditugaskan dsetid=0 sementara yang terakhir akan ditugaskan dsetid=1 . (2) Menambahkan RandomDatasetSampler . Analog dengan RandomDomainSampler , RandomDatasetSampler Sampel Sejumlah gambar tertentu ( batch_size // num_datasets ) dari masing -masing set data yang ditentukan (jumlah tersebut ditentukan oleh num_datasets ).v1.2.6 : Menambahkan RandomDomainSampler (itu sampel num_cams masing-masing dengan gambar batch_size // num_cams untuk membentuk mini-batch).v1.2.5 : (1) Output Dataloader dari __getitem__ telah diubah dari list menjadi dict . Sebelumnya, sebuah elemen, misalnya tensor gambar, diambil dengan imgs=data[0] . Sekarang harus diperoleh oleh imgs=data['img'] . Lihat komit ini untuk perubahan terperinci. (2) Menambahkan k_tfm sebagai opsi untuk pemuat data gambar, yang memungkinkan augmentasi data diterapkan k_tfm kali secara independen ke suatu gambar. Jika k_tfm > 1 , imgs=data['img'] mengembalikan daftar dengan tensor gambar k_tfm .projects/attribute_recognition/ .v1.2.1 : Menambahkan API sederhana untuk ekstraksi fitur ( torchreid/utils/feature_extractor.py ). Lihat dokumentasi untuk instruksi.projects/DML .v1.2.0 . Kelas mesin telah dibuat lebih banyak model-agnostik untuk meningkatkan ekstensibilitas. Lihat Mesin dan ImagesoftmaxEngine untuk lebih jelasnya. Kredit untuk dassl.pytorch.ImageDataManager dapat memuat data pelatihan dari dataset target dengan mengatur load_train_targets=True , dan loader kereta dapat diakses dengan train_loader_t = datamanager.train_loader_t . Fitur ini berguna untuk penelitian adaptasi domain. Pastikan Conda diinstal.
# 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 developCara lain untuk menginstal adalah menjalankan semuanya di dalam wadah 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 dan LR_SCHEDURER
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
)Dalam "Deep-Person-Reid/Scripts/", kami menyediakan antarmuka terpadu untuk melatih dan menguji model. Lihat "Scripts/Main.py" dan "Scripts/Default_config.py" untuk lebih jelasnya. Folder "Configs/" berisi beberapa konfigurasi yang telah ditentukan yang dapat Anda gunakan sebagai titik awal.
Di bawah ini kami memberikan contoh untuk melatih dan menguji Osnet (Zhou et al. ICCV'19). Asumsikan PATH_TO_DATA adalah direktori yang berisi dataset Reid. Variabel lingkungan CUDA_VISIBLE_DEVICES dihilangkan, yang perlu Anda tentukan jika Anda memiliki kumpulan GPU dan ingin menggunakan satu set tertentu.
Untuk melatih Osnet di Market1501, lakukan
python scripts/main.py
--config-file configs/im_osnet_x1_0_softmax_256x128_amsgrad_cosine.yaml
--transforms random_flip random_erase
--root $PATH_TO_DATAFile konfigurasi menetapkan Market1501 sebagai dataset default. Jika Anda ingin menggunakan Dukemtmc-Reid, lakukan
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 Kode akan secara otomatis (mengunduh dan) memuat bobot pretrained imagenet. Setelah pelatihan selesai, model akan disimpan sebagai "log/osnet_x1_0_market1501_softmax_cosinelr/model.pth.tar-250". Di bawah folder yang sama, Anda dapat menemukan file Tensorboard. Untuk memvisualisasikan kurva pembelajaran menggunakan Tensorboard, Anda dapat menjalankan tensorboard --logdir=log/osnet_x1_0_market1501_softmax_cosinelr di terminal dan kunjungi http://localhost:6006/ di browser web Anda.
Evaluasi secara otomatis dilakukan di akhir pelatihan. Untuk menjalankan tes lagi menggunakan model terlatih, lakukan
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 TrueMisalkan Anda ingin melatih Osnet di Dukemtmc-Reid dan menguji kinerjanya di Market1501, Anda dapat melakukannya
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 Di sini kami hanya menguji kinerja lintas domain. Namun, jika Anda juga ingin menguji kinerja pada dataset sumber, yaitu Dukemtmc -Reid, Anda dapat mengatur -t dukemtmcreid market1501 , yang akan mengevaluasi model pada dua set data secara terpisah.
Berbeda dari pengaturan domain yang sama, di sini kita mengganti random_erase dengan color_jitter . Ini dapat meningkatkan kinerja generalisasi pada dataset target yang tidak terlihat.
Model pretrain tersedia di kebun binatang model.
Jika Anda menggunakan kode ini atau model dalam penelitian Anda, harap berikan kredit ke makalah berikut:
@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}
}