
# 从单张RGB图像中估计3D手部姿态的学习方法

Christian Zimmermann, Thomas Brox

弗莱堡大学

{zimmermann, brox}@cs.uni-freiburg.de

## 摘要

低成本的消费级深度相机与深度学习技术，已经能够实现基于单张深度图像的合理3D手部姿态估计。在本文中，我们提出了一种从普通RGB图像中估计3D手部姿态的方法。由于缺少深度信息，这项任务存在更多的歧义性。为此，我们设计了一个深度网络，用于学习网络隐式的3D关节运动先验。结合图像中检测到的关键点，该网络能够给出较好的3D姿态估计结果。我们基于合成手部模型构建了一个大规模的3D手部姿态数据集，用于训练相关网络。在多种测试集上的实验——包括手语识别测试集——证明了基于单张彩色图像进行3D手部姿态估计的可行性。

### 1. 引言

手部是人类最主要的操作工具。因此，其在空间中的位置、朝向和关节运动状态，对于诸多潜在应用场景而言至关重要，例如机器人领域的物体递送、示教学习、手语与手势识别，以及将手部作为人机交互的输入设备。

由于存在诸多歧义、复杂的关节运动以及严重的自遮挡现象，从单张图像中估计完整的3D手部姿态十分困难，其难度甚至超过了整个人体的姿态估计。因此，实际应用中通常会使用数据手套或标记物等专用传感设备，但这会将应用范围限制在有限的场景中。此外，多摄像头的使用也会严重限制应用领域。当前大多数相关研究都依赖深度相机输出的深度图像。然而，深度相机并不像普通彩色相机那样普及，且仅在室内环境中才能可靠工作。

在本文中，我们提出了一种无需任何特殊设备、即可从单张彩色图像中学习完整3D手部姿态估计的方法。我们利用深度网络从数据中学习合理先验的能力来解决歧义性问题。我们的整体方法——

![Image](images/ae8054f5b63fc2977d05b3da917113eec1b545cdac2eefb3b8057cf354d82ad5.jpg)

<div style="text-align: center;">Figure 1: Given a color image we detect keypoints in 2D (shown overlayed) and learn a prior that allows us to estimate a normalized 3D hand pose.</div>

包含三个用于完成3D姿态估计关键子任务的深度网络；详见图2。第一个网络负责手部分割，以定位图像中的手部区域。基于其输出，第二个网络会在2D图像中定位手部关键点。第三个网络最终会根据2D关键点推导出3D手部姿态，这也是本文的核心贡献。具体而言，我们引入了规范化的姿态表示方法，使这项学习任务得以实现。

与人体层面的3D姿态估计相比，另一个难点在于数据的稀缺性。虽然人体姿态估计可以借助多个动作捕捉数据库，但针对手部的此类数据几乎不存在。为了训练网络，需要包含真实3D关键点的大规模数据集。由于不存在具备足够多样性的此类数据集，我们构建了包含多种数据增强选项的合成数据集。

最终得到的手部姿态估计系统在现有小规模数据集上均展现出极具潜力的定性与定量结果。我们还展示了3D手部姿态在手语识别任务中的应用。相关数据集及训练好的网络均已在线公开。 $^{1}$

### 2. 相关工作

二维人体姿态估计。在 MPII 人体姿态基准 [^3] 的推动下，以及卷积

---

![Image](images/20b952013040ace1981c62c154214d71e2f2e669382db30d20eaf27c6654be39.jpg)

<div style="text-align: center;">Figure 2: Our approach consists of three building blocks. First, the hand is localized within the image by a segmentation network (HandSegNet). Accordingly to the hand mask, the input image is cropped and serves as input to the PoseNet. This localizes a set of hand keypoints represented as score maps c. Subsequently, the PosePrior network estimates the most likely 3D structure conditioned on the score maps. This figure serves for illustration of the overall approach and does not reflect the exact architecture of the individual building blocks.</div>

神经网络 (CNN) 的出现，该领域在过去几年取得了巨大进展。Toshev 和 Szegedy [^24] 的 CNN 架构直接从彩色图像输入回归二维笛卡尔坐标。Thompson 等人 [^22] 以及 Wei 等人 [^19] 等更近期的研究转向回归得分图。在我们工作的部分内容中，我们采用了与 Wei 等人 [^19] 相当的网络架构。

3D人体姿态估计。我们在此仅讨论最相关的研究成果，更多细节可参考Sarafianos等人的研究[^17]。与我们的方法类似，许多研究都采用两阶段流程[^23] [^7] [^6] [^21] [^5]。首先，它们通过2D方式检测关键点，以利用当前CNN方法的判别能力；随后尝试将这组2D检测结果映射到3D空间。针对这种映射方式，已有多种不同方法被提出：Chen等人[^6]利用包含2D到3D对应关系的数据库，对给定的2D预测结果进行最近邻匹配；Tome等人[^21]基于概率PCA基构建了概率性3D姿态模型；Bogo等人[^5]则优化了统计体型模型的3D关节位置与2D预测结果之间的重投影误差；Pavlakos等人[^15]提出了一种体素化方法，将姿态估计视为从粗到精的体素分数预测过程，这种方法能自然地表征数据，但计算成本较高，且受限于GPU内存对体素网格的承载能力。近期，已有多种应用深度学习将2D关键点映射到3D姿态以实现人体姿态估计的方法[^26] [^11] [^16]。此外，Mehta等人[^10]利用迁移学习技术，通过单一网络直接从图像中推断3D人体姿态。虽然上述研究均聚焦于3D人体姿态估计，但我们首次开展了3D手部姿态估计的相关研究——由于手部关节活动范围更大、自遮挡现象更明显，且相关数据较少，这一任务的难度远高于人体姿态估计。

手部姿态估计。Athitsos和Sclaroff [^4] 提出了一种基于单帧、利用边缘图和倒角匹配的检测方法。随着低成本消费级深度相机的问世，相关研究转向了基于深度数据的手部姿态估计。Oikonomidis等人 [^14] 提出了一种基于粒子群优化（PSO）的技术。Sharp等人 [^18] 还增加了重新初始化的功能。该方法会生成一定数量的候选姿态，并针对观测到的深度图像对其进行评分。Tompson等人 [^22] 采用卷积神经网络（CNN）来检测2D手部关键点，该网络以多分辨率图像金字塔为输入条件。通过求解逆运动学优化问题即可恢复3D姿态。Zhou等人 [^27] 或Oberweger等人 [^12] 采用的方法则是训练CNN，使其能够根据裁剪后的手部深度图直接回归3D坐标。其中，Oberweger等人 [^12] 探索了在压缩瓶颈中编码关键点坐标间相关性的可能性，而Zhou等人 [^27] 则估算运动链中各骨骼间的角度而非笛卡尔坐标。Oberweger等人 [^13] 利用一种卷积神经网络，可根据给定的姿态估计结果合成深度图。借此，他们能够通过最小化观测深度图像与合成深度图像间的距离，逐步优化初始姿态估计结果。

目前还没有基于学习的方法能够解决从单张彩色图像中估计3D手部姿态的问题。以往的方法有所不同：它们要么依赖深度数据 [^22] [^27] [^12] [^13]，要么使用显式模型通过与预定义的姿态数据库进行匹配来推断姿态 [^4]，要么仅基于初始姿态进行跟踪而非完整的姿态估计 [^14] [^18]。

---

![Image](images/f5c65a39436f7f7fdc73ff9d6ffa7b82a0f15cbfba7efb6cb60a681738adee1e.jpg)

<div style="text-align: center;">Figure 3: Proposed architecture for the PosePrior network. Two almost symmetric streams estimate canonical coordinates and the viewpoint relative to this coordinate system. Combination of the two predictions yields an estimation for the relative normalized coordinates  $w^{rel}$.</div>

### 3. 手部姿态表示

给定一张显示单只手的彩色图像 $I \in \mathbb{R}^{N \times M \times 3}$，我们希望推断出其3D姿态。我们通过一组坐标 $\mathbf{w}_i = (x_i, y_i, z_i)$ 来定义手部姿态，这些坐标描述了J个关键点在3D空间中的位置，即 $i \in [1, J]$，在本研究中 $J = 21$。

从单个2D观测结果推断3D坐标属于不适定问题。除了其他歧义外，还存在尺度歧义。因此，我们通过训练网络来估计归一化坐标，从而推断出尺度不变的3D结构。

 $$ \mathbf{w}_{i}^{\mathrm{n o r m}}=\frac{1}{s}\cdot\mathbf{w}_{i}, $$

其中 $s = \|\mathbf{w}_{k+1} - \mathbf{w}_k\|_2$ 是一个与样本相关的常数，用于将某对关键点之间的距离归一化为单位长度。我们选取k值，使得食指的第一节骨骼对应的s值为1。

此外，我们使用相对3D坐标来学习平移不变的手部姿态表示。这是通过减去指定的根关键点的位置来实现的。相对归一化的3D坐标表示为：

 $$ \mathbf{w}_{i}^{\mathrm{r e l}}=\mathbf{w}_{i}^{\mathrm{n o r m}}-\mathbf{w}_{r}^{\mathrm{n o r m}} $$

其中r为根索引。在实验中，手掌关键点是最稳定的标志点。因此我们取r = 0。

### 4. 3D手部姿态估计

我们从单张输入图像中估计三维归一化坐标 $\mathbf{w}^{\text{rel}}$。图2展示了总体方法的概览。在后续章节中，我们将详细介绍其各个组成部分。

#### 4.1. 基于HandSegNet的手部分割

对于手部分割，我们采用了一种基于Wei等人所提出的人体检测器并以其权重初始化的网络架构 [^19]。他们将2D人体检测问题转化为估计人体中心位置得分图的任务，最有可能的位置被用作固定大小裁剪区域的中心。由于不同图像中的手部尺寸差异很大且受关节活动影响显著，我们更倾向于将手部定位视为一个分割问题。我们的HandSegNet是Wei等人所提网络的简化版本 [^19]，在我们的人手姿态数据集上训练而成。关于网络架构及其训练过程的详细信息见补充材料。HandSegNet提供的手部掩码使我们能够对输入图像进行裁剪和尺寸归一化，从而简化PoseNet的学习任务。

#### 4.2. 基于PoseNet的关键点得分图

我们将2D关键点的定位问题表述为2D得分图的估计 $\mathbf{c} = \{\mathbf{c}_1(u, v), \ldots, \mathbf{c}_J(u, v)\}$。我们训练网络来预测J个得分图 $\mathbf{c}_i \in \mathbb{R}^{N \times M}$，每个得分图包含了某个关键点出现在特定空间位置的可能性信息。

该网络采用了与Wei等人提出的Pose Network类似的编码器-解码器架构[^19]。基于编码器生成的图像特征表示，网络会先预测初始得分图，随后逐步提升其分辨率。我们采用了Wei等人提供的权重进行初始化[^19]，并在此基础上重新训练网络以实现手部关键点检测。关于该网络架构的完整说明详见补充材料。

#### 4.3. 基于PosePrior网络的三维手部姿态估计

PosePrior网络能够基于可能不完整或带有噪声的得分图来预测相对归一化的三维坐标$\mathbf{c}(u, v)$。为此，网络必须学习手部各种姿态的流形及其先验概率。在得分图的条件下，网络会输出最符合二维证据的三维配置。

我们并未训练网络直接预测绝对三维坐标，而是选择让网络预测在规范坐标系内的坐标，同时估算从原始坐标系到规范坐标系的变换关系。

---

强制采用对手部全局朝向具有不变性的表示方法，有助于学习相关先验知识，这一点我们在第6.2节的实验中得到了验证。

对于相对归一化坐标，我们提出使用一种规范坐标系$w^c$，它与$w^{\text{rel}}$之间的关系如下：首先计算一种中间表示。

 $$ \mathbf{w}^{\mathrm{c}^{*}}=\mathbf{R}(\mathbf{w}^{\mathrm{rel}})\cdot\mathbf{w}^{\mathrm{rel}} $$

其中$\mathbf{R}(\mathbf{w}^{\text{rel}}) \in \mathbb{R}^{3 \times 3}$为一个三维旋转矩阵，计算过程分为两步。首先，需确定绕x轴和z轴的旋转$\mathbf{R}_{xz}$，使得某个特定关键点$\mathbf{w}_a^{\text{c*}}$能与规范坐标系的y轴对齐：

 $$ \mathbf{R}_{\mathrm{x}z}\cdot\mathbf{w}_{a}^{\mathrm{c}^{*}}=\lambda\cdot(0,1,0)^{\top}with\lambda\geq0. $$

随后，计算绕y轴的旋转$\mathbf{R}_{y}$，以便实现进一步的对齐。

 $$ \mathbf{R}_{\mathrm{y}}\cdot\mathbf{R}_{\mathrm{xz}}\cdot\mathbf{w}_{o}^{\mathrm{c}^{*}}=(\eta,\zeta,0) $$

此处$\eta \geq 0$对应指定的关键点索引o。规范坐标系与原始坐标系之间的总体变换关系由下式给出：

 $$ \mathbf{R}(\mathbf{w}^{\mathrm{r e l}})=\mathbf{R}_{\mathrm{y}}\cdot\mathbf{R}_{\mathrm{x z}}. $$

为了妥善处理左右手之间的对称性问题，我们将右手沿z轴翻转，从而得到与侧面无关的表示方法。

 $$ \mathbf{w}_{i}^{\mathrm{c}}=\left\{\begin{array}{ll}\left(x_{i}^{\mathrm{c}^{*}},y_{i}^{\mathrm{c}^{*}},z_{i}^{\mathrm{c}^{*}}\right)^{\top}&\text{if its a left hand}\\ \left(x_{i}^{\mathrm{c}^{*}},y_{i}^{\mathrm{c}^{*}},-z_{i}^{\mathrm{c}^{*}}\right)^{\top}&\text{if its a right hand}\end{array}\right. $$

这种表示方法与我们提出的规范坐标系相一致。基于该定义，我们训练网络以估计规范坐标系内的三维坐标$w^c$，同时单独估计旋转矩阵$\mathbf{R}(w^{\text{rel}})$；该矩阵我们用包含三个参数的轴角表示法来参数化。估算变换$\mathbf{R}$相当于预测给定样本相对于规范坐标系的视角，因此我们将这一问题称为视角估计。

姿态先验网络架构包含两个并行处理流，见图3。这两个流的架构几乎相同，详见补充材料。它们首先通过一系列6次卷积运算及ReLU非线性激活来处理J个得分图堆叠数据。随后，关于图像中显示的是左手还是右手的信息会与特征表示拼接起来，再经过两个全连接层的处理。最后，网络通过带有线性激活函数的全连接层输出视角R和规范坐标$w^c$的估计值。结合这两类估计结果，即可得到$w^{\text{rel}}$的估计值。

#### 4.4. 网络训练

在训练HandSegNet时，我们采用标准的softmax交叉熵损失，对PoseNet则使用$L_{2}$损失。PosePrior网络采用两种损失项：首先是对规范坐标的平方$L_{2}$损失。

 $$ \mathbf{L}_{\mathrm{c}}=\left\|\mathbf{w}_{\mathrm{gt}}^{\mathrm{c}}-\mathbf{w}_{\mathrm{pred}}^{\mathrm{c}}\right\|_{2}^{2} $$

该损失基于网络预测结果$\mathbf{w}_{\mathrm{pred}}^{c}$与真实值$\mathbf{w}_{gt}^{c}$计算得出。其次，对规范变换矩阵施加平方$L_{2}$损失：

 $$ \mathrm{L_{r}}=\|\mathrm{R_{p r e d}}-\mathrm{R_{g t}}\|_{2}^{2}. $$

总损失函数是$L_{c}$与$L_{r}$的未加权之和。

训练过程中我们使用了Tensorflow [^2]框架以及Adam求解器[^9]。关于学习过程的详细信息请参阅补充材料。

### 5. 手部姿态估计数据集

#### 5.1. 现有数据集

有两套适用于本研究的数据集，因为它们提供了RGB图像和3D姿态标注。所谓的立体手部姿态跟踪基准测试集[^25]为18000对立体图像提供了21个关键点的2D和3D标注，图像分辨率为$640 \times 480$。该数据集展示了单人的左手在6种不同背景和光照条件下的姿态。我们将数据集划分为包含3000幅图像的评估集（S-val）和包含15000幅图像的训练集（S-train）。

Dexter数据集[^20]包含3129幅图像，展示了两名操作者在受限室内环境中对长方体进行各种操作的情形。该数据集提供了彩色图像、深度图以及指尖和长方体拐角的标注。彩色图像的空间分辨率为$640 \times 320$。由于手部标注不完整，我们仅利用该数据集来研究网络的跨数据集泛化能力。我们将这个测试集称为Dexter。

为了与我们渲染的数据集兼容，我们将两套数据集的分辨率下采样至$320 \times 240$。在报告图像域内的像素准确率时，我们会将结果转换回原始分辨率下的坐标。

Tompson等人提出的NYU手部姿态数据集[^22]常用于基于深度图像的手部姿态估计，但它不适用于基于颜色的方法，因为该数据集仅提供配准后的彩色图像。我们在补充材料中给出了更多证据，说明为何该数据集无法用于我们的任务。

#### 5.2. 渲染的手部姿态数据集

由于上述数据集在多样性、样本数量以及标注完整性方面存在不足，因此不足以用于训练深度网络。因此，我们

---

![Image](images/b6dbc1efe1555d165e5812615177ef9098a74d92b41e64f7f1671abccf108c81.jpg)

<div style="text-align: center;">Figure 4: Our new dataset provides segmentation maps with 33 classes: three for each finger, palm, person, and background. The 3D kinematic model of the hand provides 21 keypoints per hand: 4 keypoints per finger and one keypoint close to the wrist.</div>

用一套新数据集来补充它们以用于训练。为了避免人工标注者在三维数据标注中常见的标注质量差的问题，我们利用了Mixamo平台上免费提供的人物3D模型及其对应动画$^{2}$。随后我们使用开源软件Blender $^{3}$来渲染图像。该数据集已在线公开提供。

我们的数据集基于20个不同角色执行的39种动作构建而成。我们将数据划分为验证集（R-val）和训练集（R-train），每个角色或动作只能属于其中一组而不能同时属于两组。按照我们提出的划分方式，训练集包含16个角色执行的31种动作，验证集则包含4个角色执行的8种动作。

对于每一帧，我们随机选取一个新的相机位置，该位置大致位于双手周围的球形区域内。所有手部中心距离相机中心大约在40厘米到65厘米之间。左手和右手被选中的概率相等，且相机会进行旋转，以确保从当前视角至少能部分看到手部。在确定相机位置和方向后，我们会从Flickr上下载的1231张背景图像中随机选取一张作为背景$^{4}$。这些图像展示了城市、风景等各类场景，且确保其中不包含人物。

为了最大化数据集的视觉多样性，我们对每一帧渲染图像随机设置以下参数：应用0到2个定向光源以及全局光照，以使采样得到的背景图像颜色与之匹配；同时随机调整光源的位置和强度。此外，我们使用有损JPG压缩格式保存渲染结果，压缩质量参数会在“无压缩”到60%之间随机取值。我们还会随机改变光线在皮肤上的镜面反射效果。

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>AUC</td><td style='text-align: center; word-wrap: break-word;'>EPE median</td><td style='text-align: center; word-wrap: break-word;'>EPE mean</td></tr><tr><td rowspan="2">GT</td><td style='text-align: center; word-wrap: break-word;'>R-val</td><td style='text-align: center; word-wrap: break-word;'>0.724</td><td style='text-align: center; word-wrap: break-word;'>5.001</td><td style='text-align: center; word-wrap: break-word;'>9.135</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>S-val</td><td style='text-align: center; word-wrap: break-word;'>0.817</td><td style='text-align: center; word-wrap: break-word;'>5.013</td><td style='text-align: center; word-wrap: break-word;'>5.522</td></tr><tr><td rowspan="3">Net</td><td style='text-align: center; word-wrap: break-word;'>R-val</td><td style='text-align: center; word-wrap: break-word;'>0.635</td><td style='text-align: center; word-wrap: break-word;'>6.745</td><td style='text-align: center; word-wrap: break-word;'>18.741</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>S-val</td><td style='text-align: center; word-wrap: break-word;'>0.762</td><td style='text-align: center; word-wrap: break-word;'>5.528</td><td style='text-align: center; word-wrap: break-word;'>18.581</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Dexter</td><td style='text-align: center; word-wrap: break-word;'>0.489</td><td style='text-align: center; word-wrap: break-word;'>13.684</td><td style='text-align: center; word-wrap: break-word;'>25.160</td></tr></table>

<div style="text-align: center;">Table 1: The top rows (GT) report performance for the PoseNet operating on ground truth cropped hand images. The bottom rows (Net) show results when the hand crops are generated using HandSegNet. PoseNet was trained jointly on R-train and S-train, whereas HandSegNet was only trained on R-train. End point errors are reported in pixels with respect to the uncropped image and AUC is calculated over an error range from 0 to 30 pixels.</div>

总体而言，我们的数据集包含41258张用于训练的图像和2728张用于评估的图像，分辨率均为$320 \times 320$像素。所有样本都配有完整的标注信息：包括每只手的21个关键点骨骼模型，还有33个分割掩码以及背景信息。就分割掩码而言，有一个类别对应人体，每个手掌和手指各占一个类别，而每个手指又由3个片段组成。图4展示了数据集中的一个样本。每个手指由4个关键点表示：指尖、两个中间点以及位于手掌上的端点。此外，模型手腕处也有一个关键点。对于每个手部关键点，都会标注其在图像中是否可见或被遮挡。同时，也会给出基于相机像素坐标系和相机中心世界坐标系的关键点标注。相机内参矩阵和真实深度图也一并提供，但本研究并未使用它们。

### 6. 实验

我们评估了整体方法的所有相关部分：(1) 有无手部分割网络时PoseNet对手部关键点的检测能力；(2) 三维手部姿态估计以及学习到的三维姿态先验。最后，我们将手部姿态估计应用于手语识别基准测试。

#### 6.1. 二维关键点检测

表1展示了PoseNet在二维关键点估计方面的性能。我们报告了以像素为单位的平均端点误差（EPE），以及不同误差阈值下正确关键点百分比（PCK）对应的曲线下面积（AUC）；详见图6。

我们评估了两种情况：一种是使用经过人工标注的手部裁剪图像（GT），另一种是使用HandSegNet的预测结果来进行裁剪（Net）。

---

![Image](images/12f952f103b20556ad6c0cab82c84c0077129d5ba23427bc8c6a300b03e6aa70.jpg)

<div style="text-align: center;">Figure 5: Exemplary 2D keypoint localization results. The first two columns show samples from Dexter, the following three depict R-val and the last one are samples from S-val.</div>

![Image](images/0c969a59459b5880c8f97c376224518b16b6a17c039ca6e47346255a62ebab99.jpg)

<div style="text-align: center;">Figure 6: Results on 2D keypoint estimation when using different training sets for PoseNet. Shown is the percentage of correct keypoints (PCK) over a certain threshold in pixels evaluated on Dexter. Jointly training on R-train and S-train yields the best results.</div>

第一种情况反映了PoseNet单独使用的性能，第二种情况则体现了完整的二维关键点估计流程的性能。后一种情况下中位数与平均值之间的差异表明，HandSegNet在大多数情况下表现可靠，但有时无法正确分割手部，从而导致二维关键点预测失败。

实验结果表明，该方法在我们的合成数据集$(R\text{-}val)$和立体数据集$(S\text{-}val)$上均表现良好。Dexter数据集更具挑战性，因为该数据集与训练集存在差异，且被操控的立方体经常遮挡手部。训练集中没有包含遮挡情况（自遮挡除外）的样本。

图6显示，在更多样化的数据上训练有助于提升跨数据集泛化能力。仅用我们的合成数据集R-train进行训练时，在Dexter数据集上的表现优于使用有限的立体数据集S-train训练的结果；而将R-train和S-train一起用于训练时效果最佳。图5展示了这种配置下的一些定性结果，补充材料中还有更多示例。

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>Direct</td><td style='text-align: center; word-wrap: break-word;'>Bottleneck</td><td style='text-align: center; word-wrap: break-word;'>Local</td><td style='text-align: center; word-wrap: break-word;'>NN</td><td style='text-align: center; word-wrap: break-word;'>Prop.</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>R-train</td><td style='text-align: center; word-wrap: break-word;'>20.2\n9.2%</td><td style='text-align: center; word-wrap: break-word;'>21.1\n14%</td><td style='text-align: center; word-wrap: break-word;'>35.1\n90%</td><td style='text-align: center; word-wrap: break-word;'>0.0\n-100%</td><td style='text-align: center; word-wrap: break-word;'>18.5</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>R-val</td><td style='text-align: center; word-wrap: break-word;'>20.9\n11.2%</td><td style='text-align: center; word-wrap: break-word;'>21.9\n16%</td><td style='text-align: center; word-wrap: break-word;'>39.1\n108%</td><td style='text-align: center; word-wrap: break-word;'>26.9\n43%</td><td style='text-align: center; word-wrap: break-word;'>18.8</td></tr></table>

<div style="text-align: center;">Table 2: Average median end point error per keypoint of the predicted 3D pose for different lifting approaches given a noisy ground truth 2D pose. Networks were trained on R-train. The results are reported in mm and the subscript gives the relative performance to the proposed approach.</div>

#### 6.2. 将估计结果提升至3D

#### 6.2.1 姿态表示

我们通过将所提出的规范坐标系表示法与几种替代方案进行比较，来评估其从2D关键点预测3D手部姿态的效果。所有变体都采用相同的基础架构，该架构与4.3节中提出的PosePrior的一个流完全相同。它们是在空间分辨率为32×32像素的得分图c上训练的。为避免过拟合，我们通过在关键点位置添加方差为1.5像素的高斯噪声来对得分图进行增强；此外，得分图还会被随机缩放和平移。表2显示了各关键点的端点误差结果。

直接法试图不借助规范坐标系，直接将2D关键点映射为完整的3D坐标$w^{rel}$。这种方法存在弊端，因为网络很难将手部的全局旋转与关节运动区分开来。

瓶颈法的灵感来源于Oberweger等人[^12]的研究，他们在估计坐标前引入了瓶颈层。我们在最终的全连接输出层之前插入了一个额外的全连接层，按照Oberweger等人的方法将其参数化为30个通道并采用线性激活函数。但该方法的效果并不比直接法更好。

---

![Image](images/35f7ff462fb5c8f86de9c4e945538df884b1670fd231d96cf7378dd2c6d987fc.jpg)

<div style="text-align: center;">Figure 7: Qualitative examples of our complete system. Input to the network are color image and the information if its a left or right hand. The network estimates the hand segmentation mask, localizes keypoints in 2D and outputs the most likely 3D pose. The samples on the left hand side are from a dataset we recorded for qualitative evaluation, on the top right hand side is a sample from the sign language dataset and the bottom right sample is taken from S-val. In the supplementary material we provide more qualitative examples.</div>

![Image](images/553d186c1f86017dcf7afbd52d586ddb8d6d7563a2cc19ad670b3d18ee776ef3.jpg)

<div style="text-align: center;">Figure 8: The left most column shows the input image as gray scale with the input score map overlayed as red dots. Every row corresponds to a separate forward pass of the network. The two columns to the right visualize the predicted 3D structure of the network from different viewpoints in canonical coordinates. Ground truth is displayed in dashed green and the network prediction is shown in solid red.</div>

局部法结合了手部的运动学模型，利用网络来估计该模型的关节参数。我们对[^27]的方法进行了推广，不仅估计角度，还估计骨骼长度。网络被训练为为每个关键点估计两个角度和一个长度，共计63个参数。这些角度表示的是骨骼局部坐标系中的旋转。这种方法只有在手部始终从同一方向呈现时才有效，无法捕捉手部的全局姿态。

最后，神经网络法将2D关键点与

![Image](images/943a298134317aad46539c58b874ccee11fd3bad2585a12b617a6905e1077cfd.jpg)

<div style="text-align: center;">Figure 9: Results for our complete system on S-val compared to approaches from [^25] and [^26]. Shown is the percentage of correct keypoints (PCK) over respective thresholds in mm. PoseNet and PosePrior are trained on S-train and R-train, whereas the HandSegNet is trained on R-train.</div>

训练集中最相似的样本进行匹配，并从该样本中获取3D坐标[^6]。虽然这种方法在训练集上的表现自然最好，但对新样本的泛化能力却较差。

其他方法的泛化能力相当不错，在训练集和验证集上的误差相近。4.3节中提出的方法效果最佳，因此被用于后续的实验。

#### 6.2.2 对所学先验的分析

为了检验网络学到的3D先验，我们输入不含关键点的得分图，图8展示了从两个不同视角得到的3D姿态预测结果。完全没有提供关键点作为输入的极端情况下，就能看到网络学到的规范先验。随着关键点数量的增加，

---

当新增数据后，网络会根据这些额外证据调整预测的姿态。该实验还模拟了二维关键点被遮挡的情况，结果表明所学到的先验知识能使网络依然输出合理的姿态。

#### 6.2.3 与现有文献的对比

由于目前尚无基于RGB图像的三维手部姿态估计相关研究，我们无法与其他方法进行比较。为了大致将我们的结果与文献中的结果相关联，我们将其与Zhang等人[^25]的研究进行对比，他们针对基于深度数据的先进三维手部姿态跟踪任务给出了以毫米为单位的结果。他们的实验是在同样包含RGB图像的立体数据集S-val上进行的。由于与Zhang等人不同，我们的方法并未使用深度数据，因此在尺度和绝对深度方面仍存在歧义。因此，我们获取了根部关键点的绝对位置和手的尺度，以此来平移和缩放预测的三维手部姿态，进而通过公式(1)和(2)得到度量化的世界坐标w。在该实验中，我们按照6.2.2节实验相同的训练计划，利用PoseNet预测出的得分图来训练PosePrior。PoseNet如6.1节所述单独训练，之后保持固定不变。图9显示，尽管我们仅在最后阶段利用深度图进行缩放和平移处理，但我们的方法性能仍显著优于Zhang等人[^25]提出的方法。此外，我们还报告了Zhao等人[^26]提出的提升方法与我们训练的PoseNet结合后的结果，其性能不如所提出的PosePrior。我们认为原因在于：将得分图作为输入用于提升过程比直接使用坐标更具优势，因为它能应对手部关键点检测中的歧义问题。图7展示了在三个不同数据集上采用完整处理流程得到的定性三维示例。

#### 6.3. 手语识别

以往依赖深度数据的手部姿态估计方法无法应用于大多数手语识别数据集，因为这些数据集仅包含彩色图像。作为最后一个示例性实验，我们使用了自己的手部姿态估计系统，并在此基础上训练用于手势识别的分类器。该分类器是一个具有ReLU激活函数的三层全连接网络；网络详情可参见补充材料。

我们报告了在所谓的RWTH德语指拼数据库[^8]上的实验结果。该数据库包含35种手势，分别对应字母表中的字母、德语变音符号以及数字1到5。数据集涵盖了20名受试者，每人针对每种手势进行了两次录制。大多数手势为静态手势，只有代表字母J、Z、Å、Ö和Ü的手势属于动态手势。为了

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>Method</td><td style='text-align: center; word-wrap: break-word;'>Word error rate</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Dreuw et al. [^8]</td><td style='text-align: center; word-wrap: break-word;'>35.7 %</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Dreuw on subset [^1]</td><td style='text-align: center; word-wrap: break-word;'>36.56 %</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Ours 3D</td><td style='text-align: center; word-wrap: break-word;'>33.2 %</td></tr></table>

<div style="text-align: center;">Table 3: Word error rates in percent on the RWTH German Fingerspelling Database subset of non dynamic gestures. Results for Dreuw et al. [^8] on the subset from [^1].</div>

简化该实验，我们仅在限定为30种静态手势的子集上开展了实验。

数据库中包含两台不同摄像机拍摄的录像，但我们仅使用了一台摄像机。这些短视频序列的分辨率为$320 \times 240$像素。我们将每个视频序列的中间帧作为彩色图像，将手势类别标签用作训练数据。该数据集包含1160张图像，我们按签署者将其分为包含232张图像的验证集和包含928张图像的训练集。我们将图像尺寸调整为$320 \times 320$像素，并基于随机采样的$256 \times 256$个裁剪区域进行训练。由于这些图像取自压缩视频流，因此存在网络此前未曾见过的明显压缩伪影。为此，我们从训练集中选取了50张带有手部关键点的图像，用于预先对PoseNet进行微调。之后固定姿态估计部分，仅训练GestureNet。表3显示，在我们用于比较的手势子集上，我们的系统取得了与Dreuw等人[^8]相当的结果。

### 7. 结论

我们提出了首个基于学习、能从单张图像中估计3D手部姿态的系统。我们贡献了一个大型合成数据集，从而能够成功训练网络完成该任务。我们证明该网络学到了一种3D姿态先验，使其能根据真实世界图像中的2D关键点预测合理的3D手部姿态。尽管该网络的性能甚至可与使用深度图的方法相媲美，但仍有很大的提升空间。其性能受限的主要原因在于缺乏带有标注的大规模真实世界图像数据集以及多样化的姿态统计数据。

## 致谢

我们衷心感谢巴登-符腾堡州基金会为ROTAH和RatTrack项目提供的资助。同时，我们感谢Nikolaus Mayer、Benjamin Ummenhofer和Maxim Tatarchenko提出的宝贵建议以及多次富有成效的讨论。

---

## 参考文献

[^1]: RWTH German Fingerspelling database. <http://www-i6.informatik.rwth-aachen.de/~dreuw/fingerspelling.php>. Accessed: 01.03.2017.

[^2]: M. Abadi, A. Agarwal, P. Barham, E. Brevdo, Z. Chen, C. Citro, G. S. Corrado, A. Davis, J. Dean, M. Devin, et al. Tensorflow: Large-scale machine learning on heterogeneous distributed systems. arXiv preprint arXiv:1603.04467, 2016.

[^3]: M. Andriluka, L. Pishchulin, P. V. Gehler, and B. Schiele. 2d human pose estimation: New benchmark and state of the art analysis. In Proc. of the IEEE Conf. on Computer Vision and Pattern Recognition (CVPR), pages 3686–3693, 2014.

[^4]: V. Athitsos and S. Sclaroff. Estimating 3d hand pose from a cluttered image. In Proc. of the IEEE Conf. on Computer Vision and Pattern Recognition (CVPR), volume 2, pages 432. IEEE, 2003.

[^5]: F. Bogo, A. Kanazawa, C. Lassner, P. Gehler, J. Romero, and M. J. Black. Keep it SMPL: Automatic estimation of 3d human pose and shape from a single image. In European Conference on Computer Vision, pages 561–578. Springer, 2016.

[^6]: C.-H. Chen and D. Ramanan. 3d Human Pose Estimation= 2d Pose Estimation+ Matching. arXiv preprint arXiv:1612.06524, 2016.

[^7]: X. Chen and A. L. Yuille. Articulated pose estimation by a graphical model with image dependent pairwise relations. In Proc. of the Conf. on Neural Information Processing Systems (NIPS), pages 1736–1744, 2014.

[^8]: P. Dreuw, T. Deselaers, D. Keysers, and H. Ney. Modeling image variability in appearance-based gesture recognition. In ECCV Workshop on Statistical Methods in Multi-Image and Video Processing, pages 7–18, Graz, Austria, May 2006.

[^9]: D. P. Kingma and J. Ba. Adam: A method for stochastic optimization. CoRR, abs/1412.6980, 2014.

[^10]: D. Mehta, H. Rhodin, D. Casas, O. Sotnychenko, W. Xu, and C. Theobalt. Monocular 3d Human Pose Estimation Using Transfer Learning and Improved CNN Supervision. arXiv preprint arXiv:1611.09813, 2016.

[^11]: F. Moreno-Noguer. 3d Human Pose Estimation from a Single Image via Distance Matrix Regression. arXiv preprint arXiv:1611.09010, 2016.

[^12]: M. Oberweger, P. Wohlhart, and V. Lepetit. Hands deep in deep learning for hand pose estimation. arXiv preprint arXiv:1502.06807, 2015.

[^13]: M. Oberweger, P. Wohlhart, and V. Lepetit. Training a feedback loop for hand pose estimation. In Proc. of the International Conf. on Computer Vision (ICCV), pages 3316–3324, 2015.

[^14]: I. Oikonomidis, N. Kyriazis, and A. A. Argyros. Efficient model-based 3d tracking of hand articulations using Kinect. In British Machine Vision Conference (BMVC), volume 1, page 3, 2011.

[^15]: G. Pavlakos, X. Zhou, K. G. Derpanis, and K. Daniilidis. Coarse-to-Fine Volumetric Prediction for Single-Image 3d Human Pose. arXiv preprint arXiv:1611.07828, 2016.

[^16]: A.-I. Popa, M. Zanfir, and C. Sminchisescu. Deep Multitask Architecture for Integrated 2d and 3d Human Sensing. arXiv preprint arXiv:1701.08985, 2017.

[^17]: N. Sarafianos, B. Boteanu, B. Ionescu, and I. A. Kakadiaris. 3d Human pose estimation: A review of the literature and analysis of covariates. Computer Vision and Image Understanding, 152:1–20, 2016.

[^18]: T. Sharp, Y. Wei, D. Freedman, P. Kohli, E. Krupka, A. Fitzgibbon, S. Izadi, C. Keskin, D. Robertson, J. Taylor, J. Shotton, D. Kim, C. Rhemann, I. Leichter, and A. Vinnikov. Accurate, Robust, and Flexible Real-time Hand Tracking. pages 3633–3642. ACM Press, 2015.

[^19]: Shih-En Wei, Varun Ramakrishna, Takeo Kanade, and Yaser Sheikh. Convolutional pose machines. In Proc. of the IEEE Conf. on Computer Vision and Pattern Recognition (CVPR), pages 4724–4732, 2016.

[^20]: S. Sridhar, F. Mueller, M. Zollhöfer, D. Casas, A. Oulasvirta, and C. Theobalt. Real-time joint tracking of a hand manipulating an object from rgb-d input. In Proc. of the Europ. Conf. on Computer Vision (ECCV), 2016.

[^21]: D. Tome, C. Russell, and L. Agapito. Lifting from the Deep: Convolutional 3d Pose Estimation from a Single Image. arXiv preprint arXiv:1701.00295, 2017.

[^22]: J. Tompson, M. Stein, Y. Lecun, and K. Perlin. Real-Time Continuous Pose Recovery of Human Hands Using Convolutional Networks. ACM Transactions on Graphics, 33(5):1–10, Sept. 2014.

[^23]: J. J. Tompson, A. Jain, Y. LeCun, and C. Bregler. Joint training of a convolutional network and a graphical model for human pose estimation. In Proc. of the Conf. on Neural Information Processing Systems (NIPS), pages 1799–1807, 2014.

[^24]: A. Toshev and C. Szegedy. Deeppose: Human pose estimation via deep neural networks. In Proc. of the IEEE Conf. on Computer Vision and Pattern Recognition (CVPR), pages 1653–1660, 2014.

[^25]: J. Zhang, J. Jiao, M. Chen, L. Qu, X. Xu, and Q. Yang. 3d Hand Pose Tracking and Estimation Using Stereo Matching. arXiv preprint arXiv:1610.07214, 2016.

[^26]: R. Zhao, Y. Wang, and A. Martinez. A Simple, Fast and Highly-Accurate Algorithm to Recover 3d Shape from 2d Landmarks on a Single Image. arXiv preprint arXiv:1609.09058, 2016.

## [^27]: X. Zhou, Q. Wan, W. Zhang, X. Xue, and Y. Wei. Model-based deep hand pose estimation. pages 2421–2427, 2016

---

### 补充材料：从单张RGB图像中学习估计3D手部姿态

Christian Zimmermann, Thomas Brox

弗莱堡大学

{zimmermann, brox}@cs.uni-freiburg.de

#### A. HandSegNet架构与学习计划

表4列出了HandSegNet所使用的架构。它在R-train数据集上以8的批量大小使用ADAM求解器[^9]进行手部分割训练。网络前16层初始化采用了Wei等人[^19]提供的权重，随后使用标准的softmax交叉熵损失训练40000次迭代。前20000次迭代的学习率为$1 \cdot 10^{-5}$，接下来的10000次迭代学习率为$1 \cdot 10^{-6}$，直至训练结束学习率均为$1 \cdot 10^{-7}$。除0.1的随机色彩色调增强外，未采用其他数据增强手段。从训练集中$320 \times 320$像素的图像中随机截取$256 \times 256$个裁剪区域用于训练。

#### B. PoseNet架构与学习计划

表5展示了PoseNet所使用的网络结构。在所有实验中，该网络均以8为批量大小，并使用ADAM求解器进行训练[^9]。网络的前16层采用Wei等人提供的权重进行初始化[^19]，其余层则随机初始化。该网络需迭代训练30000次，损失函数为$L_2$。在最初的10000次迭代中，学习率为$1 \cdot 10^{-4}$；接下来的10000次迭代中学习率变为$1 \cdot 10^{-5}$；此后直至训练结束，学习率均为$1 \cdot 10^{-6}$。在生成得分图的真实值时，我们采用方差为25像素的正态分布，其均值与给定关键点位置相等。我们对生成的地图进行归一化处理，使得当某个关键点可见时，地图上各像素值介于0到1之间；对于不可见的关键点，地图上所有像素值均为零。

我们在轴对齐的裁剪图像上训练PoseNet，这些图像通过双线性插值调整为分辨率为$256 \times 256$像素。所选边界框需能包含单只手的所有关键点。我们通过两种方式对裁剪过程进行增强：首先，向计算出的边界框中心添加噪声，该噪声取自均值为零、方差为10像素的正态分布；随后相应调整边界框的大小，以确保仍能包含所有手部关键点。其次，我们发现为提升模型的泛化性能，在用于生成得分图的坐标上添加少量噪声会很有帮助。

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>id</td><td style='text-align: center; word-wrap: break-word;'>Name</td><td style='text-align: center; word-wrap: break-word;'>Kernel</td><td style='text-align: center; word-wrap: break-word;'>Dimensionality</td></tr><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>Input image</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>$256 \times 256 \times 3$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$256 \times 256 \times 64$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$256 \times 256 \times 64$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>3</td><td style='text-align: center; word-wrap: break-word;'>Maxpool</td><td style='text-align: center; word-wrap: break-word;'>$4 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>$128 \times 128 \times 64$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>4</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$128 \times 128 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>5</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$128 \times 128 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>6</td><td style='text-align: center; word-wrap: break-word;'>Maxpool</td><td style='text-align: center; word-wrap: break-word;'>$4 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>$64 \times 64 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>7</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$64 \times 64 \times 256$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>8</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$64 \times 64 \times 256$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>9</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$64 \times 64 \times 256$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>10</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$64 \times 64 \times 256$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>11</td><td style='text-align: center; word-wrap: break-word;'>Maxpool</td><td style='text-align: center; word-wrap: break-word;'>$4 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 256$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>12</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 512$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>13</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 512$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>14</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 512$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>15</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 512$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>16</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 512$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>17</td><td style='text-align: center; word-wrap: break-word;'>Conv.</td><td style='text-align: center; word-wrap: break-word;'>$1 \times 1$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 2$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>18</td><td style='text-align: center; word-wrap: break-word;'>Bilinear Upsampling</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>$256 \times 256 \times 2$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>19</td><td style='text-align: center; word-wrap: break-word;'>Argmax</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>$256 \times 256 \times 1$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>Hand mask</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>$256 \times 256 \times 1$</td></tr></table>

<div style="text-align: center;">Table 4: Network architecture of the proposed HandSegNet network. Except for input and hand mask output every row of the table gives a data tensor of the network and the operations that produced it.</div>

我们在生成得分图时，会向真实值关键点坐标上添加均值为零、方差为1.5的正态分布噪声，且每个关键点的噪声取值相互独立。此外，我们还会应用随机对比度增强处理，缩放因子范围在0.5到1.0之间，该数值取自均匀分布。

#### C. PosePrior架构

表6展示了PosePrior各分支所使用的网络结构。该结构包含6个卷积层，其后接

---

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>id</td><td style='text-align: center; word-wrap: break-word;'>Name</td><td style='text-align: center; word-wrap: break-word;'>Kernel</td><td style='text-align: center; word-wrap: break-word;'>Dimensionality</td></tr><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>Input image</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>$256 \times 256 \times 3$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$256 \times 256 \times 64$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$256 \times 256 \times 64$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>3</td><td style='text-align: center; word-wrap: break-word;'>Maxpool</td><td style='text-align: center; word-wrap: break-word;'>$4 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>$128 \times 128 \times 64$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>4</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$128 \times 128 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>5</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$128 \times 128 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>6</td><td style='text-align: center; word-wrap: break-word;'>Maxpool</td><td style='text-align: center; word-wrap: break-word;'>$4 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>$64 \times 64 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>7</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$64 \times 64 \times 256$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>8</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$64 \times 64 \times 256$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>9</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$64 \times 64 \times 256$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>10</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$64 \times 64 \times 256$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>11</td><td style='text-align: center; word-wrap: break-word;'>Maxpool</td><td style='text-align: center; word-wrap: break-word;'>$4 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 256$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>12</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 512$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>13</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 512$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>14</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 512$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>15</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 512$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>16</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 512$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>17</td><td style='text-align: center; word-wrap: break-word;'>Conv.</td><td style='text-align: center; word-wrap: break-word;'>$1 \times 1$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 21$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>18</td><td style='text-align: center; word-wrap: break-word;'>Concat(16, 17)</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 533$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>19</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$7 \times 7$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>20</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$7 \times 7$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>21</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$7 \times 7$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>22</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$7 \times 7$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>23</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$7 \times 7$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>24</td><td style='text-align: center; word-wrap: break-word;'>Conv.</td><td style='text-align: center; word-wrap: break-word;'>$1 \times 1$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 21$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>25</td><td style='text-align: center; word-wrap: break-word;'>Concat(16, 17, 24)</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 554$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>26</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$7 \times 7$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>27</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$7 \times 7$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>28</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$7 \times 7$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>29</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$7 \times 7$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>30</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$7 \times 7$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>31</td><td style='text-align: center; word-wrap: break-word;'>Conv.</td><td style='text-align: center; word-wrap: break-word;'>$1 \times 1$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 21$</td></tr></table>

<div style="text-align: center;">Table 5: Network architecture of the PoseNet network. Except for input every row of the table represents a data tensor of the network and the operations that produced it. Outputs of the network are predicted score maps c from layers 17, 24 and 31.</div>

两个全连接层。所有层均采用ReLU激活函数，全连接层的dropout概率设为0.2，用于随机丢弃部分神经元。在第一个全连接层之前，会将手部侧别信息拼接到卷积层计算出的展平特征表示中。空间维度的缩小均是由步长卷积导致的。网络最后是一个全连接层，用于输出P个参数；其中，用于视角估计时P=3，用于坐标估计分支时P=63。

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>id</td><td style='text-align: center; word-wrap: break-word;'>Name</td><td style='text-align: center; word-wrap: break-word;'>Kernel</td><td style='text-align: center; word-wrap: break-word;'>Dimensionality</td></tr><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>Input</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 21$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$32 \times 32 \times 32$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$16 \times 16 \times 32$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>3</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$16 \times 16 \times 64$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>4</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$8 \times 8 \times 64$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>5</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$8 \times 8 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>6</td><td style='text-align: center; word-wrap: break-word;'>Conv. + ReLU</td><td style='text-align: center; word-wrap: break-word;'>$3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>$4 \times 4 \times 128$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>7</td><td style='text-align: center; word-wrap: break-word;'>Reshape + Concat</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>130</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>8</td><td style='text-align: center; word-wrap: break-word;'>FC + ReLU + Drop(0.2)</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>512</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>9</td><td style='text-align: center; word-wrap: break-word;'>FC + ReLU + Drop(0.2)</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>512</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>10</td><td style='text-align: center; word-wrap: break-word;'>FC</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>512</td></tr><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>Output</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>P</td></tr></table>

<div style="text-align: center;">Table 6: Network architecture of a single stream for the proposed PosePrior network. Except for input and output every row of the table gives a data tensor of the network and the operations that produced it. Reduction in the spatial dimension is due to stride in the convolutions. P is the number of estimated parameters and is P = 3 for Viewpoint estimation and P = 63 for the coordinate estimation stream.</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>id</td><td style='text-align: center; word-wrap: break-word;'>Name</td><td style='text-align: center; word-wrap: break-word;'>Dimensionality</td></tr><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>Input $c^{rel}$</td><td style='text-align: center; word-wrap: break-word;'>63</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>FC + ReLU + Dropout(0.2)</td><td style='text-align: center; word-wrap: break-word;'>512</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'>FC + ReLU + Dropout(0.2)</td><td style='text-align: center; word-wrap: break-word;'>512</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>3</td><td style='text-align: center; word-wrap: break-word;'>FC</td><td style='text-align: center; word-wrap: break-word;'>35</td></tr></table>

<div style="text-align: center;">Table 7: Network architecture of the GestureNet used for our experiments. All layers were initialized randomly. Probability to drop a neuron in the indicated layers is set to 0.2.</div>

#### D. GestureNet架构与学习流程

我们采用Adam求解器训练GestureNet，批量大小为8，初始学习率为$1 \cdot 10^{-4}$；该学习率在迭代次数达到15000次和20000次时会下降一个数量级，训练在迭代30000次时结束。网络使用标准softmax交叉熵损失函数在随机裁剪的$256 \times 256$图像上进行训练。

#### E. 额外实验结果

图10展示了所提方法的结果。

#### F. NYU手部姿态数据集

Tompson等人发布的NYU手部姿态数据集[^22]是3D手部姿态估计领域常用的基准数据集。

---

![Image](images/6740973859fd2761667d25371c43e885367c353aac33286de1fb9c40dac8bc09.jpg)

<div style="text-align: center;">Figure 10: Qualitative examples of our complete system. Input to the network are color image and information if its a left or right hand. The network estimates the hand segmentation mask, localizes keypoints in 2D (shown overlayed with the input image) and outputs the most likely 3D pose. The top row shows samples from a dataset we recorded for qualitative evaluation, the following three rows are from R-val and last three rows are from S-val.</div>

![Image](images/f424ad6dd550cb43b1e79b519c209817ee74886560a0bc1caad8d5b6318a88c1.jpg)

<div style="text-align: center;">Figure 11: Two samples from the NYU Hand Pose Dataset by Tompson et al. [^22]. Due to artefacts in the color images this dataset is not suited to evaluate color based approaches.</div>

我们无法将该数据集用于本研究，因为它仅提供已配准的彩色图像，而这些图像仅为具有有效深度数据的像素提供颜色信息。这会导致如图11所示的图像损坏现象，因此对于仅利用颜色信息的方法而言，该数据集无法被使用。
