精华内容
下载资源
问答
  • 人体姿态估计
    2022-01-07 20:31:13

           我们生活中经常看到,在一些商城中,有一些能根据人体的动作来进行游戏操作的小游戏,比如切水果,愤怒的小鸟等,这些就涉及到人体姿态估计这方面的知识,那么今天我们就来尝试运用代码简单的实现人体姿态估计

    实现原理:

    1.输入一幅图像,经过卷积网络提取特征,得到一组特征图,然后分成两个岔路,分别使用 CNN网络提取Part Confidence Maps 和 Part Affinity Fields;

    2.得到这两个信息后,我们使用图论中的 Bipartite Matching(偶匹配) 求出Part Association,将同一个人的关节点连接起来,由于PAF自身的矢量性,使得生成的偶匹配很正确,最终合并为一个人的整体骨架;

    3.最后基于PAFs求Multi-Person Parsing—>把Multi-person parsing问题转换成graphs问题—>Hungarian Algorithm(匈牙利算法)

    首先当然是要配置环境

    1. 安装anaconda

    官网下载。建议安装目录不要太深,可以直接安装在根目录上,(本人选择直接C盘)

    Anaconda | Individual Editionhttps://www.anaconda.com/products/individual

    2. 安装pycharm

    官网下载安装。装Community 版本,免费的。

    PyCharm:JetBrains为专业开发者提供的Python IDEhttps://www.jetbrains.com/zh-cn/pycharm/

    3. 建虚拟环境

    打开命令行。在windows开始菜单里输入cmd,打开。

    进anaconda安装目录: cd c:\Anaconda ,这个目录是第1步的安装目录

    进condabin目录:cd condabin

    新建虚拟环境:conda create -n py38 python=3.8 创建一个名为py38的虚拟环境(这个本人已经创建过了就不重新创建了)

    激活虚拟环境:activate py38

    这时你的命令行应该看起来是这样的,前面有个括号,虚拟环境的名字:

    4. 安装pytorch

    首先确保进入虚拟环境,输入命令:pip install torch torchvision

    (已经装好的界面)

    5. 安装opencv

    首先确保进入虚拟环境,输入命令:pip install opencv-python

    (同上)

    下载代码

    GitHub - Daniil-Osokin/lightweight-human-pose-estimation.pytorch: Fast and accurate human pose estimation in PyTorch. Contains implementation of "Real-time 2D Multi-Person Pose Estimation on CPU: Lightweight OpenPose" paper.https://github.com/Daniil-Osokin/lightweight-human-pose-estimation.pytorch

    那么万事俱备,就到了激动人心的跑代码环节!当然我们离成功还有一小段距离。

    打开demo.py,映入眼帘的就是一长串代码

    右键运行(个人习惯),我们可能会遇到第一个挫折

    这个时候我们就需要修改我们运行程序的参数

    打开菜单中的“Run/运行”----->“edit configurations/编辑配置”

    在parameters/参数 一栏填--checkpoint-path=checkpoint_iter_370000.pth

    那么完成这一步我们就离成功又进一步!

    再次运行,我们会再次碰到一个挫折

    这个提示我们需要再次修改我们的参数,再原来的命令行参数后面添加 --video=0,这个表示我们使用0号镜头(因为大部分电脑只有一个摄像头,所以我们一般等于0就可以了)

    距离成功只有一步之遥了!

    再次运行,我们就能看到最后一关了

    有一说一,一大片的红色给人满满的压迫感,程序猿的噩梦

    但其实处理起来也很简单,与上一步一样,我们只需再命令行参数后面再次添加一个命令行参数:--cpu,即可

    Ps:我们在初次运行时可能会提示No module named pycocotools,只需在虚拟环境中输入pip install pycocotools 即可解决(因为本人已经安装过了所以没有报错)

    那么接下来就是见证奇迹的时刻!

     摄像头亮起就代表已经成功了

    实际效果图如下:

    人体姿态估计

    视频链接:人体姿态估计_哔哩哔哩_bilibili关于人体姿态估计的python代码https://www.bilibili.com/video/BV1ZF411e7C2?spm_id_from=333.999.0.0

    更多相关内容
  • Python OpenCV OpenPose,实现人体姿态估计
  • 人体姿态估计是一个有着非常广泛应用前景的研究课题,并且在计算机视觉领域中,该课题已经成为了重要研究热点之一。针对人体姿态估计中的特征表达提出了一种基于二元纯位相匹配滤波器(BPOF)的特征提取算法,首先对...
  • 人体姿态估计的目的是通过图像、视频等输入数据定位人体部位,构建人体表征(如人体骨架)。在过去的十年中,它受到了越来越多的关注,并被广泛应用于人机交互、运动分析、增强现实和虚拟现实等领域。
  • 基于Python,用于人体姿态估计的PifPaf复合场,包括python文件和pdf文档
  • 基于监督局部子空间的人体姿态估计,邱雨,潘力立,本文介绍了一种基于监督局部子空间的人体姿态估计方法,属于计算机视觉中的目标检测领域。它从流形学习的角度出发,假设人体姿态
  • 这是基于python的opencv人体动作姿态估计的源代码。
  • 轻量级人体姿态估计lightweight-human-pose-estimation.rar
  • 一种用于人体姿态估计的强大算法,可以检测并且定位人体的四肢及躯干和头部的位置,用于更高层次的分析。 (Pose estimation) 文件列表: parse_matlab parse_matlab\parseHorse.m parse_matlab\condenseLRResp.m ...
  • 人体姿态估计算法中的人体模型是对人体部位或关节间外观和空间关联情况的数学描述。虽然当前已经有部分人体模型在建立时考虑到了部位或关节的空间定位会满足一定的先验分布,但却都将基于同样先验分布建立的人体模型...
  • 1、自顶向下的 2D 人体姿态估计 - 知乎 2、人体姿态估计(Human Pose Estimation)经典方法整理 - 知乎 3、2D人体姿态估计浅析 - 知乎 4、人体姿态估计中回归出了heatmap如何去计算关键点的坐标位置? - 知乎 5、...

    参考

    1. 自顶向下的 2D 人体姿态估计 - 知乎
    2. 人体姿态估计(Human Pose Estimation)经典方法整理 - 知乎
    3. 2D人体姿态估计浅析 - 知乎
    4. 人体姿态估计中回归出了heatmap如何去计算关键点的坐标位置? - 知乎
    5. 论文阅读 - Deep High-Resolution Representation Learning for Human Pose Estimation
    6. 【HRNet】《Deep High-Resolution Representation Learning for Human Pose Estimation》
    7. 2D 多人姿态估计论文汇总、分类与简介(2022.02.17发布) - 知乎

     第一部分 参见 姿态估计之2D人体姿态估计(1)

    第二部分 参见 姿态估计之2D人体姿态估计(2)

    0 前言

    2D Human Pose Estimation (以下简称 2D HPE) 旨在从图像或者视频中预测人体关节点(或称关键点,比如头,左手,右脚等)的二维空间位置坐标。2D HPE 的应用场景非常广泛,包括动作识别,动画生成,增强现实等。传统的 2D HPE 算法,设计手工特征提取图像信息,从而进行关键点的检测。

    当前主流的 2D HPE 方法主要可以分为自底向上(bottom up)和自顶向下(top down)两种方式。自底向上的方法同时预测图片中的所有关键点,然后将不同类型的关键点组合成人体。自顶向下的方法首先检测出输入图片中的一个或者多个人,然后对于每个个体单独预测其关键点。自底向上方法的推断时间不随人数的增加而上升,而自顶向下的方法对于不同尺寸的人体更加鲁棒。

    在实际求解时,对人体姿态的估计常常转化为对人体关键点的预测问题,即首先预测出人体各个关键点的位置坐标,然后根据先验知识确定关键点之间的空间位置关系,从而得到预测的人体骨架。

    对于2D姿态估计,当下研究的多为多人姿态估计,即每张图片可能包含多个人。解决该类问题的思路通常有两种:top-down和bottom-up:

    1.  top-down的思路是首先对图片进行目标检测,找出所有的人;然后将人从原图中crop出来,resize后输入到网络中进行姿态估计。换言之,top-down是将多人姿态估计的问题转化为多个单人姿态估计的问题
    2. bottom-up的思路是首先找出图片中所有关键点,然后对关键点进行分组,从而得到一个个人。 

    通常来说,top-down具有更高的精度,而bottom-up具有更快的速度。top-down的方法将多人姿态估计转换为单人姿态估计,那么网络的输入就是包含一个人的bounding box,网络预测的是人的 k 个关键点坐标。对于关键点的ground truth(对应网络的输出)如何表示有两种思路:

    • ,即直接对坐标进行回归,网络的输出是经过fc层输出的2k 个数字
    • k个heatmap,即为每个关键点预测一个heatmap作为关键点的中间表示,heatmap上的最大值处即对应关键点的坐标。对于改种方法,heatmap的ground truth是以关键点为中心的二维高斯分布(高斯核大小为超参)

    早期的工作如DeepPose多为直接回归坐标,当下的工作多数以heatmap作为网络的输出,这种中间表示形式使得回归结果更加精确。

    1. 单人姿态估计——回归方法

    共4篇
    2014.08_(DeepPose) Human Pose Estimation via Deep Neural Networks
    首个使用回归方法的级联网络。
    2016.06_(IEF) Human Pose Estimation with Iterative Error Feedback
    给定初始姿态,使用迭代的方式归回修正姿态。
    2017.08_Compositional Human Pose Regression
    将骨架向量和关键点一起考虑进网络。
    2017.10_Human Pose Regression by Combining Indirect Part Detection and Contextual Information
    取最大值方式不可微,用soft_argmax替换。

    2. 单人姿态估计——检测(热图)方法

    共7篇
    2014.09_Joint Training of a Convolutional Network and a Graphical Model for Human Pose Estimation
    开始使用热图检测的方式得到姿态结果。
    2015.06_Efficient Object Localization Using Convolutional Networks
    是上一篇的扩展。
    2016.04_(CPM) Convolutional Pose Machines
    每个关键点部位训练一个检测器。
    2016.07_(Hourglass) Stacked Hourglass Networks for Human Pose Estimation
    堆叠式沙漏结构的级联网络。
    2017.02_Multi-Context Attention for Human Pose Estimation
    加入了多种注意力机制。
    2017.08_Learning Feature Pyramids for Human Pose Estimation
    给姿态估计网络加入了多尺度特征金字塔。
    2019.02._Cascade Feature Aggregation for Human Pose Estimation

    3. 姿态估计——复合方法

    共4篇
    2016.09_Human pose estimation via Convolutional Part Heatmap Regression
    使用先检测后回归的策略。
    2018.05_(DSNT) Numerical Coordinate Regression with Convolutional Neural Networks
    也是在先检测,再在热图上进行回归,避免不可微操作。
    2018.09_Integral Human Pose Regression
    也是在先检测,再在热图上进行回归,避免不可微操作。
    2021.03_Composite Localization for Human Pose Estimation
    先找到近似位置,用预测偏移获取具体位置

    4. 多人姿态估计——自上而下

    自上而下:先检测人再框出来检测人的姿势
    共9篇
    2016.08_Multi-Person Pose Estimation with Local Joint-to-Person Associations
    2017.04_Towards Accurate Multi-person Pose Estimation in the Wild
    2018.02_(AlphaPose) RMPE Regional Multi-person Pose Estimation
    2018.04_(CPN) Cascaded Pyramid Network for Multi-Person Pose Estimation
    2018.04_Learning to Refine Human Pose Estimation
    2018.07_MultiPoseNet: Fast Multi-Person Pose Estimation using Pose Residual Network
    2018.08_(Simple Baselines) for Human Pose Estimation and Tracking
    2019.01_(CrowdPose) Efficient Crowded Scenes Pose Estimation and A New Benchmark
    2019.05_(MSPN) Rethinking on Multi-Stage Networks for Human Pose Estimation

    5. 多人姿态估计——自下而上

    自下而上:先检测关键点再连接成人的姿势
    共12篇
    2016.04_(DeepCut) Joint Subset Partition and Labeling for Multi Person Pose Estimation
    2017.06_Associative Embedding-End-to-End Learning for Joint Detection and Grouping
    2018.11_(OpenPose) Real-time 2D Multi-Person Pose Estimation on CPU: Lightweight OpenPose
    2019.04_(PifPaf) Composite Fields for Human Pose Estimation
    2019.05_(Openpose) Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
    2019.11_(Simple Pose) Rethinking and Improving a Bottom-up Approach for Multi-Person Pose Estimation
    2020.03_(HRNet) HigherHRNet: Scale-Aware Representation Learning for Bottom-Up Human Pose Estimation
    2020.06_(HRNet) Bottom-Up Human Pose Estimation by Ranking Heatmap-Guided Adaptive Keypoint Estimates
    2020.07_Differentiable Hierarchical Graph Grouping for Multi-Person Pose Estimation
    2021.04_(HRNet) Bottom-Up Human Pose Estimation Via Disentangled Keypoint Regression
    2021.04_(Lite-HRNet) A Lightweight High-Resolution Network
    2021.07_Human Pose Regression with Residual Log-likelihood Estimation

    6. 多人姿态估计——单阶段网络

    共5篇
    2019.08_Single-Stage Multi-Person Pose Machines
    2019.11_(DirectPose) Direct End-to-End Multi-Person Pose Estimation
    2021.05_(FCPose) Fully Convolutional Multi-Person Pose Estimation with Dynamic Instance-Aware Convolutions
    2021.07_(InsPose) Instance-Aware Networks for Single-Stage Multi-Person Pose Estimation
    2021.07_(PoseDet) Fast Multi-Person Pose Estimation Using Pose Embedding

    7. 姿态估计——多任务学习

    共4篇
    2018.01_Mask R-CNN
    将实例分割与姿态估计合并多任务学习。
    2018.03_(PersonLab) Person Pose Estimation and Instance Segmentation with a Bottom-Up, Part-Based, Geometric Embedding Model
    将实例分割与姿态估计合并多任务学习,并取消了box。
    2019.05_Multi-task human analysis in still images-2D_3D pose, depth map, and multi-part segmentation
    将实例分割与2D姿态估计,3D姿态估计,深度估计合并多任务学习。
    2021.08_MultiTask-CenterNet (MCN)-Efficient and Diverse Multitask Learning using an Anchor Free Approach

    8. 姿态估计——GAN

    共3篇
    2017.05_Adversarial PoseNet-A Structure-aware Convolutional Network for Human Pose Estimation
    2017.08_Self Adversarial Training for Human Pose Estimation
    2021.05_When Human Pose Estimation Meets Robustness-Adversarial Algorithms and Benchmarks

    9. 姿态估计——图网络

    共3篇
    2019.01_Human Pose Estimation with Spatial Contextual Information
    2020.03_Peeking into occluded joints A novel framework for crowd pose estimation
    2020.07_Graph-PCNN-Two Stage Human Pose Estimation with Graph Pose Refinement

    10. 姿态估计——Backbone

    共2篇
    2019.02_(HRNet) Deep High-Resolution Representation Learning for Human Pose Estimation
    一种高分辨率的backbone,更好提取热图
    2020.07_(RSN) Learning Delicate Local Representations for Multi-Person Pose Estimation
    更好的利用各个尺度的信息。

    11. 姿态估计——使用Transformer

    共3篇
    2020.12_(TransPose) Towards Explainable Human Pose Estimation by Transformer
    2021.03_(TFPose) Direct Human Pose Estimation with Transformers
    2021.04_Pose Recognition with Cascade Transformers

    12. 姿态估计——Refinement

    2019.03_PoseFix-Model-agnostic General Human Pose Refinement Network
    提出了一种精细网络用于精细姿态结果,是一个插件,后处理方式。
    2019.10_(DARK) Distribution-Aware Coordinate Representation for Human Pose Estimation
    2021.07_Polarized Self-Attention-Towards High-quality Pixel-wise Regression
    2021.07_Adaptive Dilated Convolution For Human Pose Estimation

    13. 姿态估计——轻量化

    2019.04_Fast Human Pose Estimation
    2020.01_Simple and Lightweight Human Pose Estimation
    2021.07_(FasterPose) A Faster Simple Baseline for Human Pose Estimation

    14. 姿态估计——其他

    共15篇
    2018.05_Jointly Optimize Data Augmentation and Network Training: Adversarial Data Augmentation in Human Pose Estimation
    使用优化的训练技巧提升精度。
    2019.04_Spatial Shortcut Network for Human Pose Estimation
    2019.05_Multi-Person Pose Estimation with Enhanced Channel-wise and Spatial Information
    2019.10_TRB: A Novel Triplet Representation for Understanding 2D Human Body
    2020.01_(UniPose) Unified Human Pose Estimation in Single Images and Videos
    2020.02_Towards High Performance Human Keypoint Detection
    2020.02_Toward fast and accurate human pose estimation via soft-gated skip connections
    2020.12_The Devil is in the Details-Delving into Unbiased Data Processing for Human Pose Estimation
    2020.12_Efficient Human Pose Estimation by Learning Deeply Aggregated Representations
    2020.12_(EfficientPose) Scalable single-person pose estimation
    相比openpose,提出准确又快速的模型(但是实际效果很差)
    2021.07_Is 2D Heatmap Representation Even Necessary for Human Pose Estimation

    ​​​​​​​

    13. 姿态估计——Super Resolution

    共1篇
    2021.07_Super Resolution in Human Pose Estimation-Pixelated Poses to a Resolution Result

    ​​​​​​​

    8. 姿态估计——无监督

    共1篇
    2021.05_Unsupervised Human Pose Estimation through Transforming Shape Templates

    1 主流算法

    更多参见 2D人体姿态估计浅析

    1.1 基于回归坐标的方法

    早期一些自顶向下的深度学习方法用神经网络直接预测人体关键点的 2D 坐标 [1, 2, 3]。

    DeepPose [1] 是这类方法的经典代表。DeepPose 采用级联的神经网络来预测人体各个关键点的相对坐标。每一个阶段都拿上一阶段的输出坐标作为输入,并进一步预测更为准确的坐标位置。最终,将预测得到的归一化的相对坐标转换为绝对坐标。

    参见  

    姿态估计之2D人体姿态估计 - DeepPose

    1.2 基于热图(heatmap)的方法

    近些年,基于热图(heatmap)的人体姿态估计方法成为了主流。基于热图的方法在每个位置预测一个分数,来表征该位置属于关键点的置信度。根据预测的热图,进一步提取关键点的坐标位置。基于热图的方法更好地保留了空间位置信息,更符合卷积神经网络(Convolutional Neural Network, CNN)的设计特性,从而取得了更好的预测精度。

    1.2.1 Convolutional Pose Machines(CPM)

    Convolutional Pose Machines(CPM)的主要贡献在于:

    a)   用Heatmap来表示关节点的位置及位置约束关系,并且将Heatmap和Feature Map同时作为数据在网络中传递,同时在多个尺度处理输入的特征,充分考虑各个关节点之间的空间位置关系。

    b)   多个阶段(Stage)有监督训练,避免过深网络难以优化的问题。

    OpenPose是GitHub上最受欢迎的人体姿态估计项目(14.8K Stars, 4.2K Folks),其人体关键点检测正是主要基于Convolutional Pose Machines。

     Pose estimation是一种全卷积网络,输入是一张人体姿势图,输出n张热力图,代表n个关节的响应。
    这里写图片描述

    参见: 姿态估计之2D人体姿态估计 - Convolutional Pose Machines(CPM)

    1.2.2 Stacked Hourglass

    Stacked Hourglass [6] 通过多尺度特征融合,整合人体结构化的空间关系。该方法连续进行上采样和下采样,并在网络中间利用热图进行监督,提升了网络的性能。

    参见:姿态估计之Stakced Hourglass Network(SHN)个人理解_light169的博客-CSDN博客

    1.2.3 Cascaded pyramid network for multi-person pose estimation(CPN)

    多人 top-down结构

    参见:姿态估计之CPN(Cascaded Pyramid Network for Multi-Person Pose Estimation)

    CPN,Cascaded Pyramid Network,是2017年旷视提出的一种网络结构,获得了COCO 2017 Keypoint Benchmark的冠军,网络结构如下图所示。这个网络可以分为两部分:GlobalNet和RefineNet,从名字也可以看出后半部分网络是在前半部分的基础上做refinement。GlobalNet的作用主要是对关键点进行一个初步的检测,由于使用了强大的ResNet作为backbone,网络能够提取到较为丰富的特征(在此之前的CPM、Hourglass都没有使用,因此网络的特征提取能力较差),并且使用了FPN结构加强了特征提取,在这个过程中像head、eyes这些简单且可见的关键点基本能够被有效地定位。而对于GlobalNet没有检测到的关键点,使用RefineNet进行进一步的挖掘,RefineNet实际上是将pyramid结构中不同分辨率下的特征进行了一个整合,这样一些被遮挡的、难以定位的关键点,根据融合后的上下文语境信息能够更好的被定位到。 

     

     下面这张图给出了一个例子(绿点表示ground truth),对于eye来说较容易定位,通过GlobalNet即可定位到。而对于hip来说,在原图中被遮挡,仅仅使用GlobalNet难以直接精确定位。通过RefineNet将语境信息整合进来,才使得这些关键点被定位

    1.2.3  Simple Baseline(SBL)

    Simple Baselines,是2018年MSRA的工作,网络结构如下图所示。之所以叫这个名字,是因为这个网络真的很简单。该网络就是在ResNet的基础上接了一个head,这个head仅仅包含几个deconvolutional layer,用于提升ResNet输出的feature map的分辨率,我们提到过多次高分辨率是姿态估计任务的需要。这里的deconvolutional layer是一种不太严谨的说法,阅读源代码可知,deconvolutional layer实际上是将transpose convolution、BatchNorm、ReLU封装成了一个结构。所以关键之处在于transpose convolution,可以认为是convolution的逆过程。

    从图中看可以发现Simple Baselines的网络结构有点类似Hourglass中的一个module,但可以发现:①该网络没有使用类似Hourglass中的skip connection;②该网络是single-stage,Hourglass是multi-stage的。但令人惊讶的是,该网络的效果却超过了Hourglass。我个人认为有两点原因,一是Simple Baselines以ResNet作为backbone,特征提取能力相比Hourglass更强。二是Hourglass中上采样使用的是简单的nearest neighbor upsampling,而这里使用的是deconvolutional layer,后者的效果更好(后面可以看到在MSRA的Higher-HRNet中依旧使用了这种结构)。

    参见 

    姿态估计之2D人体姿态估计 - Simple Baseline(SBL)

     1.2.4 HRNet Deep High-Resolution Representation Learning for Human Pose Estimation

    HRNet [8] 针对人体姿态估计设计了一个高效的网络结构。不同于以往方法利用低分辨率的特征预测高分辨率的热图,HRNet 设计了多个不同分辨率的平行分支。高分辨率特征始终被保持,并且不同尺度的特征能够相互融合。这种设计结合局部纹理特征和全局语义信息,实现了更加准确和鲁棒的姿态预测。

    参见:

    HRNet详解_gdtop818的博客-CSDN博客_hrnet详解

    姿态估计之2D人体姿态估计 - (HRNet)Deep High-Resolution Representation Learning for Human Pose Estimation(多家综合)

    1、HRNet网络简介_太阳花的小绿豆的博客-CSDN博客

    2、姿态估计】Deep High-Resolution Representation Learning for Human Pose Estimation论文理解

    3、HRNet的网络结构---非常详细_枫呱呱的博客-CSDN博客_hrnet网络结构

    4、HRNet网络结构 - Dilthey - 博客园

     

    1.2.5 Joint Training of CNN and a Graphical Model for Human Pose Estimation

    参见:

    1、Joint Training of a Convolutional Network and a Graphical Model for Human Pose Estimation

    2、Joint Training of CNN and a Graphical Model for Human Pose Estimation用于姿态估计的CNN和图模型的联合训练

    代码:https://github.com/max-andr/joint-cnn-mrf

    文章的核心思想

           1、利用CNN做姿态估计,采用heatmap的方式来回归出关键点

           2、利用人体关键点之间的结构关系,结合马尔科夫随机场的思想来优化预测结果,主要针对于网络预测的false postive。
     

    1.2.6 MSPN

    参见:人体姿态估计(Human Pose Estimation)经典方法整理 - 知乎

    MSPN,是2019年旷视的工作,网络结构如下图所示。此前我们介绍的网络中,有single-stage的例如CPN、Simple Baselines,也有multi-stage的如CPM、Hourglass,理论上multi-stage的效果应该更好,但实际上在COCO数据集上single-stage的表现超过了multi-stage。MSPN沿用了multi-stage的思路,并做出了一系列改进,最终使得MSPN的效果超过了当前的single-stage网络。

    首先,对于每个stage的module,MSPN采用了前面提到的CPN中的GlobalNet(backbone为ResNet)。其次,MSPN增加了跨阶段的特征融合,即图中的黄色箭头。由于经过反复的下采样-上采样,会有不可避免的信息损失,故MSPN中将前一个stage下采样和上采样过程中对应分辨率的两个feature maps都连接过来,与当前stage下采样的feature map进行融合,这样当前stage得到的feature map就包含了更多prior information,减少了stage之间的信息丢失。此外,这种类似残差结构的设计也有助于缓解梯度消失问题。最后,MSPN还采用了coarse-to-fine supervision,我们知道姿态估计的ground truth是以关键点为中心的二维高斯分布,这里的高斯核大小是一个超参数。直观上来说,对于multi-stage网络,随着stage的增加,我们对keypoint的估计是一个coarse-to-fine的过程,这样我们进行intermediate supervision的时候,可以将ground truth也设置成coarse-to-fine的heatmap,也就是前面stage的高斯核较大,后面stage的高斯核较小,随着stage的增加要求关键点位置越来越精确。

    1.3 Bottom-up

    前面我们提到诸多top-down的方法都是将多人姿态估计转化为单人姿态估计问题,但在进行多人姿态估计时,top-down的方法有两个缺点:①性能受到detector性能的影响(虽然在CPN的论文中证明了当detector性能足够好时提高detector的性能对最后的结果提高很微小);②运行时间随着图片中人数增加而增加。而bottom-up的方法则是另一条思路:先检测出图中所有人的所有关键点,再对关键点进行分组,进而组装成多个人。这种方法的好处是性能受人数影响较小,实际上bottom-up的速度往往会比top-down的更快,几乎能做到real-time,在移动端部署的时候往往采用的也是bottom-up的方法。接下来介绍近年出现的一些有代表性的bottom-up的工作。

    1.3.1 Openpose

    Openpose是2016年CMU的一个工作,获得了COCO 2016 Keypoints challenge的冠军,这个工作在后来产生了很大的影响,github上目前有15.8k个stars。下图是openpose的pipeline,首先根据输入图片(a)生成一个Part Confidence Maps(b)和一个Part Affinity Fields(c):前者就是我们上文常提到的heatmap,用来预测关键点的位置;后者是本文的一个主要创新点——PAF,PAF实际上是在关键点之间建立的一个向量场,描述一个limb的方向。有了heatmap和PAF,我们使用二分图最大权匹配算法来对关键点进行组装(d),从而得到人体骨架(e)。由于文字描述过于抽象,下面花一些篇幅引用原文中的一些数学表达形式来分别介绍这几部分。

    对于生成heatmap和PAF的部分,使用了下图所示的网络结构。首先 F 是初始的feature map,网络的输出是heatmap和PAF,分别用   和   表示,其中 J是part(即上文中的keypoint,这里遵循原文中的说法)的数量, C是limb的数量。   ,即第j 个part对应的heatmap,每个pixel对应一个响应值,可以认为是概率值;   ,即第 c个limb对应的PAF,每个pixel对应一个二维向量,表示该pixel所在limb的方向。二者都是pixel-wise的。这里借鉴CPM使用了多个stage不断进行refinement,后一阶段的输入是前一阶段的S 、L 和初始的F 的结合。

    接下来需要说明heatmap和PAF的ground truth分别是怎样的。heatmap和top-down中的类似,对于第 k 个人的第 j 个part,令其位置为    ,则ground truth是以   为中心的二维高斯分布,用    表示。在这里由于一张图片中有多个人,ground truth中的每个channel对应一个part,第 j个part对应的ground truth为   , p 表示单个位置,即对所有人该part的ground truth按pixel取max

    PAF的ground truth则更加复杂,对于第 k 个人的第 c 个limb(连接关键点j_1j_2 ),ground truth用   表示。如果位置p 在这个limb上,   ,否则为零向量。这里v 实际上是 j_1指向 j_2的单位向量。那么如何判断一个位置 p 是否在当前limb上呢?只要 p满足:①在线段   上,②距离线段   在一个阈值范围内(框处了一个矩形范围),就认为p 在该limb上。最后对于某个limb的所有,按pixel采用average进行处理,即   ,这里   为 p位置处非零向量的个数,也就是只有非零向量才参与均值计算。此处用到的一些符号在图中含义如下。

    至于loss的计算,就是对每个stage的 S 和 L分别计算L2 loss,最后所有stage的loss相加即可。同样类似之前top-down中提到的,intermediate supervision有助于缓解梯度消失的问题。

    现在我们有了heatmap,在heatmap上采用nms可以为每个part找出一系列候选点(因为图中有不止一个人,以及false positive的点),这些候选点之间互相组合能够产生大量可能的limb,如何从中选出真正的limb,这就需要使用我们预测的PAF。首先定义两个关键点j_1j_2 之间组合的权值   ,这里   ,   分别表示   的坐标。实际上就是 j_1j_2间各点的PAF在线段 上投影的积分,直观上说,如果线段上各点的PAF方向与线段的方向越一致,E就越大,那么这两个点组成一个limb的可能性就越大。

    知道了如何计算两个候选点之间组合的权值,对于任意两个part对应的候选点集合,我们使用二分图最大权匹配算法即可给出一组匹配。但如果我们考虑所有part之间的PAF,这将是一个K分图最大权匹配问题,该问题是NP-Hard的。因此我们做一个简化,我们抽取人体骨架的一棵最小生成树,这样对每条树边连接的两个part采用二分图最大权匹配来求解,不同树边之间是互不干扰的。也就是将原问题划分成了若干个二分图最大权匹配问题,最后将每条树边对应的匹配集合组装在一起即可得到人体骨架。

    上述即openpose的整个pipeline,虽然看起来比较复杂,但许多想法都是围绕PAF展开的,毕竟PAF还是这篇文章最大的亮点。

     参见:

    姿态估计之2D人体姿态估计 - (OpenPose) Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

    1.3.2 Hourglass+Associative Embedding

    Associative embedding,是一种处理detection+grouping任务的方法。也就是先检测再组装的任务,比如多人姿态估计是检测出所有关键点再组装成多个人体,实例分割是先检测出所有像素点的语义类别再组装成多个实例。往往这类任务都是two-stage的,即先detection,再grouping。这篇文章的作者提出了一种新的思路:同时处理detection和grouping两个任务,这么做的初衷是因为detection和grouping两个任务之间本身密切相关,分成两步来先后处理可能会导致性能下降。作者将该方法应用到了Hourglass上,在当时达到了多人姿态估计任务的SOTA。

    在单人姿态估计时,我们网络的输出是m个heatmap,m表示关键点数量。现在在之前的基础上多输出了m个associative embeddings。Associative embeddings实际上是给heatmap的每个值都额外嵌入一个vector作为一个tag用于标识所在的组,拥有相同tag的所有关键点我们将其划分为一组,也就是属于某一个人。下图是Hourglass+Associative embedding的示意图,Hourglass输出了m个detection heatmaps(灰色)和m个associative embeddings(蓝色),根据heatmaps上的响应值确定关键点的坐标,根据embeddings上的tag(下图中不同tag用不同颜色表示)确定哪些关键点属于同一个人。

    现在我们考虑ground truth,对于heatmaps来说和之前一样,不再赘述。对于embeddings来说实际上没有ground truth,因为tag的绝对值并不重要,只要保证同一个人的关键点tag相同,不同人的关键点tag之间互不相同即可。这里需要说明的是,tag虽然是一个vector,但vector的维数并不重要,实践证明1D vector已经足够(即一个实数)。为了使tag满足上述要求,我们需要设计一个loss来评价当前的tag是否符合实际的分组。用 表示第 k 个关键点对应的embeddings(tagging heatmap), N表示人的数量, K表示关键点数量,   表示第n个人第 k 个关键点的坐标。我们定义第 n 个人的参考embeddings为   ,则loss定义为

    loss的前半部分使同一个人的所有embeddings尽量接近,后半部分 使不同人的embeddings间隔尽量增大。最后所有关键点的embeddings分布如下图所示。inference时将距离小于一定阈值的embeddings分为一组即可。

    1.3.3 HigherHRNet

    HigherHRNet,是微软在HRNet之后延续的一个工作。前面我们提到过HRNet在top-down的方法中表现的很好,是因为这种并行的结构使得最后的feature map能够包含各个分辨率的信息,尤其是对高分辨率信息保留的效果较之前提升尤为明显。在bottom-up的方法中,作者认为有两个问题需要解决:①scale variation,即图片中有各种scale的人,如果仅仅在一个分辨率的feature map下进行预测,难以保证每个scale的人的关键点都能被精确预测;②精确定位small person的关键点。之前一些网络在推理时使用multiscale evaluation,能够缓解问题①,但仍然无法解决问题②,对small person的预测不够精确。

    HigherHRNet的思路是首先使用HRNet生成feature map(最高分辨率分支),然后接一个类似Simple Baselines中的deconvolution层,生成一个更高分辨率的feature map。显然,更高分辨率的feature map有助于更加精确地定位small person的关键点(实践证明接一层deconv. module足够)。在训练时,使用multi-resolution supervision,即对原图1/4和1/2大小的两个feature map同时进行监督,这样做是为了在训练时就使网络获得处理scale variation的能力,1/4的feature map主要处理大一些的人,1/2的feature map主要处理小一些的人,而不是在推理时依赖multiscale evaluation处理scale variation的问题。在推理时,使用multi-resolution heatmap aggregation,即将不同分辨率的heatmap取平均用于最后的预测,也是为了处理scale variation。

    前面仅仅讨论了如何生成一个准确且scale-aware的heatmap,对于grouping采用的也是上文提到的associative embedding。最后这个工作达到了SOTA,是目前bottom-up方法中性能最强劲的网络之一。

    参考文献

    [1] Toshev, A., & Szegedy, C. (2014). Deeppose: Human pose estimation via deep neural networks. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 1653-1660).

    [2] Carreira, J., Agrawal, P., Fragkiadaki, K., & Malik, J. (2016). Human pose estimation with iterative error feedback. In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 4733-4742).

    [3] Sun, X., Shang, J., Liang, S., & Wei, Y. (2017). Compositional human pose regression. In Proceedings of the IEEE International Conference on Computer Vision (pp. 2602-2611).

    [4] Tompson, J. J., Jain, A., LeCun, Y., & Bregler, C. (2014). Joint training of a convolutional network and a graphical model for human pose estimation. Advances in neural information processing systems, 27, 1799-1807.

    [5] Wei, S. E., Ramakrishna, V., Kanade, T., & Sheikh, Y. (2016). Convolutional pose machines. In Proceedings of the IEEE conference on Computer Vision and Pattern Recognition (pp. 4724-4732).

    [6] Newell, A., Yang, K., & Deng, J. (2016, October). Stacked hourglass networks for human pose estimation. In European conference on computer vision (pp. 483-499). Springer, Cham.

    [7] Xiao, B., Wu, H., & Wei, Y. (2018). Simple baselines for human pose estimation and tracking. In Proceedings of the European conference on computer vision (ECCV) (pp. 466-481).

    [8] Sun, K., Xiao, B., Liu, D., & Wang, J. (2019). Deep high-resolution representation learning for human pose estimation. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 5693-5703).

    [9] Zhang, F., Zhu, X., Dai, H., Ye, M., & Zhu, C. (2020). Distribution-aware coordinate representation for human pose estimation. In Proceedings of the IEEE/CVF conference on computer vision and pattern recognition (pp. 7093-7102).

    [10] Yu, C., Xiao, B., Gao, C., Yuan, L., Zhang, L., Sang, N., & Wang, J. (2021). Lite-hrnet: A lightweight high-resolution network. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 10440-10450).

    [11] Xu, L., Guan, Y., Jin, S., Liu, W., Qian, C., Luo, P., ... & Wang, X. (2021). ViPNAS: Efficient Video Pose Estimation via Neural Architecture Search. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 16072-16081).

    [12] Lin, T. Y., Maire, M., Belongie, S., Hays, J., Perona, P., Ramanan, D., ... & Zitnick, C. L. (2014, September). Microsoft coco: Common objects in context. In European conference on computer vision (pp. 740-755). Springer, Cham.

    [13] Jin, S., Xu, L., Xu, J., Wang, C., Liu, W., Qian, C., ... & Luo, P. (2020, August). Whole-body human pose estimation in the wild. In European Conference on Computer Vision (pp. 196-214). Springer, Cham.

    [14] Andriluka, M., Pishchulin, L., Gehler, P., & Schiele, B. (2014). 2d human pose estimation: New benchmark and state of the art analysis. In Proceedings of the IEEE Conference on computer Vision and Pattern Recognition (pp. 3686-3693).

    [15] Li, J., Wang, C., Zhu, H., Mao, Y., Fang, H. S., & Lu, C. (2019). Crowdpose: Efficient crowded scenes pose estimation and a new benchmark. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (pp. 10863-10872).

    展开全文
  • 人体姿态估计综述

    万次阅读 多人点赞 2020-10-14 19:18:11
    一、人体姿态估计常用数据集 二、人体姿态估计常用评估指标 三、人体姿态估计论文 3.1 DeepPose: Human Pose Estimation via Deep Neural Networks(2014) 3.2 Convolutional Pose Machines(2016) 3.3Stacked ...

    【编者的话】本文是综合各家关于人体姿态估计的介绍,后面补充移动端的性能对比、PoseNet、BlazePose

    还有MediaPipe的应用

     

    人体姿态估计是给定一幅图像或者一段视频,从中去恢复人体关节点的过程。利用深度学习进行姿态估计的方法大致分为两种:自上而下的方法和自下而上的方法。自上而下(top-down),即先检测出来人体,再对单个人进行姿态估计;而自下而上(down-top),则是先检测出人体关节点,再根据检测出来的关节点连成人体骨架。下面,将对近几年的人体姿态估计的论文进行一下汇总。

    各模型在不同机器上耗时

     

    模型服务器CPU服务器GPU设备CPU设备GPU设备*PUOPPO CPUOPPO GPU 
    PoseEstimation-TFLite(CPU)/MACE(GPU)  278ms(9652)  78ms10ms 
    pytorch mobilenetv2  100ms(811)     
    openpose  1.7s  400ms  
    PoseNet 

     

    150 ms

    posenet: Scaling to [-1,1] took 10.58 ms

    200ms

    更慢需要看下

     50ms  

    BlazePose

    BlazeFace

    BlazePalm

      

    200ms一个打印

    上半身

         
    yolov4    

    700ms

    需要看下

       

    人体姿态估计常用数据集

    LSP

    样本数:2K,关节点个数:14,全身,单人,体育

    FLIC

    样本数:20K,关节点个数:9,半身,单人,影视 

    MPII

    2014年引入

    样本数:25K,关节点个数:16,全身,单人/多人,日常

    单人姿态估计中最常用的benchmark, 使用的是PCKh的指标(可以认为预测的关键点与GT标注的关键点经过head size normalize后的距离)

    整体结果目前已经非常高(最高的有93.9%)

    MicroSoft COCO

    2016年的下半年

    多人姿态估计的标注

    样本数:>=30W,关节点个数:18,全身,多人,10W个人体姿态标签

    CrowdPose

    拥挤人群的数据集

    PoseTrack

    用于人体姿态跟踪的任务,来源于MPII的数据集,标注风格也很相近

    • > 1356 video sequences
    • > 46K annotated video frames
    • > 276K body pose annotations
    • Two challenges: "Multi-Person Pose Estimation" and "Multi-Person Pose Tracking"

    AIChallenger

    Human3.6M

    3D的人体数据集

    Diversity and Size

    • 3.6 million 3D human poses and corresponding images

    • 11 professional actors (6 male, 5 female)

    • 17 scenarios (discussion, smoking, taking photo, talking on the phone...)

    Accurate Capture and Synchronization

    • High-resolution 50Hz video from 4 calibrated cameras

    • Accurate 3D joint positions and joint angles from high-speed motion capture system

    • Pixel-level 24 body part labels for each configuration

    • Time-of-flight range data

    • 3D laser scans of the actors

    • Accurate background subtraction, person bounding boxes

    Support for Development

    • Precomputed image descriptors

    • Software for visualization and discriminative human pose prediction

    • Performance evaluation on withheld test set

    DensePose-COCO

    Facebook,100人也很轻松

    把2D图像,转换成3D人体模型

    覆盖浑身上下超过5000个节点,比十几个关节要细致得多。

    DensePose每秒处理多帧画面,而且,就算视频里同时出现100个人

     

    人体姿态估计常用评估指标

    Percentage of Correct Parts (PCP)

    检测到正确部位的比例。在PCP中认为一个骨骼(limb)被检测到的标准是,骨骼的两个关节点的位置与真实关节点的位置的距离小于骨骼的长度的一半。

    Percent of Detected Joints (PDJ)

    检测到的关节点的比例。在PDJ中认为一个关节被检测到的标准是,关节的位置与真实位置的距离小于躯干对角点的长度(left shoulderright hip的距离)的一个比例值。

    Percentage of Correct Keypoints (PCK)

    关键点被准确检测的比例。计算检测的关键点与其对应的groundtruth间的归一化距离小于设定阈值的比例。FLIC 中是以躯干直径作为归一化参考。MPII 中是以头部长度作为归一化参考,即 PCKh

    Average Precision (AP)

    平均精确度。类似目标检测,将在真实目标和预测值目标之间的匹配程度的阈值度量由目标检测中的每个目标检测框的交并比(IOU)改为每个目标的关键点相似度(object keypoint similarity, OKS)

     

    人体姿态估计的过去,现在,未来

    俞刚Be myself / skicyyu.org

    前言

    因为在ICIP2019上面和两位老师搞了一个关于人体姿态估计以及动作行为的tutorial,所以最近整理了蛮多人体姿态估计方面的文章。所以做了一个总结和梳理,希望能抛砖引玉。

    问题

    人体姿态估计是计算机视觉中一个很基础的问题。从名字的角度来看,可以理解为对“人体”的姿态(关键点,比如头,左手,右脚等)的位置估计。一般我们可以这个问题再具体细分成4个任务:

    • 单人姿态估计 (Single-Person Skeleton Estimation)
    • 多人姿态估计 (Multi-person Pose Estimation)
    • 人体姿态跟踪 (Video Pose Tracking)
    • 3D人体姿态估计 (3D Skeleton Estimation)

    具体讲一下每个任务的基础。首先是 单人姿态估计, 输入是一个crop出来的行人,然后在行人区域位置内找出需要的关键点,比如头部,左手,右膝等。常见的数据集有MPII, LSP, FLIC, LIP。其中MPII是2014年引进的,目前可以认为是单人姿态估计中最常用的benchmark, 使用的是PCKh的指标(可以认为预测的关键点与GT标注的关键点经过head size normalize后的距离)。但是经过这几年的算法提升,整体结果目前已经非常高了(最高的已经有93.9%了)。下面是单人姿态估计的结果图(图片来源于CPM的paper):

    单人姿态估计算法往往会被用来做多人姿态估计。多人姿态估计的输入是一张整图,可能包含多个行人,目的是需要把图片中所有行人的关键点都能正确的做出估计。针对这个问题,一般有两种做法,分别是top-down以及bottom-up的方法。对于top-down的方法,往往先找到图片中所有行人,然后对每个行人做姿态估计,寻找每个人的关键点。单人姿态估计往往可以被直接用于这个场景。对于bottom-up,思路正好相反,先是找图片中所有parts (关键点),比如所有头部,左手,膝盖等。然后把这些parts(关键点)组装成一个个行人。

    对于测试集来讲,主要有COCO, 最近有新出一个数据集CrowdPose。下面是CPN算法在COCO上面的结果:

    如果把姿态估计往视频中扩展的话,就有了人体姿态跟踪的任务。主要是针对视频场景中的每一个行人,进行人体以及每个关键点的跟踪。这个问题本身其实难度是很大的。相比行人跟踪来讲,人体关键点在视频中的temporal motion可能比较大,比如一个行走的行人,手跟脚会不停的摆动,所以跟踪难度会比跟踪人体框大。目前主要有的数据集是PoseTrack

    同时,如果把人体姿态往3D方面进行扩展,输入RGB图像,输出3D的人体关键点的话,就是3D 人体姿态估计。这个有一个经典的数据集Human3.6M。最近,除了输出3D的关键点外,有一些工作开始研究3D的shape,比如数据集DensePose。长线来讲,这个是非常有价值的研究方向。3D人体姿态估计的结果图(来自算法a simple baseline)如下:

    Densepose算法的结果输出:

    过去--传统方法提取feature representation以及关键点的空间位置关系

    这部分主要用于描述在深度学习之前,我们是如何处理人体姿态估计这个问题。从算法角度来讲,这部分的工作主要是希望解决单人的人体姿态估计问题,也有部分工作已经开始尝试做3D的人体姿态估计。可以粗略的方法分成两类。

    第一类是直接通过一个全局feature,把姿态估计问题当成分类或者回归问题直接求解 [1][2]。但是这类方法的问题在于精度一般,并且可能比较适用于背景干净的场景。第二类是基于一个graphical model,比如常用图结构模型(pictorial structure model)。一般包含unary term,是指对单个part进行feature的representation,单个part的位置往往可以使用DPM (Deformable Part-based model)来获得。 同时需要考虑pair-wise关系来优化关键点之间的关联。基于Pictorial Structure,后续有非常多的改进,要么在于如何提取更好的feature representation [3][4], 要么在于建模更好的空间位置关系[5][6]。

    总结一下,在传统方法里面,需要关注的两个维度是: feature representation以及关键点的空间位置关系。特征维度来讲,传统方法一般使用的HOG, Shape Context, SIFT等shallow feature。 空间位置关系的表示也有很多形式,上面的Pictorial structure model可能只是一种。

    备注
    对应OpenPose,feature representation是heatmap,关键点的空间位置关系是paf

    这两个维度在深度学习时代也是非常至关重要的,只是深度学习往往会把特征提取,分类,以及空间位置的建模都在一个网络中直接建模,所以不需要独立的进行拆解,这样更方便设计和优化。

    现在--深度学习提取feature representation以及关键点的空间位置关系

    从2012年AlexNet开始,深度学习开始快速发展,从最早的图片分类问题,到后来的检测,分割问题。在2014年,[7]第一次成功引入了CNN来解决单人姿态估计的问题。因为当时的时代背景,整体网络结构比较简单,同时也沿用了传统骨架的思路。首先是通过slide-window的方式,来对每个patch进行分类,找到相应的人体关键点。因为直接sliding-window少了很多context信息,所以会有很多FP的出现。所以在pipeline上面加上了一个post-processing的步骤,主要是希望能抑制部分FP,具体实现方式是类似一个空间位置的模型。所以从这个工作来看,有一定的传统姿态估计方法的惯性,改进的地方是把原来的传统的feature representation改成了深度学习的网络,同时把空间位置关系当成是后处理来做处理。总体性能在当时已经差不多跑过了传统的姿态估计方法。

    2014年的另外一个重要的进展是引入了MPII的数据集。此前的大部分paper都是基于FLIC以及LSP来做评估的,但是在深度学习时代,数据量还是相对偏少(K级别)。MPII把数据量级提升到W级别,同时因为数据是互联网采集,同时是针对activity来做筛选的,所以无论从难度还是多样性角度来讲,都比原来的数据集有比较好的提升。

    一直到2016年,随着深度学习的爆发,单人姿态估计的问题也引来了黄金时间。这里需要重点讲一下两个工作,一个工作是Convolutional Pose Machine (CPM)[8],另外一个是Hourglass [9]。

    • CPM

    CPM是CMU Yaser Sheikh组的工作,后续非常有名的openpose也是他们的工作。从CPM开始,神经网络已经可以e2e的把feature representation以及关键点的空间位置关系建模进去(隐式的建模),输入一个图片的patch, 输出带spatial信息的tensor,channel的个数一般就是人体关键点的个数(或者是关键点个数加1)。空间大小往往是原图的等比例缩放图。通过在输出的heatmap上面按channel找最大的响应位置(x,y坐标),就可以找到相应关键点的位置。

    这种heatmap的方式被广泛使用在人体骨架的问题里面。这个跟人脸landmark有明显的差异,一般人脸landmark会直接使用回归(fully connected layer for regression)出landmark的坐标位置。这边我做一些解释。首先人脸landmark的问题往往相对比较简单,对速度很敏感,所以直接回归相比heatmap来讲速度会更快,另外直接回归往往可以得到sub-pixel的精度,但是heatmap的坐标进度取决于在spatial图片上面的argmax操作,所以精度往往是pixel级别(同时会受下采样的影响)。 但是heatmap的好处在于空间位置信息的保存,这个非常重要。一方面,这个可以保留multi-modal的信息,比如没有很好的context信息的情况下,是很难区分左右手的,所以图片中左右手同时都可能有比较好的响应,这种heatmap的形式便于后续的cascade的进行refinement优化。另外一个方面,人体姿态估计这个问题本身的自由度很大,直接regression的方式对自由度小的问题比如人脸landmark是比较适合的,但是对于自由度大的姿态估计问题整体的建模能力会比较弱。相反,heatmap是比较中间状态的表示,所以信息的保存会更丰富

    备注:

    回归(fully connected layer for regression)在Alexnet的思路

    后续2D的人体姿态估计方法几乎都是围绕heatmap这种形式来做的(3D姿态估计将会是另外一条路),通过使用神经网络来获得更好的feature representation,同时把关键点的空间位置关系隐式的encode在heatmap中,进行学习。大部分的方法区别在于网络设计的细节。先从CPM开始说起。

    整个网络会有多个stage,每个stage设计一个小型网络,用于提取feature,然后在每个stage结束的时候,加上一个监督信号。中间层的信息可以给后续层提供context,后续stage可以认为是基于前面的stage做refinement。这个工作在MPII上面的结果可以达到88.5,在当时是非常好的结果。

    备注:是否跟SSD的思路类似?SSD使用6个不同特征图检测不同尺度的目标。低层预测小目标,高层预测大目标。这6个检测层都是卷积层,对应了上文中的6个DeepID2层,每个DeepID2层对应了不同大小的滑动窗口(低层滑动窗口较小,高层滑动窗口较大),这样就可以检测到不同尺度的目标了

    • Hourglass

    在2016年的7月份,Princeton的Deng Jia组放出了另外一个非常棒的人体姿态估计工作,Hourglass。后续Deng Jia那边基于Hourglass的想法做了Associate Embedding,以及后续的CornerNet都是非常好的工作。

    Hourglass相比CPM的最大改进是网络结构更简单,更优美。

     

    从上图可以看出,网络是重复的堆叠一个u-shape的structure.

     

    pipeline上面跟CPM很类似。只是结构做了修改。从MPII上的结果来看,也有明显的提升,可以达到90.9的PCKh。

    这种u-shape的结构其实被广泛应用于现代化的物体检测,分割等算法中,同时结果上面来讲也是有非常好的提升的。另外,Hourglass这种堆多个module的结构,后续也有一些工作follow用在其他任务上面。

    采用的是Resnet的思路?

    但是Hourglass也是存在一些问题的,具体可以看后续讲解的MSPN网络。

    在CPM以及Hourglass之后,也有很多不错的工作持续在优化单人姿态估计算法,比如[10][11]。

    2016年的下半年还出现了一个非常重要的数据集: COCO。这个时间点也是非常好的时间点。一方面,MPII已经出现两年,同时有很多非常好的工作,比如CPM, Hourglass已经把结果推到90+,数据集已经开始呈现出一定的饱和状态。另外一方面,物体检测/行人检测方面,算法提升也特别明显,有了很多很好的工作出现,比如Faster R-CNN和SSD。所以COCO的团队在COCO的数据集上面引入了多人姿态估计的标注,并且加入到了2016年COCO比赛中,当成是一个track。从此,多人姿态估计成为学术界比较active的研究topic。正如前面我在“问题”的部分描述的,多人姿态估计会分成top-down以及bottom-up两种模式。我们这边会先以bottom-up方法开始描述。

    • OpenPose

    在2016年COCO比赛中,当时的第一名就是OpenPose [12]。 CMU团队基于CPM为组件,先找到图片中的每个joint的位置,然后提出Part Affinity Field (PAF)来做人体的组装。

    PAF的基本原理是在两个相邻关键点之间,建立一个有向场,比如左手腕,左手肘。我们把CPM找到的所有的左手腕以及左手肘拿出来建立一个二分图,边权就是基于PAF的场来计算的。然后进行匹配,匹配成功就认为是同一个人的关节。依次类别,对所有相邻点做此匹配操作,最后就得到每个人的所有关键点

    备注:

    向量叉积

    在当时来讲,这个工作效果是非常惊艳的,特别是视频的结果图,具体可以参考Openpose的Github官网。在COCO的benchmark test-dev上面的AP结果大概是61.8。

    • Hourglass + Associative Embedding

    在2016年比赛的榜单上面,还有另外一个很重要的工作就是Deng Jia组的Associative Embedding[13]。文章类似Openpose思路,使用bottom-up的方法,寻找part使用了Hourglass的方式来做。关键在于行人的组装上面,提出了Associative Embedding的想法。大概想法是希望对每个关键点输出一个embedding,使得同一个人的embedding尽可能相近,不同人的embedding尽可能不一样。

    在COCO2016比赛后,这个工作持续的在提升,文章发表的时候,COCO test-dev上面的结果在65.5。

    除了Openpose以及Associative Embedding之外,bottom-up还有一个工作非常不错,DeepCut[14]以及DeeperCut[15],他们使用优化问题来直接优化求解人的组合关系

    • CPN

    后面一部分章节我会重点围绕COCO数据集,特别是COCO每年的比赛来描述多人姿态估计的进展。虽然2016年bottom-up是一个丰富时间点,但是从2017年开始,越来的工作开始围绕top-down展开,一个直接的原因是top-down的效果往往更有潜力。top-down相比bottom-up效果好的原因可以认为有两点。首先是人的recall往往更好。因为top-down是先做人体检测,人体往往会比part更大,所以从检测角度来讲会更简单,相应找到的recall也会更高。其次是关键点的定位精度会更准,这部分原因是基于crop的框,对空间信息有一定的align,同时因为在做single person estimation的时候,可以获得一些中间层的context信息,对于点的定位是很有帮助的。当然,top-down往往会被认为速度比bottom-up会更慢,所以在很多要求实时速度,特别是手机端上的很多算法都是基于openpose来做修改的。不过这个也要例外,我们自己也有做手机端上的多人姿态估计,但是我们是基于top-down来做的,主要原因是我们的人体检测器可以做的非常快。

    说完了背景后,在COCO2017年的比赛中,我们的CPN[16]一开始就决定围绕top-down的算法进行尝试。我们当时的想法是一个coarse-to-fine的逻辑,先用一个网络出一个coarse的结果(GlobalNet),然后再coarse的结果上面做refinement (RefineNet)。具体结果如下:

    为了处理处理难的样本,我们在loss上面做了一定的处理,最后的L2 loss我们希望针对难的关键点进行监督,而不是针对所有关键点uniform的进行监督,所以我们提出了一个Hard keypoint mining的loss。这个工作最后在COCO test-dev达到了72.1的结果 (不使用额外数据以及ensemble),获得了2017年的COCO骨架比赛的第一名。

    损失函数:L1 loss, L2 loss, smooth L1 loss

    对于大多数CNN网络,我们一般是使用L2-loss而不是L1-loss,因为L2-loss的收敛速度要比L1-loss要快得多。

    对于边框预测回归问题,通常也可以选择平方损失函数(L2损失),但L2范数的缺点是当存在离群点(outliers)的时候,这些点会占loss的主要组成部分。比如说真实值为1,预测10次,有一次预测值为1000,其余次的预测值为1左右,显然loss值主要由1000主宰。所以FastRCNN采用稍微缓和一点绝对损失函数(smooth L1损失),它是随着误差线性增长,而不是平方增长。

    注意:smooth L1和L1-loss函数的区别在于,L1-loss在0点处导数不唯一,可能影响收敛。smooth L1的解决办法是在0点附近使用平方函数使得它更加平滑。

    公式比较

     

    Smooth L1 vs L2


    根据fast rcnn的说法,"...... L1 loss that is less sensitive to outliers than the L2 loss used in R-CNN and SPPnet." 也就是smooth L1 loss让loss对于离群点更加鲁棒,即:相比于L2损失函数,其对离群点、异常值(outlier)不敏感,梯度变化相对更小,训练时不容易跑飞。

    另外,这个工作的另外一个贡献是比较完备的ablation。我们给出了很多因素的影响。比如top-down的第一步是检测,我们分析了检测性能对最后结果的影响。物体检测结果从30+提升到40+(mmAP)的时候,人体姿态估计能有一定的涨点(1个点左右),但是从40+提升到50+左右,涨点就非常微弱了(0.1-0.2)。另外,我们对data augmentation,网络的具体结构设计都给出了比较完整的实验结果。另外,我们开始引入了传统的ImageNet basemodel (ResNet50)做了backbone,而不是像Openpose或者Hourglass这种非主流的模型设计结构,所以效果上面也有很好的提升。

    • MSPN

    2018年的COCO比赛中,我们继续沿用top-down的思路。当时我们基于CPN做了一些修改,比如把backbone不停的扩大,发现效果提升很不明显。我们做了一些猜测,原来CPN的两个stage可能并没有把context信息利用好,单个stage的模型能力可能已经比较饱和了,增加更多stage来做refinement可能是一个解决当前问题,提升人体姿态估计算法uppper-bound的途径。所以我们在CPN的globalNet基础上面,做了多个stage的堆叠,类似于Hourglass的结构。

    相比Hourglass结构,我们提出的MSPN[17]做了如下三个方面的改进。首先是Hourglass的每个stage的网络,使用固定的256 channel,即使中间有下采样,这种结构对信息的提取并不是很有益。所以我们使用了类似ResNet-50这种标准的ImageNet backbone做为每个stage的网络。另外,在两个相邻stage上面,我们也加入了一个连接用于更好的信息传递。最后,我们对于每个stage的中间层监督信号做了不同的处理,前面层的监督信号更侧重分类,找到coarse的位置,后面更侧重精确的定位。从最后效果上面来看,我们在COCO test-dev上面一举跑到了76.1 (单模型不加额外数据)。

    • HRNet

    之前我们讲的很多人体姿态估计方面的工作,都在围绕context来做工作,如何更好的encode和使用这些context是大家工作的重点。到了2019年, MSRA wang jingdong组出了一个很好的工作,提出了spatial resolution的重要性。在这篇工作之前,我们往往会暴力的放大图片来保留更多信息,同时给出更精准的关键点定位,比如从256x192拉大到384x288。这样对效果提升还是很明显的,但是对于计算量的增加也是非常大的。 HRNet从另外一个角度,抛出了一个新的可能性:

    相比传统的下采样的网络结构,这里提出了一种新的结构。分成多个层级,但是始终保留着最精细的spaital那一层的信息,通过fuse下采样然后做上采样的层,来获得更多的context以及语义层面的信息(比如更大的感受野)。从结果上面来看,在COCO test-dev上面单模型可以达到75.5。

    到此为止,我们重点讲述了几个多人姿态估计的算法,当然中间穿插了不少我们自己的私货。在多人姿态估计领域还有很多其他很好的工作,因为篇幅问题,这里我们就略过了。

    回到2017年,MPI提出了一个新的数据集, PoseTrack,主要是希望能帮忙解决视频中的人体姿态估计的问题,并且在每年的ICCV或者ECCV上面做challenge比赛。 PoseTrack的数据集主要还是来源于MPII的数据集,标注风格也很相近。围绕PoseTrack这个任务,我们重点讲一个工作, Simple Baselines。

    • Simple Baselines

    Simple Baselines [19]是xiao bin在MSRA的工作。提出了一种非常简洁的结构可以用于多人姿态估计以及人体姿态估计的跟踪问题。这里重点讲一下对于PoseTrack的处理方法:

    这里有两个细节,首先是会利用上一帧的检测结果,merge到新的一帧,避免检测miss的问题。另外,在两帧间,会使用OKS based相似度来做人体的关联,而不是只是简单的使用框的overlap,这样可以更好的利用每个关键点的temporal smooth的性质。从结果上面来看,这个方法也获得了PoseTrack2018比赛的第一名。

    到目前位置,我们描述了单人的姿态估计,多人的姿态估计,以及简单讲了一下视频中的人体姿态跟踪的问题。最后,我们讲一下3D人体姿态估计的问题,这个我觉得这个是目前非常active的研究方向,也是未来的重要的方向。

    • 3D Skeleton

    3D人体姿态估计目前我们先限制在RGB输入数据的情况下,不考虑输入数据本身是RGBD的情况。我们大概可以把这个问题分成两个子问题:第一个是出人体的3D关键点。相比之前的2D关键点,这里需要给出每个点的3D位置。 另外一种是3D shape,可以给出人体的3D surface,可以认为是更dense的skeleton信息(比如Densepose, SMPL模型)。

    先从3D关键点说起。主要的方法可以分成两类,第一类是割裂的考虑。把3D skeleton问题拆解成2D人体姿态估计,以及从2D关键点预测3D关键点两个步骤。 另外一类是joint的2D以及3D的姿态估计。

    大部分的基于深度学习的3D人体骨架工作是从2017年开始的,主要的上下文是因为2D人体姿态估计中CPM以及Hourglass给出了很好的效果,使得3D Skeleton成为可能。

    我们先从3D跟2D skeleton割裂的算法开始说起。首先从2017年deva Ramanan组的一个非常有意思的工作【20】开始说起,3D Human Pose Estimation = 2D Pose Estimation + Matching。从名字可以看出,大致的做法。首先是做2D的人体姿态估计,然后基于Nearest neighbor最近邻的match来从training data中找最像的姿态。2D的姿态估计算法是基于CPM来做的。3D的match方法是先把training data中的人体3d骨架投射到2D空间,然后把test sample的2d骨架跟这些training data进行对比,最后使用最相近的2d骨架对应的3D骨架当成最后test sample点3D骨架。当training数据量非常多的时候,这种方法可能可以保证比较好的精度,但是在大部分时候,这种匹配方法的精度较粗,而且误差很大。

    随后,也在17年,另外一个非常有意思的工作【21】发表在ICCV2017。同样,从这个工作的名字可以看出,这个工作提出了一个比较simple的baseline,但是效果还是非常明显。方法上面来讲,就是先做一个2d skeleton的姿态估计,方法是基于Hourglass的,文章中的解释是较好的效果以及不错的速度。 基于获得的2d骨架位置,后续接入两个fully connected的操作,直接回归3D坐标点。这个做法非常粗暴直接,但是效果还是非常明显的。在回归之前,需要对坐标系统做一些操作。

    同样,从2017年的ICCV开始,已经有工作【22】开始把2D以及3d skeleton的估计问题joint一起来做优化。这样的好处其实是非常明显的。因为很多2d数据对于3d来讲是有帮助的,同时3D姿态对于2d位置点估计也能提供额外的信息辅助。2D的MPII, COCO数据可以让算法获得比较强的前背景点分割能力,然后3D的姿态估计数据集只需要关注前景的3D骨架估计。这也是目前学术界数据集的现状。从实际效果上面来讲,joint training的方法效果确实也比割裂的train 2d以及3d skeleton效果要好。

    从2018年开始,3D skeleton开始往3d shape发展。原先只需要知道joint点的3D坐标位置,但是很多应用,比如人体交互,美体,可能需要更dense的人体姿态估计。这时候就有了一个比较有意思的工作densePose 【23】。这个工作既提出来一个新的问题,也包含新的benchmark以及baseline。相比传统的SMPL模型,这个工作提出了使用UV map来做估计(同时间也有denseBody类似的工作),可以获得非常dense的3d姿态位置,等价于生成了3d shape。当然,从3d shape的角度来讲,有很多非常不错的工作,这里就不做重点展开。

    最后讲一下3d人体姿态估计目前存在的问题。我个人认为主要是benchmark。目前最常使用的human 3.6M实际上很容易被overfit,因为subjects数量太小(实际训练样本只有5-6人,depend on具体的测试方法,测试样本更少)。同时,是在受限的实验室场景录制,跟真实场景差异太大,背景很干净,同时前景的动作pose也比较固定。当然,3d skeleton的数据集的难度非常大,特别是需要采集unconstrained条件下面的数据。目前也有一些工作在尝试用生成的数据来提升结果。

    • 应用

    最后,讲了这么多的人体姿态估计,我们最后说一下人体姿态估计有什么用,这里的人体姿态估计是一个广义的人体姿态估计,包含2D/3D等。

    首先的一个应用是人体的动作行为估计,要理解行人,人体的姿态估计其实是一个非常重要的中间层信息。目前有蛮多基于人体姿态估计直接做action recogntion的工作,比如把关键点当成graph的节点,然后是使用graph convolution network来整合各种信息做动作分类。我博士的研究课题是action recognition,我读完四年博士的一个总结是action这个问题,如果需要真正做到落地,人体姿态估计算法是必不可少的组成部分。

    第二类应用是偏娱乐类的,比如人体交互,美体等。比如可以通过3d姿态估计来虚拟出一个动画人物来做交互,使用真实人体来控制虚拟人物。另外比如前一段时间比较火热的瘦腰,美腿等操作背后都可能依赖于人体姿态估计算法。

    第三类应用是可以做为其他算法的辅助环节,比如Person ReID可以基于人体姿态估计来做alignment,姿态估计可以用来辅助行人检测,杀掉检测的FP之类的。

    未来

    深度学习带来了学术界以及工业界的飞速发展,极大的提升了目前算法的结果,也使得我们开始关注并尝试解决一些更有挑战性的问题。

    下面的几点我是侧重于把人体姿态估计真正落地到产品中而展开的。当然也可以换个维度考虑更长线的研究发展,这个可能希望以后有机会再一起讨论。

    • Data Generation

    我觉得这个是一个非常重要的研究方向,不管是对2d还是3d。以2d为例,虽然目前数据量已经非常的大,比如COCO数据,大概有6w+的图片数据。但是大部分pose都是正常pose,比如站立,走路等。对于一些特殊pose,比如摔倒,翻越等并没有多少数据。或者可以这么理解,这些数据的收集成本很高。如果我们可以通过生成数据的方法来无限制的生成出各种各样的数据的话,这个对于算法的提升是非常的关键。虽然目前GAN之类的数据生成质量并不高,但是对于人体姿态估计这个问题来讲其实已经够了,因为我们不需要清晰真实的细节,更多的是需要多样性的前景(不同着装的人)和pose。但是数据生成的方式对于人体姿态估计本身也有一个非常大的挑战,这个可以留做作业,感兴趣的同学可以在留言区回复。

    • Crowd的问题

    这个问题其实是行人检测的问题。目前市面上没有能针对拥挤场景很work的行人检测算法。这个问题的主要瓶颈在于行人检测的一个后处理步骤:NMS (Non-maximum suppression)。这个其实是从传统物体检测方法时代就有的问题。因为目前大部分算法不能区分一个行人的两个框还是两个不同行人的两个框,所以使用NMS来基于IOU用高分框抑制低分框。这个问题在传统的DPM以及ACF时代问题并不突出,因为当时算法精度远没有达到需要考虑NMS的问题。但是随着技术的进步,目前NMS已经是一个越来越明显的瓶颈,或者说也是行人检测真正落地的一个很重要的障碍。最近我们提出了一个新的数据集CrowdHuman,希望引起大家对于遮挡拥挤问题的关注。从算法上面来讲,最近也陆续开始由蛮多不错的工作在往这个方向努力,但是离解决问题还是有一定的距离。回到人体姿态估计这个问题,目前top-down方法依赖于检测,所以这个问题避免不了。 bottom-up可能可以绕开,但是从assemble行人的角度,拥挤场景这个问题也非常有挑战。

    • Multi-task Learning

    刚刚我们讲到,2D以及3D人体姿态估计可以联合training,从而提升整体结果。同样,其实可以把人体姿态估计跟人体相关的其他任务一起联合做数据的标注以及训练。这里可以考虑的包括人体分割(human segmentation),人体部位的parse (human parse)等。可以这么理解,human seg本身的标注可以认为是多边形的标注,我们可以在多边形轮廓上面进行采点,这几个任务可以很自然的联合起来。人体多任务的联合训练我觉得对于充分理解行人是非常有意义的,同时也可以提升各个任务本身的精度。当然潜在的问题是数据标注的成本会增加。另外可以考虑的是跨数据集的联合training,比如某个数据集只有skeleton标注,有个数据集只有seg标注等,这个问题其实也是工业界中很常见的一个问题。

    • Speed

    速度永远是产品落地中需要重点考虑的问题。目前大部分学术paper可能都是在GPU做到差不多实时的水平,但是很多应用场景需要在端上,比如手机的ARM上面进行实时高效的处理。我们之前有尝试过使用我们自己的ThunderNet [24]做人体检测,然后拼上一个简化版的CPN来做人体姿态估计,可以做到端上近似实时的速度,但是效果跟GPU上面还是有一定差距。所以速度的优化是非常有价值的。

    • UnConstrained 3D skeleton Benchmark

    这个我上面也有提到,3D人体姿态估计急需一个更大更有挑战的benchmark来持续推动这个领域的进步。随着很多3d sensor的普及,我理解我们不一定需要依赖传统的多摄像头的setting来做采集,这个使得我们能获得更真实,更wild的数据。

    后记

    这里只是从我个人的角度列了一些人体姿态估计的重要工作,当然其中可能miss了很多细节,很多重要的文献,但是我希望这个是一个引子,吸引更多的同学来一起投入这个方向,一起来推动这个领域的落地。因为我时刻相信人体姿态估计的进步,将会是我们真正从视觉角度理解行人的非常关键的一步。

    最后,希望借此也感谢一下我们R4D中做人体姿态估计的同学,感谢志成,逸伦,文博,斌一,琦翔,禹明,天孜,瑞豪,正雄等等,虽然可能有些同学已经奔赴各地,但是非常感谢各位的付出也怀念和大家一起战斗的时光 。

    Reference

    [1] Randomized Trees for Human Pose Detection, Rogez etc, CVPR 2018

    [2] Local probabilistic regression for activity-independent human pose inference, Urtasun etc, ICCV 2009

    [3] Strong Appearance and Expressive Spatial Models for Human Pose Estimation, Pishchulin etc, ICCV 2013

    [4] Pictorial Structures Revisited: People Detection and Articulated Pose Estimation, Andriluka etc, CVPR 2009

    [5] Latent Structured Models for Human Pose Estimation, Ionescu etc, ICCV 2011

    [6] Poselet Conditioned Pictorial Structures, Pishchulin etc, CVPR 2013

    [7] Learning Human Pose Estimation Features with Convolutional Networks, Jain etc, ICLR 2014

    [8] Convolutional Pose Machines, Wei etc, CVPR 2016

    [9] Stacked Hourglass Networks for Human Pose Estimation, Newell etc, ECCV 2016

    [10] Multi-Context Attention for Human Pose Estimation, Chu etc, CVPR 2017

    [11] Deeply Learned Compositional Models for Human Pose Estimation, ECCV 2018

    [12] Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields, Cao etc, CVPR 2017

    [13] Associative Embedding: End-to-End Learning for Joint Detection and Grouping, Newell etc, NIPS 2017

    [14] DeepCut: Joint Subset Partition and Labeling for Multi Person Pose Estimation, Pishchulin etc, CVPR 2016

    [15] DeeperCut: A Deeper, Stronger, and Faster Multi-Person Pose Estimation Model, Insafutdinov, ECCV 2016

    [16] Cascaded Pyramid Network for Multi-Person Pose Estimation, Chen etc, CVPR 2017

    [17] Rethinking on Multi-Stage Networks for Human Pose Estimation, Li etc, Arxiv 2018

    [18] Deep High-Resolution Representation Learning for Human Pose Estimation, Sun etc, CVPR 2019

    [19] Simple Baselines for Human Pose Estimation and Tracking, Xiao etc, ECCV 2018

    [20] 3D Human Pose Estimation = 2D Pose Estimation + Matching, Chen etc, CVPR 2017

    [21] A simple yet effective baseline for 3d human pose estimation, Martinez, ICCV 2017

    [22] Compositional Human Pose Regression, Sun etc, ICCV 2017

    [23] Densepose: Dense Human Pose Estimation in the Wild, Guler etc, CVPR 2018

    [24] ThunderNet: Toward Real-time Generic Object Detection, Qin etc, ICCV 2019

     

     

    人体姿态估计论文

    DeepPose: Human Pose Estimation via Deep Neural Networks(2014)

    DeepPose     2014     Google     自上而下

    paper link:https://arxiv.org/pdf/1312.4659.pdf

    github:https://github.com/mitmul/deeppose

    这是第一个将深度学习应用到人体姿态估计的方法。这篇文章使用深度神经网络构建了一个级联的回归网络来实现人体姿态估计。文章将人体姿态估计看作是一个人体关节的回归问题,文章认为这样做有两个好处:(1)深度神经网络有着捕获全局上下文信息的能力,每一个关节的回归器都用到整张图片的信息;(2)是这种表示方相对于图模型的方法要更简单,不需要设计人体部分(part)的特征表示或者检测器,也不需要设计人体关节之间的拓扑模型和交互。

    步骤:

    1.首先把整个图像作为输入,使用卷积神经网络来进行全局的特征提取,初步获得人体关节点的粗略估计

    2.将图像中所有的人体关节点坐标标准化,利用深度神经网络对关节点坐标进行回归。

    3.设计了级联姿态回归器,分阶段优化。利用前一阶段预测结果截取候选框(在获得初步的节点坐标之后,再在原始图片中根据该坐标选择一定的局部区域),扩充数据,增加细节,从而提高精度。

    解决的问题:

    1.如何使用全局观点获得关节点的坐标的问题,对于每一个关节点,都把整个图像作为输入,同时,使用卷积神经网络来作为全局的特征提取;

    2.对于节点的坐标在不同的图像中处理绝对坐标的问题,作者采用在每一个环节中,通过中点,长和宽选择一个bound box,然后计算节点在bound box中的坐标,从而将绝对坐标转换为统一的坐标;

    3.如何实现更高精度的坐标计算问题,作者提出的级联的卷积神经网络,在最初输入时,将图片设定为固定大小,通过缩放的方式将图片缩放到这个大小,在获得初步的节点坐标之后,再在原始图片中根据该坐标选择一定的局部区域,从而实现更高准确度的计算节点的坐标。

    数据集:FLICLSP

    性能指标(PCP)

    LSP0.56(大臂)0.38(小臂)0.78(大腿)0.71(小腿)

    FLIC0.8(大臂)0.75(小臂)0.71(大腿)0.5(小腿)

    Convolutional Pose Machines(2016)

    CPM     2016     Carnegie Mellon University     自下而上

    paper linkhttps://arxiv.org/pdf/1602.00134.pdf

    githubhttps://github.com/shihenw/convolutional-pose-machines-release

    https://github.com/CMU-Perceptual-Computing-Lab/convolutional-pose-machines-release

    算法的流程:

    1.在每个尺度下,计算各个部件的相应图

    2.对于每个关节点,累加所有尺度的响应图,得到总响应图

    3.每个关节点的总响应图上,找出相应最大的点,为该关节点的位置

                              

    第一阶段是一个基本的卷积网络,从彩色图像直接预测每个部件的响应。半身模型有9个部件,加上一个背景响应,共10层响应图。

    第二阶段在卷积层中段多了一个串联层(红色concat,把以下三个数据合一:阶段性的卷积结果46*46*32(纹理特征)、46*46*10前一阶段各部件响应(空间特征)、中心约束46*46*1(空间约束:是一个提前生成的高斯函数模板,用来吧相应归拢到图像中心。)

    第三阶段及后续阶段不再使用原始图像为输入,而是从前一阶段的中途取出一个深度为128的特征图作为输入。同样使用串联层综合三种因素:纹理特征+空间特征+中心约束。

    主要特点

    1.用各部件响应图来表达各部件之间的空间约束。响应图和特征图一起作为数据在网络中传递。

    2.网络分为多个阶段(stage)。各个阶段都有监督训练,避免过深网络产生的梯度消失、难以优化的问题。

    3.使用同一个网络,同时在多个尺度处理输入的特征和响应。既能确保精度,又考虑了各个部件之间的远距离关系。

    数据集MPIIFLICLSP

    性能指标PCK):

    MPII0.8795     LSP0.8432     FLIC0.9759(手肘)0.9503(手腕)

    Stacked Hourglass Networks for Human Pose Estimation(2016)

    Stacked Hourglass Networks     2016     University of Michigan      自上而下

    paper link:https://arxiv.org/abs/1603.06937

    githubhttps://github.com/princeton-vl/pose-hg-train

    2016年提出来的堆叠沙漏模型也取得了很高的精确度。网络总体思路是受ResNet的思路影响,希望综合考虑各尺度下不同的feature来让网络学习姿态。

    沙漏结构(单个沙漏)

    沙漏结构设计:可捕捉不同尺度下图片所包含的信息

    残差模块:提取较高层次的特征,同时保留原有层次的信息

    一阶沙漏:

                                  

    四阶沙漏:

    以上为单个沙漏模型。其实单个hourglass network 其实已经可以用来训练姿态估计了,关节点之间是可以互相参考预测的,所以将第一个沙漏网络给出的热力图作为下一个沙漏网络的输入,就意味着第二个沙漏网络可以使用关节点件的相互关系,从而提升了关节点的预测精度。因此要将单个沙漏级联。

             

    中间监督:下图的蓝色部分是输出的heat map。堆叠沙漏网络的每一个子沙漏网络都会有heat map作为预测,所以将每个沙漏输出的heat map参与到loss中,实验证实,预测精确度要远远好于只考虑最后一个沙漏预测的loss,这种考虑网络中间部分的监督训练方式,就叫做中间监督。

              

    数据集:FLICMPII

    性能指标 (PCK)FLIC手肘 0.99 (PCK@0.2)FLIC手腕 0.97                    MPII 0.909 (PCKh@0.5)

    Associative Embedding: End-to-End Learning for Joint Detection and Grouping(2017)  

    Associative Embedding     2017     University of Michigan,清华大学     自下而上

    paper linkhttps://arxiv.org/pdf/1611.05424.pdf

    github:https://github.com/princeton-vl/pose-ae-train

    模型结构:

    思想:

    该网络在堆叠沙漏基础上同时生成每个关节点的检测热图和联合嵌入的预测标签,每个关节点的热图都有对应的标签热图。因此,如果有m个身体关节需要预测,那么网络将输出总共2m个通道,m用于检测,m用于分组。为检测到个人,该网络使用非极大值抑制得到各关节的峰值检测并在同一像素位置检索相应的标记。然后通过比较检测的标签值,匹配那些足够接近的标签值,对身体各个部位的检测进行分组。一组检测形成一个人的姿态估计。

    为了训练网络,对输出热图施加检测损失和分组损失。

                          

    性能指标(AP)

    MPII 0.775MS-COCO test-std 0.663MS-COCO test-dev 0.655.

    Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields(2017) 

    OpenPose     2017     Carnegie Mellon University     自下而上

    paper linkhttps://arxiv.org/abs/1611.08050

    gitHubhttps://github.com/ZheC/Realtime_Multi-Person_Pose_Estimation

    a)该方法以整个图像为输入(b/c)用一个双分支CNN来联合预测身体部位(b)关节点检测的置信度图(c)部位组织的亲和域(d)解析步骤执行一组双边匹配,以关联身体部位的候选。(e)最后将图中所有人组装成完整的身体姿态。

    网络结构:

                     

    步骤:

    1,使用置信图进行关节检测

    先使用 VGG19 的前十个层获得图片的特征,再将其输入后面的模块进行优化。一个阶段 中包含两个分支,一个分支用于回归关节点,另一个则回归关节点之间的链接。第一个阶段 的输入数据为 VGG 前十层得到的特征,而随后阶段的输入数据为前一个阶段的输出和特征。

    2,使用PAF进行身体部分组合

    对于多个人的问题,使用PAFPart Affinity Fields,部位亲和域)的方法将每个人的身体分别组合在一起。这个方法包含了位置和方向信息。每一种肢体在关联的两个部位之间都有一个亲和区域,其中的每一个像素都有一个2D 向量的描述方向。

    3,自底向上

    使用匈牙利算法(Hungarian algorithm)找到两两关节点最优化的连接方式。

                                       

    匈牙利算法

    本文讲述的是匈牙利算法,即图论中寻找最大匹配的算法,暂不考虑加权的最大匹配(用KM算法实现),文章整体结构如下:

    1. 基础概念介绍
    2. 算法的实现

    好的,开始!

    一. 部分基础概念的介绍

    我会严格介绍其定义,并同时用自己的大白话来重述。

    概念点1. 图G的一个匹配是由一组没有公共端点的不是圈的边构成的集合。

    这里,我们用一个图来表示下匹配的概念:

    如图所示,其中的三条边即该图的一个匹配;所以,匹配的两个重点:1. 匹配是边的集合;2. 在该集合中,任意两条边不能有共同的顶点。

    那么,我们自然而然就会有一个想法,一个图会有多少匹配?有没有最大的匹配(即边最多的匹配呢)?

    我们顺着这个思路,继续往下走。

    概念点2. 完美匹配:考虑部集为X={x1 ,x2, ...}和Y={y1, y2, ...}的二部图,一个完美匹配就是定义从X-Y的一个双射,依次为x1, x2, ... xn找到配对的顶点,最后能够得到 n!个完美匹配。

    这里有一个概念,有点陌生,即什么是二部图,这个其实很好理解,给定两组顶点,但是组内的任意两个顶点间没有边相连,只有两个集合之间存在边,即组1内的点可以和组2内的点相连,这样构建出来的图就叫做二部图(更好理解就是n个男人,n个女人,在不考虑同性恋的情况下,组成配偶)。这样是不是简单多了?

    既然说到了双双组成配偶,那我们干的就是月老做的活了,古话说得好,宁拆一座庙,不毁一桩婚,如果真的给出n个帅气的男孩,n个漂亮的女孩,他们之间互相有好感,但一个男孩可以对多个女孩有感觉,一个女孩也可能觉得多个男孩看起来都不错,在这种情况下,我们怎么让他们都能成双成对呢?

    将这个问题抽象出来,互有好感就是一条条无向边(单相思我们先不考虑),而男孩和女孩就是一个个节点,我们构建出这么一个图,而完美匹配就是让所有看对眼的男孩和女孩都能够在一起。

    完美匹配是最好的情况,也是我们想要的情况。

    当然,有些情况下我们做不到完美匹配,只能尽可能实现最多的配对,这个就叫做最大匹配。

    可以看出来,完美匹配一定是最大匹配,而最大匹配不一定是完美匹配。

    那么,作为月老的我们,核心目标就是找到最大匹配了。

    在我们思考如何完成这个艰巨的任务之前,我们引入几个可能不太好理解的概念。

    3.交错路径:给定图G的一个匹配M,如果一条路径的边交替出现在M中和不出现在M中,我们称之为一条M-交错路径

    而如果一条M-交错路径,它的两个端点都不与M中的边关联,我们称这条路径叫做M-增广路径

    举个例子:

    在上图中,有五条边,按照匹配的概念,2, 4两条加粗的边是一个匹配,目光锐利的你或许同时发现了,1, 3, 5是不是也是一个匹配呢?

    毫无疑问,是的。

    套用我们说的M-交错路径的概念,如果我们从2, 4 所构成的匹配M出发,会发现 1, 2, 3, 4, 5 这条路径是M的一条交错路径,同时它还满足两个端点都不与M中的边所关联。

    是不是发现个奇怪的地方呢?我们完全可以从1, 2, 3, 4, 5 这条路径中找到一个更大的匹配,而这个匹配比原先的匹配M多一条边,是一个比原先M更大的匹配!

    所以,我们寻找最大匹配的任务就相当于我们不断地在已经确定的匹配下,不断找到新的增广路径,因为出现一条增广路径,就意味着目前的匹配中增加一条边嘛!

    看起来复杂的问题,变成了寻找增广路径这么个解决问题的想法了。

    当图中再没有增广路径了,就意味着我们找到了该图的最大匹配了。

    说明下:我们这里所讨论的匹配,是图论中的任务分配问题,通常是针对于二部图发起的,想想也是,匹配不就是配对么,自然是两两成对了。

    好,基础概念介绍完了,我们接下来给个例子,探讨我们的匈牙利算法,它就是通过不断寻找增广路径的办法,打开了通向最大匹配的道路。

    二. 匈牙利算法

    下面我们讨论下匈牙利算法的内容:

    1. 给定一个图:

    前面已经说了,我们讨论的基础是二部图,而上图就是一个二部图,我们从上图的左边开始讨论,我们的目标是尽可能给x中最多的点找到配对。

    注意,最大匹配是互相的,如果我们给X找到了最多的Y中的对应点,同样,Y中也不可能有更多的点得到匹配了。

    刚开始,一个匹配都没有,我们随意选取一条边,(x1, y1)这条边,构建最初的匹配出来,结果如下,已经配对的边用粗线标出:

    2. 我们给x2添加一个匹配,如下图的(x2, y2)边。

    目前来看,一切都很顺利,到这里,我们形成了匹配M,其有(x1,  y1), (x2,  y2 ) 两条边。

    3. 我们现在想给x3匹配一条边,发现它的另一端y1已经被x1占用了,那x3就不高兴了,它就去找y1游说,让y1离开x1。

    即将被迫分手的x1很委屈,好在它还有其他的选择,于是 x1 妥协了,准备去找自己看中的y2

    但很快,x1发现 y2 被x2 看中了,它就想啊,y1 抛弃了我,那我就让 y2 主动离开 x2 (很明显,这是个递归的过程)

    x2 该怎么办呢?好在天无绝人之路,它去找了y5

    谢天谢地,y5 还没有名花有主,终于皆大欢喜。

    匹配如下:

    上面这个争论与妥协的过程中,我们把牵涉到的节点都拿出来:(x3, y1, x1, y2, x2, y5),很明显,这是一条路径P。

    而在第二步中,我们已经形成了匹配M,而P呢?还记得增广路径么,我们发现,P原来是M的一条增广路径!

    上文已经说过,发现一条增广路径,就意味着一个更大匹配的出现,于是,我们将M中的配对点拆分开,重新组合,得到了一个更大匹配,M1, 其拥有(x3,  y1),(x1,  y2),  (x2,  y5)三条边。

    而这,就是匈牙利算法的精髓。

    同样,x4 , x5 按顺序加入进来,最终会得到本图的最大匹配。

    得到这个结果后,我们发现,其实也可以把y4 让给 x6 , 这样x5 就会空置,但并不影响最大匹配的大小。

    总结:

    1. 匈牙利算法寻找最大匹配,就是通过不断寻找原有匹配M的增广路径,因为找到一条M匹配的增广路径,就意味着一个更大的匹配M' , 其恰好比M 多一条边。

    2. 对于图来说,最大匹配不是唯一的,但是最大匹配的大小是唯一的。

    数据集:MPIICOCO2016

    性能指标(mAP)0.797(MPII测试子集)   0.756(MPII完整测试集)   0.791(MPII验证集最佳结构)   0.653(COCO)

    RMPE: Regional Multi-Person Pose Estimation2017

    AlphaPose     2017     上海交通大学     自上而下

    paper link:https://arxiv.org/abs/1612.00137v3

    github:https://github.com/MVIG-SJTU/AlphaPose

    目标:在第一步中检测到的是不精准的区域框的情况下,仍能检测出正确的人体姿态

    大体流程:训练阶段,拿到图片用现有的单人检测,检测human proposal作为输入,分支SPPE的误差反向传播,使得STN调整bbox,得到更准确的bbox,再通过SPPE做姿态检索,将得到的所有pose proposalNMS,除去冗余pose,得到最终结果。

    对称空间变换网络和并行单人姿态估计(Symmetric STN and Parallel SPPE

                       

    步骤

    1、用SSD检测图中人物,获得人物候选框。

    2、将候选框输入到两个并行的分支里面,上面的分支是STN+SPPE+SDTN的结构,即空间变换网络(Spatial Transformer Networks + 单人姿态估计(Single Person Pose Estimation + 空间反变换网络(Spatial de-Transformer Networks)。不准确的检测框经过STN+SPPE+SDTNSTN对人体区域框中的姿态进行形态调整,输入SPPE做姿态估计后得到姿态线(人体骨骼框架),再用SDTN把姿态线映射到原始的人体区域框中,以此来调整原本的框,使框变成精准的。下面并行的分支充当额外的正则化矫正器。

    3、对候选姿态做parametric pose NMS(参数化姿态非极大值抑制)来消除冗余。

    性能指标(AP):MPII 0.723

    Cascaded Pyramid Network for Multi-Person Pose Estimation(2018)

    CPN     2018     清华大学     自上而下

    paper link:https://arxiv.org/abs/1711.07319

    github:https://github.com/chenyilun95/tf-cpn

    大致流程:

    文章核心提出一种使用自上而下的多人关键点估计方法。先检测人体,之后利用GlobalNet + RefineNet结构对单人目标回归人体关键点。一些比较容易识别出来的人体关键点,直接利用一个CNN模型就可以回归得到;而对于一些遮挡比较严重的关节点,则需要增大局部区域感受野以及结合上下文信息才能够进一步refine得到。

    首先对于可以看见的“easy”关键点直接预测得到,对于不可见的关键点,使用增大感受野来获得关键点位置,对于还未检测出的点,使用上下文(context)进行预测。

    GlobalNet的作用就是简单的前向CNN组成的回归模型,目的是回归得到一些易于识别的人体关键点位置,这里作者使用ResNet的网络架构回归heatmapRefineNet的目的则是利用GlobalNet产生的金字塔模型的特征图,融合多个感受野信息,最后concatenate所有的同一尺寸特征图进一步回归一些有歧义的关键点位置。

       

    1GlobalNet  

    A采用ResNet的不同Stage的最后一个残差块输出(C2C3C4C5)作为组合为特征金字塔;拿ResNet50来说,当输入大小为1×3×256×192时:  C2 = res2c1×256×64×48  C3 = res3d1×512×32×24  C4 = res4f1×1024×16×12  C5 = res5c1×2048×8×6  这样就构成特征金字塔。C2,C3具有较高的空间分辨率和较低语义信息,而C4,C5具有较低空间分辨率和更丰富的语义信息;将他们结合在一起,则即可利用C2,C3空间分辨率优势定位关键点,也可利用C4,C5丰富语义信息识别关键点

    B然后各层进行1×1卷积将通道都变为256  

    C将分辨率小的层上采样一次,在对应神经元相加,输出P2P3P4P5

    D输出:对每层,即P2P3P4P5都进行3×3卷积,再生成heatmaps

    2RefineNet  

    AGlobalNet4层输出P2P3P4P5分别接上不同个数的Bottleneck模块  

    B将这4路输出,上采样到同一分辨率,这里以P2路(64×48)为基础,P3路放大2倍,P4路放  4倍,P4路放大8  

    C4路按通道Concat一起,再接bottleneck,最后接输出层

    性能指标(AP):COCO 0.721

    Deep High-Resolution Representation Learning for Human Pose Estimation2019

    HRNet      2019     中国科学技术大学 ,微软亚洲研究院

    paper link:https://arxiv.org/pdf/1902.09212.pdf

    github:https://github.com/leoxiaobin/deep-high-resolution-net.pytorch

    特点:网络能在整个过程中都保持高分辨率的表示。

    该架构从作为第一阶段的高分辨率子网开始,逐步逐个添加高到低分辨率的子网,以形成更多的阶段并连接并行的多分辨率子网。通过在整个过程中反复进行跨越多分辨率并行子网络的信息交换来实现多尺度融合。

    使用重复的多尺度融合,利用相同深度和相似级别的低分辨率表示来提高高分辨率表示,反之亦然,从而使得高分辨率表示对于姿态的估计也很充分。因此,该网络预测的热图可能更准确。

     

                                       

     

    数据集:COCOMPII

    性能指标(AP):HRNet-W48COCO:关键点检测0.763、姿态估计0.770、多人姿态估计0.770

    https://www.jianshu.com/p/98c11545d4fb

    OpenPose算法解析

     

    1、人体姿态简介

      人体姿态估计是计算机视觉中一个很基础的问题。从名字的角度来看,可以理解为对“人体”的姿态(关键点,比如头,左手,右脚等)的位置估计。
      人体姿态估计可以分为两种思路,
    (1)“top-down”,它指先检测人体区域,再检测区域内的人体关键点。

    (2)“bottom-up”,它指先检测图片中所有的人体关键点,然后将这些关键点对应到不同的人物个体。这里需要提及一下,第一种方案因为需要对检测出的每个人体区域,分别做前向关键点检测,所以速度较慢,而OpenPose采用的则为第二种方案。

    2、OpenPose论文方案解读

    2.1 文章亮点

      已有"bottom-up"方法缺点:(1)未利用全局上下文先验信息,也即图片中其他人的身体关键点信息;(2)将关键点对应到不同的人物个体,算法复杂度太高。
      文章改进点:提出“Part Affinity Fields (PAFs)”,每个像素是2D的向量,用于表征位置和方向信息。基于检测出的关节点和关节联通区域,使用greedy inference算法,可以将这些关节点快速对应到不同人物个体。

    2.2 网络结构


      整个的技术方案为“two-branch multi-stage CNN”,如图,其中一个分支用于预测打分图confidence maps(S),另外一个分支用于预测Par Affinity Fields(L),也对应着heatmap与vectormap。
    其中
    ,表示heatmap,j表示要检测的关节数(可能加上background);
    ,表示vectormap,C表示要检测的关节对数。
      从图中还可以看出,网络的接收的输入是特征,然后经过和网络的处理后分别得到和。从开始,阶段网络的输入包括三部分: 。每个阶段网络的输入为:
    下图展示了CNN的两个分支计算的结果:

    上图(b)中表示检测到的关节点,一个部位对应了一张feature map,请注意图中高亮像素;
    上图(c)中表示检测到的一段躯干,同样的一个躯干对应一个feature map。

    2.3 Loss function

      损失函数是保证网络能收敛的最重要的关键点,因此作者对两分支的损失函数均采用L2 loss。训练时,每个阶段都会产生loss,避免梯度消失;预测时只使用最后一层的输出。公式表示如下:

    其中, 表示branch1 的label图,也称为heatmap; 是branch2 的label图,也称为vectormap。另外,考虑到有些训练数据集只标注了图片中部分人物的关节点,因此对损失函数采用了空域加权操作,W表示二值化mask矩阵,当位置p的标签缺失时其值为0,否则值为1。显然,对于未被标记的人物关节点  ,而被标记的人物关节点和非关节点 ,所以未被标记的人物关节点不会影响模型的学习过程,整个CNN网络架构的优化目标函数如下,

    2.4 计算heatmap( )与vectormap( )

       实际上就是使用2D高斯分布建模,求出一张图像上身体j部位的heatmap,记第k个人的第j个关节的heatmap为 , 表示位置信息,则有:

       表示了使用part affinity fields(PAF)建模骨骼区域,对于骨骼区域内的每一个像素,使用2D向量同时表征位置和方向信息,这里的方向指代当前骨骼对应的关节点对的连接方向,对应vectormap。以下图的骨骼区域为例

    其中,和分别表示关节与的位置坐标。分别表示人物索引与关节对索引,则有:
    其中,,表示位置指向位置的单位向量。
    图中绿色虚线框内的区域以点集表示,数学公式如下:
    其中,表示骨骼长度,表示骨骼的粗细,更多详细的信息可在后文中3.1中得到。

    2.5 关节拼接与多人检测(Multi-Person Parsing using PAFs)

      经过上述过程,我们已经得到各个关节点的坐标图--heatmap,与关节对连接的vectormap,现在的问题就是如何合理地在推理阶段将各个关节连接成一段骨骼,并将它们组装成一个人?
      关节拼接:对于任意两个关节点位置 和 ,通过计算PAFs的线性积分来表征骨骼点对的相关性,也即表征了骨骼点对的置信度,公式表示如下, 为了快速计算积分,一般采用均匀采样的方式近似这两个关节点间的相似度,    多人检测:由于图片中人数不确定,同时伴随遮挡、变形等问题,因此只使用上述计算关节对相似度,只能保证局部最优,因此作者利用greedy relaxation的思想生成全局较优的搭配。具体操作如下:
    (1)已知不同关节点的heatmap,也就是不同人的某个关节点的点集;
    (2)现在要将不同的点集进行唯一匹配,如:一群表示手肘的点集和手腕的点集,两点集中的点必须存在唯一匹配;
    (3)关节点之间的相关性PAF已知,将关键点作为图的顶点,将关键点之间的相关性PAF看为图的边权,则将多人检测问题转化为二分图匹配问题,并用匈牙利算法求得相连关键点最优匹配。

    二分匹配:二分图上进行匹配,一个点群中的点只与另一个点群中的点进行唯一匹配,即任意两条边没有公共顶点

    3、细节梳理

    3.1 COCO人体姿态数据集的格式

    3.2 为什么heatmap的channels是19,vectormap的channels是38?

      由上图可知,COCO数据集总共有18个关键点,17个肢体骨架,但heatmap多了一个背景图,vectormap多了耳朵和肩膀的肢体,为什末要虚构这麽一个肢体呢,因为有时候人体是背对相机的,眼睛这个关键点是不可见的,为了更好的预测耳朵,引入这两个个肢体(也就是关节对:2-16和5-17)。所以总共有19个肢体,应为vectormap为矢量,预测时分为x,y两个分量,所以有19*2=38

    3.3 tf-openpose人体姿态估计标签生成--heatmap--vectormap

      完全参考https://blog.csdn.net/m0_37477175/article/details/81236115,结合2.4节中vectormap( )的计算公式与绿色虚线框内的区域以点集数学公式理解。
      关键是叉乘的几何意义是两个向量所组成的平行四边形的面积,所以 就表示与向量 平行距离为 的区域,也就是骨骼宽度。

    3.4 改进

    后来论文作者对网络结构进行了改进,使得效果更好,速度更快,参考文献【11】。

     

    4、参考资料

    【1】Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
    【2】人体姿态估计的过去、现在和未来
    【3】论文解读-Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
    【4】Realtime Multi-Person 2D Pose Estimation Using Part Affinity Fields【菜鸟读者】
    【5】知乎:openpose笔记
    【6】openpose论文总结:Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields
    【7】详细介绍匈牙利算法步骤
    【8】Github 项目 - OpenPose 关键点输出格式
    【9】openpose的细节处理
    【10】tf-openpose人体姿态估计标签生成--heatmap--vectormap
    【11】OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields

     

    BlazePose

    PoseNet

    MediaPipe

    PoseEstimation-TFlite

     

    展开全文
  • 从单眼RGB摄像头实时进行3D人体姿态估计 待办事项清单 改进此自述文件 实施基本文件 MNIST测试 保存并加载模型/损失... 实时绘图/调试 启用新数据集的使用(3DHP-MPI,Human3.6M) 最终的NN架构已实现 微调...
  • 针对人体姿态估计中因肢体、环境复杂性导致的估计结果不精确问题,提出了一种基于二次生成对抗的人体姿态估计方法,通过两个阶段对堆叠沙漏网络(SHN)进行生成对抗训练。首先将SHN作为第一个生成对抗网络模型的判别器,...
  • 针对单幅图片中人体姿态的估计问题,在图结构模型的基础上提出了一种新的人体姿态估计算法。算法提出了一个新的部位观测模型和一种新的减小部位状态空间的方法:(1)对人体不同部位采用不同尺寸的细胞单元计算HOG...
  • 人体姿态估计综述 2020最全

    千次阅读 2022-03-10 13:53:22
    ​ 现状:最近发展的基于深度学习的方法在人体姿态估计中取得了较高的性能,但由于训练数据不足、深度模糊等问题,仍然存在挑战。 ​ 目的:通过对基于深度学习的二维和三维位姿估计方法进行系统的分析和比较,根据...

    Deep Learning-Based Human Pose Estimation:A Survey

    摘要

    ​ 应用:人机交互、运动分析、增强现实和虚拟现实等领域。

    ​ 现状:最近发展的基于深度学习的方法在人体姿态估计中取得了较高的性能,但由于训练数据不足、深度模糊等问题,仍然存在挑战。

    ​ 目的:通过对基于深度学习的二维和三维位姿估计方法进行系统的分析和比较,根据它们的输入数据和推理过程,对目前基于深度学习的二维和三维位姿估计方法进行全面的综述。

    引言

    ​ 在HPE任务中使用深度学习技术已经取得了显著的进展和显著的效果。然而,诸如遮挡、训练数据不足和深度模糊等挑战,2DHPE可以很容易地从带有2D姿势标注的图像和视频中获得,并且对于单个人的姿势估计已经达到了很高的性能,获得准确的3D姿态标注要比2D对应的要困难得多。一些工作已经使用了诸如深度传感器、惯性测量单元(IMU)和射频设备等传感器,但是这些方法通常不划算,并且需要专用硬件。

    1.1 以前的调查和我们的贡献

    ​ 2001-2015年间公布的这些调查主要集中在常规方法上,没有深入学习。

    ​ 后期的文献要么只涵盖了少数深度学习的方法,要么不够全面。

    ​ 本次调查旨在解决以往调查的不足之处,不仅系统地回顾了最近基于深度学习的2D和3DHPE解决方案,而且还涵盖了HPE的其他方面,包括(2D和3D)HPE方法在流行数据集上的性能评估,它们的应用,以及综合讨论。

    1.2 组织

    img

    HPE分为两大类:2DHPE和3D HPE

    §3.1:对于单人方法,有两类基于深度学习的方法:

    (1)回归方法,通过基于深度学习的回归直接建立输入图像到人体关节坐标的映射;

    (2)身体部位检测方法,包括两个步骤:第一步是生成关键点(即关节)的热图用于身体部位定位,第二步是将检测到的关键点组装成整个身体的姿势或骨架。

    §3.2:对于多人方法,也有两种基于深度学习的方法:

    (1)自上而下的方法,通过先检测人,然后利用单人HPE预测每个人的关键点来构造人体姿势;

    (2)自下而上的方法,在不知道人数的情况下,首先检测身体关键点,然后将关键点组合成单独的姿势。

    2 人体建模

    人体建模是HPE的一个重要方面,用来表示从输入数据中提取的关键点和特征。例如,大多数HPE方法使用N关节刚性运动学模型。人体是具有关节和肢体的复杂实体,包含人体运动结构和体型信息。在典型的方法中,采用基于模型的方法来描述和推断人体姿势,并绘制2D和3D姿势。人体建模通常有三种模型,即运动学模型(用于2D/3D HPE)、平面模型(用于2D HPE)和体积模型(用于3D HPE),如图2所示。img

    2.1 运动学模型

    ​ 运动学模型,也称为基于骨架的模型或运动链模型,如图2(A)所示,包括一组关节位置和肢体方向来表示人体结构。这种灵活直观的人体模型在2DHPE[16][17]和3D HPE[18][19]中得到了成功的应用。虽然运动学模型具有图形表示灵活的优点,但在表示纹理和形状信息方面存在局限性。

    2.2 平面模型

    ​ 平面模型还被用来表示人体的形状和外观,如图2(B)所示。在平面模型中,人体部位通常用近似人体轮廓的矩形表示。

    2.3 体积模型

    ​ 基于深度学习的3D HPE方法中常用的3D人体模型恢复3D人体网格的方法。

    ​ SMPL:蒙皮多人线性模型是一个基于蒙皮顶点的模型,它代表了广泛的人体形状。SMPL可以用表现为软组织动力学的自然姿势相关的变形来模拟。为了了解人们是如何随着姿势变形的,在SMPL中,有1786个高分辨率3D扫描对象使用模板网格来优化混合权重[26]、与姿势相关的混合变形、平均模板形状以及从顶点到关节位置的回归。SMPL易于部署,并与现有的渲染引擎兼容,因此在3DHPE方法中被广泛采用。

    ​ 动态人体运动模型试图为不同的身体形状表现真实的软组织运动。运动相关的软组织变形用一个低维线性子空间来近似。为了预测软组织运动的低维线性系数,使用了全身的速度和加速度,身体各部分的角速度和加速度,以及软组织的形状系数。此外,Dyna利用身体质量指数(BMI)为不同体型的人产生不同的变形。

    ​ 缝合木偶模型是一个基于零件的图形模型,集成了逼真的身体模型。不同的三维体形状和与姿态相关的形状变化可以转化为相应的图形节点表示,身体的每个部位都由它自己的低维状态空间表示。身体各部分通过图中节点之间的成对电位连接在一起,从而将各部分“缝合”在一起。通常,通过势函数的部分连接是通过使用诸如置信传播(BP)之类的消息传递算法来执行的。为了解决各部分状态空间不易离散化的问题,采用了基于粒子的D-PMP模型的最大乘积BP算法。

    ​ 弗兰肯斯坦和亚当:弗兰肯斯坦模型不仅产生人体运动参数,还产生面部表情和手势参数。此模型是通过混合各个组件网格的模型生成的:身体的SMPL、面部的Face Warehouse[31]和手部的美工人员。所有变换骨骼都合并到单个骨骼层次中,而每个组件的本地参数化保持不变,以表达身份和运动变化。亚当模型是由弗兰肯斯坦模型使用对人们衣服的大规模捕捉进行优化的。由于亚当能够表达舒曼的头发和服装几何图形,所以更适合在现实世界中表现人类。

    ​ Ghum&GHUML(ITE):在[32]中提出了一种完全可训练的端到端深度学习管道来建模静态和关节3D人体形状和姿势,GHUM是中分辨率版本,GHUML是低分辨率版本。GHUM和GHUML通过深度变分自动编码器框架中的高分辨率全身扫描(其数据集中超过60,000种不同的人类配置)进行训练。它们能够推断出一系列组件,如非线性形状空间、姿势空间变形校正器、骨架关节中心估计器,以及混合蒙皮功能。

    3 二维人体姿态估计

    ​ 二维HPE方法从图像或视频中估计人体关键点的二维位置或空间位置。传统的二维HPE方法对人体部位采用不同的手工特征提取技术[33][34],这些早期的工作将人体描述成一个棒状图形来获得全局结构。近年来,基于深度学习的方法在HPE领域取得了重大突破,显著提高了HPE的性能。本文从单人和多人两种情况出发,对基于深度学习的二维HPE方法进行了综述。

    3.1 二维单人姿态估计

    ​ 当输入为单人图像时,使用二维单人姿态估计来定位人体关节位置,如果有多个人,则首先对输入图像进行裁剪,使得每个裁剪的块(或子图像)中只有一个人。这一过程可以通过上身检测器或全身检测器自动实现。

    ​ 一般来说,采用深度学习技术的单人管道有两类:回归法和身体部位检测法。回归方法应用端到端框架来学习从输入到身体关节或人体模型参数的映射。身体部位检测方法的目标是预测身体部位和关节的大致位置[][38],这些部位和关节通常由热图表示法监督。基于热图的框架现在被广泛用于2D HPE任务。img

    (A)回归方法直接学习(通过深层神经网络)从原始图像到运动学身体模型的映射,并产生关节坐标。

    (B)身体部位检测方法利用热图的监督来预测身体关节位置。

    3.1.1 回归方法

    ​ 有许多基于回归框架的工作从图像中预测关节坐标。使用AlexNet[1]作为骨干,DeepPose: Human Pose Estimation via Deep Neural Networks中Toshev和Szegedy提出了一种从图像中学习关键点的级联深度神经网络回归算法DeepPose。

    由于DeepPose令人印象深刻的性能,HPE的研究范式开始从经典方法转向深度学习,特别是卷积神经网络(CNNs)。

    基于GoogLeNet,Carreira等人,[42]提出了一种迭代误差反馈(IEF)网络,它是一种自校正模型,通过将预测误差注入到输入空间来逐步改变初始解。

    Sun等人。介绍了一种基于ResNet-50的结构感知回归方法–“组合姿态回归”,该方法采用了包含人体信息和姿态结构的重新参数化的基于骨骼的表示方法,而不是传统的基于关节的表示方法。

    Luvizon等人,提出了一种用于HPE的端到端回归方法,该方法利用软soft-argmax函数将特征图转换为全可微框架下的关节坐标,是一种良好的RICE编码特征。

    ​ 对于基于回归的方法来说,编码丰富的姿势信息的良好特征是至关重要的。学习更好的要素表示的一种流行策略是多任务学习。通过在相关任务之间共享表示(例如,姿势估计和基于姿势的动作识别),该模型可以更好地在原始任务(位置估计)上进行泛化。

    ​ 顺着这一方向,李等人提出了自己的观点。[46]提出了一种异构多任务框架,该框架由两个任务组成:通过建立回归模型从全图像中预测关节坐标;使用滑动窗口从图像中检测身体部位。Fan等人的研究成果。[47]提出了一种双源深度卷积神经网络(DS-CNN),用于判断补片中是否含有人体关节,以及确定补片中关节的准确位置,并提出了一种双源深度卷积神经网络(DS-CNN)。每个任务都对应一个损失函数,两个任务的组合会带来更好的结果。Luvizon等人。[48]学习了一个多任务网络,用于联合处理视频序列中的2D/3D姿势估计和动作识别。

    3.1.2 身体部位检测方法

    ​ HPE人体部位检测方法的目的是训练人体部位检测器来预测人体关节的位置。最近的检测方法撞击提出了一个热图预测问题。具体地说,目标是估计总共K个关键点的Kheatmap{H1,H2,.,HK}。每个关键点热图中的像素值Hi(x,y)表示关键点位于位置(x,y)的概率(参见图。3(B))。目标(或地面真实)热图由以地面真实联合位置[39][53]为中心的二维高斯生成。因此,通过最小化预测热图和目标热图之间的差异(例如,均方误差(MSE))来训练姿态估计网络。与联合坐标相比,热图保留了空间分布信息,为卷积网络的训练提供了更好的监督信息。因此,最近人们对利用热图来表示联合位置和开发用于HPE的有效的CNN架构越来越感兴趣。

    Tompson et al.[53]将基于CNN的人体部位检测器与基于部位的空间模型相结合的二维HPE的学习框架。

    Lifshitz等人。[55]提出了一种基于CNN的关节位置预测方法,该方法结合关键点投票和联合概率确定人体姿态表征。

    魏等人[40]介绍了一种基于卷积网络的序列框架,称为卷积姿势机器(CPM),它通过多阶段处理来预测关键关节的位置(每个阶段的卷积网络利用前几个阶段产生的2D信任图,产生对身体部位位置的日益精确的预测)。

    Newell et al.[38]提出了一种名为“堆叠沙漏”的编解码器网络(该网络中的编码器通过瓶颈挤压特征,然后由解码器对其进行扩展),在中间监督下重复自下而上和自上而下的过程。堆叠沙漏(SHG)网络由汇集和增加采样层的连续步骤组成,以捕获每个尺度的信息。从那时起,为HPE开发了SHG体系结构的复杂变体。

    Chu等人。[65]设计了一种新颖的Hourglas残差单元(HRU),它利用具有更大感受场的滤波器的侧枝来扩展残差单元,以捕获不同尺度的特征。

    Yang等人。[59]设计了多分支金字塔残差模块(PRM)来代替SHG中的残差单元,增强了深层CNN的尺度不变性。

    ​ 随着生成性对抗性网络(GANS)[66]的出现,人们在HPE中对它们进行探索,以生成生物逻辑上合理的姿势配置,并区分高置信度和低置信度的预测,这可以推断出被遮挡身体部位的潜在姿势。

    Chen等人。[67]构建了一个结构感知的条件对抗网络AdversarialPoseNet,该网络包含一个基于沙漏网络的位置生成器和两个用于区分合理和不合理体姿的鉴别器。

    周埃塔尔。[68]构建了一个对抗性学习网络,两个堆叠的沙漏网络分别作为鉴别器和生成器,具有相同的结构。生成器评估每个节理的位置,判别器区分地面真实热图和预测热图。

    与基于Gans的方法以HPE网络为生成器,利用鉴别器提供监督不同,Peng等人提出了一种基于Gans的方法。[69]将HPE网络作为鉴别器,利用增强网络作为生成器进行对抗性增强,开发了对抗性数据增强网络,以优化数据增强和网络训练。

    除了为HPE进行有效的网络设计所做的这些努力外,还对HPE的身体结构信息进行了研究,为HPE网络的建设提供更多和更好的监督信息。

    Yang等人。[70]设计了一种面向HPE的端到端CNN框架,该框架通过考虑人体各部分之间的空间和外观一致性,能够找到硬性否定。

    文献[71]提出了一种结构化的特征级学习框架,用于推理HPE中人体关节之间的关系,该框架更丰富了人体关节的信息,提高了学习效果。

    Ke等人。[72]设计了一种多尺度结构感知神经网络,该网络结合了多尺度监督、多尺度特征组合、结构感知丢失信息方案和关键点掩蔽训练方法改进复杂场景下的HPE模型。

    Tanget al.[73]构建了一个基于沙漏的监督网络,称为深度学习的组成模型,用于描述人体各部位之间复杂而真实的关系,学习人体各部位的组成模式信息(人体各部位的方位、比例和形状信息)。

    唐和吴[74]指出并不是所有的零件都是相互关联的,因此引入了一个基于零件的分支网络来学习特定于每个零件组的表示,而不是所有零件的共享表示。

    ​ 视频序列中的人体姿势是(3D)时空信号。因此,对视频中的时空信息进行建模对于视频的HPE来说是非常重要的。

    Jain等人[75]设计了一个包含两个分支的CNN框架,将颜色和运动特征合并到帧对中,以在HPE中建立一个富有表现力的时空模型。

    菲斯特·埃塔尔。[76]提出了一种卷积网络,该网络能够利用来自多个帧的时间上下文信息,利用光流来对齐来自相邻帧的预测热图。

    与以往基于视频的方法计算量大不同,Luoo et al.[60]提出了一种长短期记忆(LSTM)的递归HPE结构[77],以捕捉不同帧的时间几何一致性和依赖性,提高了视频HPE网络的训练速度。

    张等人。[78]介绍了一个用于从帧中获取空间和时间信息的关键帧提议网络和一个用于高效的基于视频的位姿估计的人体姿势插值模块。

    3.2 二维多人姿态估计

    ​ 与单人HPE相比,多人HPE的难度和挑战性更大,因为它需要计算出人数和他们的位置,以及如何针对不同的人对关键点进行分组。为了解决这些问题,多人HPE方法可以分为自上而下方法和自下而上方法。自上而下的方法使用现成的人物检测器从输入图像中获得一组框(每个框对应一个人),然后将单人姿态估计器应用于每个人物框以生成多人姿势。与自上而下的方法不同的是,自下而上的方法首先在一幅图像中定位所有的身体关节,然后将它们分组到相应的对象。在自上而下的流水线中,输入图像的人数将直接影响计算时间。自下而上方法的计算速度通常比自上而下方法快,因为它们不需要单独检测每个人的姿势。图4示出了二维多人HPE方法的一般框架。img

    图4:多人2D HPE框架图。(A)自上而下的方法有两个子任务:(1)人体检测和(2)单人区域的姿势估计;

    (B)自下而上的方法也有两个子任务:(1)检测身体部位的所有关键点候选;(2)将不同人体中的身体部位关联起来,并将它们组装成单独的姿势表示。

    3.2.1 自上而下的管道

    ​ 自上而下的流水线中,有两个重要部分:用于获得人物包围盒的人体检测器和用于预测这些包围盒内关键点位置的单人姿势估计器

    工作重点是设计和改进HPE网络中的模块。肖等人,[62]在ResNet中添加了几个解卷积层(骨干网)建立一个简单而有效的结构,以生成用于高分辨率表示的热图。

    Sunet等人。[81]提出了一种新的高分辨率网络(HRNet),通过并行连接多分辨率子网并进行重复的多尺度融合来获得可靠的高分辨率表示。

    为了提高关键点定位的精度,Wang等人提出了一种新的关键点定位方法。[84]介绍了一个基于两阶段图和模型无关的框架,称为Graph-PCNN。它由定位子网和图姿态精化模块组成,定位子网用于获取粗略的关键点位置,图姿态精化模块用于获得精化的关键点定位表示。

    为了获得更精确的关键点定位,蔡等人对此进行了研究。[86]引入残差步长网络(RSN)模块和PoseRefineMachine(PRM)模块,通过有效的层内特征融合策略学习精细的局部表示,并引入PoseRefineMachine(PRM)模块在局部表示和全局表示之间寻找折衷。

    估计遮挡和截断场景下的姿势经常发生在多人环境中,因为肢体重叠是不可避免的。人体检测器可能会由于遮挡或截断而在自上而下管道的第一步中失败。因此,对遮挡或截断的鲁棒性是多人HPE方法的一个重要方面。

    为此,Iqbal和Gall[88]建立了一个基于机器的卷积位姿估计器来估计联合候选位姿。然后利用整数线性规划(ILP)来解决关节与人的关联问题,即使在严重遮挡的情况下也能得到人体姿势。

    ***为了提高HPE在复杂场景中的性能,方等[89]设计了一种新的区域多人姿态估计(RMPE)方法。***具体地说,RMPE框架包括三个部分:对称空间变换网络(用于检测不精确包围盒内的单人区域)、参数非最大值抑制(用于解决冗余检测问题)和姿态制导建议生成器(用于扩充训练数据)。

    帕潘德里欧等人。[79]建议的两阶段结构,包括一个更快的R-CNN个人探测器,用于为候选人体创建边界框,以及一个关键点估计器,用于预测位置通过使用一种热图偏移聚合的形式对关键点进行聚合。

    整体方法在遮挡和杂乱的场景中运行良好。为了缓解HPE中的遮挡问题。

    Chen等人提出了一种新的解决方案。[90]提出了一个级联金字塔网络(CPN),它包括两个部分:GlobalNet(预测眼睛、手等不可见关键点的特征金字塔网络)和RefineNet(集成了GlobalNet的所有层次特征和关键点挖掘损失的网络)。结果表明,CPN在预测关键点方面具有较好的性能。

    Su等人。[91]设计了通道洗牌模块和基于空间和通道的注意残留瓶颈模块,实现了通道方向和空间信息的增强,更好地实现了遮挡场景下的多人位置估计。

    邱等人。[92]针对人群位姿估计中的遮挡问题,开发了遮挡位姿估计与校正(OPEC-NET)模块和遮挡位姿数据集。

    Umer等人。[93]提出了一种关键点对应框架,利用前一帧包含场景的时间信息恢复遗漏位置。该网络使用自监督来训练,以改善稀疏标注视频数据集中的姿态估计结果。

    3.2.2 自下而上管道

    ​ 如图4(B)所示,自下而上的管线(例如,[94][95][96][17][97][98][99][100][101][102][103])具有两个主要步骤,包括人体关节检测(即,提取局部特征并预测人体关节候选)和针对单个身体的关节候选组合(即,将关节候选分组以建立具有部分关联策略的最终姿势表示)。

    Pishchlin等人。[94]提出了一种基于快速R-CNN的人体部位检测器DeepCut,这是最早的两步自下而上方法之一。该算法首先检测所有的候选身体部位,然后对每个部位进行标记,然后用整数线性规划(ILP)将这些部位组装成最终的位置,但是深度切割模型的计算量较大。

    为此,Insafutdinov等人提出了。[95]引入了Deeper Cut,通过应用更强大的身体部位检测器和更好的增量优化策略以及图像条件成对项来对身体部位进行分组,从而改进了DeepCut,从而提高了性能和速度。

    后来,曹等人。[17]构建了一个名为OpenPose的检测器,该检测器使用卷积位姿机器40通过热图和部分亲和场(PAF)预测关键点坐标,从而将关键点与每个人关联起来。PAF是一组二维矢量场,带有编码肢体位置和方向的矢量地图。OpenPose极大地加快了自下而上的多人HPE的速度。

    在OpenPose框架的基础上,朱等人提出了一种基于OpenPose框架的。[104]改进了OpenPose结构,通过增加冗余边来增加PAF中节点之间的连接,获得了比基线方法更好的性能。

    虽然基于OpenPose的方法在高分辨率图像上取得了较好的压缩效果,但在低分辨率图像和遮挡情况下性能较差。为了解决这个问题,Kreiss等人。[100]提出了一种自下而上的方法PifPaf,该方法使用部件强度场(PIF)来预测身体部位的位置,使用部件关联场(PAF)来表示关节关联。在低分辨率和遮挡场景下,该方法优于以前基于OpenPose的方法。

    由OpenPose激发[17]和堆叠式沙漏结构[38],Newell等人。[97]引入了一种单级深度网络来同时获得位姿检测和分组分配。

    跟随[97],金等人。[102]提出了一种新的可微层次图分组(HGG)方法来学习人体部分分组。

    在[97]和[81]的基础上,Cheng et al.[103]提出了一种HRNet的简单扩展–更高分辨率网络(Higher Resolution Network,Higher HRNet),它对HRNet生成的高分辨率热图进行去卷积处理,解决了自下而上多人位姿估计中尺度变化的难题。

    自下而上的HPE方法也采用了多任务结构。帕潘德里欧等人。[105]介绍了PersonLabto将姿态估计模块和人物分割模块相结合进行关键点检测和关联。PersonLab由短程偏移(用于细化热图)、中程偏移(用于预测关键点)和长程偏移(用于将关键点分组为实例)组成。Kocabas等人。[106]提出了一种基于姿态残差网络的多任务学习模型MultiPoseNet,该模型可以同时完成关键点预测、人体检测和语义分割任务。

    3.3 二维HPE摘要

    ​ 综上所述,随着深度学习技术的蓬勃发展,2D HPE的性能有了显著的提高。近年来,更深层次和更强大的网络已经提升了二维单人HPE(如DeepPose[36]和Stack HourglassNetwork[38])以及二维多人HPE(如AlphaPose[89]和OpenPose[17])的性能。

    ​ 虽然这些工作在不同的2D HPE场景中取得了足够好的性能,但仍然存在问题。回归和人体部位检测方法在二维单人HPE中各有优势和局限性。回归方法可以通过端到端的框架学习从输入图像到关键点坐标的非线性映射,这提供了快速的学习范例和亚像素级的预测精度。然而,由于高度非线性问题,它们通常给出次优解[44]。人体部位检测方法,特别是基于热图的框架,由于(1)热图中每个像素的概率预测可以提高关键点定位的精度;(2)热图保留了空间位置信息,提供了更丰富的监控信息,因此在二维HPE中得到了更广泛的应用。然而,预测关键点的精度取决于热图的分辨率。当使用高分辨率热图时,计算成本和内存占用显著增加。

    ​ 对于二维多人HPE的自上而下和自下而上两种管路,很难确定哪种方法更好,因为这两种方法在最近的工作中都得到了广泛的应用,各有优缺点。一方面,自上而下的流水线方法首先使用检测方法检测图像中的每个个体,然后使用基于单人的方法预测关键点的位置,从而获得更好的效果。在这种情况下,由于很大程度上去除了背景,每个检测到的人区域内的关键点热图估计都变得容易。另一方面,自下而上方法通常比自上而下方法更快,因为它们直接检测所有关键点并将其分组使用诸如亲和力链接[17]、关联嵌入[97]和按像素的关键点回归[107]的关键点关联策略转换成各个姿势。

    面临的挑战

    ​ 二维HPE中存在一些挑战,需要在未来的研究中进一步解决。首先是在显著遮挡下(例如,在人群场景中)对个人的可靠检测。自上而下的二维HPE方法中的人检测器可能无法识别高度重叠的人体边界。同样,对于遮挡场景中的自下而上方法,关键点关联的困难更为明显。

    ​ 第二个挑战是计算效率。虽然像OpenPose[17]这样的一些方法可以在中等计算能力的特殊硬件上实现近实时处理(例如,在配备NVIDIA GTX 1080Ti GPU的机器上实现22FPS),但在资源受限的设备上实现网络仍然是困难的。现实世界中的应用(如在线教练、游戏、AR和VR)需要在商业设备上使用更高效的HPE方法,以便为用户带来更好的交互体验。

    ​ 另一个挑战在于罕见姿势的有限数据,虽然目前二维HPE的数据集已经足够大(例如COCO数据集[108])来估计正常姿势(例如站立、行走、奔跑),但是这些数据集对于特殊姿势(例如跌倒)的训练数据有限,数据不平衡可能会导致模型偏差,从而导致在这些姿势上表现不佳。开发有效的数据生成或增强技术来生成额外的姿态数据以训练更健壮的模型将是有用的。

    4 三维人体姿态估计

    ​ 3DHPE以预测人体关节在三维空间中的位置为目标,能够提供与人体相关的丰富的三维结构信息,近年来引起了人们的极大兴趣。它可以应用于各种应用(例如,3D电影和动画产业、虚拟现实和在线3D动作预测)。虽然近年来二维HPE已经取得了很大的进步,但三维HPE仍然是一项具有挑战性的任务。现有的撞击3DHPE研究大多是从单目图像或视频出发的,这是一个不适定的逆问题,因为从3D投影到2D会丢失一维。当有多个视点可用或部署其他传感器(如IMU和LiDAR)时,利用信息融合技术,3DHPE可能是一个适定的问题。另一个限制是深度学习模型需要大量数据,并且对数据收集环境非常敏感。与2D人类数据集不同,在2D人类数据集中可以很容易地获得准确的2Dpose注释,而收集准确的3Dpose注释是耗时的,并且手动标记是不现实的。此外,数据集通常是从室内环境中选择的日常操作中收集的。最近的工作[109][110][111]已经通过交叉数据集推理验证了有偏数据集约束的模型泛化能力差的问题[112],在这一部分中,我们首先关注来自单目RGB图像和视频的3D HPE,然后讨论基于其他类型传感器的3D HPE。在这一部分中,我们首先讨论基于单目RGB图像和视频的3D HPE,然后讨论基于其他类型传感器的3D HPE。

    4.1 来自单目RGB图像和视频的3D HPE

    ​ 单目摄像机是二维和三维场景中使用最广泛的HPE传感器。近几年来的研究进展基于深度学习的来自单目图像和视频的2D HPE使研究人员能够将他们的工作扩展到3D HPE。具体地说,基于深度学习的三维HPE方法分为两大类:单视图三维HPE和多视点3D HPE。

    4.1.1 单视图3D HPE

    ​ 从单目图像和视频的单一视图重建三维人体姿势是一项非常重要的任务,它受到自遮挡和其他对象遮挡、深度模糊和训练数据不足的困扰。这是一个严重的不适定问题,因为不同的3D人体姿势可以投影到相似的2D姿势投影。此外,对于建立在2D关节上的方法,2D身体关节的微小定位误差可能会导致3D空间中的大姿势失真。与单人情况相比,多人情况更为复杂。因此,它们将在下面单独讨论。

    A.单人三维HPE

    img

    ​ 图5:单人3D HPE框架。

    ​ (A)直接估计法直接从二维图像中估计三维人体位置。(B)2D到3D提升方法利用预测的2D人体姿势(中间表示)来进行3D姿势估计。©基于模型的方法结合参数化的人体模型来恢复高质量的三维人体网格。由3Dpose和Shape网络推断出的3D姿态和形状参数被馈送到模型回归器以重建3D人体网格。部分数字来自[113]。

    ​ 根据是否使用人体模型(如第2节所列)来估计3D人体姿势,单人3D HPE方法可分为无模型方法和基于模型的方法。

    ​ 无模型方法。无模型方法不需要使用人体模型来重建三维人体表示。这些方法可进一步分为两类:(1)直接估计法和 (2)2D到3D提升法。

    ​ 直接估计:如图5(A)所示,直接估计方法从2D图像中推断3D人体姿势,而不中间估计2D姿势表示,例如,[114] [115] [116] [43] [117] [118] [119]。早期的深度学习方法之一是由Li和Chan[114]提出的。他们采用浅层网络训练滑动窗口和姿态坐标回归同步训练人体部位检测。Liet等人提出了一种随访方法。[115]其中图像-3D姿势对被用作网络输入。分数网络可以给正确的图像-3D姿势对分配高分,给其他姿势对分配低分,但是这些方法效率很低,因为它们需要多个前向网络推理。Sun等人[43]提出了一种结构感知回归方法。他们没有使用基于关节的表示法,而是采用了更稳定的基于骨骼的表示法。成分损失是通过利用3D骨骼结构和基于骨骼的表示来定义的,这种表示编码了骨骼之间的远程相互作用。 Tekin等人的研究成果。[116]通过学习3Dpose到高维潜在空间的映射,对关节之间的结构依赖性进行了编码。学习的高维姿势表示可以强制3D姿势的结构约束。Pavlakos等人。[117]引入体积表示法,将高度非线性的三维坐标回归问题转化为吸积空间中易于处理的形式。体积中每个关节的体素可能性由卷积网络预测。利用人体关节的正常深度关系,降低了对精确三维地面真实姿态的要求。

    ​ 2D到3D提升:由于最近2DHPE的成功,从中间估计的2D人体姿势推断3D人类姿势的2D到3D提升方法已经成为一种流行的3D HPE解决方案,如图5(B)所示。得益于最先进的2D姿势检测器的优异性能,2D到3D提升方法通常比直接估计方法性能更好。第一阶段采用现成的二维HPE模型估计二维位姿,第二阶段采用二维到三维提升的方法获得三维位姿。Chen和Ramanan[120]从库中对预测的2D姿势和3D姿势进行了最近邻匹配。但是,当3D姿势不是有条件地独立于给定2D姿势的图像时,3D HPE可能会失败。Martinez等人。[121]提出了一种简单有效的全连通残差网络,用于基于二维节点位置回归三维节点位置。尽管当时获得了最先进的结果,但由于过度依赖2Dpose探测器的重建模糊性,该方法可能会失败[118]。Tekin等人的研究成果[122]和周等人的观点[123]使用2D热图代替2D姿势作为估计3D姿势的中间演示。Moreno-Noguer[124]通过距离矩阵回归推导出三维人体姿势,其中2D和3D人体关节的距离被编码成两个欧几里德距离矩阵(EDM)。EDM对于面内图像的旋转和平移以及应用归一化操作时的缩放不变性都是不变的。Wang等人。[125]开发了一种两两排序的卷积神经网络(PRCNN)来预测两两人体关节的深度排序。然后,利用由粗到精的位姿估计器从2D关节和深度排序矩阵回归出3D位姿。Jahangiri和Yuille[126],Sharma等人。[127],Li和Lee[128]首先生成多个不同的3D姿势假设,然后应用排序网络选择最佳3D姿势。

    ​ 考虑到人体姿势可以表示为关节为节点、骨骼为边的图形,已经应用了图形卷积网络(GCNS)通过展示有希望的性能[129] [130] [131] [132] [133]来解决2D到3D姿势提升问题。Choi等人。[131]提出了一种基于GCN的Pose2Mesh方法,从PoseNet中提炼出中间三维姿态。使用GCN,网格网用从网格拓扑构建的图形来回归网格顶点的3D坐标。CI等人[129]提出了一个通用的框架,称为局部连接网络(LCN),它利用全连接网络和GCN来编码局部联合邻域之间的关系。LCN克服了GCN权值分担方案损害姿态估计模型表示能力的局限性,结构矩阵缺乏灵活性,不能支持定制的节点依赖。赵等人。[130]解决了GCN中所有节点卷积滤波器分权矩阵的局限性。提出了一个语义GCN来研究这些语义信息和语义关系。语义图形卷积(SemGConv)运算用于学习边的通道权重。由于SemGConv层和非局部层是交织的,节点之间的局部和全局关系都被捕获。

    ​ 3D HPE数据集通常从具有选定日常运动的受控环境中收集。野外数据的三维姿态标注很难获得。因此,对于具有不寻常姿势和遮挡的野外数据,3DHPE仍然是一个挑战。为此,一组2D到3D的提升方法注重从没有3D姿势标注的原始图像中估计3D人体姿势,如[109] [134] [135] [110] [111]。周等人。[109]提出了一种将野外图像的2个标注作为弱标签的弱监督转移学习方法。三维位姿估计模块与二维位姿估计模块的中间层相连。对于野外图像,2Dpose估计模块执行有监督的2D热图回归,弱监督3D姿势估计模块应用3D骨长约束导致的损失。在弱监督3D姿势估计模块中,2Dpose估计模块执行有监督的2D热图回归,并且在弱监督3D姿势估计模块中应用3D骨长约束引起的损失。Habibie et al.[134]定制投影损失以优化没有3D注释的3D人体姿势。设计了一个3D-2D投影模块,用于根据预测的早期网络层的3D姿势估计2D人体关节位置。投影损失用于更新3D人体姿势,而不需要3D注释。在[136]的启发下,Chen et al.[135]针对提升-再投影-提升过程,提出了一种基于闭包和不变提升性质且具有几何自洽损失的无监督提升网络。闭合是指对于提升的3D骨架,经过随机旋转和重新投影后,生成的2D骨架将位于有效2D姿态的分布范围内。不变性是指从3D骨架改变2D投影的视点时,重新抬起的3D骨架应该是相同的。

    ​ 与从单块图像估计3D人体姿势不同,视频可以提供时间信息来提高3D HPE的准确性和鲁棒性,例如[137] [138] [139] [140] [141] [142] [143] [144]。Hossain和Little[145]提出了一种递归神经网络,它使用带有快捷连接的长短期记忆(LSTM)单元来利用人体序列中的时间信息。他们的方法利用序列到序列网络中的过去事件来预测时间上一致的3D位置。注意到空间约束和时间相关性之间的互补性通常被忽略在先前的工作中。与从单块图像估计3D人体姿势不同,视频可以提供时间信息来提高3D HPE的准确性和鲁棒性,例如[137] [138] [139] [140] [141] [142] [143] [144]。Hossain和Little[145]提出了一种递归神经网络,它使用带有快捷连接的长短期记忆(LSTM)单元来利用人体序列中的时间信息。他们的方法利用序列到序列网络中的过去事件来预测时间上一致的3D位置。注意到空间约束和时间相关性之间的互补性通常被忽略在[140]的基础上,Chen等人在[147]的基础上增加了骨骼方向模块和骨骼长度模块,以确保人体解剖在视频帧上的时间一致性,而Liu等人则增加了骨骼方向模块和骨骼长度模块。[148]利用注意机制识别重要帧,并对大的时间接受场中的长期依赖关系进行建模。Zenget al.[133]采用拆分重组策略来解决罕见且看不见的姿态问题。首先通过分离的时域卷积网络分支将人体分割成局部区域进行处理,然后将从每个分支获得的低维全局上下文进行合并以保持全局一致性。

    ​ 基于模型的方法。如图5©所示,基于模型的方法不包括如第2节所述的参数化身体模型(如运动学模型和体积模型)来估计人体姿势和形状。

    ​ 运动学模型是由具有运动学约束的骨骼和关节连接而成的关节体表示,近年来在三维HPE中受到越来越多的关注。许多方法利用基于运动学模型的先验知识(例如骨骼关节连接性信息、关节旋转特性和固定的骨骼长度比)来估计似是而非的姿势,例如,[149] [19] [150] [151] [152] [153] [154] [155]。周等人。[149]将运动学模型作为运动层嵌入到网络中,以实施方向和旋转约束。Nie等人[150]和Lee等人。[156]采用了LSTM骨架网络,以利用联合关系和连通性。根据运动学结构,观察到人体各部分有明显的自由度(DOF),王等人说。[151]And Nie等人。[154]提出了双向网络对人体骨骼的运动学和几何依赖性进行建模。Kundu等人。[152]设计了一种基于能量损失推断局部运动学参数的运动学结构保留方法,并基于双亲相对局部肢体运动学模型对二维零件段进行了探索。Xu等人。[153]论证了噪声2D关节是实现精确3D位姿估计的关键障碍之一,因此采用2D位姿校正模块对不可靠的2D关节进行基于运动学结构的精化。赞菲特·艾尔。[158]引入了一种具有可微语义部分对齐损失函数的运动学潜在归一化流动表示(应用于原始分布的可逆变换序列)。与生成人体姿势或骨骼的运动学模型相比,体积模型可以恢复高质量的人体网格,提供额外的人体形状信息。作为最流行的体积度量模型之一,SMPL模型[25]由于与现有的渲染引擎兼容,在三维HPE中得到了广泛的应用,如[159] [160] [161] [162] [163] [164] [165] [166] [167] [168]等。Tan等人。[161]、董等人的研究成果。[162]Pavlakos等人。[169]和Omran等人。[170]回归SMPL参数以重建3D人体网格。Kolotouros等人没有预测SMPL参数。[171]利用Graph-CNN结构回归了SMPL网格点的位置。[172]将SMPL模型与层次网格变形框架相结合,增强了树形三维变形的灵活性。Kundu等人。[173]在SMPL模型中加入颜色恢复模块,通过反射对称性获取顶点颜色。Arnab等人。[113]指出使用SMPL模型的方法在野外数据上通常是失败的。他们使用束调整方法来处理遮挡、异常姿势和对象模糊。Doerschand Zisserman[165]提出了一种转移学习方法,通过在合成视频数据集超现实[174]上训练来回归SMPL参数。Kocabas等人。[175]包括大规模运动捕捉数据集[176],用于对其基于SMPL的方法VIBE(Video Inference For Body Pay And Shape Estimation)进行对抗性训练,VIBE利用海量通过姿势回归模块区分真实人体运动和预测姿势。由于低分辨率的视觉内容在现实场景中比高分辨率的视觉内容更常见,当分辨率降低时,现有的训练有素的模型可能会失败。[177]将对比学习方案引入到基于自监督分辨率感知SMPL的网络中,自监督对比学习方案使用自监督损失和对比特征损失来增强特征和尺度的一致性

    ​ 有几种扩展的基于SMPL的模型来弥补SMPL模型的局限性,如计算复杂度高,缺少手和面部标志。Bogo等人。[159]提出了一种基于SMPLify的三维人体网格估计方法,该方法将SMPL模型拟合到检测到的2D节点上,使重投影误差最小。Lassneret等人提出了SMPLify的扩展版本。[160]。

    ​ 采用随机森林回归方法回归SMPL参数,减少了运行时间,但仍不能达到实时吞吐量。金泽等人。[178]在此基础上,提出了一种对抗性学习方法来实时直接推断SMPL参数。Pavlakoset al.[179]在SMPLify方法的基础上,提出了SMPLify-X模型,该模型是借鉴AMASSDataSet[176]的改进版本。Hassan et al.[163]进一步扩展了SMPLify-XTO Prox-一种通过添加3D环境约束来实施与对象排除的最近关系的方法。Kolotouros等人。[164]在训练循环中使用SMPLify的同时,将基于回归和基于优化的SMPL参数估计方法集成到一种名为SPIN(SMPL OPTIMIZATION In The Loop)的新方法中。奥斯曼等人[180]将SMPL升级为STAR,训练时增加了10,000次扫描,以实现更好的模型泛化。模型参数个数减少到SMPL的20%。

    ​ 除了使用基于SMPL的模型之外,还使用其他体积测量模型来恢复3D人体网格,例如,[181][182][183][184]。Chen等人。[182]引入圆柱体人模型,为3D数据生成遮挡标签,并进行数据增强。引入姿态正则项来惩罚错误估计的遮挡标签。香等人。[183]利用亚当模型[30]来重建三维运动。提出了一种三维人体表示方法,称为三维零件方向场(3D Part Orientation Field,POFS),用于编码人体各部位在二维空间中的三维方位。Wang等人。[185]提出了一种新的人体网格的骨级蒙皮模型,该模型通过设置骨长和关节角度,将骨建模和特定于身份的变化解耦。Fisch和Clark[186]提出了一个定向关键点模型,该模型可以计算6DHPE的全三轴旋转,包括偏航、俯仰和横摇。

    B. 多人3D HPE

    img

    对于来自单目RGB图像或视频的3D多人HPE,此处注意到与2D多人HPE类似的类别:自上而下方法和自下而上方法,分别如图6(A)和图6(B)所示。3.2节中二维自上而下和自下而上方法的比较也适用于三维情况。

    自上而下的方法

    ​ 三维多人HPE自上而下的方法是先进行人体检测,再进行个体检测。然后对每个检测到的人,通过三维姿态网络估计绝对根(人体的中心关节)坐标和三维根相对姿态。基于每个人的绝对根坐标及其根相对姿势,所有姿势都与世界坐标对齐。**[188]定位每个人物的候选区域以生成潜在姿势,并使用回归算子联合细化姿势方案。这种定位-分类-回归方法(LCR-Net)在受控环境数据集上表现良好,但不能很好地推广到野外图像。为了解决这个问题,Rogez等人[189]提出了LCR-NET++,通过对训练数据进行合成数据扩充来提高性能。赞菲特·艾尔。[190]增加了带场景约束的3D多人HPE模块的语义分割。此外,采用匈牙利匹配方法解决了基于视频的多人三维HPE的三维时间分配问题。穆恩等人。[191]介绍了一种相机距离感知的方法,即将裁剪后的人体图像送入他们开发的RootNet中,以估计人体根部的相机中心坐标。然后是根相对3D每个修剪过的人的姿势都是由建议的PoseNet估计的。Benzine等人。[192]**提出了一种基于姿态估计和检测锚点的单发PandaNet(Pay Estimation and Detection Anchor-based Network)方法。为了避免遮挡问题,引入了一种基于锚点的低分辨率表示方法。开发了一个姿态感知锚点选择模块,通过去除模糊锚点来解决重叠问题,并使用不同尺度下损失的自动加权来处理不同体型的人的不平衡问题。Li等人。[193]解决了自上而下方法中缺乏全球信息的问题。它们采用层次化的多人序关系方法,利用本体层次、语义和全局一致性对交互信息进行层次化编码。

    自下而上的方法

    ​ 与自上而下的方法不同,自下而上的方法首先生成所有的身体关节位置和深度图,然后根据根部深度和部分相对深度将身体部位与每个人相关联。自下而上方法的一个关键挑战是如何对属于每个人的人体关节进行分组。赞菲尔·埃塔尔。[194]将人员分组问题表述为二进制整数规划(BIP)问题。肢体评分模块用于估计被检测关节的候选运动连接,骨架分组模块通过求解BIP问题将肢体组装成骨架。Nie等人[101]提出了一种单级多人姿态机器(SPM),为每个人定义唯一的身份根关节,利用密集的位移图将身体关节与每个根关节对齐。然而,该方法的局限性在于,只有配对的2D图像和3D姿势注释才能用于有监督学习。在没有配对的2D图像和3D姿势注释的情况下,Kundu等人。[195]提出了一种冰冻网络,在实际部署范例下开发两种不同模态之间共享的潜在空间,从而将学习归结为一个跨模型对齐问题。Fabbri等人。**[196]**提出了一种基于距离的多人设置关节连接启发式算法,从检测到的头部(即置信度最高的关节)开始,根据三维欧氏距离选择距离最近的关节进行连接。

    ​ 自下而上方法的另一个挑战是遮挡。为了应对这个挑战,Metha等人。[197]提出了一种遮挡-鲁棒姿势图(ORPM)方法,将冗余率加入到位置图公式中,从而促进了热图中的人的关联,特别是对于被遮挡的场景。甄氏等人。[187]通过对人与人之间的遮挡和骨骼长度约束的推理,利用深度感知部分关联算法为个体分配关节。Mehta等人。[198]快速推断可见身体关节的中间3D姿势,而不考虑准确性。然后,利用学习到的姿态先验和全局上下文,通过推断被遮挡的关节来重建完整的三维姿态。通过应用时间相关性和拟合运动学骨骼模型,最终的3D姿势被细化。

    ​ 自上而下和自下而上方法的比较自上而下的方法通常依靠最先进的人物检测方法和单人姿势估计方法来获得令人满意的结果。但是,随着人数的增加,特别是在拥挤的场景中,计算复杂度和推理时间可能会变得过大。而且,由于自上而下方法首先检测每个人的包围盒,场景中的全局信息可能会被忽略。裁剪区域的估计深度可能与实际深度排序不一致,并且预测的人体可能被放置在重叠位置。相反,自下而上方法具有线性计算和时间复杂性。然而,如果目标是恢复三维人体网格,那么自下而上的方法重建人体网格并不是一帆风顺的。对于自上而下的方法,在检测到每个人之后,通过结合基于模型的3D单人HPE估计器,可以很容易地恢复每个人的人体网格。而对于自下而上的方法,需要额外的模型回归模块来根据最终的三维姿态重建人体网格。

    4.1.2 多视图3D HPE

    ​ 单视环境下三维HPE的部分遮挡是一个具有挑战性的问题。克服这个问题的自然解决方案是从多个视图估计3D人体姿势,因为一个视图中的遮挡部分在其他视图中可能会变得可见。为了从多个视图重建三维姿态,需要解决不同摄像机之间对应位置的关联问题。

    ​ 一组方法[199] [200] [201] [202] [203]利用人体模型通过优化模型参数使模型投影与二维姿态相匹配来解决关联问题。广泛使用的3D图片结构模型**[204]就是这样的模型。然而,这些方法通常需要较大的内存和较高的计算代价,特别是对于多视点环境下的多人三维HPE。罗丁·埃塔尔。[205]在网络中采用了多视点一致性约束,但需要大量的三维地面实况训练数据。为了克服这一限制,罗丁·埃塔尔(Rhodin Etal)。[206]在此基础上,提出了一种编解码器框架,用于从多视图图像和背景分割中学习几何感知的3D潜在表示,而不需要3D注释。Chen等人。[207] [中英文摘要]、董某等人。[202]** [中英文摘要]、Chenet al.[208]、Mitra等人。[209],Iqbal等人。[210]、张某等人[211]、黄某等人。[212]提出了具有一致性约束的多视点三维人体姿态重建框架。Pavlakos等人。[199]和张等人的研究成果。[213]基于所有标定的摄像机参数,将多视角图像的2D关键点热图聚合成3D图片结构模型。但是,当多视角摄像机环境发生变化时,需要对模型进行重新训练。梁等人。[201]和Habermann等人[214]从多视图图像中推断出非刚体3D变形参数以重建3D人体网格,KadkhoDamohammadi和Padoy[215],邱等人。[200]和Kocabas等人。**[216]**采用对极几何匹配成对多视点姿态进行三维姿态重建,并将其方法推广到新的多视点摄像机环境中。应当注意,在没有周期一致性约束的情况下单独匹配每对视图可能导致不正确的3D姿势重建[202]。Tu等人[203]在3D体素空间中聚合了每个摄像机视图中的所有特征,以避免每个摄像机视图中的错误估计。设计了一个长方体建议网络和一个姿态回归网络,分别用于定位所有人和估计三维姿态。当给出足够的观点时(超过十个),使用所有视点进行三维姿态估计是不现实的。Pirinen等人。[217]提出了一种自监督强化学习方法,通过三角剖分选择少量视点进行三维姿态重构。

    ​ 在多视点HPE中,除了精度外,还需要考虑轻量级的体系结构、快速的推断时间和对新摄像机设置的高效适应。与**[202]将所有视点输入匹配在一起相比,Chen等人提出了一种新的方法。[218]应用迭代处理策略,在迭代更新3D姿势的同时,将每个视图的2D姿势与3D姿势进行匹配。与以前的方法相比,它们的运行时间可能会随着摄像机数量的增加而爆炸,它们的时间复杂度是线性的。Remelli等人。[219**]将每个视图的编码图像编码成一个统一的潜在表示,使特征地图从摄像机视点中解脱出来,作为一种轻量级的规范融合,使用基于GPU的直接线性变换将这些2D表示提升到3D姿态,以加快处理速度。为了提高多视点融合方案的泛化能力,Xieet et al.[220]提出了一种预先训练的多视点融合模型(MetaFuse),该模型能够有效地适应新的摄像机场景,标签数据较少。他们部署了模型不可知的元学习框架来学习用于适应的通用融合模型的最佳初始化。

    4.2 其他来源的3D HPE

    ​ 虽然单目RGB相机是3D HPE最常用的设备,但其他传感器(如深度传感器、IMU和射频设备)也可用于此目的。

    深度和点云传感器

    ​ 深度传感器以其低成本和高利用率的特点在三维计算机视觉任务中受到越来越多的关注,作为三维HPE的关键挑战之一,深度传感器的使用可以缓解深度模糊问题。Yu等人在[221]中提出了一种称为DoubleFusion的单视图实时方法,可以在不使用图像的情况下从单深度传感器估计3D人体姿势。内层通过体积表示重建三维形状,外层通过融合更多的几何细节来更新体形和姿态。熊某等人。**[222]**提出了一种基于深度图像的锚杆-关节回归网络(A2J)。通过将估计的多个锚点与全局-局部空间上下文信息相结合来估计三维关节位置。KadkhoDamohammadi等人。[223]采用多视角RGB-D摄像机采集真实手术室环境中含有深度信息的彩色图像,采用随机森林先验算法融合先验环境信息。最后通过多视角融合和RGB-D优化估计最终的三维姿态。[224]从RGB-D视频中重建具有高分辨率反照率纹理的细节网格。

    ​ 与深度图像相比,点云可以提供更多的信息。最先进的点云特征提取技术PointNet**[225]和PointNet++[226]在分类和分割任务中表现出了优异的性能。江等人。[227]将Point-Net++与SMPL人体模型相结合进行三维人体姿态回归,改进后的PointNet++结合图聚合模块可以提取更多有用的无序特征。映射后骨架图模块提取有序特征,回归SMPL参数,进行精确的三维位姿估计,通过关注模块将有序的骨架关节特征转化为有序的骨架关节特征。王等人。[228]**提出了基于时空网格卷积的PointNet++精细化三维人体网格预测方法。

    带有单目图像的IMUS

    ​ 可穿戴式惯性测量单元(IMU)通过记录运动,在没有物体遮挡和衣物遮挡的情况下,跟踪人体特定部位的方位和加速度。然而,在使用IMU时,可能会出现漂移问题。Marcard等人。[229]提出了一种稀疏惯性位置器(SIP),用于从附着在人体上的6个IMU重建人体姿势。收集到的信息被拟合到带有相干约束的SMPLbody模型中,以获得准确的结果。Marcard等人。**[230]进一步将6-17个IMU传感器与用于野外3DHPE的手持式移动摄像机相关联。介绍了一种基于图的优化方法,将每个2D人物检测分配给来自远程帧的3D姿势候选者。Huang et al.[231]解决了稀疏惯性位姿(SIP)方法的局限性[229],多个姿态参数可以产生相同的IMU方位,且采集IMU数据耗时。因此,通过在SMPL网格上放置虚拟传感器以从海量数据集[176]的运动捕获序列中获得方向和加速度,创建了一个大的合成数据集。提出了ABI-Directional RNN框架,利用过去和将来的信息将IMU方向和加速度映射到SMPL参数。张等人。[232]引入了一种定向正则化图像结构模型,用于从与IMU定向相关的多视图热图中估计3D姿态。Huang et al.[233]**提出了一种将IMU数据与多视图图像进行融合的两阶段方法DeepFuse,第一阶段只处理多视图图像来预测体积表示,第二阶段使用IMU来通过IMU骨骼精化层来细化3D姿势。

    射频设备

    ​ 基于射频(RF)的传感技术也已用于定位人。无需携带无线发射器就可以在WiFi范围内穿越墙壁和弹离人体是部署基于射频的传感系统的主要优势,同时由于非视觉数据可以保护隐私,但是与可视摄像机图像相比,射频信号的空间分辨率相对较低,并且射频系统需要生成粗略的3D位姿估计。赵等人在**[234]中提出了一种基于射频的深度学习方法,称为RF-POSE,用于估计多人场景中的2D姿势。后来的扩展版本,命名为RF-Pose3D[235],可以估计多人的3D骨骼。在此基础上,赵等人[236]**提出了一种基于多头注意模块的时态对抗性训练方法RF-Avtal,利用SMPL人体模型恢复完整的3D人体模型。

    其他传感器/来源

    ​ 除使用上述传感器外,Isogawa等人。[237]从由在线视距(NLOS)成像系统捕获的光子的3D时空直方图估计3D人体姿势。Tome et al.[238]解决了通过鱼眼摄像机进行以自我为中心的3D姿势估计的问题。Saini等人。**[239]使用多个自主微型飞行器(MAV)捕获的图像估计人体运动。聪明人等人。[240]**从压力图像中聚焦于床上睡觉位置的HPE由压力感应垫收集。

    4.3 3D HPE摘要

    ​ 三维HPE近年来取得了很大的进展,由于大量的3D HPE方法采用了2D到3D的提升策略,使得3D HPE的性能有了很大的提高,OpenPose[17]、CPN[90]、AlphaPose**[89]和HRNet[81]**等2D HPE方法在3D HPE方法中被广泛用作2D姿态检测器。除了3D姿势之外,一些方法还可以从图像或视频中恢复3D人体网格,例如[164] [175] [241] [242]。然而,尽管到目前为止已经取得了进展,但仍然存在几个挑战。

    ​ 其中一个挑战是模型泛化。高质量的三维地面真实姿态标注依赖于运动捕捉系统,而运动捕捉系统不容易部署在随机环境中。因此,现有的数据集主要是捕捉无约束场景。最先进的方法可以在这些数据集上取得令人振奋的结果,但当应用于野外数据时,它们的性能会下降。游戏引擎可以生成具有不同姿势和复杂场景的合成数据集,例如超现实数据集**[174]**和GTA-IM数据集[243]。然而,由于合成数据分布与真实数据分布之间的差距,从合成数据中学习可能达不到期望的性能。

    ​ 与二维HPE一样,对遮挡的鲁棒性和计算效率也是3D HPE面临的两个关键挑战。目前的3D HPE方法在拥挤的场景中,由于严重的相互遮挡和可能的低分辨率内容,性能会有相当大的下降。三维HPE比二维HPE对计算的要求更高。例如,2D到3D提升方法依赖于2D姿势作为推断3D姿势的中间表示。因此,在保持高精度位姿估计的同时,开发计算效率高的二维HPE管线显得尤为重要。

    5 数据集和评估指标

    ​ 在进行HPE时,非常需要数据集。为了在不同的算法之间提供公平的比较,它们也是必要的。由于应用场景的复杂性和多样性,收集一个全面的、通用的数据集是一个挑战。为了评估和比较基于不同度量的结果,我们收集了一些数据集。在这一部分中,我们介绍了用于HPE的传统数据集,以及用于基于2D和3D深度学习的HPE方法的更新的数据集,在这一部分中,我们将介绍HPE中使用的传统数据集,以及最近用于基于2D和3D深度学习的HPE方法的数据集。除了这些具有不同功能和任务要求的数据集之外,本节还涵盖了二维和三维HPE的几个常用评估指标。并总结了现有方法在流行数据集上取得的结果。

    5.1 二维HPE的数据集

    ​ 在深度学习应用于人体姿态估计之前,已经有了大量的二维人体姿态数据集。这些数据集有两种类型:(1)上半身姿势数据集,包括Buffy Stickmen[244]、ETHZ Pascal Stickmen[245]、We AreFamily[246]、Video Pose 2[247]和Sync。活动[248];以及(2)全身姿势数据集,包括Pascal PersonLayout[249]、Sports[250]和UIUC People[251]。然而,目前使用这些二维HPE数据集的工作很少,因为它们有很多局限性,如缺乏多样的目标运动和图像数量少。由于基于深度学习的方法是由大量的训练数据推动的,因此本节只回顾大规模的2D HPE数据集。它们在表2中归纳为两个不同的类别(基于图像和基于视频)。

    img

    5.1.1 基于图像的数据集

    Frames Labeled In Cinema (FLIC) Dataset

    ​ [252]是最早的基于图像的二维HPE数据集之一,它包含了从好莱坞电影中自动收集的5003幅图像,其中约4000幅图像用作训练集,其余的用作测试集。FLIC数据集使用名为Poselets[260]的身体部位检测器,从30部流行好莱坞电影的每10帧中获得约20K个候选人物。这些图像中的对象有不同的姿势。从电影中获取的全套帧被称为FLIC-FULL数据集。它是原始FLIC数据集的超集,包含20,928个遮挡的非正面样本。在[53]中引入了一种新的基于FLIC的数据集,命名为FLIC-PLUS,它通过删除与FLIC数据集中的测试集包含相同场景的所有图像来实现。数据集链接:https://bensapp.github.io/flic-dataset.html

    Leeds Sports Pose (LSP) Dataset

    ​ [16]有2,000张来自Flickr的注释图片和8个运动标签,涵盖不同的运动项目,包括田径、羽毛球、棒球、体操、跑酷、足球、网球和排球。在LSP数据集中,每个人的全身共标记了14个关节,此外,利兹运动姿势扩展数据集(LSP-Extended)[254]扩展了LSP数据集,仅用于训练。LSP扩展数据集具有超过10,000个来自Flickr的映像。在最近的研究中,LSP和LSP扩展的数据集已经用于单人HPE。数据集链接:https://sam.johnson.io/research/lsp.html

    Max Planck Institute for Informatics (MPII) HumanPose Dataset

    ​ [253]是用于评估人工HPE的流行数据集。该数据集包含约25,000张图像,其中包含40,000多个带有注释的人体关节,并在[261]的基础上,采用两级分层的方法系统地收集图像,以捕捉日常的人体活动。整个数据集涵盖了410个人类活动,并且所有的图像都进行了标记。每张图片都是从YouTube视频中提取出来的,并提供了前后未加注释的帧。此外,丰富的注释包括工作人员在Amazon Mechanical Turk上重新标记了身体部位闭塞、3D躯干和头部方向。MPII中的图像适用于2D单人或多人HPE。数据集链接:http://human-pose.mpi-inf.mpg.de/#

    Microsoft Common Objects in Context (COCO)Dataset

    ​ [108]是目前使用最广泛的大规模数据集,它拥有33万多幅图像和20万个带有关键点的标记对象,每个人都被标记了17个关节。COCO数据集不仅可用于姿态估计和分析,还可用于自然环境中的目标检测和图像分割、上下文识别等。针对HPE的COCO数据集有两个版本:COCO Key Points 2016和COCO KeyPoints 2017,分别由COCO 2016 Keypoint Detection Challest和COCO 2017 Keypoint DetectionChallest托管。COCO 2016和COCO 2017的不同之处在于培训、验证和测试拆分。COCO数据集在多人HPE工作中得到了广泛的应用。此外,金等人也提出了自己的观点。[262]针对HPE提出了带全身标注的COCO-WholeBody数据集。数据集链接:https://cocodataset.org/#home

    AI Challenger Human Keypoint Detection (AIC-HKD)Dataset

    ​ [255]是目前最大的二维HPE训练数据集。它有30万张带注释的图像,用于关键点检测。共有21万张图片用于训练,3万张图片用于验证,60多万张图片用于测试,这些图片是从互联网搜索引擎上收集的,主要集中在人们的日常活动上。数据集链接:https://challenger.ai/

    CrowdPose Dataset

    ​ [256]是适用于拥挤和遮挡场景中的二维HPE的最新数据集之一。该数据集包含从30,000幅图像中选取的20,000幅图像,使用人群指数(一种度量满足均匀分布来判断图像中的拥挤程度)。训练、验证和测试数据集分别有10,000个图像、2,000个图像和8,000个图像。数据集链接:https://github.com/Jeff-sjtu/CrowdPose

    5.1.2 基于视频的数据集

    Penn Action Dataset

    ​ [257]由2326个视频序列和15个不同动作和人类联合注释组成,这些视频包含带有体育动作注释的帧:棒球场、棒球挥杆、网球正手、网球发球、板凳推举、保龄球、挺举、高尔夫挥杆、跳绳、跳跃千斤顶、向上拉、向上推、仰卧起坐、蹲下和弹奏吉他。图像的注释是使用Amazon Mechanical Turk标记的。数据集链接:http://dreamdragon.github.io/PennAction/

    Joint-annotated Human Motion Database (J-HMDB)

    ​ [258]是一个完全注释的视频数据集,用于动作识别、人体检测和HPE。有21个动作类别,包括刷发、接球、拍手、爬楼梯、高尔夫、跳、踢球、捡、倒、引体向上、推、跑、射球、射弓、射枪、坐、站、挥舞棒球、扔、走和挥手。有928个视频剪辑,包括31,838个注释帧。基于Amazon Mechanical-Turk的二维铰接式人体木偶模型被用来生成所有的注释。J-HMDB数据集中70%的图像用于训练,睡觉图像用于测试。数据集链接:http://jhmdb.is.tue.mpg.de/

    PoseTrack Dataset

    ​ [259]是一个用于视频分析中的多人姿态估计和关节跟踪的大规模数据集。视频中的每个人都有唯一的带有注释的曲目ID。PoseTrack包含1,356个视频序列、大约46,000个带注释的视频帧和276,000个身体姿势注释,用于训练、验证和测试。数据集链接:https://posetrack.net/

    5.2 二维HPE的评估指标

    Percentage of Correct Parts (PCP)

    ​ 正确部位百分率(PCP)[263]是二维HPE早期工作中仅使用的一种测量方法,它通过评估预测来报告肢体的定位精度,当预测关节与地面真实关节之间的距离小于肢体长度的一小部分(在0.1~0.5之间)时,确定肢体的定位。在一些工作中,PCP度量也被称为PCP@0.5,其中阈值是0.5。此度量用于LSP数据集,用于单人HPE评估。然而,最近的研究并没有广泛应用PCP,因为它对难以检测的短肢进行倾斜处理,当模型具有较高的PCP度量时,模型的性能被认为是更好的。为了解决PCP的缺点,引入了关节检测百分比(PDJ),其中如果预测关节与真实关节之间的距离在躯干直径的一定分数内,则认为预测关节是检测到的[36]。

    Percentage of Correct Keypoints (PCK)

    ​ [264]还用来衡量在给定阈值内不同关键点的定位精度。将阈值设置为每个测试图像的头部段长度的50%,并将其表示为PCKh@0.5。当检测到的关节与真实关节之间的距离小于躯干直径的0.2倍时,PCK称为PCK@0.2。PCK值越高,模型性能越好。

    Average Precision (AP) and Average Recall (AR)

    ​ AP Measure是根据查准率(真阳性结果与总阳性结果的比率)和召回率(真阳性结果与地面事实阳性总数的比率)来衡量关键点检测准确性的指标。AP计算的是查全率大于0到1的平均精确值。AP有几个类似的变体。例如,在[264]中引入了关键点平均精度(APK)。平均精度(MAP)是所有类别的平均精度的平均值,是MPII和PoseTrack数据集上广泛使用的度量。平均召回率(AR)是COCO关键点评估中使用的另一种度量[265]。目标关键点相似度(OKS)在目标检测中的作用类似于并集交集(IOU),用于AP或AR。这个度量是根据对象的尺度以及预测点和地面真实点之间的距离来计算的。COCO评估通常使用超过10OKs阈值的mAP作为评估指标。img

    表3:使用PCP测量(针对躯干、头部、腿部、手臂和全身等个体肢体)和“以人为中心”注释的LSP数据集上不同2D单人HPE方法的比较。最好的两个分数分别标为红色和蓝色。

    img

    表4:使用PCKh@0.5测量的二维单人HPE的MPII数据集上不同方法的比较(即阈值等于每个测试图像头部段长度的50%)。最好的两个分数分别用红色和蓝色标记。img表5:在使用mAPMeasure的MPII数据集的全部测试集上,不同的2D多人HPE方法的比较。最好的两个分数分别用红色和蓝色标记。img表6:在使用AP MEASURE的COCO数据集的TEST-DEV集合上的不同2D多人HPE方法的比较(AP.5表示OKS=0.50的AP,AP.75表示OKS=0.75的AP,AP(M)用于中等对象,AP(L)用于大对象)。最好的两个分数分别用红色和蓝色标记。

    5.3 二维HPE方法的性能比较

    ​ 在表3∼6中,我们总结了不同的二维HPE方法在流行数据集上的性能,以及相关的和常用的评估指标。为了在LSP数据集上进行比较,表3中采用了PCP度量来评估基于身体检测的方法和基于回归的方法的性能。表4显示了使用PCKh@0.5度量在MPII数据集上使用不同的2D HPE方法的比较结果。值得注意的是,人体检测方法通常比回归方法具有更好的性能,因此在最近的二维HPE研究中得到了更多的关注。在表5中,报告了MPII数据集的完整测试集上的MAP比较。表6显示不同2D HPE方法在COCO数据集的TEST-DEV集上的实验结果,以及每种方法的实验设置(额外数据、模型中的主干、输入图像大小)和AP得分的汇总。

    5.4 三维HPE的数据集

    ​ 与众多具有高质量标注的二维人体姿态数据集相比,获取准确的三维人体姿态标注是一项具有挑战性的任务,需要运动捕捉系统(如MOCAP和可穿戴IMU)。由于这一要求,许多三维姿态数据集都是在受约束的环境中创建的。这里,表7总结了不同设置下广泛使用的3D位置数据集。

    img

    HumanEva Dataset

    ​ HumanEva数据集[266]包含7个校准的视频序列(4个灰度和3个彩色),其中地面真实3由商业MOCAP系统从ViconPeak捕获。该数据库由4名受试者组成,在3m×2m的区域内执行6种常见动作(步行、慢跑、打手势、投球和接球、拳击和组合)。数据集链接:http://humaneva.is.tue.mpg.de/

    Human3.6M

    ​ [267]是从单目图像和视频中获取3D HPE的最广泛使用的室内数据集。11名专业演员(6名男性和5名女性)在室内实验室环境中从4种不同的视角进行17项活动(如吸烟、拍照、打电话),该数据集包含360万个3D人体姿势,并通过基于精确标记的MoCap系统捕获3D地面真实注释。有3种协议,具有不同的训练和测试数据分割。协议#1使用对象S1、S5、S6和S7的图像进行训练,使用对象S9和S11的图像进行测试。协议#2使用与协议#1相同的训练-测试分离,但是预测在与地面事实比较之前通过刚性变换进一步后处理。协议#3使用对象S1、S5、S6、S7和S9的图像进行训练,使用对象S11的图像进行测试。数据集链接:http://vision.imar.ro/human3.6m/

    MPI-INF-3DHP

    ​ 这是一个由多摄像机摄影棚中的商用无标记MOCAP系统捕获的数据集,共有8名演员(4男4女)执行8项人类活动,包括行走、坐着、复杂运动和动态动作。超过130万帧来自14台摄像机的视频被记录在一个允许自动分割和增强的绿屏工作室中。数据集链接:http://gvv.mpi-inf.mpg.de/3dhp-dataset/

    TotalCapture Dataset

    ​ 包含IMU和Vicon标签的完全同步视频,超过190万帧。有13个传感器放置在身体的关键部位,如头部、上下背部、上下肢和脚。这些数据是用8个校准的全高清摄像机在室内收集的,频率为60 Hz,大小约为4×6 m2。共有5名演员(4名男性和1名女性)表演动作,重复3次,包括行走、跑步和自由泳。数据集链接:https://cvssp.org/data/totalcapture/

    CMU Panoptic Dataset

    ​ 包含65个序列(5.5小时),包含150万个多人的3D骨骼。此数据集由无标记运动捕获系统捕获,该系统具有480个VGA摄像机视图、超过30HD视图、10个RGB-D传感器和校准的基于硬件的同步系统。测试集包含4个活动(最后通牒、黑手党、讨价还价和披萨)的高清摄像机拍摄的9600帧。数据集链接:domedb.erception.cs.cmu.edu/

    3DPW Dataset

    ​ 由手持摄像机收集,Imus在自然场景中捕捉日常活动(例如,在城市购物、上楼、做运动、喝咖啡和乘坐公交车)。这个数据集中有60个视频序列(超过51,000帧),相应的3D姿势是由可穿戴IMU计算的。测试集包含来自4个高清摄像机的9,600帧活动(最后通牒、黑手党、讨价还价和披萨)。数据集链接:https://virtualhumans.mpi-inf.mpg.de/3DPW/

    MuCo-3DHP Dataset

    ​ 是由MPI-INF-3dHP单人数据集和多视点无标记运动捕捉系统中的地面真实3D姿态组成的多人3D训练集。应用背景增强和人物外观的阴影感知前景增强来实现数据多样性。数据集链接:http://gvv.mpi-inf.mpg.de/projects/SingleShotMultiPerson/

    MuPoTS-3D Dataset

    ​ 是一个多人3D测试台,它的地面真实3D姿势是由一个包含20个真实世界场景(5个室内和15个室外)的多视点无标记MOCAP系统捕获的。有一些具有挑战性的样本,遮挡,剧烈的照明变化,以及一些户外镜头的闪光。8名受试者在20个序列中收集了8000多帧。数据集链接:http://gvv.mpi-inf.mpg.de/projects/SingleShotMultiPerson/

    AMASS Dataset

    ​ 通过统一15个不同的基于光学标记的MOCAP数据集,并使用SMPL模型来表示人体运动序列来创建。这个庞大的数据集包含超过40个小时的运动数据,包含8593个900万帧的序列,采样频率为60 Hz。超过300名受试者记录了11000多个动作。数据集链接:https://amass.is.tue.mpg.de/

    NBA2K Dataset

    ​ 通过使用RenderDoc截取游戏引擎和显卡之间的调用,从NBA2K19视频游戏中提取。合成数据集包含27个受试者的27,144个篮球姿势。该数据集中提供了35个关键点的3D姿势和相应的RGB图像,质量很高。数据集Link:https://github.com/luyangzhu/NBA2K-dataset

    GTA-IM Dataset

    ​ 是由GTA游戏引擎从GTA视频游戏中收集的GTA室内运动数据集。有一百万个1920×1080分辨率的RGB-D帧,包含98个关节的真实3D人体姿势,涵盖坐、走、爬和开门等各种动作。每个场景包含几个场景,如起居室、卧室和厨房,强调人与场景的互动。数据集链接: https://people.eecs.berkeley.edu/∼zhecao/hmp/

    Occlusion-Person Dataset

    ​ 是一个多视图合成数据集,带有图像中关节的遮挡标签。Un-realCV[272]用于从3D模型渲染多视图图像和深度图。在半径为2米的圆周上,每45度共使用8台摄像机,该数据集包含73K帧,包含20.3%的关节。还提供了地面真实3D注释和遮挡标签。数据集链接:https://github.com/zhezh/occlusion Person

    5.5 3D HPE的评估指标

    MPJPE

    ​ (每个关节的平均位置误差)是评估3D HPE性能的最广泛使用的评估指标。MPJPE是通过使用估计的3D关节和地面真实位置之间的欧几里德距离计算的,其中N是节理数目,Ji和J∗i分别是第i个节理的地面真实位置和估计位置。如下所示:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W8pqWMPM-1646891579665)(C:\Users\w1732\AppData\Roaming\Typora\typora-user-images\image-20220309191315193.png)]

    PMPJPE

    ​ 也称重建误差,是指估计出的位姿与地面真实位姿之间经过后处理进行刚性对准后的MPJPE。

    NMPJPE

    ​ 定义为将尺度上的预测位置归一化到参考[205]之后的MPJPE。

    MPVE

    ​ (逐顶点平均误差)[169]测量地面真实顶点和预测顶点之间的欧几里得距离,其中N是顶点数,V是地面真实顶点,V∗是估计顶点。如下所示[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XXurNsdV-1646891579666)(C:\Users\w1732\AppData\Roaming\Typora\typora-user-images\image-20220309191551478.png)]

    3DPCK

    ​ 是2D HPE评估中使用的正确关键点百分比(PCK)度量的3D扩展版本。如果估计与地面真实之间的距离在一定阈值内,则认为估计的关节是正确的。通常,阈值设置为150 mm

    5.6 三维HPE方法的性能比较

    ​ 表8∼11提供了在对应于单视图单人、单视图多人和多视图场景的广泛使用的数据集上的不同3DHPE方法的性能比较。

    ​ 在表8中,大多数3D单视单人HPE模型在Human3.6M数据集上成功地估计了3D人体姿势,并且具有显著的精度。虽然人类3.6M数据集有大量的训练和测试数据,但它只包含11名演员(6名男性和5名女性),他们表演了17项活动,如吃饭、讨论、吸烟和拍照。当在更复杂的场景下对野外数据进行3D姿态估计时,这些方法的性能会降低。还观察到,基于模型的方法与无模型的方法性能相当。当视频数据可用时,利用时间信息可以提高性能。由于遮挡程度较高,3D单视多人HPE的任务比3D单视单人HPE更困难。如表9和表10所示,近年来,单视图多人HPE方法取得了良好的进展。通过比较来自表8和表11的结果,很明显,与使用相同数据集和评估度量的单视图3D HPE方法相比,多视图3D HPE方法的性能(例如,协议1下的MPJPE)得到了改善。

    img

    表8:在Human3.6M数据集上比较不同的3D单视图单人HPE方法。最好的两个分数分别标为红色和蓝色。这里,在无模型的方法中,“Direct”是指没有2D姿态表示而直接估计3D姿态的方法。“Lifting”表示将2D姿势表示提升到3D空间(即,3D姿势)的方法。“Temporal”是指利用时态信息的方法。img

    表9:MuPoTS-3D数据集上不同3D单视图多人HPE方法的比较最好的两个分数分别标为红色和蓝色。img

    表10:基于CMU全景数据集的不同3D单视图多人HPE方法的比较。最后通牒、黑手党、讨价还价和披萨表示四种活动。最好的两个分数分别用红色和蓝色标记。

    img

    表11:在Human3.6M数据集上不同3D多视图HPE方法的比较。最好的两个分数分别标为红色和蓝色。

    5.7 会议研讨会和HPE面临的挑战

    ​ 由于人们对HPE的兴趣与日俱增,有关HPE的研讨会和挑战将与CVPR、ICCV和ECCV等计算机视觉会议场所一起举办。这些研讨会的目的是聚集HPE方面的研究人员和实践者,讨论当前的最新技术以及未来需要关注的方向。在表12中,我们总结了2017-2020年这一研究领域的相关2D和3D HPE研讨会和挑战。

    img

    ​ 表12:2D和3D HPE的会议研讨会和挑战。

    6 应用实例

    img

    ​ 图7:人体姿势估计的各种应用。

    ​ 动作识别、预测、检测和跟踪:姿势信息已被用作各种应用的提示,例如动作识别、预测、检测和跟踪。安吉利尼等人。[274]提出了一种基于姿态的实时动作识别方法。严等人[275]利用动作姿势识别的动态骨架模态。Markovitz等人。[276]对视频中人体动作异常检测的人体姿态图进行了研究。[243]使用预测的3D姿势进行长期人体运动预测。Sun等人。[277]提出了一种视点不变的概率姿态嵌入方法进行视频对齐。

    ​ 基于姿势的视频监控通过姿势和人体网格表示代替人的敏感身份进行监控,具有保护隐私的优点。Das等人提出了一种基于姿势的视频监控方法。[278]嵌入式视频,带姿势识别日常生活活动,用于监控人类行为。

    动作纠正和在线辅导

    ​ 一些活动,如舞蹈、体育和专业训练,需要精确的人体控制,以严格的反应作为标准姿势。通常情况下,私人教练负责面对面的体位纠正和行动指导。在3D HPE和动作检测的帮助下,AI个人训练扫描通过简单地设置摄像头而无需私人教练演示,使训练变得更加方便。Wang等人[279]设计了一个具有姿势估计模块的人工智能教练系统,用于个性化运动训练辅助。

    服装解析

    ​ 电子商务趋势对包括服装购买在内的各个方面都产生了明显的影响。图片形式的服装产品已经不能满足顾客的需求,顾客希望在穿上自己选择的衣服时能看到可靠的外观,而衣物解析和姿势转换[280]可以通过推断穿着特定衣服的人的3D外观来实现。HPE可以为布料解析提供合理的人体区域。此外,推荐系统可以通过基于推断出的具有所选项目的客户的可靠3D外观来评估适当性来升级。Patel et al.[281]实现了从3D姿势、形状和服装款式进行服装预测

    动画、电影和游戏

    ​ 在动画、电影和游戏行业中,运动捕捉是呈现具有复杂动作和逼真物理交互的角色的关键组件。运动捕捉设备通常设置起来既昂贵又复杂。HPE可以提供逼真的姿势信息,同时缓解了对专业高成本设备的需求[282] [283]。

    AR和VR

    ​ 增强现实(AR)技术旨在增强数字对象在真实世界环境中的交互体验。虚拟现实(VR)技术的目标是为用户提供身临其境的体验。AR和VR设备使用人体姿势信息作为输入,以实现它们不同的应用目标。在真实场景中可以生成卡通人物来代替真人。Weng等人。[284]借助3D从单张照片创建3D角色动画姿态估计和人体网格恢复。张等人。[285]提出了一种基于姿势的系统,将转播的网球比赛视频转换成交互式的、可控的视频精灵,视频精灵中的球员保留了真正的职业球员的技术和风格。

    医疗保健

    ​ HPE提供定量的人体运动信息,医生可以诊断一些复杂的疾病,创建康复训练,并进行物理治疗。Lu等人。[286]设计了一种基于姿势的帕金森病运动严重程度评估系统。Gu等人[287]开发了一种基于姿势的物理治疗系统,可以在家中对患者进行评估和建议。此外,可以建立这样的系统来检测异常动作并提前预测后续动作。如果系统确定可能发生危险,将立即发送警报。Chen等人。[288]使用HPE算法进行跌倒检测监测,以便提供即时辅助;同时,HPE方法可以为医院环境中的患者提供可靠的姿势标签,以加强神经与自然行为相关性的研究[289]。

    7 结论与未来方向

    ​ 在这篇综述中,我们对最近基于深度学习的二维和三维HPE方法进行了系统的综述。对这些方法进行了全面的分类和性能比较。尽管取得了巨大的成功,但正如第3.3节和第4.3节所讨论的那样,仍然存在许多挑战。在这里,我们进一步指出了几个有希望的未来方向,以促进HPE研究的进展。

    ​ A.针对HPE的域适配。对于一些应用,如从婴儿图像[290]或艺术品集[291]估计人体姿势,没有足够的带有地面真实注释的训练数据。此外,这些应用的数据表现出与标准姿势数据集不同的分布。在现有标准数据集上训练的HPE方法可能不能很好地跨不同领域推广。缓解领域鸿沟的最新趋势是采用基于GaN的学习方法,然而,如何有效地转移人类潜在知识来弥合领域鸿沟还没有解决。

    ​ B.使用SMPL、SMPLify、SMPL-X、Ghum&GHUML和ADAM等人体模型对人体网格表示进行建模。然而,这些模型有大量的参数。如何在保持重构网格质量的同时减少参数个数是一个耐人寻味的问题。而且,不同的人有不同的体型变形。更有效的人体模型可以利用其他信息,如BMI[180]和Silhouette[292],以便更好地推广。

    ​ C.现有的大多数方法忽略了人与3D场景的交互。有很强的人与景的关系可以探索的约束(例如人类主体)不能同时出现在场景中的其他对象的位置中。具有语义线索的物理约束可以提供可靠、逼真的三维HPE。

    ​ D.3DHPE用于视觉跟踪和分析,现有的从视频中重建三维人体姿势和形状不是平滑和连续的。原因之一是MPJPE等评价指标不能评价系统的平滑度和逼真度。应开发适当的帧级评估指标,重点关注时间一致性和运动平滑性。

    ​ E.现有训练有素的网络对求解失配的关注较少。HPE网络的训练数据通常是高分辨率的图像或视频,在从低分辨率输入预测人体姿态时,可能会导致不准确的估计。对比学习方案[293] (例如,原始图像及其低分辨率版本作为正对)可能有助于构建分辨率感知的HPE网络。

    ​ F.视觉任务中的深度神经网络很容易受到对抗性攻击。不可察觉的噪声会显著影响HPE的性能。很少有文献[294] [295]考虑HPE的对抗性攻击。研究对敌意攻击的防御可以提高HPE网络的健壮性,促进基于真实世界姿态的应用。

    ​ G.基于姿势的应用。·由于人体的异质性,人体各部分可能具有不同的运动模式和形状。单一的共享网络结构对于不同自由度的所有身体部位的预测可能不是最优的,神经结构搜索(NAS)[296]可以搜索最优的结构来估计每个身体部位[297]、[298]。此外,NAS还可以用于发现高效的HP网络体系结构,以降低计算成本[299]。当必须满足多个目标(例如,延迟、准确性和能耗)时,也值得探索HPE中的多目标NAS。

    展开全文
  • 人体姿态估计论文(open pose) Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields ∗
  • 人体姿态估计的基本概念

    千次阅读 2022-04-02 16:57:43
    第1节:人体姿态估计的基本概念 1.1含义 人体姿态估计的任务是确定图像人体关键点位置坐标,通常包括17个关键点,如图1所示。 图 1-1 人体姿态估计效果展示 作为计算机视觉技术的重点领域,人体姿态估计在电影和...
  • 点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达来自 | 知乎 作者| 谢一宾链接... 前言本文主要讨论2D的人体姿态估计,内容主要包括:基本任务介绍、存在的主要困难、方法以及个人对这个问题...
  • 人体姿态估计调研

    2021-06-23 19:00:07
    点击上方“计算机视觉工坊”,选择“星标”干货第一时间送达基于视觉的单目人体姿势估计是计算机视觉中最基本和最具挑战性的问题之一,旨在从输入图像或视频序列中获取人体姿势。本文调查2014年以来...
  • 随着DeepPose的提出,人体姿态估计的方法开始由传统方法转化为深度学习方法,在下面总结的几篇论文,这些论文代表了从 Google 的 DeepPose 开始的 Human Pose Estimation 的演变(这不是一个详尽的列表,而是最好的...
  • 人体姿态估计的应用

    千次阅读 2022-01-09 11:48:22
    人体姿态估计及其应用的学习结果附演示视频
  • 人体姿态估计——Python+OpenCV+OpenPose

    千次阅读 2021-12-22 19:38:56
    目录前言技术难点人体姿态估计方法类别单人姿态估计多人姿态估计人体姿态跟踪3D人体姿态估计技术原理神经网络的实现相关代码参考文献运行过程注意 前言 人体姿态估计(Human Pose estimation),几十年来备受计算机...
  • 目录目录人体姿态估计(人体关键点检测)2D Pose训练代码和Android源码1.人体姿态估计2D Pose方法2.人体姿态估计数据集(1)COCO数据集(2)MPII数据集(3)关键点示意图(ID序号)3.人体(行人)检测4.人体姿态估计训练...
  • 人体姿态估计的过去、现在和未来

    千次阅读 2021-07-23 01:02:08
    点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达 本文转自:计算机视觉life前言因为在ICIP2019上面和两位老师搞了一个关于人体姿态估计以及动...
  • 结合 MMPose 的实现介绍多视角 3D 人体姿态估计任务常用的算法、数据集和功能模块
  • 将训练中的误差作为样本,利用MLE极大似然估计和 Flow-based 生成模型学习潜在的误差分布

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,046
精华内容 2,818
关键字:

人体姿态估计