探索 TorchRe-ID--基于 Python 的人员再识别库

导言

人员再识别(re-ID)是计算机视觉中的一项重要任务,在监控系统、零售分析和人机交互中有着广泛的应用。TorchRe-ID 是一个功能强大、用户友好的 Python 库,它为人员再识别任务提供了一套全面的工具和模型。在本文中,我们将探索 TorchRe-ID 的主要功能,并深入研究模型训练、评估和可视化。

什么是人员再识别?

人员重新识别的目的是在多摄像头监控系统中匹配非重叠摄像头视图中的个人。它涉及从不同角度、光线条件和视点识别同一个人,因此是一项极具挑战性的计算机视觉任务。

TorchRe-ID 的主要功能

  1. 数据集支持:TorchRe-ID 提供对流行的人物再识别数据集的开箱即用支持,包括 Market-1501、DukeMTMC-reID、CUHK03 和 MSMT17。
  2. 模型动物园:该库提供各种预训练模型,如 ResNet、DenseNet 和 Inception、OSNet,这些模型可在自定义数据集上进行微调,或用作基准测试的基线。
  3. 评估指标:TorchRe-ID 实现了人员重新识别任务中常用的各种评估指标,包括 Rank-1、Rank-5、Rank-10 和平均精度 (mAP)。
  4. 数据增强:该库包括功能强大的数据增强技术,如随机裁剪、翻转和颜色抖动,以提高模型的通用性和鲁棒性。
  5. 可视化工具:TorchRe-ID 提供了可视化工具,用于检查和分析人物再识别模型的性能,包括特征可视化和排名可视化。

开始使用 TorchRe-ID

要开始使用 TorchRe-ID,您需要安装该库及其依赖项。您可以通过 pip 进行安装:

shell 复制代码
pip install torchreid

模型培训

TorchRe-ID 简化了人员再识别模型的训练过程。下面是如何在 Market-1501 数据集上训练 osnet_x1_0 模型的示例:

python 复制代码
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 启动训练过程。

python 复制代码
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 张相似图库图片。下图是一个示例,红色和绿色分别表示不正确和正确的匹配。可视化代码示例如下,请将以下代码粘贴到上层代码中。

python 复制代码
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 复制代码
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^


  1. http://twitter.com/article ↩︎

  2. http://twitter.com/inproceedings ↩︎

  3. http://twitter.com/article ↩︎

相关推荐
小R资源14 分钟前
推荐3个AI论文、AI查重、AI降重工具
人工智能·ai论文·ai降重
追着梦的码怪15 分钟前
简单水印通过python去除
python·opencv
William数据分析19 分钟前
[Python数据可视化]Plotly Express: 地图数据可视化的魅力
python·信息可视化·plotly·数据分析
醉后才知酒浓21 分钟前
图像直方图
人工智能·opencv·计算机视觉
William数据分析22 分钟前
[Python数据可视化]探讨数据可视化的实际应用:三个案例分析
python·信息可视化·数据分析·数据可视化
吉小雨24 分钟前
PyTorch 目标检测教程
人工智能·pytorch·目标检测
qq_153214526425 分钟前
【2020工业图像异常检测文献】SPADE
图像处理·深度学习·神经网络·目标检测·机器学习·计算机视觉·视觉检测
MAR-Sky32 分钟前
在python爬虫中xpath方式提取lxml.etree._ElementUnicodeResult转化为字符串str类型
爬虫·python·xpath·数据类型转换
2301_7969821433 分钟前
网页打开时,下载的文件svg+xml类型有什么作用?
xml·python·html5
云起SAAS34 分钟前
AI论文写作PPT思维导图PC小程序开发
人工智能·powerpoint