Py学习  »  机器学习算法

深度学习中的人体姿态估计概述

计算机视觉life • 2 年前 • 356 次点击  

点击上方“计算机视觉life”,选择“星标”

快速获得最新干货

前言 本文概述了多人姿态估计任务,重点介绍了深度学习中的一些多人姿态估计方法,并简要介绍了多人姿态估计的应用场景。

作者:Bharath Raj

编译: CV技术指南,文章仅用于学术分享。

人体姿势骨架以图形格式表示人的方向。本质上,它是一组可以连接起来描述人的姿势的坐标。骨架中的每个坐标都称为零件(或关节或关键点)。两个部分之间的有效连接称为一对(或肢体)。请注意,并非所有零件组合都会产生有效的配对。下面显示了一个示例人体姿势骨架。

左:人体姿势骨架的 COCO 关键点格式。右图:渲染的人体姿势骨架。 

多年来,人们引入了几种人体姿势估计方法。最早(也是最慢)的方法通常是在只有一个人的图像中估计单个人的姿势。这些方法通常首先识别各个部分,然后在它们之间形成连接以创建姿势。

自然,这些方法在许多图像包含多人的现实生活场景中并不是特别有用。


多人姿势估计


多人姿态估计比单人情况更困难,因为图像中的位置和人数是未知的。通常,我们可以使用以下两种方法之一来解决上述问题:

  • 简单的方法是首先结合一个人检测器,然后估计各个部分,然后计算每个人的姿势。这种方法被称为自上而下的方法。

  • 另一种方法是检测图像中的所有部分(即每个人的部分),然后关联/分组属于不同人的部分。这种方法被称为自下而上的方法。

顶部:典型的自上而下的方法。底部:典型的自下而上的方法。 

通常,自顶向下方法比自底向上方法更容易实现,因为添加人员检测器比添加关联/分组算法简单得多。很难判断哪种方法具有更好的整体性能,因为它实际上归结为人员检测器和关联/分组算法中的哪种更好。

在本文中,我们将重点介绍使用深度学习技术的多人人体姿态估计。在下一节中,我们将回顾一些流行的自上而下和自下而上的方法。


深度学习方法


1. OpenPose

论文:OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields(2019)
代码:https://github.com/CMU-Perceptual-Computing-Lab/openpose

OpenPose 是最流行的自下而上的多人人体姿势估计方法之一,部分原因是它们有充分记录的 GitHub 实现代码。

与许多自下而上的方法一样,OpenPose 首先检测属于图像中每个人的部分(关键点),然后将部分分配给不同的个人。下面显示的是 OpenPose 模型的架构。

OpenPose 架构的流程图。 

OpenPose 网络首先使用前几层(上述流程图中的 VGG-19)从图像中提取特征。然后将特征输入到卷积层的两个平行分支中。第一个分支预测一组 18 个置信度图,每个图代表人体姿势骨架的特定部分。第二个分支预测一组 38 个部件亲和域 (PAF),它表示部件之间的关联程度。

使用 OpenPose 进行人体姿态估计的步骤。

后续阶段用于细化每个分支所做的预测。使用部件置信度图,在部件对之间形成二部图(如上图所示)。使用 PAF 值,可以修剪二部图中较弱的链接。通过上述步骤,可以估计人体姿势骨架并将其分配给图像中的每个人。


2. DeepCut


论文:DeepCut: Joint Subset Partition and Labeling for Multi Person Pose Estimation

代码:http://pose.mpi-inf.mpg.de/

DeepCut 是一种自下而上的多人人体姿态估计方法。作者通过定义以下问题来完成这项任务:

  1. 产生一组 D 身体部位候选。该集合代表图像中每个人身体部位的所有可能位置。从上述候选身体部位集合中选择身体部位的子集。

  2. 使用 C 身体部位类之一标记每个选定的身体部位。身体部位类表示部位的类型,例如“手臂”、“腿”、“躯干”等。

  3. 划分属于同一个人的身体部位。

该方法的图示。 

上述问题通过将其建模为整数线性规划 ( Integer Linear Programming , ILP) 问题来共同解决。它是通过考虑具有域的二元随机变量的三元组 (x, y, z) 来建模的,如下图所示。

二元随机变量的域。 

考虑来自身体部位候选集 D 的两个身体部位候选者 d 和 d' 以及来自类别 C 的类别 c 和 c'。身体部位候选者是通过 Faster RCNN 或 Dense CNN 获得的。现在,我们可以开发以下语句集。

  • 如果 x(d,c) = 1,则表示候选身体部位 d 属于类 c。

  • 此外,y(d,d') = 1 表示候选身体部位 d 和 d' 属于同一个人。

  • 他们还定义了 z(d,d',c,c') = x(d,c) * x(d',c') * y(d,d')。如果上述值为1,则表示候选身体部位d属于c类,候选身体部位d'属于类别c',最后候选身体部位d,d'属于同一个人。

最后一个语句可用于划分属于不同人的姿势。显然,上述陈述可以用线性方程表示为 (x,y,z) 的函数。这样就建立了整数线性规划( Integer Linear Programming , ILP),可以估计多人的姿态。对于确切的方程组和更详细的分析,请自行查看他们的论文。


3. RMPE (AlphaPose)


论文:RMPE: Regional Multi-person Pose Estimation

代码:https://github.com/MVIG-SJTU/RMPE

RMPE 是一种流行的自上而下的姿态估计方法。作者认为自上而下的方法通常取决于人物检测器的准确性,因为姿势估计是在人物所在的区域上执行的。因此,定位和重复边界框预测中的错误会导致姿势提取算法执行欠佳。

重复预测(左)和低置信边界框(右)的影响。

为了解决这个问题,作者提出使用对称空间transformer网络 (Symmetric Spatial Transformer Network, SSTN) 从不准确的边界框中提取高质量的单人区域。在这个提取的区域中使用单人姿势估计器 (SPPE) 来估计该人的人体姿势骨架。空间De-Transformer网络 (SDTN) 用于将估计的人体姿势重新映射回原始图像坐标系。最后,使用参数姿态非极大抑制 (NMS) 技术来处理冗余姿态推演问题。

此外,作者引入了一个姿势引导建议生成器(Pose Guided Proposals Generator)来增加训练样本,从而更好地帮助训练 SPPE 和 SSTN 网络。RMPE 的显着特点是该技术可以扩展到人员检测算法和 SPPE 的任意组合。


4. Mask RCNN


论文:Mask RCNN

代码:
https://github.com/facebookresearch/detectron2

Mask RCNN 是一种用于执行语义和实例分割的流行架构。该模型同时预测图像中各种目标的边界框位置和语义分割目标的掩码。基本架构可以很容易地扩展到人体姿态估计。

描述 Mask RCNN 架构的流程图。

基本架构首先使用 CNN 从图像中提取特征图。区域提议网络 (Region Proposal Network, RPN) 使用这些特征图来获取存在对象的边界框候选者。边界框候选从 CNN 提取的特征图中选择一个区域(区域)。由于候选边界框可以有各种大小,因此使用称为 RoIAlign 的层来减小提取特征的大小,使它们都具有统一的大小。现在,这个提取的特征被传递到 CNN 的并行分支,用于边界框和分割掩码的最终预测。

让我们专注于执行分段的分支。假设我们图像中的一个目标可以属于 K 个类中的一个。分割分支输出 K 个大小为 m x m 的二进制掩码,其中每个二进制掩码代表属于该类的所有目标。我们可以通过将每种类型的关键点建模为一个不同的类并将其视为分割问题来提取属于图像中每个人的关键点。

同时,可以训练目标检测算法来识别人员的位置。通过结合人的位置信息以及他们的关键点集,我们获得了图像中每个人的人体姿势骨架。

这种方法几乎类似于自顶向下的方法,但人员检测阶段与部件检测阶段并行执行。换句话说,关键点检测阶段和人物检测阶段是相互独立的。


5. 其他方法


多人人体姿势估计是一个广阔的领域,有很多方法可以解决这个问题。为简洁起见,这里仅解释了少数几种方法。有关更详尽的方法列表,可以查看以下链接:

1. Awesome Human Pose Estimation:

地址:

https://github.com/cbsudux/awesome-human-pose-estimation

2. paperwithcode上关于多人姿态估计的论文列表:

地址:

https://paperswithcode.com/sota/multi-person-pose-estimation-on-mpii-multi


应用

姿态估计在无数领域都有应用,下面列出了其中的一些领域。

1.活动识别

跟踪一个人一段时间内姿势的变化也可用于活动、手势和步态识别。有几个相同的用例,包括:

  • 用于检测一个人是否跌倒或生病的应用程序。
  • 可以自主教授正确的锻炼方式、运动技巧和舞蹈活动的应用程序。
  • 可以理解全身手语的应用程序。(例如:机场跑道信号、交警信号等)。
  • 可以增强安全性和监视的应用程序。

跟踪人的步态对于安全和监视目的很有用。 

2. 动作捕捉和增强现实

人体姿态估计的一个有趣应用是 CGI 应用。如果可以估计人体姿势,则可以将图形、样式、花哨的增强功能、设备和艺术品叠加在人身上。通过跟踪这种人体姿势的变化,渲染的图形可以在人物移动时“自然地贴合”他们。

CGI 渲染示例。

通过 Animoji 可以看到一个很好的视觉示例。尽管上面只跟踪了人脸的结构,但可以推断出一个人的关键点。可以利用相同的概念来渲染可以模仿人的运动的增强现实 (AR) 元素。


3. 训练机器人

可以让机器人跟随正在执行动作的人体姿势骨架的轨迹,而不是手动编程机器人来跟随轨迹。人类教练可以通过演示来有效地教机器人某些动作。然后机器人可以计算如何移动其咬合架以执行相同的动作。


4. 控制台的运动跟踪

姿势估计的一个有趣应用是踪人类主体在交互式游戏中的运动。通常,Kinect 使用 3D 姿势估计(使用 IR 传感器数据)来跟踪人类玩家的运动并使用它来渲染虚拟角色的动作。

正在运行的 Kinect 传感器。


结论


人体姿态估计领域取得了长足的进步,这使我们能够更好地为可能的无数应用提供服务。此外,在姿态跟踪等相关领域的研究可以大大提高其在多个领域的生产利用率。

原文链接:
https://medium.com/beyondminds/an-overview-of-human-pose-estimation-with-deep-learning-d49eb656739b

独家重磅课程!

1、VIO课程:VIO灭霸:ORB-SLAM3源码详解,震撼上线!

2、图像三维重建课程(第2期):视觉几何三维重建教程(第2期):稠密重建,曲面重建,点云融合,纹理贴图

3、重磅来袭!基于LiDAR的多传感器融合SLAM 系列教程:LOAM、LeGO-LOAM、LIO-SAM

4、系统全面的相机标定课程:单目/鱼眼/双目/阵列 相机标定:原理与实战

5、视觉SLAM必备基础(第2期):视觉SLAM必学基础:ORB-SLAM2源码详解

6、深度学习三维重建课程:基于深度学习的三维重建学习路线

7、激光定位+建图课程:激光SLAM怎么学?手把手教你Cartographer从入门到精通!




全国最棒的SLAM、三维视觉学习社区↓


技术交流微信群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群,请添加微信号 chichui502 或扫描下方加群,备注:”名字/昵称+学校/公司+研究方向“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

投稿、合作也欢迎联系:simiter@126.com


扫描关注视频号,看最新技术落地及开源方案视频秀 ↓


—   版权声明  —

本公众号原创内容版权属计算机视觉life所有;从公开渠道收集、整理及授权转载的非原创文字、图片和音视频资料,版权属原作者。如果侵权,请联系我们,会及时删除。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/121608
 
356 次点击