基于matlab使用深度学习估计身体姿势(附源码)

一、前言

此示例演示如何使用 OpenPose 算法和预训练网络估计一个或多个人的身体姿势。

身体姿势估计的目标是识别图像中人的位置及其身体部位的方向。当场景中存在多个人时,由于遮挡、身体接触和相似身体部位的接近,姿势估计可能会更加困难。

有两种策略可以估计身体姿势。自上而下的策略首先使用物体检测识别个人,然后估计每个人的姿势。自下而上的策略首先识别图像中的身体部位,例如鼻子和左肘,然后根据可能的身体部位配对组装个体。自下而上的策略对遮挡和身体接触更稳健,但该策略更难实施。OpenPose是一种使用自下而上的策略的多人姿态估计算法。

为了识别图像中的身体部位,OpenPose使用预先训练的神经网络来预测输入图像中身体部位的热图和部分亲和场(PAF)。每个热图显示特定类型的身体部位位于图像中每个像素的概率。PAF 是指示两个身体部位是否连接的向量场。对于每种定义的身体部位配对类型,例如颈部到左肩,有两个 PAF 显示身体部位实例之间向量场的 x 和 y 分量。

为了将身体部位组装成个人,OpenPose算法执行一系列后处理操作。第一个操作使用网络返回的热图识别和定位身体部位。后续操作识别身体部位之间的实际连接,从而产生各个姿势。

二、导入网络

从 ONNX 文件导入预训练网络。下载并安装适用于 ONNX 模型格式的深度学习工具箱转换器支持包。如果未安装 ONNX 模型格式的深度学习工具箱转换器,则该函数将提供指向加载项资源管理器中所需支持包的链接。若要安装支持包,请单击链接,然后单击“安装”。如果安装了支持包,则该函数将返回一个对象。

移除未使用的输出图层。

三、预测测试图像的热图和 PAF

读取并显示测试图像。

网络需要数据类型在 [-0.5, 0.5] 范围内的图像数据。将数据移位并重新缩放到此范围。网络期望颜色通道按蓝色、绿色、红色的顺序排列。切换图像颜色通道的顺序。将图像数据存储为 .dlarray。预测热图和部分亲和场 (PAF),它们是从二维输出卷积层输出的。获取存储在 中的数字热图数据。数据有 19 个通道。每个通道对应于一个唯一身体部位的热图,还有一个额外的热图用于背景。以蒙太奇形式显示热图,将数据重新缩放到数据类型图像的预期范围 [0, 1]。场景有六个人,每个热图有六个亮点。

要可视化亮点与物体的对应关系,请在测试图像上以假彩色显示第一个热图。

OpenPose 算法不使用背景热图来确定身体部位的位置。删除背景热图。获取存储在 中的数字 PAF 数据。数据有 38 个通道。每种类型的身体部位配对都有两个通道,分别表示向量场的 x 和 y 分量。

以蒙太奇形式显示 PAF,将数据重新缩放到数据类型图像的预期范围 [0, 1]。这两列分别显示向量场的 x 分量和 y 分量。身体部位配对按值确定的顺序排列。

  • 具有大部分垂直连接的身体部位对的 y 分量配对量级较大,而 x 分量配对的值可以忽略不计。一个例子是右髋关节到右膝的连接,出现在第二行。请注意,PAF 取决于图像中的实际姿势。身体处于不同方向(例如躺下)的图像对于右髋关节到右膝的连接不一定具有较大的 y 分量大小。

  • 具有大部分水平连接的身体部位对的 x 分量配对量级较大,而 y 分量配对的值可以忽略不计。一个例子是颈部与左肩的连接,出现在第七行。

  • 成角度的身体部位对具有矢量场的 x 分量和 y 分量的值。一个例子是脖子到左臀部,出现在第一行。

为了可视化PAF与身体的对应关系,请在测试图像上以假彩色显示第一种身体部位对的x和y分量。

四、从热图和 PIF 中识别姿势

该算法的后处理部分使用神经网络返回的热图和 PAF 识别图像中人物的个人姿势。

使用帮助程序函数获取 OpenPose 算法的参数。该函数作为支持文件附加到示例。该函数返回一个结构,其中包含要考虑的身体部位数量和身体部位类型之间的连接等参数。这些参数还包括阈值,您可以调整这些阈值以提高算法的性能。

使用帮助程序功能识别个人及其姿势。此函数作为支持文件附加到示例。帮助程序函数执行姿势估计的所有后处理步骤:getBodyPoses

  1. 使用非最大抑制从热图中检测精确的身体部位位置。

  2. 对于每种类型的身体部位配对,在检测到的身体部位之间生成所有可能的配对。例如,生成六个颈部和六个左肩之间的所有可能的对。结果是一个二分图。

  3. 通过计算通过 PAF 向量场连接两个检测到的身体部位的直线的线积分来对配对进行评分。大分数表示检测到的身体部位之间存在紧密联系。

  4. 按分数对可能的配对进行排序并找到有效的对。有效的身体部位对是连接属于同一个人的两个身体部位的对。通常,得分最高的对首先被视为,因为它们最有可能是有效对。但是,该算法使用其他约束来补偿遮挡和邻近性。例如,同一个人不能有重复的身体部位对,一个身体部位不能属于两个不同的人。

  5. 知道哪些身体部位是连接的,将身体部位组装成每个人的单独姿势。

帮助程序函数返回三维矩阵。第一个维度表示图像中已识别人员的数量。第二个维度表示正文部分类型的数量。第三维表示每个人身体每个部位的 x 和 y 坐标。如果在图像中未检测到身体部位,则该部位的坐标为 [NaN NaN]。

五、程序

使用Matlab R2022b版本,点击打开。(版本过低,运行该程序可能会报错)

程序下载:基于matlab使用深度学习估计身体姿势资源-CSDN文库

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

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

相关文章

Spring概念:容器、Ioc、DI

目录 什么是容器? 什么是 IoC? 传统程序的开发 理解 Spring IoC DI 总结 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽庞⼤的社区,这就是它…

Swin Transformer训练报错问题

1. 训练遇到报错问题 (1)mportError: cannot import name _pil_interp from timm.data.transforms 原因: timm.data.transforms里面没有_pil_interp,只有str_to_pil_interp、_str_to_pil_interpolation、_pil_interpolation_to_s…

【Docker】docker安装配置Jenkins

docker 安装 Jenkins #拉镜像 docker pull jenkins/jenkins#创建卷(volume) docker volume create jenkins_home#制作容器并启动 docker run -d \ -p 8080:8080 \ -p 50000:50000 \ -v jenkins_home:/var/jenkins_home \ -v /usr/lib/jvm/java-8-openjdk-amd64:/usr/local/java…

如何将window文件夹挂载到VMware系统mnt目录

背景:项目开发过程中,通常是在Windows上编码,有些框架和软件只能够在Linux上面执行,如果在 VMware中的Linux上面开发不太方便,因此需要在Windows上面开发好再同步到Linux上面运行。 软件: Samba客户端 V…

配置Jenkins的slave agent并使用它完成构建任务

上一章,使用单机配置并运行了一个简单的maven项目,并发布到了一个服务器上启动。这一章将要配置一个slave agent,并将上一章的job放到agent上执行。我们agent使用的是ssh的方式 前置步骤 准备两台虚拟机: 192.168.233.32&#…

svn commit 用法

转载   原文:https://blog.csdn.net/qq_39790633/article/details/103700391 使用svn进行代码的提交有两种方法:一种是通过TortoiseSVN客户端界面进行提交,另一种是通过svn commit指令提交。 方法一:通过TortoiseSVN客户端界面提…

STM32速成笔记—IWDG

文章目录 一、IWDG简介二、STM32的IWDG2.1 STM32的IWDG简介2.2 喂狗2.3 IWDG框图 三、IWDG配置步骤四、IWDG配置程序4.1 IWDG初始化程序4.2 喂狗 五、应用实例 一、IWDG简介 独立看门狗(Independent Watchdog, IWDG),什么是看门狗&#xff1…

NVIDIA-Linux-x86_64-535.54.03.run cuda_12.2.0_535.54.03_linux.run下载地址

Official Drivers | NVIDIA Linux x64 (AMD64/EM64T) Display Driver | 535.54.03 | Linux 64-bit | NVIDIA 下载连接 Download NVIDIA, GeForce, Quadro, and Tesla DriversDownload drivers for NVIDIA graphics cards, video cards, GPU accelerators, and for other GeFor…

魔兽世界私人服务器怎么开

开设魔兽世界的私人服务器涉及到一系列复杂的步骤和技术要求。下面是一个大致的指南,以供参考: 1. 硬件需求:首先,你需要一台强大的服务器来承载游戏服务器。服务器的规模和配置将取决于你计划同时容纳多少玩家以及服务器的性能要…

.vm文件发邮件时js未生效,无法控制显示隐藏

需求起因 最近在做一个发邮件的功能,是后端发邮件,不过邮件内容是由前端来写。 邮件内容包括姓名、手机号、邮箱,这三个参数都是不一定有的,如果没有某个参数时,那一行内容就不显示。 写法没错,但就是js…

Java——抽象类和接口

抽象类 抽象类 使用abstract关键字定义的类称为抽象类 public abstract class Employee {private String name;private int number; }在 Java中抽象类不可以实例化为对象。例如: 抽象方法 使用abstract关键字定义的方法称为抽象方法。抽象方法没有方法体 抽象…

使用影刀RPA拆分excel数据

首先,要使程序有一定的兼容性,即增加互动性,认为选择要拆分的文件和拆分的依据列,可以利用影刀中的‘打开选择对话框’和‘打开输入对话框’来实现,这样一来便不用考虑待拆分excel的路径问题获取1中选择的依据拆分列&a…

CSS实现多头像叠加ui效果

第一种实现方式 简单粗暴直接使用margin-right实现&#xff0c;缺点是第一行右侧最右边头像溢出容器&#xff0c;代码中的三行注释的代码放开后可解决这个问题。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

【ISO26262】汽车功能安全第一部分:术语

【tommi_wei@163.com】 故障响应时间 fault reaction time 从故障(2.42) 探测到进入安全状态(2.102) 的时间间隔。 故障容错时间间隔 fault tolerant time interval 在危害事件(2.59) 发生前, 系统(2.129) 中一个或多个故障(2.42) 可存在的时间间隔。 功能安全 functio…

如何调用百度地图API

前言 要调用百度地图API&#xff0c;步骤操作如下 注册并创建一个API密钥。您可以在百度地图API控制台上创建您的密钥。选择要使用的API服务。百度地图API提供了多种服务&#xff0c;包括地图展示、路线规划、地点搜索、实时交通等。您可以在百度地图API控制台上查看所有可用…

Uniapp uni-app学习与快速上手

个人开源uni-app开源项目地址&#xff1a;准备中 在线展示项目地址&#xff1a;准备中 什么是uni-app uni&#xff0c;读 you ni&#xff0c;是统一的意思。 Dcloud即数字天堂(北京)网络技术有限公司是W3C成员及HTML5中国产业联盟发起单位&#xff0c;致力于推进HTML5发展构…

亚马逊云科技“专库专用”模式,可有效提高数据库的性能和效率

近日&#xff0c;全球数据库市场发生了一件令人瞩目的事件&#xff0c;根据Gartner的数据&#xff0c;我们发现亚马逊云科技作为一个纯云厂商&#xff0c;夺得了2022年全球数据库领导者的桂冠&#xff0c;占据全球市场的25.3%份额。 云原生数据库的发展方向&#xff1a;与数据分…

Python技术自学的方式

Python是一种高级编程语言&#xff0c;被广泛用于软件开发、数据分析、人工智能和科学计算等领域。它于1991年由Guido van Rossum创建&#xff0c;并且其简洁、易读的语法以及丰富的标准库使得它成为了初学者和专业开发人员的首选语言之一。 一、Python技术介绍 学习Python技术…

JumpServer开源堡垒机页面配置

JumpServer开源堡垒机页面配置 一、登录二、功能模块2.1、控制台2.1.1、用户管理2.1.1.1、用户列表2.1.1.2、用户组 2.1.2、资产管理2.1.2.1、资产列表2.1.2.1.1、创建服务器链接2.1.2.1.2、创建数据库MySQL链接 2.1.2.2、网域列表2.1.2.3、平台列表2.1.2.4、标签列表 2.1.3、账…

项目中遇到的问题总结(四)

GateWay和Nginx的相同点和不同点在哪里&#xff1f; Gateway 和 Nginx 都是常见的反向代理服务器&#xff0c;它们的相同点和不同点如下&#xff1a; 相同点&#xff1a; 都可以作为反向代理服务器&#xff0c;接收来自客户端的请求并转发到后端服务器进行处理。 都支持负载均…