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

news2025/4/5 5:35:28

一、前言

此示例演示如何使用 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文库

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

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

相关文章

【手撕算法|动态规划系列No.1】leetcode1137. 第 N 个泰波那契数

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

【C/C++】数组指针:array 地址 array *parray 两次解引用 **parray 值相同的原因解析

一、提出问题 #include <stdio.h>int main() { char array[16] {A, B}; char (*parray)[16] &array; printf("\n");printf(" array: \t%#lx\n", array); printf("& array: \t%#lx\n", &array); printf("…

SQL server 2012 配置数据库邮件实现邮件发送

日常开发中经常遇到邮件推送场景&#xff0c;我们可以利用SQL server也可以实现邮件发送功能。 一、配置邮件服务器 然后再弹出的页面中选择下一步 输入配置文件名&#xff0c;并添加新用户 在弹出的页面配置邮件服务器的地址、用户名、密码等相关信息 以上信息完成&#xff0…

树莓派 Raspberry Pi Zero 2W 安装默认系统时 ssh 登录并开启摄像头推流一段时间B

Raspberry Pi Zero 2W有点鸡肋&#xff0c;hdmi口用的microhdmi口&#xff0c;不是树莓派4b的minihdmi口&#xff0c;然后zero 2W也没有usb接口&#xff0c;有一个microusb安卓的otg接口&#xff0c;很烦&#xff0c;还好有wifi蓝牙模块&#xff0c;这样子还能ssh&#xff0c;不…

【冒泡排序】

前言 在计算机科学中&#xff0c;排序算法是一种常见且重要的算法。排序算法的目标是将一组无序的数据按照一定的规则进行重新排列&#xff0c;以便更方便地进行搜索、查找或其他操作。 冒泡排序&#xff08;Bubble Sort&#xff09;是最简单的排序算法之一&#xff0c;它的原…

基于Python+MySQL所写的商城管理系统

点击以下链接获取源码资源&#xff1a; https://download.csdn.net/download/qq_64505944/87971437?spm1001.2014.3001.5503 《51商城》程序使用说明 51商城项目分为网站前台和后台两个部分&#xff0c;下面将分别介绍这2个部分的使用。 1.网站前台 在虚拟环境中启动程序后&a…

Callback自定义测试-业务安全测试实操(23)

Callback自定义测试 测试原理和方法 在浏览器中存在着同源策略,所谓同源是指域名、协议、端口相同。当使用Aiax异步传输数据时,非同源域名之间会存在限制。其中有一种解决方法是JSONP (JSONwithPadding),基本原理是利用了HTML里<script></script>元素标签,远程…

Python 对象拷贝的那点事?

1.变量&#xff0c;引用和对象 变量无类型&#xff0c;它的作用仅仅在某个时候引用了特定的对象而已&#xff0c;具体在内存中就是一个指针&#xff0c;仅仅拥有指向对象的空间大小。 变量和对象的关系在于引用&#xff0c;变量引用对象后&#xff0c;也就对应了赋值的过程。…

VBA快速合并数据

实例需求&#xff1a;原始数据保存在工作表的A列至C列&#xff0c;现需要根据材料编号合并交付日期和交付数量&#xff0c;并且交付日期的日期格式采用两位数字年份简写格式&#xff0c;合并后的数据保存在E列和F列&#xff0c;如下图所示。 示例代码如下。 Sub demo()Dim o…

MSP430F249 Proteus仿真数码管秒表-0050

MSP430F249 Proteus仿真数码管秒表-0050 Proteus仿真小实验&#xff1a; MSP430F249 Proteus仿真数码管秒表-0050 功能&#xff1a; 硬件组成&#xff1a;MSP430F249单片机 2位数码管2个按键&#xff08;清零 开始/暂停&#xff09; 1.点击开始键后数码管开始秒表计时0~9…

Spring Cloud - HTTP 客户端 Feign 、自定义配置、优化、最佳实践

目录 一、Feign 是什么&#xff0c;有什么用呢&#xff1f; 二、Feign 客户端的使用 2.1、远程调用 1.引入依赖 2.在order-service&#xff08;发起远程调用的微服务&#xff09;的启动类添加注解开启Feign的功能 3.编写 Feign 客户端 4.通过 Feign 客户端发起远程调用 …

附件1.服务器操作系统安全加固要求及配置建议【上】

文章目录 加固文件说明【重启auditd服务后/etc/audit/audit.rules文件内容消失怎么处理】【用户的的本地登录和远程登录默认都会被审计&#xff1b; 2&#xff0c;可配置对chown、chmod、chcon等命令的执行进行审计&#xff1b;【ssh会话默认会被审计&#xff1b;】【可添加审计…

kafka入门用这一篇就够了!

目录 1&#xff0c;kafka简单介绍 2&#xff0c;kafka使用场景 3&#xff0c;kafka基本概念 kafka集群 数据冗余 分区的写入 读取分区数据 顺序消费 提交策略 零拷贝技术&#xff08;netty&#xff09; 1&#xff0c;kafka简单介绍 kafka是一款分布式、支持分区的、多…

3.springboot开发篇

SpringBoot开发实用篇 ​ KF-1.热部署 热部署是不用重启项目&#xff0c;项目自动更新 非springboot项目热部署实现原理 ​ 开发非springboot项目时&#xff0c;我们要制作一个web工程并通过tomcat启动&#xff0c;通常需要先安装tomcat服务器到磁盘中&#xff0c;开发的程序…

【openGauss数据库】--运维指南02-逻辑备份与恢复

【openGauss数据库】--运维指南02-逻辑备份与恢复 &#x1f53b; 一、 openGauss数据库备份与恢复概述&#x1f530; 1.1 备份与恢复类型&#x1f530; 1.2 类型对比 &#x1f53b; 二、 配置文件的备份与恢复&#x1f53b; 三、逻辑备份----gs_dump & gs_dumpall&#x1…

Uipath Excel 实战01-自动生成流水号最佳方法

Uipath RPA 自动生成流水号最佳方法&#xff0c;提高RPA 性能&#xff0c;速度毫秒级。通过本案例将学会Excel 写入单元格、Excel 自动填充公式、Excel 自动调整列范围、保存Excel 文件以及使用Excel 函数。 公式参考&#xff1a; Excel公式参考&#xff1a; Excel CONCATENAT…

动态规划——地下城游戏

题目链接 leetcode在线oj题——地下城游戏 题目描述 恶魔们抓住了公主并将她关在了地下城 dungeon 的 右下角 。地下城是由 m x n 个房间组成的二维网格。我们英勇的骑士最初被安置在 左上角 的房间里&#xff0c;他必须穿过地下城并通过对抗恶魔来拯救公主。 骑士的初始健…

chatgpt赋能python:线上免费Python教程推荐

线上免费Python教程推荐 Python作为一门简单易学的编程语言&#xff0c;在各个行业和领域都越来越受欢迎。很多人想学Python&#xff0c;但是可能因为费用等问题而卡住了。今天&#xff0c;我们来介绍一些免费的Python教程&#xff0c;帮助那些想要学习Python但没有预算的人。…