【ReID】1、行人重识别模型

news2024/11/23 15:10:36

文章目录

  • 一、概念
  • 二、实现方案
  • 三、代码

一、概念

ReID,也就是 Re-identification,其定义是利用算法,在图像库中找到要搜索的目标的技术,所以它是属于图像检索的一个子问题。

说白了,在监控拍不到人脸的情况下,ReID可以代替人脸识别来在视频序列中找到我要找到目标对象。那么他的应用就很广了,可以做安防,可以做个人定位,在商场上可以配合推荐系统,搭建出个性化的推荐服务等等。下面一张图可以生动的解释它在安防的一个应用场景。

ReID的概念最早在2006年的CVPR会议上被提出。2007年首个ReID数据集VIPeR被公布,之后越来越多的不同场景下的数据集先后被开源了出来,这些数据集也一定程度上推动了ReID的发展。

在2015年左右,深度学习还没有大热大火之前,ReID的研究大部分都是基于的特征的阶段,对于人工特征,如颜色、HOG特征等,之后的度量学习是寻找特征之间的最佳近似度,但这种方法学习复杂的场景数据效果不佳。随着AlphaGo取得令人瞩目的成就,以及最新硬件支持技术的发展也带来了深度学习的高产阶段,深度学习也逐渐渗透到人工智能的各个方面,包括ReID,利用深度学习的方法可以很好的学习出黑盒性质的特征,在一些方面可以超过了人类的识别水平,因而深度学习在CV中的应用已成为相关研究者关注的热点。

2017年和2018年ReID得到快速发展,在国内外各类顶级计算机视觉会议和顶级期刊上每年都有多篇ReID的文章。迁移学习的火热也使得在大数据量和算力下训练好的模型可以作为网络的初始化,使得网络的性能大大改善。对抗生成网络的出现也给ReID带来了新道路;虽然目前来说,ReID主流的方法仍然属于监督学习,但是迁移学习以及GAN网络也将是一个很有前景的方向。

二、实现方案

person-reid 又简称 reid,是旨在用来从图片序列或视频中检索行人的技术。可总体划分为以下5步:

  • 原始数据采集: 主要来自于监控摄像头
  • 行人框生成: 将图片中的行人裁剪出来,可通过人工或使用行人检测算法
  • 训练数据标注: 可能包含行人属性、相机等,对于新场景,一般需要重新标注
  • 模型训练: 模型集中于特征表示学习、距离度量学习或者二者的组合
  • 行人检索: 给定 query(感兴趣的行人) 和 gallery 集合,用训练得到的模型抽取各自的特征表达,然后计算 query 和 gallery 中每个行人的相似度进行排序.
    论文中将ReID技术分为 Closed-world 和Open-world 两大子集 , 本文主要记录 closed-world 的reid, 即常见的标注完整的有监督的行人重识别方法.

从前面讲的,我们已经大致知道ReID是干什么的了,似乎就是去检索出一个目标对象。这里我会具体去讲这个任务如何去做。

上面这张图向我们展示了ReID的一个任务过程

  • 首先要做的是Detection,也就是检测出行人,其实这一步数据集已经帮我们做到了,下面介绍数据集的时候会讲到不同数据集采用的不同的目标检测方法以及ID的标注方式。
  • 剩下的部分,就是要去训练一个特征提取网络,根据特征所计算的度量距离得到损失值
    • 我们选用一个优化器去迭代找到loss最小值,并不断更新网络的参数达到学习的效果。
    • 在测试的时候,我们用将要检索的图片(称为query或者probe),在底库gallery中,根据计算出的特征距离进行排序,选出最TOP的几张图片,来达到目标检索的目的。下面两张图分别是训练阶段和测试阶段的示意图:

测试阶段中,我们利用训练后的网络计算特征从所有搜索到的图像中提取特征,并计算搜索图与地库之间的特征距离。然后根据计算出的距离对它们进行排序。排名越高,相似性越高,上图中,绿色边框的是正确检索的结果,红色边框的是错误检索的结果。

用学习好的reid特征得到初始的检索排序结果后,利用图片之间的相似性关系来进行初始的检索结果优化,主要有:

  • re-rank
  • rank-fusion

三、代码

import numpy as np
import json

with open('gallery.json', 'r') as res_lst:
    gallery = res_lst.readlines()
with open('query.json', 'r') as res_lst:
    query = res_lst.readlines()

if __name__ == '__main__':
    for idx1, res1 in enumerate(query):
        res1_dic = json.loads(res1)
        vector1 = res1_dic['data']
        max_smi = 0
        max_target_idx = -1
        for idx2, res2 in enumerate(gallery):
            res2_dic = json.loads(res2)
            vector2 = res2_dic['data']
            # 计算向量的内积
            dot_product = np.dot(vector1, vector2)

            # 计算向量的模长
            norm1 = np.linalg.norm(vector1)
            norm2 = np.linalg.norm(vector2)

            # 计算余弦相似度
            similarity = dot_product / (norm1 * norm2)
            if similarity > max_smi:
                max_smi = similarity
                max_target_idx = idx2

        print('idx1={},max_target_idx={},max_smi={}'.format(idx1, max_target_idx, max_smi))

若两个向量完全相同,则其余弦相似度接近 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1184382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Samtec连接器技术科普 | 无线电源充电和Samtec EMI技术

摘要/前言 还记得,数年前,第一次在民用层面大量出现无线充电的时候,我们大部分人都被这样的“黑科技”所震惊。 时至今日,从前只能在科幻电影中看到的场景,都在逐一成为现实,而无线电源、无线充电等应用早…

基于SSM框架的电脑测评系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

leetcode:762. 二进制表示中质数个计算置位(python3解法)

难度:简单 给你两个整数 left 和 right ,在闭区间 [left, right] 范围内,统计并返回 计算置位位数为质数 的整数个数。 计算置位位数 就是二进制表示中 1 的个数。 例如, 21 的二进制表示 10101 有 3 个计算置位。 示例 1&#xf…

爆火的小红书app拉新项目 地推网推百搭项目 附申请渠道

小红书app拉新在市场还是饱受地推团队和网推团队的喜爱,作业流程操作简单 可以通过“聚量推客”申请小红书app拉新推广 下面附送小红书app的拉新流程,目前也分为普通版本和高价版本(普通版本更稳定,高价版本属于短期活动&#x…

双11购物节想入手一款音画好的智能电视,大家推荐一下吧?

智能家电更新太快,不想三五年后就淘汰,那就入手东芝电视Z700吧,Z700这次把观影体验和音箱效果做到哇塞,既然要享受生活那就要享受高品质的体验。东芝电视拥有70余年的原色调校技术,每款产品都有专属的日本调校工程师匠心打造,可以真实还原画面色彩,而且还有火箭炮音响系统,也是…

安卓 车轮视图 WheelView kotlin

安卓 车轮视图 WheelView kotlin 前言一、代码解析1.初始化2.初始化数据3.onMeasure4.onDraw5.onTouchEvent6.其他 6.ItemObject二、完整代码总结 前言 有个需求涉及到类似这个视图,于是在网上找了个轮子,自己改吧改吧用,拿来主义当然后&…

com.genuitec.eclipse.springframework.springnature

com.genuitec.eclipse.springframework.springnature

计算机毕业论文内容参考|基于spingboot的金融投资顾问推荐系统

文章目录 导文文章重点摘要前言绪论课题背景:国内外现状与趋势:课题内容:相关技术与方法介绍系统分析系统设计系统实现总结与展望1本文总结2后续工作展望导文 计算机毕业论文内容参考|基于spingboot的金融投资顾问推荐系统 文章重点 摘要 基于SpingBoot的金融投资顾问推荐…

大功率电源的应用场景有哪些(高压功率放大器)

大功率电源的应用非常广泛,其应用场景包括但不限于以下几个方面: 工业生产:大功率电源广泛应用于各种工业生产领域,如机床、冶金、化工、电力等。例如,用于驱动液压系统、加热炉、电焊机等设备。 实验室研究&#xff1…

百分点科技受邀参加“第五届治理现代化论坛”

11月4日,由北京大学政府管理学院主办的“面向新时代的人才培养——第五届治理现代化论坛”举行,北京大学校党委常委、副校长、教务长王博,政府管理学院院长燕继荣参加开幕式并致辞,百分点科技董事长兼CEO苏萌受邀出席论坛&#xf…

Leetcode2918. 数组的最小相等和

Every day a Leetcode 题目来源:2918. 数组的最小相等和 解法1:贪心 设数组 nums1 的元素总和为 sum1,其中 0 的个数为 countZero1;数组 nums2 的元素总和为 sum2,其中 0 的个数为 countZero2。 题目要求我们必须…

selenium元素定位 —— 提高篇 CSS定位元素

CSS (Cascading Style Sheets) 是一种用于渲染 HTML 或者 XML 文档的语言,CSS 利用其选择器可以将样式属性绑定到文档中的指定元素。理论上说无论一个元素定位有多复杂都能够定位到元素。 因为不同的浏览器 XPath 引擎不同甚至没有自己的 Xpath 引擎,这…

SpringBoot整合Mybatis-plus代码生成器

整合代码生成器过程中,发现好多博主提供的无法使用,自己整合了一套,没有花里胡哨,直接可用 备注:常规的依赖自己导入,提供的这套,默认已经导入了mybatis-plus,srpingboot等依赖了. 1.maven依赖导入,版本号要与自己的版本号想同 <!--代码生成器依赖--><dependency>…

手撕 视觉slam14讲 ch13 代码 总结

运行效果 &#xff08;Kitti 00&#xff09;4倍速 一、代码 GitHub - tzy0228/Easy-VO-SLAM: VSLAM-CH13工程代码注释版本 二、编译过程 踩坑 视觉SLAM 十四讲第二版 ch13 编译及运行问题_全日制一起混的博客-CSDN博客 三、代码解读 手撕 视觉slam14讲 ch13 代码&#xff0…

共话医疗数据安全,美创科技@2023南湖HIT论坛,11月11日见

11月11日浙江嘉兴 2023南湖HIT论坛 如约而来 深入数据驱动运营管理、运营数据中心建设、数据治理和数据安全、数据资产“入表”等热点、前沿话题 医疗数据安全、数字化转型深耕者—— 美创科技再次深入参与 全新发布&#xff1a;医疗数据安全白皮书 深度探讨&#xff1a;数字…

7天入门python系列之准备工作

寄语 编者打算开一个python 初学主题的系列文章&#xff0c;用于指导想要学习python的同学。关于文章有任何疑问都可以私信作者。对于初学者想在7天内入门Python&#xff0c;这是一个紧凑的学习计划。但并不是不可完成的。 7天的安排 如果你想在7天内入门Python&#xff0c;…

QT开发的摄像头电子地图Demo(采用百度地图),提供源码下载

一、前言 本软件的工程是在QT-5.8 32位下开发&#xff0c;可以支持其他qtcreator 32位版本&#xff08;用32位是因为视频播放的码流库是32位&#xff09;。工程采用的地图是百度地图&#xff0c;需要在百度地图开发者网站上注册账号&#xff0c;并获取到密钥。本工程数据库采用…

【node+JS】前端使用nodemailer发送邮件

前言邮箱配置完整代码 前言 最近需要实现客户提交表单后&#xff0c;把表单的内容作为邮件发送到对应的邮箱&#xff0c;不通过后端服务&#xff0c;前端直接进行发送。嘶——&#xff0c;说干就干&#xff01; 一通搜索下来&#xff0c;get到方法有很多种&#xff0c;但是。。…

redis主从复制玩法全过程笔记(redis7+版本)

目录标题 环境目的实操一主多仆服务器和本地主机配置环境docker 环境配置 薪火相传反客为主 主从复制的流程主从复制的特性主从复制的缺点本篇结语 环境 我的环境介绍window环境VM虚拟机一台并安装centos7&#xff0c;一台阿里云Linux服务器&#xff0c;另一台Linux系统主机并…

【STM32】TIM2的PWM:脉冲宽度调制

PWM是一种周期固定&#xff0c;脉宽可调整的输出波形。 0.通用寄存器输出 1.捕获/比较通道1的主电路--中间部分 2.捕获/比较通道的输出部分--输出 3.通用定时器输出PWM原理 PWM波周期或者频率由ARR&#xff08;就是要进递增/递减的值&#xff09;决定&#xff0c;PWM波占空比由…