导言
人员再识别(re-ID)是计算机视觉中的一项重要任务,在监控系统、零售分析和人机交互中有着广泛的应用。TorchRe-ID 是一个功能强大、用户友好的 Python 库,它为人员再识别任务提供了一套全面的工具和模型。在本文中,我们将探索 TorchRe-ID 的主要功能,并深入研究模型训练、评估和可视化。
什么是人员再识别?
人员重新识别的目的是在多摄像头监控系统中匹配非重叠摄像头视图中的个人。它涉及从不同角度、光线条件和视点识别同一个人,因此是一项极具挑战性的计算机视觉任务。
TorchRe-ID 的主要功能
- 数据集支持:TorchRe-ID 提供对流行的人物再识别数据集的开箱即用支持,包括 Market-1501、DukeMTMC-reID、CUHK03 和 MSMT17。
- 模型动物园:该库提供各种预训练模型,如 ResNet、DenseNet 和 Inception、OSNet,这些模型可在自定义数据集上进行微调,或用作基准测试的基线。
- 评估指标:TorchRe-ID 实现了人员重新识别任务中常用的各种评估指标,包括 Rank-1、Rank-5、Rank-10 和平均精度 (mAP)。
- 数据增强:该库包括功能强大的数据增强技术,如随机裁剪、翻转和颜色抖动,以提高模型的通用性和鲁棒性。
- 可视化工具:TorchRe-ID 提供了可视化工具,用于检查和分析人物再识别模型的性能,包括特征可视化和排名可视化。
开始使用 TorchRe-ID
要开始使用 TorchRe-ID,您需要安装该库及其依赖项。您可以通过 pip 进行安装:
pip install torchreid
模型培训
TorchRe-ID 简化了人员再识别模型的训练过程。下面是如何在 Market-1501 数据集上训练 osnet_x1_0 模型的示例:
if __name__ == '__main__':
import torchreid
from multiprocessing import freeze_support
from torchreid.utils import load_pretrained_weights
import torch
freeze_support()
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
datamanager = torchreid.data.ImageDataManager(
root='reid-data', #path to market1501
sources='market1501',
height=256,
width=128,
batch_size_test=32,
batch_size_train=100,
market1501_500k=False,
combineall=True
)
model = torchreid.models.build_model(
name="osnet_x1_0",
num_classes=datamanager.num_train_pids,
loss="softmax",
pretrained=True
)
model.to(device)
optimizer = torchreid.optim.build_optimizer(
model,
optim="sgd",
lr=0.01,
staged_lr=True,
new_layers='classifier',
base_lr_mult=0.1
)
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/osnet",
max_epoch=100,
eval_freq=10,
print_freq=10,
fixbase_epoch=5,
open_layers='classifier'
)
此示例演示了如何加载 Market-1501 数据集、创建 osnet_x1_0 模型、设置优化器和学习率调度器,并使用 ImageSoftmaxEngine 启动训练过程。
tensorboard - logdir=/Users/xx/SSRIP/log
首先,用 pip 安装 tensorboard,然后在 CMD 上运行该命令。
在训练模型时,tensorboard 的 SummaryWriter()
会在 engine.run()
中自动初始化。因此,你不需要做额外的工作。训练完成后,tf.events 文件将保存在 save_dir
。然后,只需在终端中调用 tensorboard --logdir=your_save_dir
并在网络浏览器中访问 http://localhost:6006/
即可。更多信息,请参阅 pytorch tensorboard: https://pytorch.org/docs/stable/tensorboard.html。
可视化排名结果
这可以通过在 engine.run()
中将 visrank
设置为 true 来实现。 visrank_topk
决定要可视化的前 k 张图片(默认为 visrank_topk=10
)。请注意,visrank 只能在测试模式下使用,即在 engine.run()
中设置 test_only=true
。输出结果将保存在 save_dir\visrank_DATASETNAME
,其中每个图都包含查询到的前 k 张相似图库图片。下图是一个示例,红色和绿色分别表示不正确和正确的匹配。可视化代码示例如下,请将以下代码粘贴到上层代码中。
path='/Users/xx/SSRIP/MultiCamera/osnet_x1_0_market_256x128_amsgrad_ep150_stp60_lr0.0015_b64_fb10_softmax_labelsmooth_flip.pth'
load_pretrained_weights(model, path)
engine.run(
save_dir="log/osnet",
max_epoch=100,
eval_freq=10,
print_freq=10,
test_only=True,
fixbase_epoch=5,
open_layers='classifier',
visrank=True,
visrank_topk=20
)
激活地图可视化
要了解 CNN 重点提取 ReID 特征的位置,可以像在 OSNet(https://arxiv.org/abs/1905.00953) 中一样可视化激活图。该功能在 tools/visualize_actmap.py 中实现(更多详情请查看代码)。运行命令示例如下
python tools/visualize_actmap.py - root 'Multi-Camera' -d market1501 -m osnet_x1_0 - weights /Users/xx/Multi_Camera/osnet_x1_0_market_256x128_amsgrad_ep150_stp60_lr0.0015_b64_fb10_softmax_labelsmooth_flip.pth - save-dir /Users/xx/Multi_Camera
Model Zoo
Model Zoo 的超链接中提到了一些预训练模型。提到的模型在多个单独数据集上进行了训练,有些模型还进行了组合训练,以获得更好的准确性和未见数据预测。
引文
@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}
}1
@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}
}2
@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}
}3