计算机设计大赛 深度学习实现行人重识别 - python opencv yolo Reid

文章目录

  • 0 前言
  • 1 课题背景
  • 2 效果展示
  • 3 行人检测
  • 4 行人重识别
  • 5 其他工具
  • 6 最后

0 前言

🔥 优质竞赛项目系列,今天要分享的是

🚩 **基于深度学习的行人重识别算法研究与实现 **

该项目较为新颖,适合作为竞赛课题方向,学长非常推荐!

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:5分

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

在这里插入图片描述

1 课题背景

行人重识别是计算机视觉领域的研究热点之一,旨在研究不重叠的多个摄像区域间对于特定行人的匹配准确率,是图像检索的子问题,多应用于安防和刑侦。我国实现的视频监控“天网”,就是通过在人流量大的公共区域密集安装监控设备来实现“平安城市”建设。尽管部分摄像头可转动,但仍存在监控盲区和死角等局限性问题,Re-
ID技术弥补了摄像设备的视觉局限性。然而,在实际应用中异时异地相同行人的图像数据,在姿势、前景背景、光线视角以及成像分辨率等方面差异大,使得Re-
ID研究具有挑战性。
行人重识别展示

2 效果展示

手动标记在这里插入图片描述
检测结果
在这里插入图片描述

3 行人检测

本项目实现了基于 yolo框架的行人目标检测算法,并将该目标检测算法应用在图像和视频的识别检测之中。

简介
下图所示为 YOLOv5 的网络结构图,分为输入端,Backbone,Neck 和 Prediction 四个部分。其中,
输入端包括 Mosaic 数据增强、自适应图片缩放、自适应锚框计算,Backbone 包括 Focus 结构、CSP
结 构,Neck 包 括 FPN+PAN 结 构,Prediction 包 括GIOU_Loss 结构。
在这里插入图片描述
Head输出层
输出层的锚框机制与YOLOv4相同,主要改进的是训练时的损失函数GIOU_Loss,以及预测框筛选的DIOU_nms。

对于Head部分,可以看到三个紫色箭头处的特征图是40×40、20×20、10×10。以及最后Prediction中用于预测的3个特征图:


①==>40×40×255

②==>20×20×255③==>10×10×255

在这里插入图片描述
相关代码

class Yolo(object):def __init__(self, weights_file, verbose=True):self.verbose = verbose# detection paramsself.S = 7  # cell sizeself.B = 2  # boxes_per_cellself.classes = ["aeroplane", "bicycle", "bird", "boat", "bottle","bus", "car", "cat", "chair", "cow", "diningtable","dog", "horse", "motorbike", "person", "pottedplant","sheep", "sofa", "train","tvmonitor"]self.C = len(self.classes) # number of classes# offset for box center (top left point of each cell)self.x_offset = np.transpose(np.reshape(np.array([np.arange(self.S)]*self.S*self.B),[self.B, self.S, self.S]), [1, 2, 0])self.y_offset = np.transpose(self.x_offset, [1, 0, 2])self.threshold = 0.2  # confidence scores threholdself.iou_threshold = 0.4#  the maximum number of boxes to be selected by non max suppressionself.max_output_size = 10self.sess = tf.Session()self._build_net()self._build_detector()self._load_weights(weights_file)

4 行人重识别

简介
行人重识别(Person re-identification)也称行人再识别, 被广泛认为是一个图像检索的子问题,
是利用计算机视觉技术判断图像或者视频中是否存在特定行人的技术,
即给定一个监控行人图像检索跨设备下的该行人图像。行人重识别技术可以弥补目前固定摄像头的视觉局限, 并可与行人检测、行人跟踪技术相结合,
应用于视频监控、智能安防等领域。
在这里插入图片描述行人重识别系统

行人检测
主要用于检测视频中出现的人像,作为一个行人重识别首先要做到的就是能够将图片中的行人识别出来,称为Gallery输入。当然,在学术研究领域,行人重识别主要还是关注的下面这个部分,而对于行人检测这部分多选择采用目前已经设计好的框架。
行人重识别
这一部分就是对上面的Probe以及Gallery进行特征提取,当然提取的方式可以是手工提取,也可以使用卷积神经网络进行提取。然后呢,就是对图片的相似度进行度量,根据相似图进行排序。
针对行人重识别系统从细节来说,包括下面几个部分:

  • 特征提取(feature Extraction):学习能够应对在不同摄像头下行人变化的特征。
  • 度量学习(Metric Learning) :将学习到的特征映射到新的空间使相同的人更近不同的人更远。
  • 图像检索(Matching):根据图片特征之间的距离进行排序,返回检索结果

Reid提取特征
行人重识别和人脸识别是类似的,刚开始接触的可以认为就是人脸换成行人的识别。

  1. 截取需要识别的行人底库
    在这里插入图片描述

  2. 保存行人特征,方便进行特征比对

相关代码

# features:reid模型输出512dim特征
person_cossim = cosine_similarity(features, self.query_feat)
max_idx = np.argmax(person_cossim, axis=1)
maximum = np.max(person_cossim, axis=1)
max_idx[maximum < 0.6] = -1
score = maximum
reid_results = max_idx
draw_person(ori_img, xy, reid_results, self.names)  # draw_person name

5 其他工具

OpenCV
是一个跨平台的计算机视觉处理开源软件库,是由Intel公司俄罗斯团队发起并参与和维护,支持与计算机视觉和机器学习相关的众多算法。
在这里插入图片描述
本项目中利用opencv进行相关标记工作,相关代码:

import cv2
import numpy as npdef cv_imread(filePath):cv_img = cv2.imdecode(np.fromfile(filePath,dtype=np.uint8), -1)return cv_img# 需要可视化的图片地址
img_path = ‘’
# 对应图片的检测结果
detection_result = []# 如果路径中包含中文,则需要用函数cv_imread的方式来读取,否则会报错
img = cv_imread(img_path)# 可视化
for bb in detection_result:# bb的格式为:[xmin, ymin, xmax, ymax]cv2.rectangle(img, (int(bb[0]), int(bb[1])),(int(bb[2]), int(bb[3])),(255, 0, 0), 2)cv2.imshow('1', img)
cv2.waitKey(0)

6 最后

🧿 更多资料, 项目分享:

https://gitee.com/dancheng-senior/postgraduate

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

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

相关文章

vue3使用elementPlus进行table合并处理

elementPlus中table合并部分列 虚拟数据中公司下有多个客户&#xff0c;公司一样的客户&#xff0c;公司列需要合并&#xff0c;客户如果一样也需要合并进行展示&#xff0c;效果展示 const tableData ref([])自定定义自已想要的数据&#xff0c;一般都是通过接口拿到 //table…

ubuntu+QT+ OpenGL环境搭建和绘图

一&#xff0c;安装OpenGL库 安装OpenGL依赖项&#xff1a;运行sudo apt install libgl1-mesa-glx命令安装OpenGL所需的一些依赖项。 安装OpenGL头文件&#xff1a;运行sudo apt install libgl1-mesa-dev命令来安装OpenGL的头文件。 安装GLUT库&#xff1a;GLUT&#xff08;Ope…

亚马逊巨头都在用的自养号大法,赶快get!

随着时间的推移&#xff0c;越来越多做亚马逊生意的朋友开始意识到自养号的重要性。拥有自养号意味着掌握了一手资源&#xff0c;这种自主性让人感到更安全。高权重的买家号可以享有更多的操作权限&#xff0c;也能获得更好的效果。然而&#xff0c;要想成功地养好自养号并不是…

Netty权威指南——基础篇2(NIO编程)

1 概述 与Socket类和ServerSocket&#xff0c;NIO也提供了SocketChannel和ServerSocketChannel两种不同的套接字通道实现。这两种新增的通道都支持阻塞和非阻塞两种模式。阻塞模式使用简单&#xff0c;但性能和可靠性都不好&#xff0c;非阻塞模式则正好相反。一般来说&#xf…

python Matplotlib Tkinter-->导出pdf报表

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 reportlab 4.0.9 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.messagebox as messagebox impor…

46.仿简道云公式函数实战-文本函数-CHAR

1. CHAR函数 函数可将计算机其他类型的数字代码转换为字符。 2. 函数用法 CHAR(number) CHAR 函数可将计算机其他类型的数字代码转换为字符。 Number&#xff1a;用于指定字符的数字。 3. 函数示例 CHAR(10)&#xff0c;即返回值为换行字符"\n"。 目前仿简道…

电脑背景图片怎么设置?这个方法让你一目了然

电脑背景图片的设置是个性化电脑桌面的重要步骤之一。一张美观的背景图片不仅可以为电脑带来视觉愉悦&#xff0c;还能反映个人品味和风格。在本文中&#xff0c;我们将介绍电脑背景图片的设置方法&#xff0c;共包括三种方式&#xff0c;通过分步骤详细说明&#xff0c;帮助用…

解决Maven爆红以及解决 Idea 卡在 Resolving问题

关于 Idea 卡在 Resolving&#xff08;前提是Maven的setting.xml中配置好了阿里云和仓库&#xff09; 参考文章https://blog.csdn.net/jiangyu1013/article/details/95042611 解决Maven爆红参考文章https://devpress.csdn.net/beijing/656d993b76f0791b6eca7bb0.html?dp_toke…

IP 电话

1 IP 电话概述 IP 电话是在互联网上传送多媒体信息。 多个英文同义词&#xff1a; VoIP (Voice over IP) Internet Telephony VON (Voice On the Net) 1.1 狭义的和广义的 IP 电话 狭义的 IP 电话&#xff1a;指在 IP 网络上打电话。 广义的 IP 电话&#xff1a;不仅仅是…

路由器端口映射如何配置?

在网络通信中&#xff0c;路由器是一个重要的设备&#xff0c;它负责将数据包从一个网络传输到另一个网络。路由器的端口映射配置是一种重要的设置&#xff0c;可以使外部网络中的计算机通过访问路由器上的特定端口与内部网络中的计算机进行通信。本文将介绍什么是路由器端口映…

24考研成绩查询时间已公布!附最全查分攻略!

2月26日早上9点起&#xff01; 2024考研初试成绩即将公布&#xff01; 考研初试成绩即将公布&#xff0c;同学们都在紧张地期待着自己的成绩。不同院校的成绩查询入口开通时间有所不同&#xff0c;具体时间请大家查看各自官网的通知。 成绩在哪查&#xff1f;怎么查&#xff1…

【力扣 - 爬楼梯】

题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 方法一&#xff1a;动态规划 思路和算法 我们用 f(x) 表示爬到第 x 级台阶的方案数&#xff0c;考虑最后一步可能跨了一级台阶&#…

LeetCode_Java_转变日期格式、种花问题(题目+思路+代码)

目录 1507. 转变日期格式 605.种花问题 1507. 转变日期格式 给你一个字符串 date &#xff0c;它的格式为 Day Month Year &#xff0c;其中&#xff1a; Day 是集合 {"1st", "2nd", "3rd", "4th", ..., "30th", "3…

Qt篇——QTableWidget保存表格数据到Excel文件中

代码如下&#xff1a; &#xff08;pro文件中添加QT axcontainer&#xff09; #include <QAxObject>void MainWindow::saveTableToExcel() {QDateTime current_date_time QDateTime::currentDateTime();QString excelName "data_" current_date_time.toSt…

Mysql 高可用解决方案

1.环境说明 操作系统&#xff1a;centos7.7 主服务器&#xff1a;node2(192.168.1.102) 从服务器&#xff1a;node3(192.168.1.103) keepalived中虚拟ip(VIP):192.168.1.100 2.准备事项 主库和从库数据库的版本一致把主库的数据同步给从库一份 3.主库配置 3.1 编辑MySQL配…

ETL是什么

一、ETL概念 ETL&#xff0c;是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从来源端经过抽取&#xff08;extract&#xff09;、转换&#xff08;transform&#xff09;、加载&#xff08;load&#xff09;至目的端的过程。ETL一词较常用在数据仓库&#xff…

Gemma谷歌(google)开源大模型微调实战(fintune gemma-2b)

Gemma-SFT Gemma-SFT(谷歌, Google), gemma-2b/gemma-7b微调(transformers)/LORA(peft)/推理 项目地址 https://github.com/yongzhuo/gemma-sft全部weights要用fp32/tf32, 使用fp16微调十几或几十的步数后大概率lossnan;(即便layer-norm是fp32也不行, LLaMA就没有这个问题, …

2024程序员容器化上云之旅-第2集-Ubuntu-WSL2-Windows11版:接近深洞

故事梗概 Java程序员马意浓在互联网公司维护老旧电商后台系统。 渴望学习新技术的他在工作中无缘Docker。 他开始自学Vue3并使用SpringBoot3完成了一个前后端分离的Web应用系统&#xff0c;并打算将其用Docker容器化后用K8s上云。 3 挑选工具 马意浓画好架构图后&#xff…

安防视频监控平台EasyNVR级联视频上云管理平台EasyNVS,出现报错“i/o deadline reached”该如何解决?

上云网关管理平台EasyNVS视频综合管理系统具备汇聚与管理EasyGBS、EasyNVR等平台的能力&#xff0c;系统可以将接入的视频资源实现视频能力统一输出&#xff0c;并能进行远程可视化运维等管理功能&#xff0c;还能解决设备现场没有固定公网IP却需要在公网直播的需求。 有用户反…

SwiftUI中Toggle与Slider的使用

在SwiftUI中&#xff0c;Toggle和Slider是两个常用的UI控件&#xff0c;可以用来添加开关和滑块功能。 Toggle() Toggle控件用于在打开和关闭之间切换。可以使用Toggle来创建一个简单的开关&#xff0c;代码如下&#xff1a; State private var isOn falsevar body: some V…