炼数成金 门户 商业智能 人工智能 查看内容

从DeepNet到HRNet,这有一份深度学习“人体姿势估计”全指南

2019-5-8 10:24| 发布者: 炼数成金_小数| 查看: 9211| 评论: 0|来自: 大数据文摘

摘要: 从DeepNet到HRNet,这有一份深度学习“人体姿势估计”全指南几十年来,人体姿态估计(Human Pose estimation)在计算机视觉界备受关注。它是理解图像和视频中人物行为的关键一步。在近年深度学习兴起后,人体姿态估 ...

网络 模型 架构 框架 深度学习

从DeepNet到HRNet,这有一份深度学习“人体姿势估计”全指南

几十年来,人体姿态估计(Human Pose estimation)在计算机视觉界备受关注。它是理解图像和视频中人物行为的关键一步。

在近年深度学习兴起后,人体姿态估计领域也发生了翻天覆地的变化。

今天,文摘菌就从深度学习+二维人体姿态估计的开山之作DeepPose开始讲起,为大家盘点近几年这一领域的最重要的论文。

什么是人体姿势估计?
人体姿态估计(Human Pose Estimation,以下简称为HPE)被定义为图像或视频中,人体关节(也被称为关键点-肘部、手腕等)的定位问题。它也被定义为,在所有关节姿势组成的空间中搜索特定姿势。


二维姿态估计-运用二维坐标(x,y)来估计RGB图像中的每个关节的二维姿态。


三维姿态估计-运用三维坐标(x,y,z)来估计RGB图像中的三维姿态。

HPE有一些非常酷的应用,在动作识别(action recognition)、动画(animation)、游戏(gaming)等领域都有着广泛的应用。例如,一个非常火的深度学习APP —— HomeCourt,可以使用姿态估计(Pose Estimation)来分析篮球运动员的动作。


为什么人体姿势估计这么难?
灵活、小而几乎看不见的关节、遮挡、衣服和光线变化都为人体姿态估计增加了难度。


二维人体姿态估计的不同方法
传统方法
关节姿态估计的传统方法是使用图形结构框架。这里的基本思想是,将目标对象表示成一堆“部件(parts)”的集合,而部件的组合方式是可以发生形变的(非死板的)。

一个部件表示目标对象某部分图形的模板。“弹簧”显示部件之间的连接方式,当部件通过像素位置和方向进行参数化后,其所得到的结构可以对与姿态估计非常相关的关节进行建模。(结构化预测任务)


然而,上述方法的局限性在于,姿势模型并非构建在图像数据之上。因此,研究者把大部分精力都放在了构建更具表现力的模型上了。

可形变部件模型(Deformable part models)- Yang和Ramanan使用表示复杂关节关系的部件混合模型。可形变部件模型是一个模板集合,这些模板的组合方式是可发生形变的,每个模型都有全局模板+部件模板。这些模板与图像相匹配用以以识别/检测对象,这种基于部件的模型可以很好地模拟关节。然而,这是以有限的表现力为代价实现的,并没有用到全局信息。

基于深度学习的方法
传统姿态估计方法有其难以克服的局限性,但这一局面因为CNN的出现而被打破。随着Toshev等人对“DeepPose”的引入,人体姿态估计的研究开始从传统方法转向深度学习。

近年来,大多数姿态估计系统(pose estimation systems)都普遍采用ConvNets作为其主构模块,这在很大程度上取代了手工制作的特征和图形模板;这种方法相比传统方法取得了巨大提升。

在下一节中,我将按时间顺序总结几篇论文,这些论文代表了HPE的演进,从google的DeepPose开始(这不是一个详尽的列表,而是一个个人认为能够显示该领域最近进展和会议重要成果的论文合集)。

论文涵盖
1. DeepPose
2. 使用卷积网络的高效目标定位(Efficient Object Localization Using Convolutional Networks)
3. 卷积姿态机(Convolutional Pose Machines)
4. 基于误差反馈的人体姿态估计(Human Pose Estimation with Iterative Error Feedback)
5. 用于人体姿态估计的堆叠式沙漏网络(Stacked Hourglass Networks for Human Pose Estimation)
6. 人体姿态估计和跟踪的简单基线(Simple Baselines for Human Pose Estimation and Tracking)
7. 人体姿态估计的高分辨率深度学习(Deep High-Resolution Representation Learning for Human Pose Estimation)

DeepPose:通过深度神经网络(CVPR'14)进行人体姿态估计
DeepPose是第一篇将深度学习应用于HPE的重要论文。它实现了SOTA(state of the art)性能并击败了现有的模型。在这种方法中,姿势估计被表述为一个基于CNN的身体关节回归问题。

他们还使用一系列这样的回归器来改进姿势估计并获得更好的估计结果。这种方法所做的一件重要事情是以整体的方式评估姿势,也就是说,即使某些关节是隐藏的,如果摆出的姿势是作为一个整体,也可以对其进行估计。本文认为,CNN很自然地提供了这种推理,并通过结果证明了其强大。

模型
该模型由一个Alexnet后端(7层)和一个额外的最终层组成,这个最终层的输出为2k关节坐标。(xi,yi)∗2 for i∈{1,2…k},k为关节数量

使用L2损失对模型进行回归训练。


这个模型实现的一个有趣的想法是,使用级联回归器(cascaded regressors)对预测进行细化,从而对初始的粗糙预测进行了改进,得到较好的估计。图像被剪切到预测到的关节周围,并被送入下一阶段,这样,后续的姿势回归器可以看到更高分辨率的图像,从而学习更细比例的特征,从而最终获得更高的精度。

结果
本文使用了LSP(Leeds sports dataset,利兹[2]运动数据集)和FLIC(Frames Labeled In Cinema,电影院标记帧)数据集进行实验,并以PCP(Percentage of Correct Parts,部件正确率)指标和其他方法进行了比较。查看附录,可以找到一些主流的评估指标(如PCP&PCK)的定义。


评语
本文将深度学习(CNN)应用于人体姿势估计(HPE),并在这方面启发了大量研究。

回归到XY位置是比较困难的,并且增加了学习复杂性,这削弱了其泛化能力,因此在某些区域表现不佳。

最近的SOTA方法将问题转化为估算尺寸为W0×H0,{H1,H2,...,Hk} 的K个热图(heatmap),其中每个热图中Hk表示kth关键点的位置置信度(共K个关键点)。下一篇论文将重点介绍这一观点。

使用卷积网络(CVPR'15)进行有效的目标定位
这种方法通过并行方式对图像进行多分辨率处理来生成一组热图(heatmap),同时在不同的尺度上捕获特征。输出的结果是一个离散的热图而不是连续回归。热图预测关节在每个像素发生的概率。这个输出模型是非常成功的,很多后续论文都是预测热图而不是直接回归。

模型
采用多分辨率CNN结构(粗糙热图模型)实现滑动窗口探测器,从而产出粗糙热图。

本文的主要目的是恢复初始模型中,由于池化而造成的空间精度损失。他们通过使用一个额外的“姿态优化”——ConvNet来实现这一点,ConvNet可以优化粗糙热图的定位结果。

但是,与标准的级联模型不同,它们重用现有的卷积特性。这不仅减少了级联中可训练参数的数量,而且由于粗糙模型和精细模型是联合训练的,因此可以作为粗热图模型的调节器。

从本质上讲,该模型包括用于粗定位的基于热图的部件模型、用于在每个关节的指定(x,y)位置采样和裁剪卷积特征的模块以及用于微调的附加卷积模型。


这种方法的一个关键特征是联合使用一个ConvNet和一个图形模型,图形模型学习关节之间的典型空间关系。

训练
该模型通过最小化我们的预测热图到目标热图的均方误差(MSE,Mean Squared-Error)距离进行训练(目标是以标准真值(x,y)关节位置为中心的二维常方差高斯(σ≈1.5像素))。

结果


评论
热图比直接关节回归更有效。
联合使用CNN和图形模型(Graphical Model)
然而,这些方法缺乏结构建模。由于受限于身体部位比例、左右对称性、穿插限制、关节限制(例如肘部不向后弯曲)和物理连接(例如手腕与肘部的较精确相关)等约束,二维人体姿势呈现出高度结构化。对这种结构约束进行建模,应该可以更容易地确定可见的关键点,并使咬合处关键点估计成为可能。接下来的几篇论文,他们将用一些新颖方式来解决这个问题。

卷积摆位机(CVPR'16)(Convolutional Pose Machines)
摘要
这是一篇有趣的论文,使用了一种称为姿态机(Pose Machine)的东西。姿态机由图像特征计算模块和预测模块组成。卷积式姿态机是完全可微分的,其多级结构可以进行端到端的训练。它们为学习丰富的隐式空间模型提供了一个连续的预测框架,其对人体姿势的预测效果非常好。

本文的一个主要动机是学习长范围的空间关系,它们表明,这可以通过使用更大的感受野(receptive fields)来实现。

模型


g1()和g2()预测热图(即论文中的信念图(belief maps)),整体架构如上图所示。Stage1是图像特征计算模块,Stage2是预测模块;下面是一个详细的架构。


CPM(卷积姿态机)通常包含不止两个阶段,阶段数目一般来讲都是超参数,通常取3。第一阶段是固定的,大于2的阶段一般都只是阶段2的重复。第2阶段将热图和图像证据作为输入。输入的热图为下一个阶段增添了空间背景。(已经在论文中进行了详细的阐述与讨论)

总体来说,CPM通过后续阶段来对热图进行细化。

论文在每一个阶段都会使用中间监督学习,从而来避免梯度消失的问题,这是一个深度多层神经网络的常见问题。


结论/结果
MPII:PCKh-0.5得分达到87.95%的水平状态,比最接近的竞争者高出6.11%,值得注意的是,在脚踝(最具挑战性的部分),我们的PCKh@0.5得分是78.28%,这比最接近的竞争对手高出了10.76%。

LSP:模型达到84.32%的水平状态(添加MPII训练数据时为90.5%)。

评论
介绍了一种新颖的CPM框架,该框架显示了MPII,FLIC和LSP数据集的SOTA性能。

基于误差反馈的人体姿态估计(CVPR’16) 
摘要
这是一篇内容丰富并非常复杂的论文,我试图简单地总结一下,希望不会遗漏太多。整个工作的思想非常直接:预测当前估计的错误并迭代纠正。引用作者的论述,他们不是一次性直接预测输出,而是使用自校正模型,通过反馈误差预测逐步改变初始解决方案,这个过程称为迭代误差反馈(IEF)。

让我们来看看模型吧。

输入由图像I和前一输出yt−1的表示组成。请记住,这是一个迭代的过程,相同的输出在不断地迭代过程中会慢慢地得到改进。

输入,xt=I⊕g(yt-1)  其中I是图像,而yt-1是前一个输出。
f(yt)输出校正εt ,并将其添加到当前输出yt,以生成yt+1,并且这里面还包含了校正更新的过程。
g(yt+1) 中的每个关键点yt+1转换为热图通道,以便它们可以堆叠到图像I中,进而也是为了形成下一个迭代过程的输入。这个过程重复T次,直到我们得到一个精炼的yt+1,并通过添加εt,进而来更接近标准真值。


在数学上,
ϵt=f(xt)
yt+1=yt+ϵt
xt+1=I⊕g(yt+1)

f和g是可学习的,f 是一个CNN。

需要注意的一点是,当ConvNet f() 将I⊕g(t)作为输入时,它能够学习关节输入- 输出空间的特征,这是非常酷的。

参数 Θg和Θf 是通过优化以下等式来学习:


其中,ϵt和(y,yt)是被预测出来的,并且分别是修正的目标。函数\(h\) 是距离的度量,例如二次损失。T是模型采取的修正步骤的数目。

案例


如你所见,姿势在校正步骤中得到了改进。

结果


评论
这是一篇非常好的论文,它介绍了一个新颖的算法,并且运作良好。

用于人体姿态估计的堆叠式沙漏网络
这是一篇具有里程碑意义的论文,它引入了一种新颖而直观的架构,并击败了以往的所有方法。它被称为堆叠式沙漏网络,因为网络包括池化和上采样层的步骤,这些层看起来像沙漏,并且这些被堆叠在一起。沙漏的设计是由于需要捕获各种规模的信息。

虽然本地证据对于识别面部手等特征至关重要,但最终的姿势估计需要全局背景。用于识别人的方向,肢体的排列以及相邻关节的关系等内容的线索,较好是在图像的不同尺度中寻找(较小的分辨率捕获更高阶的特征和全局背景)。

网络通过中间监督执行自下而上,自上而下的处理
自下而上处理(从高分辨率到低分辨率)
自上而下处理(从低分辨率到高分辨率)

网络使用skip connection来保留每个分辨率的空间信息,并将其传递给上采样,进一步沿着沙漏进行传递。

每个盒子都是一个残留模块,如下图所示;

中间监督
中间监督被应用于每个沙漏阶段的预测,即监督堆栈中每个沙漏的预测,而不仅仅是最终的沙漏预测。

结果


它为什么这么好用呢?
沙漏可以捕获各种规模的信息。通过这种方式,全局和本地信息都可以被完全捕获并被网络用于学习预测。

人体姿势估计和跟踪的简单基线
以前的方法运行的效果很好但是都很复杂。这项工作伴随着提出来这样一个问题。为啥不用一个简单的模型?该模型在COCO上实现了73.7%的mAP创纪录水平。

网络结构非常简单,最后由一个ResNet 和几个反卷积层组成。(可能是估算热图的最简单方法)

虽然沙漏网络使用上采样来增加特征图分辨率并将卷积参数放入其他块中,但此方法以非常简单的方式将它们组合为反卷积层。令人惊讶的是,这样一个简单的架构比具有skip connections的架构表现更好,并且保留了每个分辨率的信息。


均方误差(MSE)用作预测的热图和目标热图之间的损失。关节k 的目标热图Hk 是通过在第k个关节的标准真值位置上以std dev = 1像素为中心应用2D高斯来生成的。

结果


用于人体姿势估计的深度高分辨率表示学习[HRNet] (CVPR’19) 
HRNet(高分辨率网络)模型在COCO数据集中的关键点检测,多人姿态估计和姿态估计等任务上的表现均优于现有方法,它是的。

HRNet遵循一个非常简单的想法。以前的大多数论文都来自高→低→高分辨率表示。HRNet 在整个过程中都保持高分辨率的表示,并且这非常有效。


该架构从作为第一阶段的高分辨率子网开始,逐步逐个添加高到低分辨率的子网,以形成更多的阶段并连接并行的多分辨率子网。

通过在整个过程中反复进行跨越多分辨率并行子网络的信息交换来实现多尺度融合。

另一些专业人士认为,与堆叠式沙漏不同,这种架构不使用中间热图监督学习。

使用MSE损失对热图进行回归复原,类似于简单的基线。

结果
以下是其他一些我认为也非常有趣的论文:
Flowing ConvNets for Human Pose Estimation in Videos (ICCV’15)[arXiv]
Learning Feature Pyramids for Human Pose Estimation (ICCV’17)  [arXiv]  [code]
Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields (CVPR’17) [arXiv] [code]: Very popular real-time multi-person pose estimator (Better known as OpenPose)
Multi-Context Attention for Human Pose Estimation (CVPR’17) [arXiv][code]
Cascaded Pyramid Network for Multi-Person Pose Estimation (CVPR’18) [arXiv] [code]

附录
通用评估指标
需要评估指标来衡量人体姿势估计模型的性能。

正确部件的百分比 - PCP:如果两个预测的关节位置与真实肢体关节位置之间的距离小于肢体长度的一半(通常表示为PCP@0.5),则认为肢体被检测到(正确的部分)。
它测量肢体的检出率。结果是,由于较短的肢体具有较小的阈值,因此它会对较短的肢体进行惩罚。
PCP(正确部件的百分比)越高,模型越好。

正确关键点的百分比 - PCK:如果预测关节与真实关节之间的距离在特定阈值内,则检测到的关节被认为是正确的。阈值可以是:
PCKh@0.5表示阈值=头骨链接的50%时
PCK@0.2 ==预测和真实关节之间的距离<0.2 *躯干直径
有时将150 mm作为阈值。
缓解较短的肢体问题,因为较短的肢体具有较小的躯干和头骨连接。
PCK通常被用于2D和3D(PCK3D)。再次强调声明,越高越好。

检测到的关节的百分比 - PDJ:如果预测关节和真实关节之间的距离在躯干直径的某一部分内,则检测到的关节被认为是正确的。PDJ@0.2 =预测和真实关节之间的距离<0.2 *躯干直径。

基于对象关键点相似度(OKS)的mAP:
常用于COCO关键点的挑战。

其中di是检测到的关键点与相应的标准真值之间的欧几里德距离,vi是标准真值的可见性标志,s是对象尺度,ki控制衰减的每个关键点常量。

简而言之,OKS扮演的角色与IoU在对象检测中扮演的角色相同。它是根据人的尺度标准化的预测点和标准真值点之间的距离计算出来的。更多详细信息,以及标准平均精度和召回分数在论文中皆有报告:A P50 (AP at OKS = 0.50) A P75, A P(the mean of A Pscores at 10 positions, OKS = 0.50, 0.55, . . . , 0.90, 0.95; A PM for medium objects,A PMfor large objects, andA R(Average recall) at OKS = 0.50, 0.55, . . . , 0.90, 0.955。

相关报道:
https://blog.nanonets.com/human-pose-estimation-2d-guide/?utm_source=reddit&utm_medium=social&utm_campaign=pose&utm_content=GROUP_NAME

声明:本文版权归原作者所有,文章收集于网络,为传播信息而发,如有侵权,请联系小编及时处理,谢谢!

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括:各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

即将开课

 

GMT+8, 2019-5-22 10:49 , Processed in 0.138435 second(s), 25 queries .