位姿估计

论文:https://arxiv.org/pdf/1603.06937.pdf

代码:http://www-personal.umich.edu/~alnewell/pose

Stacked Hourglass Networks for Human Pose Estimation

Abstract

本文为人体姿态估计任务提出了一种新的卷积网络结构。所有尺度上的特征都被处理和整合,以最佳地捕捉与身体相关的各种空间关系。我们展示了重复的bottom-up、top-down处理如何与中间监督结合使用是提高网络性能的关键。我们将该体系结构称为“stacked hourglass”网络,它基于连续的池化和上采样步骤,这些步骤用于生成最终的一组预测。在FLIC和MPII基准上取得了最先进的结果,超过了所有最近的方法。

1 Introduction

在图像和视频中理解人的关键一步是准确的姿态估计。对于单一的RGB图像,我们希望确定人体重要关键点的精确像素位置。了解一个人的姿势和肢体的关节对于动作识别等高级任务很有用,在人机交互和动画等领域也被作为基本工具。

作为一个公认的视觉问题,姿态估计多年来以各种艰巨的挑战困扰着研究人员。一个好的姿态估计系统必须对遮挡和严重变形以及对罕见的和新奇的姿态有良好的鲁棒性,并且不受服装和灯光等因素引起的外观变化的影响。早期的工作利用鲁棒图像特征和复杂的结构预测[1-9]解决了这些困难:前者用于产生局部翻译,而后者用于推断全局一致的姿态。

然而,卷积神经网络(ConvNets)[10-14]极大地改变了这一传统管道。卷积神经网络是许多计算机视觉任务性能爆发式提升的主要驱动因素。最近的位姿估计系统[15-20]普遍采用ConvNets作为其主要组成部分,在很大程度上取代了手工特征和图形模型;这种策略在标准基准上产生了巨大的改进[1,21,22]。

我们继续沿着这条轨道前进,并引入了一种新颖的“stacked hourglass”网络设计,用于预测人体姿势。该网络在图像的各个尺度上捕获并整合信息。我们将这种设计称为houorglass,它基于用来获得网络最终输出的pooling和后续的上采样步骤的可视化。与许多产生像素级输出的卷积方法一样,houorglass网络池化到非常低的分辨率,然后在多个分辨率[15,23]上采样并组合特征。另一方面,houorglass与以前的设计主要不同的是其更对称的拓扑结构。

我们通过端到端连续地将多个houorglass模块放置在一起来扩展单个houorglass。这允许跨尺度的重复bottom-up、top-down的推断。与中间监督的使用相结合,重复的双向推断对网络的最终性能至关重要。最终的网络架构在两个标准姿态估计基准(FLIC[1]和MPII人体姿态[21])上取得了显著的改进。在MPII测试中,所有关节的平均精确度提高了2%以上,而对于更困难的关节,如膝盖和脚踝,则提高了4-5%。

2 Related Work

随着Toshev等[24]引入“DeepPose”,人体姿态估计的研究开始从经典方法[1-9]转向深度网络。Toshev等人使用他们的网络直接回归关节的x、y坐标。Tompson等人的工作是[15]生成热图,方法是将一幅图像并行地运行在多个分辨率库中,同时捕捉不同尺度的特征。我们的网络设计很大程度上基于他们的工作,探索如何捕获跨尺度的信息,并调整他们的方法来结合不同分辨率的特性。

Tompson等人[15]提出的方法的一个关键特征是卷积网络和图形模型的联合使用。他们的图形模型学习了典型的关节之间的空间关系。最近,其他一些人用类似的方法解决了这个问题[17,20,25],他们在如何实现一元分数生成和成对比较相邻关节方面做了一些变化。Chen等人[25]聚类检测到典型的方位,当他们的分类器进行预测时,可以获得额外的信息来指示相邻关节的可能位置。我们实现优越的性能,没有使用图形模型或任何显式的人体建模。

有几个用于位姿估计的连续预测方法的例子。Carreira等人[19]使用他们所说的 Iterative Error Feedback。输入中包含了一组预测,每一个通过网络的预测都会进一步改进这些预测。他们的方法需要多阶段的训练,每次迭代的权重都是共享的。Wei等人的[18]建立在多级位姿机[26]的工作上,但现在使用ConvNets进行特征提取。鉴于我们使用了中间监督,我们的工作在精神上与这些方法相似,但是我们的构建块(hourglass模块)是不同的。Hu & Ramanan[27]的架构与我们的更类似,也可用于多个阶段的预测,但他们的模型将权重限制在自底向上和自顶向下的计算部分以及跨迭代。

Tompson等人在[15]工作的基础上使用级联来完善预测。这有助于提高效率和减少他们的方法的内存使用,同时在高精度范围提高定位性能[16]。一个考虑是,对于许多失败的情况下,在一个局部窗口的位置细化不会提供很大的改善,因为错误的情况往往包括遮挡或错误归属的四肢。对于这两种情况,任何在局部尺度的进一步评估都不会改善预测。

姿态估计问题的变化包括使用额外的特征,如深度或运动线索。[28-30]还有一个更具有挑战性的任务,即多人同时进行标注[17,31]。此外,还有类似Oliveira等人[32]的工作,基于全卷积网络[23]进行人体部分分割。我们的工作主要集中在RGB图像中单个人姿态的关键点定位。

我们在堆叠(stacking)前的hourglass模块与全卷积网络[23]等在多尺度处理空间信息进行密集预测的设计紧密相连[15,33 - 41]。Xie等[33]对典型的架构进行了总结。我们的hourglass模块与这些设计的主要不同之处在于,它在bottom-up处理(从高分辨率到低分辨率)和top-down处理(从低分辨率到高分辨率)之间更对称地分配容量。例如,全卷积网络[23]和整体嵌套架构[33]都侧重于bottom-up的处理,而不重视top-down的处理,后者只包含跨多个尺度的预测合并(加权)。全卷积网络的训练也是分多个阶段进行的。

堆叠前的hourglass模块也与conv-deconv和encoder-decoder架构有关[42-45]。Noh等[42]使用conv-deconv架构进行语义分割,Rematas等[44]则使用它预测物体的反射率图。zhao等人[43]通过增加一个重构损失,开发了一个监督学习、非监督学习和半监督学习的统一框架。Yang等人的[46]采用了无skip connections的编解码器架构来生成图像。Rasmus等人[47]提出了一种用于无监督/半监督特征学习的去噪自动编码器,它具有特殊的“modulated”skip connections。这些网络的对称拓扑是相似的,但操作的性质是完全不同的,因为我们没有使用unpooling或deconv层。相反,我们依赖于简单的最近邻上行采样和skip connections进行top-down处理。我们工作的另一个主要区别是,我们通过叠加多个hourglass来执行重复的bottom-up、top-down的推断。

3 Network Architecture

3.1 Hourglass Design

hourglass的设计受到了从各个尺度获取信息的需要的启发。虽然局部证据对于识别面部和手部等特征至关重要,但最终的姿势评估需要对整个身体的一致理解。人的方向,他们四肢的排列,和邻近的关节的关系是图像不同尺寸的许多线索中最容易识别的线索。hourglass是一种简单、最小化的设计,它能够捕获所有这些特性,并将它们结合在一起输出像素级预测。

网络必须具有某种机制来有效地处理和整合跨尺度的特征。有些方法通过使用不同的管道来解决这个问题,这些管道在多种分辨率下独立处理图像,然后在网络中结合特征[15,18]。相反,我们选择使用带有skip层的单个管道来在每个分辨率下保存空间信息。网络的最低分辨率为4x4像素,允许使用更小的空间过滤器来比较图像的整个空间的特征。

hourglass的设置如下:Convolutional和max pooling层的结构用于将特征下降到低分辨率。在每个max pooling步骤中,网络分支(分为skip分支和接着下采样的分支)并在原来的pre-pooled分辨率上应用更多的卷积(这个即下采样分支)。在达到最低分辨率后,网络开始top-down的上采样序列和跨尺度的特征组合。为了将两个相邻分辨率的信息结合在一起,我们遵循Tompson等人[15]所描述的过程,对低分辨率进行最近邻的上采样,然后后面跟着一个像素级的两特征集求和(即同分辨率的skip分支求和)。hourglass的拓扑结构是对称的,所以每一向下层都有对应的一个向上层。

在达到网络的输出分辨率后,使用连续的两轮1x1卷积来产生最终的网络预测。网络的输出是一组热图,对于给定的热图,网络预测了每个像素点上一个关点存在的概率。完整的模块(不包括最后的1x1层)如图3所示。

 

(很像U-Net网络)

3.2 Layer Implementation

在保持整体hourglass形状的同时,在具体的层实现中仍然有一些灵活性。不同的选择可能会对网络的最终性能和训练产生适度的影响。我们探索了在我们的网络层设计的几个选项。最近的研究显示了1x1卷积的简化步骤的价值,以及使用连续的较小过滤器来捕获更大的空间上下文的好处。例如,可以将一个5x5滤波器替换为两个单独的3x3滤波器。我们测试了我们的整体网络设计,基于这些见解在不同的层模块中进行交换。我们经历了一个网络性能的提升,从带有大过滤器和没有缩减步骤的标准卷积层切换到新的方法,如He等人[14]和基于“Inception”的设计[12]所提出的残差学习模块。在这些设计类型的最初性能改进之后,各种额外的探索和修改对进一步提高性能或训练时间没有什么帮助。

我们的最终设计充分利用了残差模块。大于3x3的过滤器不被使用,bottlenecking限制了每一层的参数总数,从而减少了总的内存使用。我们的网络中使用的模块如图4所示。为了将其置于完整网络设计的上下文中,图3中的每个框表示单个残差模块。

在256x256的全输入分辨率下运行需要大量的GPU内存,因此hourglass的最高分辨率(因此最终的输出分辨率)是64x64。这并不影响网络产生精确联合预测的能力。整个网络从一个stride=2的7x7卷积层开始,接着是一个残差模块和一轮max pooling,将分辨率从256降低到64。在图3所示的hourglass之前有两个接着的残差模块。整个hourglass的所有残差模块输出256个特征。

 (右边结构的代码实现是:

class PoseNet(nn.Module):
    def __init__(self, nstack, inp_dim=256, oup_dim=16, bn=False, increase=0, **kwargs):
        super(PoseNet, self).__init__()
        
        self.nstack = nstack
        self.pre = nn.Sequential(
            Conv(3, 64, 7, 2, bn=True, relu=True),
            Residual(64, 128),
            Pool(2, 2),
            Residual(128, 128),
            Residual(128, inp_dim)
        )
        
        self.hgs = nn.ModuleList( [
        nn.Sequential(
            Hourglass(4, inp_dim, bn, increase),
        ) for i in range(nstack)] )
        
        self.features = nn.ModuleList( [
        nn.Sequential(
            Residual(inp_dim, inp_dim),
            Conv(inp_dim, inp_dim, 1, bn=True, relu=True)
        ) for i in range(nstack)] )
        
        self.outs = nn.ModuleList( [Conv(inp_dim, oup_dim, 1, relu=False, bn=False) for i in range(nstack)] )
        self.merge_features = nn.ModuleList( [Merge(inp_dim, inp_dim) for i in range(nstack-1)] )
        self.merge_preds = nn.ModuleList( [Merge(oup_dim, inp_dim) for i in range(nstack-1)] )
        self.nstack = nstack
        self.heatmapLoss = HeatmapLoss()

    def forward(self, imgs):
        ## our posenet
        x = imgs.permute(0, 3, 1, 2) #x of size 1,3,inpdim,inpdim, [1,3,256,256]
        x = self.pre(x) ##size is [batch_size, inp_dim=256, 64, 64]
        combined_hm_preds = []
        for i in range(self.nstack):
            hg = self.hgs[i](x)
            feature = self.features[i](hg) #size is [batch_size, inp_dim=256, 64, 64]
            preds = self.outs[i](feature) ##size is [batch_size, oup_dim=16, 64, 64]
            combined_hm_preds.append(preds)
            if i < self.nstack - 1:
                # size is [batch_size, inp_dim=256, 64, 64]
                x = x + self.merge_preds[i](preds) + self.merge_features[i](feature)

        #把nstack个[batch_size, 16, 64, 64]合并成[batch_size, nstack, 16, 64, 64]
        return torch.stack(combined_hm_preds, 1) 
View Code

1.其实就是首先将输入x输入到hourglass模块self.hgs中,输入x是[batch_size, inp_dim=256, 64, 64],输出hg是[batch_size, inp_dim=256, 64, 64]

2.再使用一个self.features模块,输入hg是[batch_size, inp_dim=256, 64, 64],输出feature是[batch_size, inp_dim=256, 64, 64]

3.到这里有两个分支,步骤2的输出一个分支是往下走,到一个self.outs模块,输入feature是[batch_size, inp_dim=256, 64, 64],输出preds是[batch_size, oup_dim=16, 64, 64];另一个分支是往右走,到一个self.merge_features模块,输入feature是[batch_size, inp_dim=256, 64, 64],输出output1是[batch_size, oup_dim=256, 64, 64]

4.然后下面的分支再接着一个self.merge_preds模块,输入preds是[batch_size, oup_dim=16, 64, 64],输出output2是[batch_size, oup_dim=256, 64, 64]

5.最后将x + output1 + output2得到下一个block的输入

6.这里步骤3的下分支输出preds会与其他block的输出preds合并,假设有nstack个同样的block,把nstack个[batch_size, 16, 64, 64]合并成[batch_size, nstack, 16, 64, 64],用来计算loss)

3.3 Stacked Hourglass with Intermediate Supervision

通过端到端叠加多个hourglass,将一个hourglass的输出作为输入输入到另一个hourglass,我们进一步构建了网络架构。这为网络提供了一种重复bottom-up、top-down推理的机制,允许对整个图像的初步估计和特征进行重新评估。这种方法的关键是对中间热图的预测,我们可以据此应用损失。预测是通过每个hourglass产生的,网络有机会处理局部和全局上下文的特征。后续的hourglass模块允许再次处理这些高级特性,以进一步评估和重新评估更高层次的空间关系。这与其他姿态估计方法类似,这些方法在多个迭代阶段和中间监督下表现出了较强的性能[18,19,30]。

考虑只使用单个hourglass模块而应用中间监督的局限性。在管道中,什么是生成初始预测集的合适位置?大多数高阶特征只在低分辨率出现,除非在最后发生上采样。如果监控是在网络进行上采样之后提供的,那么在更大的全局上下文下,这些特征就无法相互重新评估。如果我们想让网络最好地改进预测,这些预测不能只在局部尺度上进行评估。与其他联合预测的关系,以及总体背景和对整个图像的理解是至关重要的。在池化之前更早地应用监督是可能的,但在这一点上,给定像素上的特征是处理相对局部的接受域的结果,因此忽略了关键的全局线索。

使用堆叠的hourglass进行重复的bottom-up、top-down推理可以减轻这些担忧。局部和全局的线索被整合到每个hourglass模块中,且要求网络产生早期预测需要它对图像有一个高层次的理解,同时只需要通过整个网络的一部分就能得到这样的效果。bottom-up、top-down处理的后续阶段允许更深入地重新考虑这些特性。

这种在尺度之间来回切换的方法尤其重要,因为保留特征的空间位置对于完成最后的定位步骤至关重要。关节的精确位置是网络做出其他决策时必不可少的线索。对于像姿态估计这样的结构化问题,输出是许多不同特征的相互作用,这些特征应该聚集在一起,形成对场景的一致理解。相互矛盾的证据和解剖上的不可能性是很大的证据,表明在这条路线上的某个地方犯了错误,通过来回切换,网络可以在反复考虑特征的整体一致性的同时保持精确的局部信息。

我们通过一个额外的1x1卷积将中间预测映射到更多的通道,从而将它们重新整合到特征空间中。这些特性被添加回 来自hourglass的中间特性,以及来自前一个hourglass阶段的特性输出(如图4所示)。在最终的网络设计中,使用了8个hourglass。重要的是要注意的是,权重不是在hourglass模块之间共享的,并且一个损失应用于所有hourglasses的预测,使用的是相同的ground truth。损失和ground truth的细节描述如下。

3.4 Training Details

我们在两个基准数据集FLIC[1]和MPII Human Pose[21]上评估我们的网络。FLIC由取自电影的5003张图像(3987张训练,1016张测试)组成。这些图像被标注在上半身,大多数的人物都面对着相机。MPII Human Pose由带有多人标注的大约25k张图像组成,提供40k个标注样本(28k个训练,11k个测试)。没有提供测试标注,所以在我们所有的实验中,我们都是在训练图像的子集上进行训练,同时在大约3000个样本的heldout验证集上进行评估。MPII由各种各样的人类活动的图像组成,带有一个挑战性的广泛铰接的全身姿势数组。

在给定的输入图像中,常常可以看到多个人物,但是如果没有图形模型或其他后处理步骤,图像必须为网络传递所有必要的信息,以确定哪一个人值得注释。我们通过训练网络来专门标注图像中心的人来处理这个问题。这是在FLIC中根据torsobox注释沿x轴居中完成的——不进行垂直调整或缩放归一化。对于MPII来说,提供给所有图像缩放和中心注释是标准的。对于每个样本,这些值用于裁剪目标人物周围的图像。然后将所有输入图像的大小调整为256x256像素。我们进行数据增强,包括旋转(+/- 30度)和缩放(.75-1.25)。我们避免了图像的平移增强,因为目标人的位置是决定网络应该注释谁的关键线索。

该网络使用Torch7[48]进行训练,为了优化,我们使用rmsprop[49],学习率为2.5e-4。在12 GB的NVIDIA TitanX GPU上进行训练大约需要3天时间。在验证精度停滞后,我们将学习率降低了1 / 5。Batch normalization[13]也用于改进训练。网络的一次前向传播需要75毫秒。为了生成最终的测试预测,我们通过网络运行原始输入和图像的flip版本,并将热图结果平均起来(在验证上平均提高了1%)。网络的最终预测是给定关节的热图的最大激活位置。

使用与Tompson等人相同的技术[15]用于监督。利用Mean-Squared Error(MSE)损失将预测的热图与以关节位置为中心的二维高斯分布(标准差为1 px)的ground-truth热图进行比较。为了提高在高精度阈值下的性能,在转换回图像的原始坐标空间之前,预测将在其下一个最高邻居的方向上偏移四分之一像素。在MPII人体姿态中,一些关节没有相应的ground-truth值标注。在这些情况下,关节要么被截断,要么被严重遮挡,所以为监督提供了值都为零的ground-truth热图。

4 Results

4.1 Evaluation

评估是使用 the standard Percentage of Correct Keypoints (PCK)度量来完成的,该度量报告了在ground-truth的标准化距离内的探测的百分比。对于FLIC,距离由躯干大小归一化,对于MPII,由头部大小的一部分(称为PCKh)归一化。

FLIC:结果见图6和表1。我们在FLIC上的结果非常有竞争力,肘部达到99% PCK@0.2,腕部达到97%。值得注意的是,这些结果是以观察者为中心的,这与其他人如何评价他们在FLIC上的输出是一致的。

MPII:我们在MPII Human Pose数据集的所有关节上取得了最先进的结果。所有数字见表2,PCK曲线见图7。在腕部、肘部、膝盖和脚踝等困难的关节上,我们比最新的研究结果平均提高了3.5% (PCKh@0.5),平均错误率从16.3%下降到了12.8%。最终肘部精度为91.2%,腕部精度为87.1%。网络在MPII上所做的示例预测如图5所示。

4.2 Ablation Experiments

我们探讨了两个主要的设计选择:将hourglass模块堆叠在一起的效果,以及中间监管的影响。这些并不是相互独立的,因为我们在如何应用中间监督方面受到了限制,其取决于整体的建筑设计。单独应用,每一个都对性能有积极的影响,一起使用的话,我们能看到进一步提高训练速度和最终的姿态估计性能。我们来看看几种不同网络设计的训练速度。其结果如图8所示,显示了随着训练的进行,验证集的平均准确率。精度度量考虑所有的关节,不包括那些与头部和躯干有关的关节,以便更容易区分不同的实验。

首先,为了探究堆叠hourglass设计的效果,我们必须证明性能的变化是架构形状的函数,而不是归功于更大、更深入的网络导致的容量增加。为了进行比较,我们从一个由8个hourglass模块堆叠在一起的基线网络开始工作。每个hourglass在每个分辨率上都有一个残差模块,如图3所示。我们可以为各种网络安排打乱这些层。hourglass数量的减少会导致每个hourglass的容量增加。例如,一个对应的网络可以堆叠四个hourglass,并且在每个分辨率下有两个连续的残差模块(或者两个hourglass和四个残差模块)。如图9所示。所有的网络共享相同的参数和层数,尽管在使用更多的中间监督时略有不同。

为了查看这些选择的效果,我们首先比较在hourglass的每个阶段有4个残差模块的two-stacked网络(红色,即一个hourglass由4个残差模块组成),以及有8个残差模块的单个hourglass(蓝色,可见红色效果更好)。在图8中,它们分别称为HG-Stacked和HG。在使用stacked设计时,尽管拥有大致相同的层数和参数,但在训练方面可以看到适度的改进。接下来,我们考虑中间监督的影响。对于two-stacked网络,我们按照本文所描述的程序去应用监督。将同样的想法应用到单个hourglass中是很重要的,因为高阶全局特征只在较低分辨率下出现,而且跨尺度的特征直到后期才会合并。我们探索在网络的不同点上应用监督,例如在池化之前或之后以及在不同的分辨率下。性能最好的方法HG-Int(绿色)如图8所示,在最后的输出分辨率之前,以及在接下来的两个最高分辨率上采样后施加中间监督(所以在三个地方加了监督,即圆球标记)。这种监督确实改善了性能,但还不足以超过包含stacking(HG-Stacked_int,孔雀蓝色)的改善。

在图9中,我们比较了具有大致相同数量参数的2-、4-和8-stack模型的验证准确性,并包括它们中间预测的准确性。最终表现均有轻微改善,由87.4%上升至87.8%再至88.1%,。这种影响在中间阶段更为显著。例如,在每一个网络的中间部分,相应的中间预测精度分别为:84.6%,86.5%和87.1%。请注意,8-stack网络一半的准确率,仅稍微低于2-stack网络的最终准确率。 

观察网络早期所犯的错误以及后来所纠正的错误是很有趣的。图9显示了一些示例。常见的错误表现为把别人的关节搞错了,或者把左右搞错了。对于运行的图形,从最终的热图可以明显看出,对于网络来说,左右之间的决定仍然有点模糊。鉴于图像的外观,这种混淆是合理的。一个值得注意的情况是中间的例子,网络最初激活了在图像中可见的手腕(即中间那行的第二列的灰图)。经过进一步的处理,热图在原来的位置上完全没有激活,而是为被遮挡的手腕选择了一个合理的位置。

5 Further Analysis

5.1 Multiple People

当一个图像中有多个人物时,一致性的问题就变得尤为重要。网络必须决定对谁进行标注,但是在交流谁应该得到标注时,选择是有限的。对于本工作的目的,提供的唯一信号是目标人员的中心和尺度,相信输入将足够清晰去解析。不幸的是,当人们非常接近或甚至重叠时,这偶尔会导致不明确的情况,如图10所示。由于我们正在训练一个系统来为单个人生成姿态预测,因此在不明确的情况下的理想输出将只对一个人物的关节做出承诺。即使预测的质量较低,这也将显示出对手头任务的更深理解。估计手腕的位置而不考虑手腕可能属于谁,这不是位姿估计系统所期望的行为。

图10中的结果来自一个MPII测试图像。该网络必须对男孩和女孩进行预测,为了做到这一点,需要提供他们各自的中心和比例标注。使用这些值裁剪网络的输入图像,得到该图形的第一个和第三个图像。在一幅720x1280像素的图像中,这两位舞者的中间标注仅相差26像素。定性地说,两个输入图像之间最明显的区别是尺度的变化。这种差异足以使网络完全改变其估计,并预测正确数字的标注。

针对多人的更全面的标注管理超出了本工作的范围。该系统的许多故障案例都是由多个人关节混淆导致的,但在许多人物严重重叠的示例中,该网络有希望适当地挑出一个任务进行标注。

5.2 Occlusion

遮挡(occlusion)的性能很难评估,因为它经常分为两种不同的类别。第一种情况是关节是不可见的,但它的位置在给定的图像上下文中是明显的。MPII通常为这些关节提供grouth-truth位置,并且附加注释表明它们缺乏可视性。另一方面,另一种情况是,完全不知道某个关节的位置。例如,只有上半身可以看到的图像。在MPII中,这些关节没有与它们相关联的ground truth注释。

我们的系统没有使用额外的可见性注释,但是我们仍然可以看看可见性对性能的影响。在我们拉出的验证集中,大约75%的带有注释的肘部和手腕都是可见的。在图11中,我们比较了整个验证集的平均性能、四分之三可见关节的性能和其余四分之一不可见关节的性能。当只考虑可见关节时,手腕的精度从85.5%上升到93.6%(验证性能略低于测试集的87.1%)。另一方面,在排除的遮挡关节上的性能为61.1%。对于肘关节,可见关节的精确度从基线的90.5%上升到95.1%,而遮挡关节的精确度则下降到74.0%。遮挡显然是一个重大的挑战,但网络仍然在大多数情况下作出了强有力的估计。在很多例子中,网络预测和ground-truth标注在有效位置上可能不一致,图像的模糊性意味着无法确定哪一个是真正正确的。

我们还考虑了更极端的情况,关节可能严重遮挡或截断,因此没有任何注释。在评估位姿估计系统时使用的PCK度量并不能反映网络对这些情况的识别程度。如果没有为一个关节提供ground truth注释,则不可能评估系统所做预测的质量,因此不计入最终报告的PCK值。正因为如此,即使对完全遮挡或截断的关节的预测毫无意义,对所有关节的预测也没有害处。在一个真实的系统中使用,一定程度的微位移是必要的,并且理解在一个特定的关节上不能做出好的预测是非常重要的。我们观察到,我们的网络为是否一个ground truth注释可用于一个关节提供了一致和准确的预测。

我们使用踝关节和膝关节来进行分析,因为它们最常被遮挡。下肢经常从图像中裁剪出来,如果我们总是想象我们网络进行所有关节预测,在这些情况下做出的荒谬的下身预测会让示例姿势看起来不可接受。为了简单地过滤这些情况,我们研究了在给定相应的热图激活情况下,人们如何确定关节标注的存在。我们考虑对热图的最大值或平均值进行阈值设定。其精确-召回曲线如图11所示。我们发现,仅根据热图的平均激活度,就可以正确评估AUC为92.1%的膝关节注释和AUC为96.0%的踝关节注释的存在。这是对2958个样本的验证集进行的,其中16.1%的可能的膝盖和28.4%的可能的脚踝没有ground truth注释。这是一个很有希望的结果,证明了热图可以作为一个有用的信号来指示图像中截断和严重遮挡的情况。

6 Conclusion

我们演示了stacked hourglass网络产生人体姿态估计的有效性。该网络通过一个简单的机制来对最初的预测进行重新评估和评估,从而处理了一系列多样化和具有挑战性的姿态。对于训练网络来说,中间监督至关重要,在堆叠的hourglass模块的背景下工作效果最好。虽然网络仍然不能很好地处理一些困难的情况,但是总的来说,我们的系统对各种挑战显示出了强大的性能,包括严重遮挡和多人近距离接触的情况。

原文地址:https://www.cnblogs.com/wanghui-garcia/p/13949901.html