行人重识别Reid(一):Person_reID_baseline_pytorch

2024-03-20 21:20

本文主要是介绍行人重识别Reid(一):Person_reID_baseline_pytorch,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

行人重识别Reid(一):Person_reID_baseline_pytorch


文章目录

  • 行人重识别Reid(一):Person_reID_baseline_pytorch
  • 前言
  • 一、reid 定义
    • 1、什么是reid
    • 2、reid_baseline
  • 二、准备工作
    • 1、环境
    • 2、code
    • 3、数据
  • 三、训练
    • 1、生成训练数据
    • 2、开始训练
  • 四、测试
    • 1、特征提取
    • 2、评测
  • 五、简单的可视化
  • 六、总结


前言

最近项目上有人员轨迹识别的需求,传统使用手机基站定位法数据获取难度大,后来确定还是用图像识别的方法来做,据了解可以借助REID技术来实现。


一、reid 定义

1、什么是reid

简单理解就是,我们需要根据某行人A的图像,在图像候选集中找到该行人A的其他图像。reid 技术在实际场景中有着很重要的作用。

使用 reid 技术,我们便可以在一个监控系统中,构建行人的运动轨迹,并应用到各种下游任务。比如在小区监控系统中,我们在某个时刻锁定犯人A,根据 reid 技术,我们就可以在整个监控系统的中,自动的找出犯人A在整个小区监控中出现的图片,并确定他的运动轨迹,最终辅助警察抓捕。再比如在智慧商业场景中,我们可以根据 reid 技术描绘出每个消费者的商场运动轨迹和区域驻留时间,从而优化客流、辅助商品推荐等。。

reid 算法可以分解为以下3步:

  1. 特征提取:给定一个查询图片(query image)和大量的数据库图片(gallery
    images),提取出它们的语义特征。在这个特征空间,同一个人的图片距离尽可能小,不同人图片距离尽可能大。目前主流的 reid算法使用深度卷机神经网络(CNN,如 ResNet50)提取特征。
  2. 距离计算:得到查询特征(query feature)和数据库特征(gallery
    features)后,计算查询图片和数据库图片的距离。通常使用欧式(euclidean)、余弦(cosine)距离等。
  3. 排序返回:得到距离后,我们可以使用排序算法对样本进行排序,通过卡距离阈值或者K近邻的方法,返回最终样本。一般使用快速排序算法,其复杂度是
    O(NlogN),N 为数据库图片数量。

2、reid_baseline

reid_baseline(Person_reID_baseline_pytorch):reid_baseline 是一个基于pytorch实现的,小巧、友好并且强大的 reid baseline。它的性能媲美当前最好的公开方法(强大),支持fp16精度用2GB显存进行训练(小巧),并且提供了一个8分钟快速教程入门reid(新手友好)。该 baseline 由 Zhezhong Zheng 博士于2017年发布,至今 github star 数量已经超过 2k。

二、准备工作

1、环境

依赖pytorch环境,之前已配置好,在这复用即可,配置方法参考文章:图像识别(二):anaconda 配置pytorch环境,运行yolov5

2、code

项目地址:https://github.com/layumi/Person_reID_baseline_pytorch

3、数据

下载地址Market-1501

数据集简介:
Market-1501数据集在清华大学校园中采集,夏天拍摄,在2015年构建并公开。它包括由6个摄像头(其中5个高清摄像头和1个低清摄像头)拍摄的1501个行人的32217张图片。图片分辨率统一为128X64。每个行人至少由2个摄像头捕获到,并且在一个摄像头中可能具有多张图像。
训练集bounding_box_train有751人,包含12,936张图像,平均每个人有17.2张训练数据;
测试集bounding_box_test有750人,包含19,732张图像,平均每个人有26.3张测试数据;
查询集query有3368张查询图像。
该数据集提供的固定数量的训练集和测试集均可以在single-shot或multi-shot测试设置下使用。
参考文章行人重识别Market1501数据集介绍

三、训练

1、生成训练数据

MARK数据集下载解压后,文件分布如下:
在这里插入图片描述
准备训练数据需要通过prepare.py,将第五行的地址改为自己本地的地址
在这里插入图片描述
然后运行prepare.py文件,会生成一个pytorch文件夹
在这里插入图片描述
进入pytorch文件夹,文件分布如下:
在这里插入图片描述
现在我们已经成功准备好了图像来做后面的训练了。

2、开始训练

我们可以输入如下命令开始训练:

python train.py --gpu_ids 0 --name ft_ResNet50 --train_all --batchsize 32  --data_dir your_data_path

修改后

python train.py --gpu_ids 0 --name ft_ResNet50 --train_all --batchsize 32  --data_dir ./Market/pytorch/

默认训练60代,可修改train.py文件中默认参数
在这里插入图片描述

四、测试

1、特征提取

这一部分, 我们载入我们刚刚训练的模型 来抽取每张图片的视觉特征

python test.py --gpu_ids 0 --name ft_ResNet50 --test_dir your_data_path  --batchsize 32 --which_epoch 59

修改后

python test.py --gpu_ids 0 --name ft_ResNet50 --test_dir ./Market/pytorch/  --batchsize 32 --which_epoch 59

–gpu_ids which gpu to run.

–name the dir name of the trained model.

–batchsize batch size.

–which_epoch select the i-th model.

–data_dir the path of the testing data.

2、评测

现在我们有了每张图片的特征。 我们需要做的事情只有用特征去匹配图像。

python evaluate_gpu.py

mAP:0.7
在这里插入图片描述

五、简单的可视化

可视化结果,

python demo.py --query_index 600

在这里插入图片描述
–query_index which query you want to test. You may select a number in the range of 0 ~ 3367.

在这里插入图片描述
上图显示最相似的10张图片,可应用的场景很多。在实际人员轨迹应用中,可通过输出的摄像头编号,以及拍摄时间描述目标人员的行为轨迹。

六、总结

按照教程体验了一下reid_baseline,这个步骤比较简单,特记录一下,正在学习其他reid,希望后续能有所突破。

这篇关于行人重识别Reid(一):Person_reID_baseline_pytorch的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/830754

相关文章

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

Pytorch介绍与安装过程

《Pytorch介绍与安装过程》PyTorch因其直观的设计、卓越的灵活性以及强大的动态计算图功能,迅速在学术界和工业界获得了广泛认可,成为当前深度学习研究和开发的主流工具之一,本文给大家介绍Pyto... 目录1、Pytorch介绍1.1、核心理念1.2、核心组件与功能1.3、适用场景与优势总结1.4、优

conda安装GPU版pytorch默认却是cpu版本

《conda安装GPU版pytorch默认却是cpu版本》本文主要介绍了遇到Conda安装PyTorchGPU版本却默认安装CPU的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录一、问题描述二、网上解决方案罗列【此节为反面方案罗列!!!】三、发现的根本原因[独家]3.1 p

PyTorch中cdist和sum函数使用示例详解

《PyTorch中cdist和sum函数使用示例详解》torch.cdist是PyTorch中用于计算**两个张量之间的成对距离(pairwisedistance)**的函数,常用于点云处理、图神经网... 目录基本语法输出示例1. 简单的 2D 欧几里得距离2. 批量形式(3D Tensor)3. 使用不

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

判断PyTorch是GPU版还是CPU版的方法小结

《判断PyTorch是GPU版还是CPU版的方法小结》PyTorch作为当前最流行的深度学习框架之一,支持在CPU和GPU(NVIDIACUDA)上运行,所以对于深度学习开发者来说,正确识别PyTor... 目录前言为什么需要区分GPU和CPU版本?性能差异硬件要求如何检查PyTorch版本?方法1:使用命

pytorch自动求梯度autograd的实现

《pytorch自动求梯度autograd的实现》autograd是一个自动微分引擎,它可以自动计算张量的梯度,本文主要介绍了pytorch自动求梯度autograd的实现,具有一定的参考价值,感兴趣... autograd是pytorch构建神经网络的核心。在 PyTorch 中,结合以下代码例子,当你

在PyCharm中安装PyTorch、torchvision和OpenCV详解

《在PyCharm中安装PyTorch、torchvision和OpenCV详解》:本文主要介绍在PyCharm中安装PyTorch、torchvision和OpenCV方式,具有很好的参考价值,... 目录PyCharm安装PyTorch、torchvision和OpenCV安装python安装PyTor