
# 基于单张深度图像的部件级实时人体姿态识别

作者：Jamie Shotton、Toby Sharp、Alex Kipman、Andrew Fitzgibbon、Mark Finocchio、Andrew Blake、Mat Cook、Richard Moore

## 摘要

我们提出了一种从单张深度图像快速准确预测人体姿态——即身体关节的三维位置——的新方法，该方法不依赖先前帧的信息。我们的方法深深植根于当前主流的目标识别策略。通过设计基于身体部位的中间表示，原本困难的姿态估计问题被转化为更简单的逐像素分类问题，而针对该问题已有成熟高效的机器学习技术。利用计算机图形学合成规模极大的训练图像对数据集，我们可以训练出一个分类器，该分类器能从测试图像中估计身体部位标签，且对姿态、体型、衣物和其他无关变异保持不变性。最后，我们通过重投影分类结果并寻找局部模态，生成多个身体关节的带置信度评分的三维姿态提议。

该系统在Xbox 360上运行耗时不到5毫秒。我们的评估表明，该系统在合成测试集和真实测试集上都能达到很高的精度，本文还研究了多个训练参数对结果的影响。在与相关工作的对比中，我们的方法取得了最先进的精度，并且证明了它比精确的整骨架最近邻匹配具有更优的泛化能力。

### 1. 引言

鲁棒的交互式人体追踪在游戏、人机交互、安全、远程呈现和医疗保健等领域都有应用。基于视频的人体姿态估计已经积累了大量研究文献（Moeslund等人$^{12}$和Poppe $^{17}$对此做了综述）。早期工作使用标准摄像机，但近年来实时深度相机的问世极大简化了这项任务。

深度成像技术在过去几年取得了巨大进步，随着适用于Xbox 360的Kinect发布，该技术终于降到了消费级价格点。深度图像中的像素记录的是场景的深度，而非亮度或颜色测量值。Kinect相机每秒可输出30帧$640 \times 480$图像，深度分辨率达到几厘米。与传统亮度传感器相比，深度相机有多项优势：可在低光照环境下工作、能给出经过标定的尺度估计、且对颜色和纹理变化不敏感。深度相机还大幅简化了背景分割任务，这是本文工作的前提假设。对我们的方法而言尤为重要的一点是：用计算机图形学生成逼真的人体深度图像比生成彩色图像简单得多，因此能够低成本构建大规模训练数据集。

然而，即使是现有的最优基于深度的人体姿态估计系统$^{16,22}$仍然存在局限性。具体来说，在以本文所述算法为核心组件的Xbox 360版Kinect发布之前，没有任何系统能在消费级硬件上以交互速率运行，同时能够适配各类不同体型、尺寸的人体完成常规肢体运动的场景。

#### 1.1. 问题概述

我们希望解决的总体问题表述如下。输入是深度图像流，即时刻t的图像$I_t$由一个包含N个相机到场景距离测量值的二维数组构成。具体来说，图像I编码了一个函数$d_i(x)$，该函数将二维坐标x映射为沿该像素观测方向第一个不透明表面的距离。系统的输出是三维骨架流，每个骨架是一个包含约30个数值的向量，代表对应输入图像中每个人的身体构型（例如关节角度）。将第t帧的输出骨架记为$\boldsymbol{\theta}_t$，我们的目标是定义一个函数F，使得$\boldsymbol{\theta}_t = F(I_t, I_{t-1}, \ldots)$。这是一种标准的问题建模，其中时刻t的输出可以同时依赖于当前图像和更早图像的信息。我们的解决方案如图1所示，将函数F流水线划分为两个

图1：系统概述。对于单张输入深度图像，我们可以推断出每个像素对应的身体部位分布。（颜色表示每个像素处最可能的部位标签，与关节候选相对应。）估计该信号的局部模态后，即可得到身体关节三维位置的高质量候选结果，即使存在多个用户也能输出高质量结果。最后，关节候选被输入到骨架拟合步骤，输出每个用户的三维骨架。

![Image](images/042bbc031a021caf98bf8fad166fa1e041e589bc932ca2fbb048174160afaaf5.jpg)

本文的原始版本发表于2011年计算机视觉与模式识别会议论文集，页码129–1304。

---

中间表示：首先计算得到身体部位图像$C_{t}$，该图像在每个像素处存储一个包含31个概率的向量，表示该像素对应的世界点属于31个标准身体部位中每个部位的概率。第二种中间表示是关节假设列表$J_{t}$，其中包含（身体部位、三维位置、置信度）三元假设，每个身体部位大约有五个假设。最后，在关节假设中搜索满足运动学一致性的骨架。基于这些中间表示，F的伪代码可以写成如下步骤

 $$ C_{t}=\operatorname{ComputeBodyParts}(I_{t}) $$

 $$ J_{t}=\operatorname{C o m p u t e J o i n t H y p o t h e s e s}(C_{t},I_{t}) $$

 $$ \boldsymbol{\theta}_{t}=\mathrm{F i t S k e l e t o n}(J_{t},\boldsymbol{\theta}_{t-1}) $$

我们的解决方案有一个重要特性：只有最后一个阶段会使用先前帧的信息，因此大部分图像解析工作都是逐帧独立完成的。这极大提升了系统从跟踪误差中恢复的能力，而跟踪误差对几乎所有现有方案来说都是致命缺陷。本文中，我们重点研究该流水线的前两个阶段：从单张深度图像计算身体部位标签和关节假设。由于我们独立处理每个输入帧，因此在下文中将省略下标t。

#### 1.2. 相关工作

正如上文所述，针对该问题的已有工作大多聚焦于从常规强度图像进行姿态估计（即二维问题），但其中许多思路当然可以迁移到三维场景，并且正如我们下文将展示的，我们的方法也可以应用于二维问题。因此，我们在本节同时讨论基于二维和基于三维的相关工作。许多二维系统利用已知背景，仅以人体轮廓作为估计的基础，这样可以获得对衣物的不变性，但代价是解的模糊性有所增加。

特别值得关注的是能够从单张图像完成「单次」估计的系统。这类系统的价值不仅在于能够避免基于跟踪的系统存在的误差累积问题，还因为单次估计系统的测试和评估远比基于跟踪的解决方案更简单。Agarwal和Triggs¹将姿态估计视为非线性回归问题，直接从轮廓图像估计姿态。给定包含$\mathcal{T}$对样本的训练集$(I, \boldsymbol{\theta})$，对函数F进行参数化（将其写为$F_{\phi}$），即可得到能优化训练集准确率的参数$\Phi$，通常该优化目标是针对某准确率度量$E(\Phi) = \sum_{(I, \boldsymbol{\theta}) \in \mathcal{D}} d(\boldsymbol{\theta}, F_{\phi}(I))$的$d(\cdot, \cdot)$形式函数。这种方法构成了基于机器学习的姿态估计方法的核心，本文工作也遵循这一思路。大量基于该方法的研究改进了回归模型，处理了遮挡和歧义问题，并重新引入了时间信息。$^{13, 25}$ 然而，这类模型通过一个单一整体函数对全身姿态进行分类，若要构建Kinect系统所需的全通用跟踪器，需要数量极其庞大的训练数据。回归方法的第二个难点在于，现有方法的计算开销相当高。

降低训练数据需求的一种思路是将人体拆分为多个部位，再结合每个部位的估计结果得到最终的整体姿态估计。例如，Ramanan和Forsyth$^{18}$将候选身体段检测为平行线对，并对跨帧的外观进行聚类。Sigal等人$^{24}$对头部、上臂和小腿使用特征外观模板检测器，再结合非参数置信传播推断全身姿态。Wang和Popović$^{26}$对佩戴彩色手套的手部进行跟踪。我们的系统可以看作是从深度图像自动推断虚拟彩色套装各部位颜色的方法。但目前针对人体部位识别的研究相对较少。Zhu和Fujimura$^{28}$通过线性规划松弛构建了针对粗略上半身部位（头部、躯干、手臂）的启发式检测器，但要求用户以「T」型站姿站立来初始化模型。与我们方法最相似的是Plagemann等人$^{16}$的工作：他们构建三维网格提取测地线极值兴趣点，再将这些点分为三类：头部、手部和足部。他们的方法可以给出这些部位的位置和方向估计，但无法区分左右，且兴趣点的使用限制了可检测部位的选择范围。

#### 1.3. 研究方法

我们的方法建立在目标识别领域近期进展的基础上$^{7,27}$，这些进展使得算法能够在普通二维图像中识别出「羊」「建筑」「道路」这类目标类别。具体而言，随机决策森林的使用使得对包含20个类别的词汇表的识别可以实时完成。$^{20}$

将该思路适配到姿态估计问题相对直接：我们从通用人体三维表面模型出发，将该表面划分为31个不同的身体部位（第3.1节）。我们训练一个目标识别算法来识别这些部位，因此在运行时，单张输入深度图像可以被分割为稠密概率身体部位标注。

将推理得到的部件重投影到世界空间后，我们定位每个部件分布的空间模态，由此为每个骨骼关节的三维位置生成（可能存在多个）置信度加权候选结果。这些关节位置的组合就构成了输出姿态 $\pmb{\theta}$。每个候选都带有一个推理得到的置信值，可供任意下游跟踪算法（式(3)）用于稳健的初始化和恢复。

我们将人体部件分割视为一个逐像素分类任务。（与目标识别或图像分割中的分类任务不同，马尔可夫随机场机制在我们的应用中被证明并非必要。）单独评估每个像素避免了对不同人体关节的组合搜索，尽管在单个部件内部当然仍然存在

---

上下文外观的显著差异（参见图2）。对于训练数据，我们生成了逼真的合成人体深度图像，涵盖多种身形体型，且包含从大型运动捕捉数据库采样得到的高度多样化的姿态。我们使用的分类器是深度随机决策森林，它非常适合我们的多分类场景，且支持极高速的实现。这种选择带来的主要挑战是需要大量训练数据，而由于我们使用合成图像，这一点很容易满足。构建分布式决策树训练基础设施这一进一步挑战对我们方法的成功至关重要，但超出了本文的讨论范围。

我们算法的优化实现在Xbox 360 GPU上每帧运行时间不到5毫秒，比现有方法快至少一个数量级。它逐帧处理差异极大的不同身形体型的人体，这种习得的判别方法自然能够处理自遮挡以及被图像边界裁剪的姿态。我们在包含多种受试者挑战性姿态的真实和合成深度图像上进行了评估。即使不利用时间或运动学约束，得到的三维关节候选结果也兼具准确性和稳定性。我们研究了多个训练参数的影响，并展示了由于训练集规模大，深度树仍如何能够避免过拟合。此外，在轮廓图像上的结果表明我们的方法具有更广泛的适用性。

#### 1.4. 研究贡献

我们的主要贡献是将姿态估计作为目标识别问题处理，采用了一种新颖的中间人体部件表示，该表示设计用于以低计算成本、高准确率对感兴趣关节进行空间定位。我们的实验还得到了多个核心结论：(i) 合成深度训练数据是真实数据的优秀替代；(ii) 用多样化合成数据扩大学习问题规模对获得高准确率十分重要；(iii) 我们基于部件的方法甚至比神谕全图最近邻算法的泛化能力更好。

#### 1.5. 传感器特性

在详细描述我们的算法之前，我们先介绍我们为人体姿态估计生成训练数据的过程。为此，我们首先介绍我们所使用的深度传感器的特性，因为这些特性必须在合成数据生成过程中被复现。

如上所述，相机输出深度值的 $640 \times 480$ 数组，具有以下特性。

- 部分材料无法有效反射红外波长的光，因此“丢点”像素十分常见。这种情况对头发和光滑表面的影响尤其明显。

- 在明亮的阳光下，环境红外线会淹没主动信号，导致无法进行任何深度推断。

- 深度范围受发射器功率限制，再结合安全考量，典型工作范围约为4米。

- 深度噪声水平范围从近距离的几毫米到远距离像素的几厘米不等。

<div style="text-align: center;">Figure 2. Example renderings focusing on one hand, showing the range of appearances a single point on the body may exhibit.</div>

![Image](images/4ecc1bc7e65ba3156759fb1ace8f0115e3704c926b4c2a284128090e32735aeb.jpg)

- 该传感器基于发射器与相机之间立体匹配的原理工作，二者必须存在一定基线偏移。因此，深度相机采集的图像中，物体的一侧会出现遮挡阴影。

- 物体的遮挡轮廓无法精确勾勒，会在前景和背景之间出现闪烁。

### 2. 训练数据

姿态估计研究通常聚焦于解决训练数据不足的问题，$^{13}$ 原因主要有两点。首先，利用计算机图形技术生成真实强度图像 $^{14, 15, 19}$ 会受到服装、头发和皮肤带来的巨大颜色与纹理变化的阻碍，因此数据通常会被简化为二维轮廓。$^{1}$ 尽管深度相机大幅降低了这一难度，身体和服装形状仍存在相当大的差异。第二个局限是，合成人体姿态图像必然依赖动作捕捉（简称mocap）数据，而获取这类数据成本高、耗时长。尽管目前已有模拟人体运动的技术（例如Sidenblad等人的方法 $^{23}$），但这些技术仍无法生成人类受试者所能做出的全部自主运动。

#### 2.1. 动作捕捉数据

人体能够做出的姿态范围极广，很难模拟。因此我们构建了一个大规模的人体动作捕捉数据库，目标是覆盖娱乐场景中人们会做出的各类姿态。该数据库包含数百个序列的约50万帧数据，涵盖驾驶、跳舞、踢腿、跑步和操作菜单等各类动作。

我们希望我们的半局部身体部位分类器能够对未见姿态具备一定泛化能力。具体来说，我们不需要记录所有不同肢体的组合；实际应用中，覆盖大范围的姿态就已经足够。此外，我们不需要在动作采集中记录绕

---

竖轴的旋转、左右镜像、场景位置、身体形状和大小以及相机姿态的变化，所有这些都可以在后处理中添加。

由于分类器不使用任何时间信息，我们只关注静态姿态而非运动。通常，动作捕捉相邻帧之间的姿态变化非常小，几乎可以忽略。因此我们使用“最远邻”聚类从初始动作捕捉数据中剔除了大量相似的冗余姿态 $^{10}$，其中姿态 $\boldsymbol{\theta}_1$ 与 $\boldsymbol{\theta}_2$ 之间的距离定义为 $\max_j \left\|\boldsymbol{\theta}_1^j - \boldsymbol{\theta}_2^j\right\|_2$，即所有身体关节j之间的最大欧氏距离。我们最终使用包含10万种姿态的子集，保证任意两个姿态之间的距离不小于5厘米。

我们发现有必要迭代执行动作捕捉、从模型采样、训练分类器和测试关节预测精度的流程，以完善动作捕捉数据库，补全之前遗漏的姿态空间区域。我们早期实验使用了CMU动作捕捉数据库 $^{5}$，尽管该数据库覆盖的姿态空间远少于我们构建的数据库，但也得到了可接受的结果。

#### 2.2. 生成合成数据

我们构建了一个可随机化的渲染管线，能够从中采样得到完全标注的训练图像。构建该管线我们有两大目标：真实性和多样性。为了让训练得到的模型良好运行，采样结果必须非常接近真实相机拍摄的图像，并且充分覆盖我们希望在测试阶段识别的各类外观变化。深度/尺度和平移变化已经在我们的特征中得到显式处理（见下文），其他不变性无法被高效编码，因此我们从数据中学习对相机姿态、身体姿态以及身体尺寸形状的不变性。

该合成管线首先从动作捕捉数据库中随机采样一个姿态，随后使用标准计算机图形学技术，从带纹理映射的3D网格渲染出深度图和身体部位图像（见下文）。我们将姿态重定向到15个覆盖不同体型和尺寸范围的基础网格上（见图3）。此外，身高和体重的微小随机变化进一步扩展了体型的覆盖范围。其他随机化参数包括相机姿态、相机噪声、服装和发型。图4对比了该管线生成的多样化输出与手工标注的真实相机图像。

具体来说，各类变化如下：

基础角色。我们使用15个不同基础角色的3D模型，涵盖男女，年龄从儿童到成人，身高从矮到高，体型从瘦到胖。部分示例如图3（顶行）所示。每次渲染会从这些角色中均匀随机选取一个。

姿态。我们从动作捕捉数据中剔除冗余姿态后，将剩余姿态重定向到每个基础角色，再均匀随机选取。为了防止左偏或右偏，姿态还会以概率$\frac{1}{2}$进行左右翻转。

旋转和平移。角色绕竖直轴旋转，并在场景中平移，所有参数均为均匀随机选取。

发型和服装。我们添加了多个发型和服装的网格模型，每次随机选取；部分示例如图3（底行）所示。

<div style="text-align: center;">Figure 3. Renders of several base character models. Top row: bare models. Bottom row: with random addition of hair and clothing.</div>

![Image](images/fec762e2dd3649c87015727fb10f78ebd6971406f1c0073a55542e0b0749ab80.jpg)

体重和身高变化。基础角色本身已经覆盖了范围很广的体重和身高。为了进一步增加多样性，我们额外添加了身高（竖直尺度 $\pm10\%$）和体重（整体尺度 $\pm10\%$）的变化。

相机位置和朝向。相机的高度、俯仰角和横滚角均在符合家庭客厅娱乐场景典型特征的范围内均匀随机选取。

相机噪声。真实深度相机存在噪声。我们对干净的计算机图形渲染结果添加丢像素、深度阴影、斑点噪声和视差量化畸变，使其尽可能贴近真实相机的输出。但实际实验中我们发现，添加这类噪声对准确率几乎没有影响，这可能是因为相机本身质量较好，或是姿态等其他因素带来的外观变化影响更大。

我们使用标准图形渲染管线生成场景，输出为深度图与对应身体部位标签图像组成的图像对。示例如图4所示。

### 3. 身体部位推理与关节候选提案

在本节中，我们将介绍我们提出的中间身体部位表示方法，详细说明区分性深度图像特征，回顾决策森林及其在身体部位识别中的应用，最后讨论如何利用模式搜索算法生成关节位置候选提议。

#### 3.1. 身体部位标注

这项工作的一项核心创新是我们提出的中间身体部位表示形式。我们定义了多个密集覆盖人体的局部身体部位标签，如图4的颜色编码所示。我们通过为用于合成数据渲染的网格中每个三角形分配标签来定义这些部位。由于每个模型都满足顶点对顶点对应关系，因此每张渲染图像中的每个三角形都对应着身体的同一部位。身体部位的精确定义多少有些随意：经过最初对更少数量划分的实验后，我们将部位总数选定为31，并且

---

图4. 合成数据与真实数据。深度图与真实身体部位的配对示例。请注意数据在姿态、体型、衣物和裁切方面的丰富多样性。

![Image](images/d1015e48711bb3e4884668e64c758b80a9f95a963c8ca2bf08e0a14b6d64b874.jpg)

合成数据（训练集与测试集）

![Image](images/e91128064df4bf9c1c4fd89dbfa74ea21050ab7b0ea9f3433c31785138ab8b4c.jpg)

该数量可以方便地将标签存储在5位二进制位中。部分部位的定义是基于我们关注的特定骨骼关节制定的，例如「所有与以左手为中心、半径10厘米的球体相交的三角形」。其余部位则填充了这些核心部位之间的间隙。尽管这些选择看起来很随意，但后续优化部位分布的尝试并没有证明结果比本文所述的这组划分有明显提升。

本文实验中使用的部位命名如下：LU/RU/LW/RW 头部、颈部、L/R 肩部、LU/RU/LW/RW 手臂、L/R 肘部、L/R 腕部、L/R 手部、LU/RU/LW/RW 躯干、LU/RU/LW/RW 腿部、L/R 膝盖、L/R 脚踝、L/R 脚部（L：左，R：右，U：上，W：下）。为左右身体设置独立部位可以让分类器区分身体的左右两侧。尽管这种区分有时可能存在歧义，但我们输出的概率标签可以有效利用哪怕是模糊的标签信息。

当然，这些部位的精确定义可以根据特定应用进行调整。例如，在上半身追踪场景中，可以将所有下半身部位合并。部位应当足够小以准确定位人体关节，但也不能过多，以免浪费分类器的容量。

#### 3.2. 深度图像特征

我们采用了简单的深度对比特征，灵感来自Lepetit等人的工作$^{11}$。对于二维坐标为$x$的给定像素，该特征会计算

 $$ f_{\phi}\left(I,\mathbf{x}\right)=d_{I}\left(\mathbf{x}+\frac{\mathbf{u}}{d_{I}\left(\mathbf{x}\right)}\right)-d_{I}\left(\mathbf{x}+\frac{\mathbf{v}}{d_{I}\left(\mathbf{x}\right)}\right), $$

其中$d_i(\mathbf{x})$是图像$I$中像素$\mathbf{x}$处的深度，参数$\phi = (\mathbf{u}, \mathbf{v})$描述了偏移量$\mathbf{u}$和$\mathbf{v}$。通过$\frac{1}{d_i(\mathbf{x})}$对偏移量进行归一化，可确保特征具有深度不变性：对于身体上的给定点，无论该像素距离相机远近，都能得到固定的世界空间偏移量。因此这些特征具有三维平移不变性（透视效应除外）。如果偏移后的像素位于背景或图像边界之外，深度探测值$d_i(\mathbf{x})$会被赋予一个较大的正常数。

图5展示了位于不同像素位置$x$的两个特征。特征$f_{\phi_1}$向上探测：对于靠近身体顶部的像素$x$，式(4)会给出较大的正响应，而对于身体下方的像素$x$，响应值接近零。

而特征$f_{\phi_2}$则可以帮助找到手臂这类纤细的垂直结构。

<div style="text-align: center;">Figure 5. Depth image features. The yellow crosses indicate the pixel x being classified. The red circles indicate the offset pixels as defined in Eq. (4). (a) The two example features give a large depth difference response. (b) The same two features at new image locations give a much smaller response.</div>

<div style="text-align: center;">(a)</div>

![Image](images/0886081a6b2980473ded0caa7be48bfaa00a19bb81c166f233db19e4a19a46a9.jpg)

<div style="text-align: center;">(b)</div>

![Image](images/990a404023f5a4c79b0ab5e6df9c5a1c472401d5a329479ad39b45f8256f5438.jpg)

单独来看，这些特征每个只能提供微弱的信号来判断该像素属于身体的哪一个部位，但在决策森林中组合后，它们足以准确区分所有经过训练的身体部位。这些特征的设计很大程度上是出于计算效率的考量：无需进行预处理；每个特征最多仅需读取三个图像像素，完成最多五次算术运算；而且这些特征可以很直接地在GPU上实现。如果有更充足的计算资源，还可以使用潜在能力更强的特征，例如基于区域深度积分、曲率或局部描述符（比如形状上下文）的特征。 $^{3}$

#### 3.3 随机决策森林

随机决策树和随机森林 $^{2,4}$已被证明是适用于多种任务的快速高效多类别分类器，并且可以在GPU上高效实现。 $^{20}$ 如图6所示，森林是由T棵决策树组成的集成模型，每棵树都包含分裂节点和叶节点。每个分裂节点由一个特征 $\phi$和一个阈值 $\tau$构成。要对图像I中的像素x进行分类，首先将当前节点设为根节点，然后计算式(4)的结果。接着根据比较结果 $f_{\phi}(I, \mathbf{x}) < \tau$将当前节点更新为左子节点或右子节点，重复该过程直到到达叶节点。在树t最终到达的叶节点处，存储了学习得到的身体部位标签c的概率分布 $P_t(c|I, \mathbf{x})$。将森林中所有树得到的分布取平均，即可得到最终分类结果

 $$ P\bigl(c\bigl|I,\mathbf{x}\bigr)=\frac{1}{T}\sum_{t=1}^{T}P_{t}\bigl(c\bigl|I,\mathbf{x}\bigr). $$

---

图6 随机决策森林。森林是多棵树组成的集成模型。每棵树由分裂节点（蓝色）和叶节点（绿色）构成。红色箭头表示不同树对特定输入可能选择的不同路径。

![Image](images/2b38106cdb68b92c1d57ec4d58f8c466419650edcfac01212b883c4bc1d1acf2.jpg)

训练过程。每棵树都在不同的随机合成图像集上训练。从每张图像中随机选取2000个样本像素，确保身体部位的分布大致均匀。每棵树采用Lepetit等人提出的算法训练 $^{11}$。为了缩短训练时间，我们采用了分布式实现。在1000核集群上，用100万张图像训练3棵深度为20的树大约需要一天时间。

一个简单的方案是利用已知的校准深度，累加得到每个部位概率质量的全局三维中心。然而，离群像素会严重降低这种全局估计的质量。我们研究了两种算法：一种是基于简单自下而上聚类的快速算法，另一种是基于均值漂移的精度更高的算法，下文将对其进行介绍。

#### 3.4 关节位置提案

上文介绍的身体部位识别得到的是每个像素的信息，现在需要对所有像素的该信息进行聚合，为三维骨骼关节的位置生成可靠的提案。这些提案是我们算法的最终输出，可以供跟踪算法用于自初始化以及从故障中恢复。

我们采用了基于带权重高斯核的均值漂移 $^{6}$的局部极值搜索方法。我们为每个身体部位定义密度估计器如下：

 $$ f_{c}(\hat{\mathbf{x}})\propto\sum_{i=1}^{N}w_{i c}\exp\left(-\left\|\frac{\hat{\mathbf{x}}-\hat{\mathbf{x}}_{i}}{b_{c}}\right\|^{2}\right), $$

其中$\hat{x}$是三维空间中的一个坐标，N为图像像素总数，$w_{ic}$是像素权重，$\hat{x}_i$是已知深度$\mathbf{x}_i$的条件下，图像像素$d_i(\mathbf{x}_i)$重投影到世界空间得到的坐标，$b_c$是学习得到的每个部件对应的带宽。像素权重$w_{ic}$同时考虑了该像素处推断得到的身体部件概率，以及该像素在世界空间中的表面积：

 $$ \boldsymbol{w}_{i c}=P(c\left|I,\mathbf{x}_{i}\right)\cdot d_{I}(\mathbf{x}_{i})^{2}. $$

这确保了密度估计具有深度不变性，并且能小幅但显著提升关节预测的准确率。根据身体部件的定义，后验概率$P(c|I, \mathbf{x})$可以预先在一小组部件上完成累加。例如，在我们的实验中，覆盖头部的四个身体部件会被合并，以此定位头部关节。

我们使用均值漂移来高效寻找该密度分布中的众数。所有概率高于学习得到的概率阈值$\lambda_{c}$的像素，都会被用作部件c的起始搜索点。最终的置信度估计为到达每个众数的像素权重之和。事实证明，这种方法比直接取众数处的密度估计更可靠。

检测得到的众数位于人体表面。因此每个众数会通过学习得到的z偏移量$\zeta_c$向场景内部移动，得到最终的关节位置候选。这种简单高效的方法在实际应用中效果良好。带宽$b_c$、概率阈值$\lambda_c$以及表面到内部的z偏移量$\zeta_c$，通过网格搜索在包含5000张图像的留出验证集上逐个部件优化得到。（举例来说，优化得到的平均带宽为0.065米，概率阈值为0.14，z偏移量为0.039米）。

### 4. 实验

在本节中，我们介绍为评估本文方法开展的实验。我们在多个具有挑战性的数据集上给出了定性和定量结果，并与最近邻方法以及现有最优方法进行了比较。$^8$我们在补充材料中提供了更多结果。除非另有说明，下文参数设置如下：3棵树，深度为20，每棵树对应30万张训练图像，每张图像取2000个训练样本像素，共2000个候选特征$\phi$，每个特征对应50个候选阈值$\tau$。

测试数据。我们使用具有挑战性的合成和真实深度图像评估我们的方法。对于合成测试集，我们生成了5000张深度图像，同时附带真实身体部件标签和关节位置。生成这些图像所用的原始动作捕捉姿态均未包含在训练数据中。我们的真实测试集包含15名不同受试者的共8808帧真实深度图像，手工标注了密集身体部件和7个上半身关节位置。我们还在Ganapathi等人提供的真实深度数据上进行了评估$^{8}$。结果表明，合成数据上观察到的效果在真实数据中得到了复现，同时也说明，由于姿态和体型存在极端变化，我们的合成测试集是目前难度最高的测试集。在大多数实验中，由于我们的核心娱乐场景中用户面向摄像头（0°），因此我们在训练数据和合成测试数据中都将用户的旋转范围限制为$\pm120^{\circ}$，不过我们也对完整的$360^{\circ}$场景进行了评估。

误差指标。我们同时对分类精度和关节预测精度进行量化。对于分类任务，我们报告平均每类准确率：即真实部件标签与概率最大的推断部件标签之间混淆矩阵对角线元素的平均值。该指标对每个身体部件赋予相等权重，无论它们尺寸大小如何，不过部件边界处的误标注会拉低绝对值。

对于关节候选区域，我们绘制召回率-精确率曲线，该曲线是置信度阈值的函数。我们将精度量化为每个关节的平均精度，或所有关节的平均精度均值（mAP）。距离真实位置D米范围内的第一个关节候选框被记为真阳性，而同一D米范围内的其他候选框则被记为假阳性。这种规则会惩罚正确位置附近的多个虚假检测，因为这类检测可能会拖慢下游

---

跟踪算法。任何在D米范围外的关节候选框也会被记为假阳性。请注意，该指标会统计所有候选框（不只是置信度最高的那个）。图像中不可见的关节不会作为假阴性被惩罚。尽管最终应用确实需要这些关节，但我们认为预测它们更多是式(3)中顺序跟踪器的任务。我们在下文中设置$D = 0.1m$，该值大致接近人工标注的真实测试集真实标签的准确率。分类精度和关节预测精度之间存在强相关性（即图8(a)和图10(a)中的蓝色曲线），这表明下文观察到的其中一个指标的趋势也适用于另一个指标。

#### 4.1 定性结果

图7展示了我们算法的推理示例。可以看到，在身体姿态、相机姿态、场景深度、裁剪情况以及身体尺寸和形状（例如幼儿与壮硕成年人）存在巨大变化的情况下，分类和关节预测都保持了很高的精度。底行展示了身体部位分类的一些失败案例。第一个案例是算法未能区分深度图像中的细微变化，例如交叉手臂。通常（就像第二个和第三个失败案例一样），概率最高的身体部位预测错误，但分布 $P(c|I, \mathbf{x})$中仍有足够的正确概率质量，可以生成准确的候选框。第四个案例展示了算法对未见过的姿态泛化能力不佳，但置信度会过滤掉较差的候选框，以召回率为代价维持了高精度。

需要说明的是，我们所有结果都没有使用时间约束或运动学约束（训练数据中隐含的约束除外）。尽管如此，补充材料中视频序列的逐帧结果显示，几乎每个关节都被准确预测，抖动非常少。

#### 4.2 分类精度

我们研究了多个训练参数对分类精度的影响。合成测试集和真实测试集上的趋势高度相关，并且真实测试集始终比合成测试集“更简单”，这可能是因为真实测试集中的姿态变化更少。

训练图像数量。在图8(a)中，我们展示了测试精度如何随随机生成的训练图像数量近似呈对数增长，但在10万张图像左右增长开始放缓。如下文所示，这种饱和很可能是因为3棵树、深度为20的决策森林的模型容量有限。

轮廓图像。我们还在图8(a)中展示了我们的方法在合成轮廓图像上的效果，其中式(4)中的特征要么给定了尺度（即平均深度），要么没有给定（即使用固定恒定深度）。对于采用真阳性阈值为10像素的二维度量的对应关节预测，

<div style="text-align: center;">Figure 7. Example inferences. Synthetic (top row), real (middle), and failure modes (bottom). Left column: ground truth for a neutral pose as a reference. In each example, we see the depth image, the inferred most likely body part labels, and the joint proposals shown as front, right, and top views (overlaid on a depth point cloud). Only the most confident proposal for each joint above a fixed, shared threshold is shown.</div>

![Image](images/2ac57518e786956b55f79c6181ff8540c46a7cf14bf5d4671fc51a3bac8f7cb1.jpg)

<div style="text-align: center;">Figure 8. Training parameters versus classification accuracy. (a) Number of training images. (b) Depth of trees. (c) Maximum probe offset.</div>

![Image](images/ad40ad8c841227dad7222d4ee39e6dbe203ce7a05a0a649ead82030c41fbf897.jpg)

<div style="text-align: center;">(a) Number of training images (log scale)</div>

![Image](images/a196a8fbc7bb2afcb04aef48a232edf0d2126a08e1eb1c32b80c8e5f24de2da1.jpg)

![Image](images/5051a36442331c2dff5288f7c0e91584b5ebd0b6ca1ef5761b4ac3f9eb009cc6.jpg)

![Image](images/a6ded27aeeb86a597852afc1783270534b83afa4e5bfa7a3cf88ac9c81f6dac3.jpg)

---

带尺度时我们得到的mAP为0.539，不带尺度时为0.465。尽管由于深度模糊性，这显然是一项难度更高的任务，但这些结果表明我们的方法可应用于其他成像模态。

树深度。图8(b)展示了分别使用1.5万张和90万张图像时，树的深度对测试准确率的影响。在所有训练参数中，树深度的影响最为显著，因为它直接影响分类器的模型容量。仅使用1.5万张图像训练时，我们观察到在树深度约为17时开始出现过拟合，而扩大后的90万张训练集避免了这一问题。树深度为20时准确率仍有明显的提升趋势，这说明训练更深的树可以获得更好的结果，仅会增加小幅的额外运行时计算开销，但会带来较大的额外内存开销。一个具有实用价值的发现是：在树深度达到约10之前，训练集大小对结果影响很小，这提示我们可以采用一种高效的训练策略。

最大探测偏移量。训练过程中允许的深度探测偏移量范围对准确率有很大影响。我们在图8(c)中针对5000张训练图像展示了这一关系，其中“最大探测偏移量”指式(4)中u和v的x、y坐标允许的最大绝对值。图右侧的同心框展示了针对图中左肩像素标定的五个测试过的最大偏移量；最大的偏移量几乎覆盖了整个身体。（请注意，该最大偏移量会随像素的世界深度缩放。）随着最大探测偏移量增大，分类器能够利用更多空间上下文做出决策，不过如果没有足够的数据，最终会存在在此上下文上过拟合的风险。准确率随最大探测偏移量增大而提升，在约129像素米处趋于平稳。

#### 4.3. 关节预测准确率

我们在图9中展示了在合成测试集上的平均精度结果：均值漂移聚类算法获得的mAP为0.731，快速聚类算法获得的mAP为0.677。结合身体部位分类后，快速聚类在Xbox GPU上的运行时间不到5毫秒，而均值漂移在现代8核桌面CPU上需要20毫秒。

为了明确可达到的最大mAP，我们将均值漂移算法与一种理想化设置进行了对比。

<div style="text-align: center;">Figure 9. Joint prediction accuracy. We compare the actual performance of our system (red) with the best achievable result (blue), given the ground truth body part labels.</div>

![Image](images/3f480ed3e2e1a57153e2a678ea1d2fb53f3bf958708c64701762f1444538deac.jpg)

该理想化设置会给定真实的身体部位标签。在真实测试集上，我们拥有头部、肩部、肘部和手部的真实标签。在给定真实身体部位标签的情况下，这些部位的mAP达到0.984，而使用推断得到的身体部位时mAP为0.914。不出所料，在这个难度更低的测试集上，这些数值要高得多。尽管使用我们的中间身体部位表示确实会带来小幅的性能损失，但对于许多关节而言，推断得到的结果不仅精度很高，还非常接近这个性能上界。

与最近邻方法的对比。为了说明分部位处理姿态识别的必要性，并让读者了解我们测试集的难度，我们在图10(a)中与两种整身精确最近邻匹配的变体方法进行了比较。第一种是理想化变体，它将测试集的真值骨架与一组训练样本骨架在三维世界空间中进行最优刚体平移对齐匹配。当然，在实际应用中我们无法提前获取测试骨架。作为一个可实现系统的示例，第二种变体使用倒角匹配$^{9}$来将测试图像与训练样本进行比较。该计算利用深度边缘和12个方向分箱完成。为了降低倒角匹配任务的难度，我们丢弃了所有被裁剪的训练图像和测试图像。我们利用三维质心对图像进行对齐，发现进一步的局部刚体平移只会降低准确率。

我们的分部位识别算法，即使在训练图像量达到约15万张之前，泛化能力都优于理想化骨架匹配方法。如前所述，使用更深的树可能会进一步提升我们的结果，但即便在目前，我们已经可以鲁棒地推断三维人体关节位置，并且自然地应对裁剪和平移问题。最近邻倒角匹配的速度也远慢于我们的算法（仅2fps）。尽管层次匹配$^{9}$速度更快，但仍需要大量的样本集才能达到相当的准确率。

与Ganapathi等人方法的对比$^{8}$。Ganapathi等人提供了他们的测试数据和结果供我们直接比较。他们的算法使用了Plagemann等人提出的身体部位候选方案$^{16}$，并进一步结合运动学和时域信息对骨架进行跟踪。他们的数据来自飞行时间深度相机，该相机的噪声特性与我们使用的结构光传感器差异较大。在不对我们的训练数据和算法做任何修改的情况下，图10(b)显示我们的关节预测平均精度有显著提升。我们的算法运行速度也至少快$10\times$。

全旋转与多人场景。为了评估全$360^{\circ}$旋转场景，我们在包含全旋转的90万张图像上训练了一个随机森林，并在5000张合成全旋转图像（包含留存姿态）上进行测试。尽管左右歧义性大幅增加，我们的系统仍然取得了0.655的mAP，这说明我们的分类器可以准确学习到区分正面和背面姿态的细微视觉线索。分类后残留的左右不确定性可以自然地通过多假设传播到跟踪算法中。我们的方法可以估计图像中多个人的关节位置，因为即使没有针对该场景进行显式训练，逐像素分类器仍然具有良好的泛化能力。

---

图10 对比结果。(a) 与最近邻匹配方法的对比。(b) 与Ganapathi等人方法的对比$^{8}$。即使没有利用Ganapathi等人所采用的运动学和时域约束$^{8}$，我们的算法仍然能够更准确地定位人体关节。

![Image](images/7eecfbb2b16b646e4c3a102dba8ed1216c21c9a2a7a2148616da5527620e68bf.jpg)

![Image](images/79f1611785280559612e449e4e8867698256acbcb5dd0cd6b8a7ccb7311c2d82.jpg)

![Image](images/186e63239dfd17431674ff46bf109e05728bb7edf298422608c6e7ce4eb0acf0.jpg)

### 5. 讨论

我们已经展示了如何从单张深度图像中以超实时速度估计得到准确的人体关节三维位置候选结果。本文引入身体部位识别作为人体姿态估计的中间表示，借助高度多样化的合成训练集，我们能够使用简单的深度不变特征训练极深的决策森林，且不会发生过拟合，同时学习得到对姿态和体型的不变性。通过检测密度函数中的模态即可得到最终带置信度权重的三维关节候选结果集合。我们的结果表明，真实数据与合成数据之间、中间分类结果与最终关节候选的准确率之间都存在高度相关性。本文强调了将完整骨架拆分为多个部位的重要性，并且在具有竞争力的测试集上取得了当前最优的准确率。

未来工作中，我们计划进一步研究源动作捕捉数据的可变性、合成流程底层生成模型的特性，以及特定身体部位的定义。类似的高效方法能否直接对关节位置做回归也仍是一个开放问题。或许可以对粗略人物朝向这类隐变量进行全局估计，以此作为身体部位推理的条件，消除局部姿态估计中的歧义。

## 致谢

我们感谢Xbox的众多优秀工程师，尤其是Robert Craig、Matt Bronder、Craig Peeper、Momin Al-Ghosien和Ryan Geiss，他们在本研究的基础上构建了Kinect追踪系统。我们也感谢John Winn、Duncan Robertson、Antonio Criminisi、Shahram Izadi、Ollie Williams和Mihai Budiu提供的帮助与富有价值的讨论，感谢Varun Ganapathi和Christian Plagemann提供他们的测试数据。

## 参考文献

[^1]: Agarwal, A., Triggs, B. 3D human pose from silhouettes by relevance vector regression. In Proceedings of CVPR (2004).

[^2]: Amit, Y., Geman, D. Shape quantization and recognition with randomized trees. Neural Computation, 9, 7 (1997), 1545–1588.

[^3]: Belongie, S., Malik, J., Puzicha, J. Shape matching and object recognition using shape contexts. IEEE Trans. PAMI 24, 4 (2002), 509–522.

[^4]: Breiman, L. Random forests. Mach. Learn. 45, 1 (2001), 5–32.


5. CMU动作捕捉数据库。 <http://mocap.cs.cmu.edu>.

[^6]: Comaniciu, D., Meer, P. Mean shift: A robust approach toward feature space analysis. IEEE Trans. PAMI 24, 5 (2002).

[^7]: Fergus, R., Perona, P., Zisserman, A.

目标类别识别由

无监督尺度不变学习实现。

发表于CVPR会议论文集（2003年）。

[^8]: Ganapathi, V., Plagemann, C., Koller, D., Thrun, S. Real time motion

基于单飞行时间相机的捕捉。发表于CVPR会议论文集（2010年）。

[^9]: Gavrila, D. Pedestrian detection from a moving vehicle. In Proceedings of ECCV (June 2000).

[^10]: Gonzalez, T. Clustering to minimize the maximum intercluster distance. Theor. Comp. Sci. 38 (1985).

[^11]: Lepetit, V., Lagger, P., Fua, P.

随机树方法用于实时

关键点识别。发表于

CVPR会议论文集（2005年）。

[^12]: Moeslund, T., Hilton, A., Krüger, V. A survey of advances in vision-based human motion capture and analysis. CVIU 104(2-3) (2006), 90-126.

[^13]: Navaratnam, R., Fitzgibbon, A.W., Cipolla, R. The joint manifold model for semi-supervised multi-valued regression. In Proceedings of ICCV (2007).

[^14]: Ning, H., Xu, W., Gong, Y., Huang, T.S.

视觉词的判别学习用于

三维人体姿态

估计。发表于CVPR会议论文集

(2008).

[^15]: Okada, R., Soatto, S. Relevant feature selection for human pose estimation and localization in cluttered images. In Proceedings of ECCV (2008).

[^16]: Plagemann, C., Ganapathi, V., Koller, D., Thrun, S. Real-time identification and localization of body parts from depth images. In Proceedings of ICRA (2010).

[^17]: Poppe, R. Vision-based human motion analysis: An overview. CVIU 108(1-2) (2007), 4-18.

[^18]: Ramanan, D., Forsyth, D. Finding and tracking people from the bottom up. In Proceedings of CVPR (2003).

[^19]: Shakhnarovich, G., Viola, P., Darrell, T.

基于参数敏感哈希的快速姿态估计。发表于ICCV会议论文集（2003年）。

[^20]: Sharp, T. Implementing decision trees and forests on a GPU. In Proceedings of ECCV (2008).

[^21]: Shotton, J., Winn, J., Rother, C., Criminisi, A. TextonBoost: Joint appearance, shape and context modeling for multi-class object recognition and segmentation. In Proceedings of ECCV (2006).

[^22]: Siddiqui, M., Medioni, G. Human pose estimation from a single view point, real-time range sensor. In IEEE International Workshop on Computer Vision for Computer Games (2010).

[^23]: Sidenbladh, H., Black, M., Sigal, L. Implicit probabilistic models of human motion for synthesis and tracking. In Proceedings of ECCV (2002).

[^24]: Sigal, L., Bhatia, S., Roth, S., Black, M., Isard, M. Tracking loose-limbed people. In Proceedings of CVPR (2004).

[^25]: Urtasun, R., Darrell, T. Local probabilistic regression for activity-independent human pose inference. In Proceedings of CVPR (2008).

[^26]: Wang, R., Popović, J. Real-time hand-tracking with a color glove. In Proceedings of ACM SIGGRAPH (2009).

[^27]: Winn, J., Shotton, J. The layout consistent random field for recognizing and segmenting partially occluded objects. In Proceedings of CVPR (2006).

[^28]: Zhu, Y., Fujimura, K. Constrained optimization for human pose estimation from depth sequences. In Proceedings of ACCV (2007).

Jamie Shotton, Toby Sharp, Andrew Fitzgibbon, Andrew Blake, and Mat Cook ([jamiesho, tsharp, awf, ablake, and a-macook]@microsoft.com)，英国剑桥微软研究院。

Alex Kipman and Mark Finocchio ([akipman and markfi]@microsoft.com)，Xbox研发部门。

Richard Moore，ST-Ericsson