行人重识别

news/2024/5/4 13:30:26/文章来源:https://blog.csdn.net/YOULANSHENGMENG/article/details/127048363

一、什么是行人重识别


    行人重识别(Person Re-identification也称行人再识别,简称为ReID,是利用计算机视觉技术判断图像或者视频序列中是否存在特定行人的技术;或者说,行人重识别是指在已有的可能来源与非重叠摄像机视域的视频序列中识别出目标行人。广泛被认为是一个图像检索的子问题。给定一个监控行人图像,检索跨设备下的该行人图像。在监控视频中,由于相机分辨率和拍摄角度的缘故,通常无法得到质量非常高的人脸图片。当人脸识别失效的情况下,ReID就成为了一个非常重要的替代品技术。ReID有一个非常重要的特性就是跨摄像头,所以学术论文里评价性能的时候,是要检索出不同摄像头下的相同行人图片。

       行人重识别的研究面临着诸如图像分辨率低、视角变化、姿态变化、光线变化以及遮挡等带来的诸多挑战。比如,1)监控视频的画面一般比较模糊,分辨率也比较低,如图4(a)所示,所以利用人脸识别等方式无法进行重识别的工作,只能利用头部之外的人体外观信息进行识别,而不同行人的体型和衣着服饰有可能相同,这为行人重识别的准确度带来了极大的挑战;此外实际视频监控下的场景非常复杂,周边杂物较多,场景复杂,画面很容易出现遮挡等情况,如图4(b), 这种时候靠步态等特征就很难进行重识别。行人重识别的图像往往采自于不同的摄像机,由于拍摄场景、摄像参数不同,行人重识别工作一般存在光照变化及视角变化等问题,如图4(c)、(d)所示,这导致同一个行人在不同摄像机下存在较大的差异,不同行人的外貌特征可能比同一个人的外貌特征更相似;进行重识别的行人图像可能拍摄于不同的时间,行人姿态、衣着会有不同程度的改变。此外在不同的光照条件下,行人的外观特征也会有很大的差异,如图4(e)。以上情况都给行人重识别的研究带来了巨大的挑战,因此目前的研究距离实际应用层面还有很大的距离。

     
   

 

二、环境搭建

参考博文的地址:

行人重识别Deep person reid源码测试(Torchreid)(一)_Ysn0719的博客-CSDN博客_torchreid

代码下载的地址:

GitHub - KaiyangZhou/deep-person-reid: Torchreid: Deep learning person re-identification in PyTorch.

论文的地址:

https://arxiv.org/abs/1910.10093

下载训练好的模型:

Model Zoo — torchreid 1.4.0 documentation

数据集下载:

Market-1501

2.1创建虚拟环境并安装配置软件

git clone GitHub - KaiyangZhou/deep-person-reid: Torchreid: Deep learning person re-identification in PyTorch.

# 然后重新创建一个python版本为3.7的虚拟环境,命名为torchreid

conda create --name torchreid python=3.7

#激活环境

conda activate torchreid

#找到你所下载的源码文件夹

cd deep-person-reid-master/

# 安装环境依赖,这个前提是保证你已经找到正确的源码路径以及各包版本正确

pip install -r requirements.txt

#安装pytorch

conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch

2.2 怎么运行

当将上面的依赖环境都安装完后,接下来使用源码中的py文件进行环境的配置:

# 最后一步安装torchreid的setup.py这个执行文件,环境就配置完成

python setup.py develop

可以参考以下网址的指导方法:

How-to — torchreid 1.4.0 documentation

根据网站上提示的测试方法,进行对应的测试:

2.3 训练

1.准备数据集

数据集在这里直接使用的是Market1501数据,需要先到网址下载这个数据,然后解压后,放置到源码"deep-person-reid-master"——>“reid-data”——>"market1501"文件夹下面。我的文件目录是下面这样的:

https://img-blog.csdnimg.cn/20201028132623224.png#pic_center

2.训练

在一层目录 deep-person-reid文件夹下面新建一个py文件下创建文件:

getstart30.py

文件的内容为:

其中训练后模型保存的路径,需要自己指定并创建文件夹。

# coding=gbk# 模块引入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'])# 构建模型、优化器和lr_schedulermodel = 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)# Build engineengine = 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)

3.测试

#测试

engine.run(

    save_dir='log/resnet50',

    max_epoch=60,

    eval_freq=10,

    print_freq=10,

    test_only=True,

    visrank=True

)

检测的结果会保存在:

'.../log/resnet50'的文件夹下面。

结果显示为:绿色表示是同一个人的标注,红色表示不是,0001表示的是第一个人

三、数据集说明

Market-1501

Market-1501 数据集在清华大学校园中采集,夏天拍摄,在 2015 年构建并公开。它包括由6个摄像头(其中5个高清摄像头和1个低清摄像头)拍摄到的 1501 个行人、32668 个检测到的行人矩形框。每个行人至少由2个摄像头捕获到,并且在一个摄像头中可能具有多张图像。训练集有 751 人,包含 12,936 张图像,平均每个人有 17.2 张训练数据;测试集有 750 人,包含 19,732 张图像,平均每个人有 26.3 张测试数据。3368 张查询图像的行人检测矩形框是人工绘制的,而 gallery 中的行人检测矩形框则是使用DPM检测器检测得到的。该数据集提供的固定数量的训练集和测试集均可以在single-shot或multi-shot测试设置下使用。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stack Smashing

Stack Smashing 当canary被覆盖后,会call到__stack_chk_fail打印argv[0]这个指针指向的字符串,默认是程序的名字,如果我们把它覆盖为其他的地址时,它就会把其他内存地址的信息给打印出来 Example:wdb2018_guess Analyze Arch: amd64-64-little RELRO: Partial RELRO…

3个超实用功能,华为手机负一屏应该这么用

现在越来越多人使用华为手机,但是你知道华为手机的负一屏吗?华为手机负一屏有哪些功能?华为手机的负一屏有以下3个超实用的功能,以后打开手机,你就可以快速找到自己想查看的东西了! 你可能会问华为手机的负…

C语言刷题(二)

✅作者简介:大家好我是:嵌入式基地,是一名嵌入式工程师,希望一起努力,一起进步! 📃个人主页:嵌入式基地 🔥系列专栏:牛客网C语言刷题专栏 💬推荐一…

保姆级, 使用 KotlinScript 构建 SpringBootStarter

因业务需要, 公司内需要使用 SpringBoot Starter 构建 SDK. 不同的是使用了更为灵活的 Kotlin 语言, 构建脚本也换成了 Kotlin Script. .kts本文主要分几个步骤: 用 Kotlin 写一个简单 SpringBoot Starter 进阶一: 复杂配置参数的写法 进阶二: starter 单元测试 使用 Kotlin …

【计算机组成原理】中央处理器(四)—— 控制器的功能和工作原理

【计算机组成原理】中央处理器(四)—— 控制器的功能和工作原理一、前言二、硬布线控制器(一)、安排微操作时序的原则1. 安排微操作时序-取指周期2. 安排微操作时序-间址周期3. 安排微操作时序-执行周期4. 安排微操作时序-间址周期…

Python算法性能分析-时间复杂度

时间复杂度: 算法的运行时间。 什么是大O: 大O用来表示上界的。 数据规模: 在决定使用哪些算法的时候,不是时间复杂越低的越好(因为简化后的时间复杂度忽略了常数项等等),要考虑数据规模&am…

没有项目经验,如何书写漂亮的简历?

嗨,同学 你们是不是也开始 国庆假期倒计时啦!!! 一想到熬过这周,接下来可以嗨7天7夜 就按捺不住自己内心的雀跃! 但是,有人却高兴不起来,因为在这个“金九银十”,一些同学还没找到…

接口(关注我还有后续哦)

👍 棒棒有言:现在学习Java变得比以前容易多了,除了有大量的视频教程外,还有专业的机构,这都使学习变得更加简单化。如果仅仅学了些皮毛,高手写的程序你是望尘莫及的。在学习的过程中,书籍永远是…

后台系统接入udesk在线客服(vue前端方式)

SDK最舒服的一点就是买来服务,直接Ctrl CV脚本进项目基本就能完成目标功能,要做的无非就是自定义属性的添加。 楼上项目组用的是java后端接入,我这儿是vue前端接入,做法略有不同。 简单点做就是复制上面script标签内代码到index.h…

关于SignalR的内容延续:1.协商协议 2.分布式部署

既然项目中用到了,那就搞搞清楚,搞不懂就死 : > 前置内容: 长轮询问题在ABP中的解决方案,SignalR_董厂长的博客-CSDN博客 “SingalR是对webSocekt的封装” ,这句话是片面的。 因为: SignalR支持多…

vue-----组件通信/传值

一 父子组件通信分为父给子传和子给父传 父给子传: 1.在子组件标签中写传入的值 2.在子组件内使用props接收父组件传递的值。 子给父传: 1.在子组件内部使用$emit发射自定义事件和传递给父组件的值 2.在父组件内声明自定义事件接受参数 二 兄弟组件…

真无线蓝牙耳机哪款音质最好?真无线蓝牙耳机音质排行榜

随着蓝牙技术的飞速发展,很多耳机的质量和质量都很好。喜欢音乐的人,往往会沉迷于这种美妙的感觉,也正是因为如此,他们才会对音质有更高的要求。除了音质之外,还有很多新的特性,例如主动降低噪音、声音操控…

全流程调度

目录 Azkaban 配置mysql 配置 Executor Server 配置Web Server Sqoop导出脚本 Azkaban 安装azkaban并改名 配置mysql 启动 [doudouhadoop102 ~]$ mysql -uroot -p123456登陆 MySQL,创建 Azkaban 数据库 mysql> create database azkaban;设置密码有效长度 …

一文入门Qt Quick

很高兴可以来到这一章,终于可以开始讲讲最近几年Qt的热门技术Quick这一块了。希望通过这个比较简短的例子可以带领有兴趣的朋友快速跨过Qt Quick的入门这道槛!以下内容为本人的著作,如需要转载,请声明原文链接 微信公众号「englyf」https://www.cnblogs.com/englyf/p/16733…

m基于matlab的光通信的信道估计,均衡,抑制papr误码率仿真,对比ZF,RLS,MMSE三种算法(包括matlab仿真录像)

目录 1.源码获取方式 2.算法描述 3.部分程序 4.部分仿真图预览 1.源码获取方式 使用版本matlab2013b 获取方式1: 点击下载链接(解压密码C123456): m基于matlab的光通信的信道估计,均衡,抑制papr误码…

libxml编译时问题解决记录

在对libxml进行模糊测试时,需要先将其拉去并进行编译,可参考此链接:magma本地编译 或者直接参考这个链接:magma编译libxml2 然而在编译的过程中,拉去完libxml2执行到这一句时报错如下: configure.ac:42: e…

Python骚操作,实现驾考自动答题,这就直接满分了?

Python骚操作来了~ 用Python来实现科目一/四自动答题,100分不要太简单! 最初是表弟最近想买车,但是驾照都没有,买什么车,只能先考驾照~ 看他在网页上练习题目慢吞吞的,我就看不下去了,直接给他…

《数据结构》队列及其经典面试题

前言 上一篇讲了栈和栈的经典面试题,链接如下: 栈与栈的经典面试题 其实栈和队列是一码事,都是对只能再线性表的一端进行插入和删除。 因此,其实栈和队列可以互相转换! 一、队列的特点 先进先出的数据结构&#…

Android系统安全 — 2.0-移动终端栈溢出的保护机制设置

简介 操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险。例如 NX/DEP、 ASLR(PIE)、CANARY、FORTIFY、RELRO 等手段。 栈保护 1.NX/DEP Linux 和 Windows 平台都支持对非可执行代码的保护,在 Linux 平台中被称为…

【Mybatis框架】初识Mybatis

CSDN话题挑战赛第2期 参赛话题:学习笔记 MyBatis1、MyBatis简介1.1、MyBatis历史1.2、MyBatis特性2. 搭建MyBatis2.1 创建一个Maven项目2.2 在项目下新建我们的MyBatis项目2.3 引入依赖2.4 创建MyBatis的核心配置文件2.5 创建mapper接口2.6 创建MyBatis的映射文件2.…