探索 TorchRe-ID--基于 Python 的人员再识别库
导言
人员再识别(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 torchreidfrom multiprocessing import freeze_supportfrom torchreid.utils import load_pretrained_weightsimport torchfreeze_support()device = torch.device("cuda" if torch.cuda.is_available() else "cpu")datamanager = torchreid.data.ImageDataManager(root='reid-data', #path to market1501sources='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
http://twitter.com/article ↩︎
http://twitter.com/inproceedings ↩︎
http://twitter.com/article ↩︎
相关文章:
探索 TorchRe-ID--基于 Python 的人员再识别库
导言 人员再识别(re-ID)是计算机视觉中的一项重要任务,在监控系统、零售分析和人机交互中有着广泛的应用。TorchRe-ID 是一个功能强大、用户友好的 Python 库,它为人员再识别任务提供了一套全面的工具和模型。在本文中࿰…...
鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Flex)
以弹性方式布局子组件的容器组件。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。Flex组件在渲染时存在二次布局过程,因此在对性能有严格要求的场景下建议使用Column、Row代替。Flex组…...
tmux最基础的一点应用-不用一直挂着ssh,可以干点别的事情
文章目录 使用原因基础命令创建一个窗口退出当前窗口重新进入万一忘记了环境名字想要删除环境 使用原因 跑程序要很久,需要干别的事情,电脑不能一直开,可以使用tmux来管理。 基础命令 创建一个窗口 tmux new -s <你自己起的环境名字&g…...
Java推荐算法——特征加权推荐算法(以申请学校为例)
加权推荐算法 文章目录 加权推荐算法1.推荐算法的简单介绍2.加权推荐算法详细介绍3.代码实现4.总结 1.推荐算法的简单介绍 众所周知,推荐算法有很多种,例如: 1.加权推荐:分为简单的特征加权,以及复杂的混合加权。主要…...
探索什么便签软件好用,可以和手机同步的便签软件
在信息技术日新月异的今天,各类数字工具已经成为我们生活与工作的重要助手。便签软件作为一种简单却高效的辅助工具,悄然改变着人们的记录习惯与时间管理方式。而在诸多便签软件中,能够实现手机与电脑同步功能的产品尤显其独特的价值。那么&a…...
字符函数与字符串函数
前言 本次博客可以说内容最为多的一次博客,讲解同样很细致大家好好看看 1字符函数 在讲解字符函数时,大家得了解什么是字符吧 普通字符a b c 1 转义字符 \n 换行‘ \t’ 水平制表符\r回车 大家了解即可 在C语言中字符也可以有分类 所以我们先来看看…...
Kubernetes 项目整体布局 el-container
整体布局整体布局 你可能会去敲不同的项目,有很多种平台。那么其实都是可以复用的。唯一不同的就是main里面的内容是不同的,边框架子都是相同的。其实框架是不怎么变化的,变化的是main里面。 src/layout/Layout.vue 这里需要新增一个页面Lay…...
AI赋能写作:AI大模型高效写作一本通
❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。2022年度博客之星评选TOP 10🏆,Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作…...
unraid docker.img扩容
unraid 弹Docker image disk utilization of 99%,容器下载/更新失败 我的版本是6.11.5,docker.img满了导致容器不能更新,遇到同样问题的可以先用docker命令清除一下仓库(当然不一定能清理出来,我已经清理过只清理出来1G多点&…...
Python 实现1~100之间的偶数求和
result0 for i in range(101):if i%20:result result i print(result) 或者 result0 for i in range(2,101,2):result result i print(result)...
Leetcode 387. First Unique Character in a String
Problem Given a string s, find the first non-repeating character in it and return its index. If it does not exist, return -1. Algorithm Use two lists: one list is used to count the letters in “s”; the other list is the position where the letter first …...
c++ 自己实现一个迭代器
具体代码 /*自定义迭代器的实现 */ #include <iostream> using namespace std; class num {int val; //具体的数字int length; //数字的位数void calculate_length(){if(val/100){ //这个数字只有1位length1;return;}int x10; //这里就是不断重复除直…...
HarmonyOS NEXT应用开发—图片压缩方案
介绍 图片压缩在应用开发中是一个非常常见的需求,特别是在处理用户上传图片时,需要上传指定大小以内的图片。目前图片压缩支持jpeg、webp、png格式。本例中以jpeg图片为例介绍如何通过packing和scale实现图片压缩到目标大小以内。 效果图预览 使用说明…...
深入理解nginx的请求限速模块[下]
目录 3. 源码分析3.1 配置指令3.1.1 limit_req_zone指令3.1.2 limit_req指令3.1.3 limit_req_dry_run指令3.1.4 limit_req_log_level指令3.1.5 limit_req_status指令3.2 模块初始化3.3 请求处理3.3.1 ngx_http_limit_req_handler3.3.1 ngx_http_limit_req_lookup3.3.2 ngx_http…...
王者归位:Kafka控制器组件解析
欢迎来到我的博客,代码的世界里,每一行都是一个故事 王者归位:Kafka控制器组件解析 前言控制器组件简介控制器组件的定义和作用:为什么控制器是分布式系统的核心? 保存了什么数据控制器的指定和切换故障转移控制器故障…...
XmlHttpRequest responseType: ‘stream‘ 图片代理服务器
它是一个存在于原生 XMLHttpRequest 对象中的属性。在 Web API 中,XMLHttpRequest 对象用于发送 HTTP 或 HTTPS 请求到服务器,并接收响应。responseType 属性就是用来指定预期从服务器返回的响应数据的类型。 默认值 responseType的默认值为json&#x…...
手写 UE4中的 TArray
#pragma once #include<iostream> #include<stdexcept> #define CHECK_INDEX_RANGE(Index) if (Index > ElementCount) throw std::out_of_range("索引超出界限")template<typename ElementType> class TArray {typedef unsigned int uint; pri…...
Flink实时写Hudi报NumberFormatException异常
Flink实时写Hudi报NumberFormatException异常 问题描述 在Flink项目中,针对Hudi表 xxxx_table 的 bucket_write 操作由于 java.lang.NumberFormatException 异常而从运行状态切换到失败状态。异常信息显示在解析字符串"ddd7a1ec"为整数时出现了问题。报…...
Dataset与DataLoader、transform
文章目录 1、Dataset2、DataLoader2.1 参数详解2.1.1 num_works2.1.2 pin_memory2.1.3 collate_fn 3、图像增强4、重写transform 1、Dataset 在 PyTorch 中,如果要创建自定义的数据集(Dataset),通常会继承 torch.utils.data.Data…...
海豚调度系列之:认识海豚调度
海豚调度系列之:认识海豚调度 一、海豚调度二、特性三、建议配置四、名次解释 一、海豚调度 Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过…...
云计算——弹性云计算器(ECS)
弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
DiscuzX3.5发帖json api
参考文章:PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下,适配我自己的需求 有一个站点存在多个采集站,我想通过主站拿标题,采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...
sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...
