当前位置: 首页 > news >正文

人体姿态估计算法

人体姿态估计算法

  • 1 什么是人体姿态估计
  • 2 基于经典传统和基于深度学习的方法
    • 2.1 基于经典传统的人体姿态估计算法
    • 2.2 基于深度学习的人体姿态估计算法
      • OpenPose
      • AlphaPose (RMPE)
  • 3 算法应用
  • 4 Paper

人体姿态估计在现实中的应用场景很丰富,如下

动作捕捉:三维特效场景
人机交互:动作控制、手势控制
VR, AR:元宇宙数字人、抖音尬舞机、3D试衣、虚拟主播
肢体语言理解:机场、交警警察手势翻译、手语翻译
摔倒检测、健身、跳舞、球类、武术运动指导、穴位定位
步态分析、识别身份、异常动作识别

其中关键点检测是最开始的一步,本文主要对第一步的关键点检测进行一个概述,方便大家更快速的了解这里面涉及到的算法原理,属于科普文章。

1 什么是人体姿态估计

人体姿态估计(Human Pose Estimation, HPE) 是一种识别和分类人体关节的方法。本质上,它是一种捕获每个关节(手臂、头部、躯干等)的一组坐标的方法,该坐标被称为可以描述人的姿势的关键点(keypoint)。
在这里插入图片描述

人体姿势估计模型主要有三种类型: 这三种类型是随着应用逐步发展出来的,先检测关键点,类似于火柴人,进一步的检测出人的轮廓,再根据轮廓进一步的把人体进行3D重建。

  1. 基于骨架的模型(Skeleton-based model): 也称为运动学模型,该模型包括一组关键点(关节),例如脚踝、膝盖、肩膀、肘部、手腕和肢体方向,主要用于 3D 和 2D 姿势估计。

    这种灵活直观的人体模型包含人体的骨骼结构,经常用于捕捉不同身体部位之间的关系。

  2. 基于轮廓的模型(Contour-based model): 也称为平面模型,用于二维姿态估计,由身体、躯干和四肢的轮廓和粗略宽度组成。 基本上,它代表人体的外观和形状,其中身体部位用人的轮廓的边界和矩形显示。

    一个著名的例子是主动形状模型(ASM),它采用主成分分析(PCA)技术捕获整个人体图形和轮廓变形。

  3. 基于体积的模型(Volume-based model): 也称为体积模型,用于 3D 姿态估计。 它由多个流行的 3D 人体模型和由人体几何网格和形状表示的姿势组成,通常用于基于深度学习的 3D 人体姿势估计。

在这里插入图片描述

2 基于经典传统和基于深度学习的方法

2.1 基于经典传统的人体姿态估计算法

早期人体姿态估计的经典传统方法是在“图结构框架(pictorial structure framework , PSF)”内应用随机森林。 该模型的特点在于引入人体生理结构作为先验知识,人体被预先表示为多个具有空间约束的部位,且每个部分都被看作是刚体。即先识别人体身体部位,再识别姿势。
在这里插入图片描述
本质上,PSF 的目标是将人体表示为给定输入图像中每个身体部位的坐标集合; PSF 使用非线性联合回归器,理想情况下是两层随机森林回归器。

PSF优势在于当输入图像具有清晰可见的肢体时,这些模型效果很好,但是它们无法捕获和建模隐藏或从某个角度不可见的肢体。

为了克服这些问题,使用了诸如面向直方图的高斯(HOG)、轮廓、直方图等特征构建方法。 尽管使用了这些方法,但经典模型缺乏准确性、相关性和泛化能力。

2.2 基于深度学习的人体姿态估计算法

在计算机视觉任务方面,在HPE中,跟其他任务一样,深度卷积神经网络 (CNN) 的出现导致算法效果开启了腾飞模式。

  1. CNN 能够从给定的输入图像中提取特征,其精度和准确性比任何其他算法都更高;
  2. CNN泛化能力强(如果给定的隐藏层中存在足够数量的节点);
  3. 相比传统经典方法,传统方法中的特征提取、模版是人工制作的,人工设计的特征鲁棒性很差,学习到的特征复杂度有限。而且不一定是科学的,光照条件、拍摄角度等一变化,可能会导致检测失败。

Toshev等人于2014年首次使用CNN来估计人体姿势,从基于经典的方法转向基于深度学习的方法,发布的论文命名为 DeepPose: Human Pose Estimation via Deep Neural Networks.

作者还提出了另一种方法,他们实现了此类回归器的级联,以获得更精确和一致的结果。 他们认为,所提出的深度神经网络可以以整体方式对给定数据进行建模,即网络具有对隐藏姿势进行建模的能力,这对于经典方法来说是不正确的。

随着深度学习的发展,同时也带来了新的挑战,其中之一是解决多人姿态估计。深度学习在估计单人姿态方面很熟练,但是估计多人姿态时却很困难,原因是一张图像可以包含多个处于不同位置的人,随着人数的增加,相互之间的相互作用增加导致计算复杂性。计算复杂性的增加通常会导致实时推理时间的增加。

为了解决以上问题,引入了两个方法:Top Down和Bottom Up

  1. Top Down:自顶向下,即先检测每个人的框,再每个人再单独预测关键点;
  2. Bottom Up:自底向上,即先检测所有关键点,再组装成每个人
    在这里插入图片描述

OpenPose

是一种自底而上的方法,网络首先检测图像中的身体部位或关键点,然后组装成一个人。OpenPose 使用多级联的 CNN 作为主要架构,由 VGG-19 卷积网络组成,用于特征提取。

预测分支有两个:
1. 第一个分支预测每个身体部位的置信度图;
2. 第二个分支预测部位亲和力场 (Part Affinity Field, PAF),将不同部位关联起来组成一个人。

在这里插入图片描述
OpenPose pipeline如下:
在这里插入图片描述

AlphaPose (RMPE)

采用自顶而下的方法,会在预测过程中产生大量定位错误和不准确性。
在这里插入图片描述
例如,上图显示了两个边界框,红色框代表真实值,而黄色框代表预测边界框。

在分类方面,黄色边界框将被视为对人类进行分类的“正确”边界框,即使使用“正确”的边界框,也无法估计人体姿势。

AlphaPose 的作者通过两步框架解决了人体检测不完美的问题。 在此框架中,他们引入了两个网络:

对称空间变换网络(SSTN): 有助于在输入中裁剪出适当的区域,从而简化分类任务,从而获得更好的性能。
单人姿势估计器(SPPE): 用于提取和估计人体姿势。

AlphaPose 的目标是通过将 SSTN 附加到 SPPE,从不准确的边界框中提取高质量的单人区域。 该方法通过解决不变性问题来提高分类性能,同时提供稳定的框架来估计人体姿势。
在这里插入图片描述

3 算法应用

动作捕捉:三维特效场景
人机交互:动作控制、手势控制
VR, AR:元宇宙数字人、抖音尬舞机、3D试衣、虚拟主播
肢体语言理解:机场、交警警察手势翻译、手语翻译
摔倒检测、健身、跳舞、球类、武术运动指导、穴位定位
步态分析、识别身份、异常动作识别

4 Paper

把一些经典的算法paper列举在下面,供大家参考:

  1. DeepPose: Human Pose Estimation via Deep Neural Networks. CVPR, 2014 首个使用深度卷积神经网络实现人体姿态估计, regression方法
  2. Efficient Object Localization Using Convolutional Networks, CVPR, 2015 首个使用heatmap方法
  3. OpenPose 经典多人姿态估计方法, Bottom-Up
  4. RMPE: Regional Multi-person Pose Estimation, 2018 Top-Down
  5. DeepCut: Joint Subset Partition and Labeling for Multi Person Pose Estimation Bottom-Up方法
  6. Mask R CNN 人体检测和关键点检测独立并行, 类似Top-Down方法
  7. Simple Baselines for Human Pose Estimation and Tracking,EECV, 2018
  8. HRNet: Deep High-Resolution Representation Learning for Visual Recognition
  9. RLE: Human Pose Regression with Residual Log-likelihood Estimation

相关文章:

人体姿态估计算法

人体姿态估计算法 1 什么是人体姿态估计2 基于经典传统和基于深度学习的方法2.1 基于经典传统的人体姿态估计算法2.2 基于深度学习的人体姿态估计算法OpenPoseAlphaPose (RMPE) 3 算法应用4 Paper 人体姿态估计在现实中的应用场景很丰富,如下 动作捕捉:三…...

docker部署jupyter

文章目录 1.搜索镜像2.拉取镜像3.创建挂载4.运行容器4.查看容器运行运行状态5.token查看6.访问jupyter 1.搜索镜像 docker search jupyter: 命令用于在 Docker Hub 上搜索名为 “jupyter” 的镜像。搜索结果显示了一个名为 “jupyter/datascience-notebook” 的镜像&#xff0…...

音视频的功耗优化

前言 在应用中,录制与音视频模块往往是高耗能的模块,设备容易发热,影响体验。 什么是功耗优化 手机有多个耗电模块, SOC(CPU,GPU,DDR),Display,Audio,Video&#xff0…...

Python实现FA萤火虫优化算法优化XGBoost回归模型(XGBRegressor算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 萤火虫算法(Fire-fly algorithm,FA)由剑桥大学Yang于2009年提出 , …...

SCAUoj综合性实验

Last One ! 文章目录 1109 综合实验:文件操作与字符处理总结 1109 综合实验:文件操作与字符处理 时间限制:4000MS 代码长度限制:10KB 提交次数:6265 通过次数:1646 题型: 填空题 语言: GCC Description 在当前目录中存在文件名为"case1.in"&…...

智加科技获全国首张重卡无人驾驶开放道路测试牌照

2023年12月1日,智加科技获得苏州市智能网联汽车无人化测试牌照。该牌照也是江苏省及国内首张无人重卡开放高速公路全路段全场景全息路网(S17苏台高速)道路测试牌照。 该重卡无人驾驶开放道路测试牌照,经由苏州市智能网联汽车联席小…...

LLM大语言模型(一):ChatGLM3-6B本地部署

目录 前言 本机环境 ChatGLM3代码库下载 模型文件下载 修改为从本地模型文件启动 启动模型网页版对话demo 超参数设置 GPU资源使用情况 (网页对话非常流畅) 前言 LLM大语言模型工程化,在本地搭建一套开源的LLM,方便后续的…...

chatgpt prompt提示词

chatgpt的接口是一个标准的http请求,请求的url为 POST https://api.openai.com/v1/chat/completions 官方的接口文档地址为:https://platform.openai.com/docs/api-reference/chat/create Example request curl https://api.openai.com/v1/chat/comp…...

【PyTorch】数据集

文章目录 1. 创建数据集1.1. 直接继承Dataset类1.2. 使用TensorDataset类 2. 数据集的划分3. 加载数据集4. 将数据转移到GPU 1. 创建数据集 主要是将数据集读入内存,并用Dataset类封装。 1.1. 直接继承Dataset类 必须要重写__getitem__方法,用于根据索…...

oops-framework框架 之 本地存储(五)

引擎: CocosCreator 3.8.0 环境: Mac Gitee: oops-game-kit 注: 作者dgflash的oops-framework框架QQ群: 628575875 简介 在CocosCreator中,本地存储主要使用sys.localStorage 接口,通过 key-value的格式进…...

编程常见的问题

在现代社会中,编程已经成为一项非常重要的技能。随着科技的不断发展和普及,计算机已经渗透到我们生活的方方面面,从个人电脑、手机到智能家居、自动驾驶等。编程作为计算机科学的基础,为我们提供了解决问题和创造新事物的工具和方…...

针对Arrays.asList的坑,可以有哪些处理措施

上文讲述:Error querying database. Cause: java.lang.reflect.InaccessibleObjectException: 那么如果真的只习惯用Arrays.asList,那也是有对应的解决办法的。 一、解决办法大方向 不管做什么事情,都是先判定一个大方向,不管是…...

SE考研真题总结(一)

本帖开始分享考研真题中设计【软件工程】的部分,预计会出5期左右,敬请期待~ 一.单选题 1.程序编写不是软件质量保障过程~ 静态代码扫描是今年来多数被人提及的软件应用安全解决方案之一,指程序员在编写好代码后无需进行编译,直接…...

Xshell远程登录AWS EC2 Linux实例

文章目录 小结问题解决参考 小结 Xshell远程登录AWS EC2 Linux实例碰到些问题,进行解决并记录。 问题 在AWS中创建 EC2 Linux实例,生成的非对称密钥对,使用Xshell远程登录碰到一些问题。 解决 首先在Putty中可以使用的ppk密钥文件在Xshe…...

Elasticsearch:对时间序列数据流进行降采样(downsampling)

降采样提供了一种通过以降低的粒度存储时间序列数据来减少时间序列数据占用的方法。 指标(metrics)解决方案收集大量随时间增长的时间序列数据。 随着数据老化,它与系统当前状态的相关性越来越小。 降采样过程将固定时间间隔内的文档汇总为单…...

python自动化测试框架:unittest测试用例编写及执行

本文将介绍 unittest 自动化测试用例编写及执行的相关内容,包括测试用例编写、测试用例执行、测试报告等内容。 官方文档: https://docs.python.org/zh-cn/3/library/unittest.mock.html 1. 测试用例编写 在 unittest 中,一个测试用例通常…...

ctfhub技能树_web_web前置技能_HTTP

目录 一、HTTP协议 1.1、请求方式 1.2、302跳转 1.3、Cookie 1.4、基础认证 1.5、响应包源代码 一、HTTP协议 1.1、请求方式 注:HTTP协议中定义了八种请求方法。这八种都有:1、OPTIONS :返回服务器针对特定资源所支持的HTTP请求方法…...

mysql8报sql_mode=only_full_group_by(存储过程一直报)

1:修改数据库配置(重启失效) select global.sql_mode;会打印如下信息 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION里面包含 ONLY_FULL_GROUP_BY,那么就重新设置,在数据库中输入以下代码,去掉ONLY_FULL_GROU…...

Vue2中v-html引发的安全问题

前言:v-html指令 1.作用:向指定节点中渲染包含html结构的内容。 2.与插值语法的区别: (1).v-html会替换掉节点中所有的内容,{{xx}}则不会。 (2).v-html可以识别html结构。 3.严重注意:v-html有安全性问题&#xff0…...

java内部类详解

文章目录 一、介绍二、为什么要使用内部类三、非静态内部类四、静态内部类五、局部内部类六、匿名内部类七、lambda表达式内部类八、成员重名九、序列化十、如何选择内部类 一、介绍 在java中,我们被允许在编写一个类(外部类OuterClass)时,在其内部再嵌…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色&#xf…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...