
# HandFoldingNet：一种利用多尺度特征引导的2D手部骨骼折叠来实现3D手部姿态估计的网络

程文灿$^{1}$、朴宰贤$^{1}$、高钟焕$^{2*}$

$^{1}$成均馆大学人工智能系

$^{2}$成均馆大学信息通信工程学院

{cwc1260, xoxc4565, jhko}@skku.edu

## 摘要

随着3D手部姿态估计在各类人机交互应用中的使用日益广泛，基于卷积神经网络（CNN）的估计模型已被广泛研究。然而，现有模型需要复杂的架构或冗余的计算资源才能换取可接受的精度。为解决这一局限，本文提出HandFoldingNet——一种精准且高效的手部姿态估计器，它可从归一化的3D手部点云输入中回归出手部关节位置。所提出的模型采用基于折叠的解码器，将给定的2D手部骨骼折叠为对应的关节坐标。为了提升估计精度，折叠过程由多尺度特征引导，这些特征既包括全局特征，也包括逐关节局部特征。实验结果表明，在三个手部姿态基准数据集上，所提模型的性能均优于现有方法，且模型参数需求最低。代码可在<https://github.com/cwc1260/HandFold>获取。

### 1. 引言

3D手部姿态估计旨在从输入的手部图像中估算关节位置。精准且实时的估计在各类人机交互应用中至关重要，尤其是在虚拟现实和增强现实领域[^20] [^7] [^23]。近年来，许多研究通过利用深度相机获取的手部深度图像取得了显著进展。但由于自遮挡、噪声、高维度以及手部朝向多样等问题，实现精准且实时的估计仍颇具挑战性[^12] [^9] [^24] [^6]。

随着深度神经网络（DNN）的发展，各种基于DNN的手部姿态估计技术取得了卓越的性能。在这些技术中，大多数采用二维卷积神经网络（CNN）来直接处理手部深度图像。

![Image](images/fc3c3d3fd9e0a943ed58ac6ba5aaf47b9020848c3de426307921b4930b321912.jpg)

<div style="text-align: center;">Figure 1. Illustration of the folding concept. The network can be interpreted as emulating the "force" through multi-scale features extracted from the point cloud. The "force" will drive a 2D hand skeleton to "fold" into the 3D joint coordinates representing the hand pose.</div>

被采用来直接进行手部深度图像处理 [^40] [^10] [^14] [^30] [^3]。然而，2D CNN 无法充分利用深度图像的 3D 空间信息，而这些信息对于实现高精度至关重要。一种直观的解决方案是将手部深度图像离散化为 3D 体素化表示，并使用 3D CNN 执行 3D 到 3D 的推理 [^11] [^24]。然而，其关键限制在于内存消耗随图像分辨率的增加呈立方增长 [^31]。因此，3D CNN 的应用一直局限于低分辨率图像，这可能导致估计中关键细节的丢失。

相比之下，点云被视为一种高效且精确的3D手部姿态估计表示方法，因为它能将手部深度图像建模为连续的3D坐标，而无需离散化。然而，由于点云中点的排列顺序不固定，传统DNN无法直接处理点云数据，直到PointNet的出现[^28]。PointNet采用由逐点共享权重的多层感知机（MLP）和最大池化层构成的简洁对称架构，对输入点的顺序具有不变性。

基于这一架构，一系列基于PointNet的手部姿态估计模型[^9] [^12] [^4] [^21]被提

---

![Image](images/d4984b69b5f31c7d9b74dc37eaa94b74a3ebb7807cd0d44e16c175f704f0b9b3.jpg)

<div style="text-align: center;">Figure 2. The HandFoldingNet architecture. It takes the preprocessed normalized point cloud with surface normal vectors from a 2D depth image as an input. The hierarchical PointNet encoder is then exploited to extract features of various levels to summarize a global feature from the input point cloud. The global folding decoder receives the global feature to guide the folding of a pre-defined 2D hand skeleton into the initial joint coordinates. In the end, the local features near the initial joint coordinates are grouped and fed into the local folding blocks to estimate the accurate joint coordinates.</div>

出。它们可归纳为两类：1）基于回归的方法；2）基于检测的方法。基于回归的方法[^9] [^4]通过基于PointNet的特征提取器将手部形状编码为单一全局特征。代表高维隐空间中手部姿态的该全局特征会被送入非线性回归网络，以推断关节坐标。另一方面，基于检测的方法[^12] [^21]利用分层特征为每个点计算热图特征。这些逐点特征反映了各关节的可能性分布。不过，现有的基于回归和基于检测的策略均存在局限性。基于回归的方法仅处理单一全局特征，这对于实现复杂的3D手部姿态映射而言并不充分。另一方面，基于检测的方法会将分层特征传播到每个点，包括那些对特定关节估计贡献不大的点。因此，这种冗余的特征传播会显著增加计算成本并拖慢估计速度。

为解决这些局限，我们提出了HandFoldingNet——一种精确且高效的3D手部姿态估计网络。HandFoldingNet的核心思路是借助从全局和局部信息中提取的多尺度特征，将2D手部骨架折叠为3D姿态。在FoldingNet中采用折叠式设计[^45]的动机在于它适用于3D手部姿态估计任务。本质上，特定的手部姿态是人类对手部骨架施加力的结果。如图1所示，折叠操作可理解为模拟作用于固定2D手部骨架上的“力”。为了引导折叠过程，HandFoldingNet引入了两个处理不同尺度特征的创新模块：1）全局特征引导的折叠（全局折叠）解码器；2）逐关节局部特征引导的折叠（局部折叠）模块。受FoldingNet启发，全局折叠解码器可将2D手部骨架折叠为3D手部关节坐标。引导折叠的全局特征由基于PointNet的编码器从输入的手部点云中提取[^29] [^9] [^12]。局部折叠模块则利用局部特征以及关节间的空间依赖关系，以增强逐关节特征并修正坐标估计结果。利用局部特征旨在弥补传统基于回归方法的不足。此外，与将局部特征传播到所有点的基于检测的方法不同，我们仅提取每个关节附近的小范围局部特征，以避免大量计算开销。

我们在ICVL [^36]、MSRA [^35]和NYU [^40]数据集上对我们的网络进行了评估，这些数据集是常用于3D手部姿态估计任务评估的具有挑战性的基准测试集。结果表明，无论是在准确性还是效率方面，我们的网络总体上都优于以往的最先进方法。所提出的网络在ICVL、MSRA和NYU数据集上的平均距离误差分别为5.95毫米、7.34毫米和8.58毫米。同时，它仅包含128万个参数，在单块GPU上就能以每秒84帧的速度实时运行。

本文的主要贡献如下：

- 我们提出了一种新型的神经网络HandFoldingNet，它以手部点云为输入，基于多尺度特征引导的折叠过程来估计3D手部关节坐标。

- 我们提出了一种全局特征引导的折叠解码器，用于推断关节级特征和坐标。关节级特征能够帮助模型利用关节间的自然空间依赖关系，从而提升估计性能。

- 我们提出了关节级局部特征引导的折叠方法，用以捕捉局部特征和空间依赖关系，进而增强关节级特征以提高准确性。

- 我们开展了大量实验，来分析所提出的网络及其关键组件的效率与准确性。

---

### 2. 相关工作

#### 2.1. 基于深度的3D手部姿态估计

传统的基于深度图像的3D手部姿态估计方法主要分为三类：生成式方法 [^18] [^41] [^39] [^32]、判别式方法 [^17] [^22]以及混合式方法 [^38] [^34] [^37]。近年来，基于DNN的模型在3D手部姿态估计任务中表现出了卓越的性能。各类实现中通常采用典型的2D CNN来进行姿态估计。一系列研究 [^40] [^10]利用2D CNN从深度图像中提取代表手部关节可能性分布的2D热图。

另一类研究提出了基于2D CNN的回归式方法 [^14] [^30] [^3]，它们作为特征提取器，为关节坐标回归提供高效的特征。与在2D空间中处理不同，一些方法 [^11] [^24]将2D深度图像编码为3D体素，并采用3D CNN来估计3D手部姿态。由于通过乘以相机内参矩阵就能轻松将深度图像转换为点云，因此已经提出了几种基于点云的模型 [^9] [^12] [^4] [^21]。它们通过直接处理输入坐标来在同一3D空间中估计关节坐标，展现出了可接受的效率与性能。

HandFoldingNet的灵感来源于这些基于点云的方法，但在以下方面有所不同。所提出的网络既不直接回归手部关节坐标，也不估计逐点概率分布。相反，它首先回归初始关节坐标以便对局部特征进行分组。同时，它还会提供关节级特征来建模空间依赖关系。最终，网络会聚合这些局部特征和空间依赖关系，以估计精确的关节坐标。

#### 2.2. 深度点云重建

深度点云重建旨在基于从图像、点云或其他类型数据中提取的特征来重建点云。实现点云重建的一种直观方式是采用3D CNN，如[^44] [^2] [^13] [^33]所示。不过，这些方法重建的是点云的体素化表示。除了基于CNN的方法外，其他方法[^1] [^45] [^43] [^5]提出了直接重建点云的方案。

从理论上讲，我们的主要任务——为给定的手部点云估计关节坐标——可以转化为点云重建任务，因为所估计的关节坐标可以被视为需要重建的一小组点。因此，我们借鉴了FoldingNet [^45]的思想来重建关节点云。FoldingNet提出了一种由一系列共享权重的MLP实现的新型折叠操作。这种折叠操作可以直观地理解为学习将给定的2D网格格点折叠成目标点云的“力”。我们的网络与FoldingNet存在两个关键差异：1）为了适配手部姿态估计任务，我们采用2D手部骨骼而非规则网格格点进行折叠；2）为了获得更高的估计精度，我们利用多尺度特征，而FoldingNet仅处理单一全局特征。

### 3. HandFoldingNet

HandFoldingNet旨在通过2D手部关节骨骼折叠来实现手部姿态估计。网络架构如图2所示。它以一个$N \times 6$矩阵$(\mathbf{P}^{nor}, \mathbf{F}^{nor})$作为输入，该矩阵代表一组归一化后的点。输入矩阵的每一行由一个归一化的3D xyz坐标$\mathbf{p}_i^{nor} \in \mathbf{P}^{nor}$和对应的3D表面法向量$\mathbf{f}_i^{nor} \in \mathbf{F}^{nor}$组成。输出是一个$J \times 3$矩阵，代表所估计的J个点的3D坐标。N个点首先被输入到分层PointNet编码器中，以提取不同层次的局部特征以及单一全局特征。随后，全局特征被送入全局特征引导的折叠解码器，引导将固定的2D手部骨骼折叠为3D关节坐标。为了提升估计性能，全局折叠解码器的输出以及其附近的局部特征会经过基于关节的局部特征折叠模块的处理。

#### 3.1. 点云预处理

首先，通过三维空间中的像素重投影将2D深度图像转换为点云，从而形成模型输入（$\mathbf{P}^{nor}$、$\mathbf{F}^{nor}$）。我们采用了HandPointNet [^9]中描述的点云预处理方法。输入深度图像首先通过相机内参转换为点云表示，以适应我们基于点云的网络。接着，为了应对各种手部朝向，从3D点云中创建定向包围盒（OBB）。之后，点云被旋转到OBB坐标系下，该坐标系的轴与手部点分布的主成分对齐。定向后的点会被下采样并归一化到[-0.5, 0.5]范围内，以形成最终输入坐标$\mathbf{P}^{nor}$。最后，从归一化后的点云中计算出逐点的表面法向量$\mathbf{F}^{nor}$。更多细节请参阅[^9]。

#### 3.2. 分层PointNet编码器

我们采用了与[^9] [^12]中相同的分层PointNet编码器，从无序的点云中提取特征。如图2所示，该编码器由L个逐级递进的点集抽象层组成。第l层$(l\in\{1,2,\ldots,L\})$以$N^{l-1}\times(3+C^{l-1})$矩阵为输入。

---

![Image](images/543ae0cf1dda75d939036ec560dc3b52a875e1b9635bab7c80df1310f7d6c877.jpg)

![Image](images/5110250a0afd32b712587d527e9443fce90aee57a5cf7682da37c14d02ab01ef.jpg)

<div style="text-align: center;">Figure 3. Joint-wise local feature guided folding block. The local folding block accepts three inputs, which are the previously estimated joint coordinates, folding embeddings from intermediate layers of the previous folding block, and a local feature map extracted by the previous set abstraction level. The joint coordinates are used as centroids that group local features from the local feature map. Folding embeddings are rearranged to be aligned with the corresponding adjacent joints to collect spatial dependencies. Ultimately, the aggregated feature map composed with grouped local features and rearranged embeddings is fed into a symmetric architecture to compute the residual with respect to the previously-estimated joint locations for more accurate joint estimation.</div>

将前一个 $(l-1)$ 级作为输入，其中第 i 行由一个 3D 坐标 $\mathbf{p}_{i}^{l-1}$ 和相应的特征 $\mathbf{f}_{i}^{l-1}$ 组成。然后它输出 $N^{l}\times(3+C^{l})$ 矩阵，该矩阵由 $N^{l}$ 个子采样质心 $\mathbf{p}_{i}^{l}$ 及其相应的 $C^{l}$ 维局部特征 $\mathbf{f}_{i}^{l}$ 组成。具体来说，对于第一级，输入坐标为 $\mathbf{p}_{i}^{nor}$，相应特征是一个 3D 表面法向量 $\mathbf{f}_{i}^{nor}$。

这些$N^l$个质心是从输入坐标中随机采样的。接着，利用指定半径r内的球查询$\mathbf{p}_i^l$，收集每个质心$\{\mathbf{p}_{s,i}^{l-1}, \mathbf{f}_{s,i}^{l-1}\}_s=1$周围S个邻近点及其对应特征，从而形成一个局部区域[^29]。随后，将该局部区域内的坐标转换到以质心为原点的局部坐标系中：$\mathbf{p}_{s,i}^{l-1} - \mathbf{p}_i^l$。对于每个局部区域，采用带有三层MLP的对称PointNet [^28]，为该区域内的每个点生成$C^l$维特征。随后，通过最大池化操作将这些逐点特征聚合为一个代表对应质心的单一局部特征。因此，第l层中第j个下采样质心的局部特征可表示为：

 $$ \mathbf{f}_{i}^{l}=M A X(h([\mathbf{p}_{s,i}^{l-1}-\mathbf{p}_{i}^{l},\mathbf{f}_{s,i}^{l-1}])), $$

其中h表示MLP，MAX表示逐通道最大池化操作，‘[·]’表示拼接操作。

对于最后一层，它直接对整个输入（未经采样）应用共享权重的MLP和最大池化操作，以生成单一的$C^g$维全局特征，该特征可表示为：

 $$ \mathbf{g}=\mathop{{M A X}}_{1\leq i\leq N^{L-1}}(h([\mathbf{p}_{i}^{L-1},\mathbf{f}_{i}^{L-1}])). $$

#### 3.3. 全局特征引导的折叠解码器

所提出的解码器在全局特征的引导下，将固定的二维手部骨骼折叠成关节的三维坐标。

![Image](images/14f6343411e21e8dcd353a1f817f61bf46d25661ea14dc32c0e8e100173189d6.jpg)

<div style="text-align: center;">Figure 4. An example of a 2D hand skeleton based on the ICVL dataset. The skeleton contains $J = 16$ points, each of which is represented as a 2D coordinate.</div>

该手部骨骼是一组位于二维平面上的手部关节坐标，其生成步骤如下：1）从训练集中随机选取样本；2）测量样本中每对相邻真实关节之间的平均连线长度；3）将连线展开到二维平面上；4）收集每两个相连连线上的关节坐标。ICVL数据集的二维手部骨骼示例如图4所示。

分层PointNet编码器提取出全局特征$\mathbf{g}$后，会将其输入到全局折叠解码器中。在插入全局特征$\mathbf{g}$之前，我们先将其复制J次，再将复制后的特征与大小为$J \times 2$的固定手部骨骼进行拼接。拼接后的结果被送入一个两层MLP，为每个关节生成高维的折叠嵌入$e_j$。随后的一个单层MLP通过对输入嵌入进行处理，预测出初始的三维关节坐标。因此，第j个关节的输出坐标$\mathbf{j}_j^0$可表示为：

 $$ \mathbf{j}_{j}^{0}=h_{p}(\mathbf{e}_{j})\mathrm{w h e r e}\mathbf{e}_{j}=h_{e}([\mathbf{s k e l}_{j},\mathbf{g}]), $$

其中$h_p$和$h_e$表示MLP，$\mathbf{e}_j$表示中间折叠嵌入，$\text{skel}_j$表示固定骨骼中第j个点的二维坐标。

---

#### 3.4. 逐关节局部特征引导的折叠模块

仅使用单一全局特征（即基于全局特征的折叠方法及其他回归类方法）不足以准确估计关节坐标。我们认为，引入额外的逐关节局部特征能够促使网络修正关节坐标。因此，我们提出了一种新颖的逐关节局部特征引导折叠模块，用于捕捉有助于更精确估计的局部特征与空间依赖关系。

如图3所示，第$(k-1)$个折叠模块输出的坐标首先被用作当前第k个局部折叠模块的质心。这J个质心将第l级集合抽象层输出中的J个局部区域归入半径r范围内。从每个区域中采样S个邻居，每个邻居由三维局部坐标$\mathbf{p}_{s,j}^l - \mathbf{j}_j^{k-1}$以及对应$C^l$维的局部特征$\mathbf{f}_{s,j}^l$组成，其中$1 \leq s \leq S$。因此，这种分组方式的输出规模为$J \times S \times (3 + C^l)$。注意，默认情况下l取值为1，而关于l的选择将在4.4节中详细讨论。

此外，我们引入了显式建模空间依赖关系的重排过程。值得一提的是，特定关节的特征由全局折叠解码器中对应行的折叠嵌入来表示。同样，局部折叠模块也会提供逐关节的折叠嵌入，从而使网络能够堆叠更多局部折叠模块以实现精确估计。重排过程首先会对折叠嵌入进行排列，以形成符合图5所示空间依赖映射的重排嵌入。每个重排嵌入的第j行即为第j个关节的相邻关节的折叠嵌入。随后，我们通过将重排嵌入与输入的折叠嵌入拼接起来，来构建空间依赖特征图。如图5所示，在依赖映射中，每个关节会与另外两个相邻关节相连。因此，这一重排过程以大小为$J \times C^f$的折叠嵌入为输入，输出大小为$J \times (C^f + C^f + C^f)$的空间依赖图。具体而言，由于指尖只有一个相邻关节，我们会将其自身与自身拼接，以保持空间依赖图形状的一致性。如图5所示，指尖存在自关联关系。此外，为了与后续的聚合操作前的分组输出维度相匹配，我们会将空间依赖特征图复制S次。

在准备好局部特征与空间依赖特征图后，我们将它们拼接在一起，形成聚合特征图。随后，该聚合特征图被送入具有对称结构的聚合折叠层，如图3所示。在该结构中，我们采用了三层MLP与最大池化操作，从而将特征聚合成每个关节对应的单一折叠嵌入。

![Image](images/d0560bc36bdbeabc87a910e7099eb68c343419fd1ed5b9ab72e23fdf58159a0a.jpg)

<div style="text-align: center;">Figure 5. The spatial dependency mapping between hand joints of the ICVL dataset (left). Each joint permutes its embedding  $\mathbf{e}_j$ to map with its two adjacent joints along the mapping direction of the arrows forming two rearranged embeddings  $\mathbf{e}_j^1$ and  $\mathbf{e}_j^2$ (right). Exceptionally, fingertips are forced to map with themselves (red dotted arrows) to keep consistency.</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>Block type</td><td style='text-align: center; word-wrap: break-word;'>r</td><td style='text-align: center; word-wrap: break-word;'>S</td><td style='text-align: center; word-wrap: break-word;'>$N^{l}$</td><td style='text-align: center; word-wrap: break-word;'>MLP channels</td><td style='text-align: center; word-wrap: break-word;'>max</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>SA (l=1)</td><td style='text-align: center; word-wrap: break-word;'>0.12</td><td style='text-align: center; word-wrap: break-word;'>64</td><td style='text-align: center; word-wrap: break-word;'>512</td><td style='text-align: center; word-wrap: break-word;'>32, 32, 128</td><td style='text-align: center; word-wrap: break-word;'>✓</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>SA (l=2)</td><td style='text-align: center; word-wrap: break-word;'>0.2</td><td style='text-align: center; word-wrap: break-word;'>64</td><td style='text-align: center; word-wrap: break-word;'>128</td><td style='text-align: center; word-wrap: break-word;'>64, 64, 256</td><td style='text-align: center; word-wrap: break-word;'>✓</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>SA (l=3)</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>128</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>128, 128, 512</td><td style='text-align: center; word-wrap: break-word;'>✓</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>global fold (k=0)</td><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;'>J</td><td style='text-align: center; word-wrap: break-word;'>256, 256, 3</td><td style='text-align: center; word-wrap: break-word;'>✗</td></tr><tr><td rowspan="2">local fold (k=1)</td><td style='text-align: center; word-wrap: break-word;'>0.4</td><td style='text-align: center; word-wrap: break-word;'>64</td><td style='text-align: center; word-wrap: break-word;'>J</td><td style='text-align: center; word-wrap: break-word;'>256, 256, 256</td><td style='text-align: center; word-wrap: break-word;'>✓</td></tr><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;'>J</td><td style='text-align: center; word-wrap: break-word;'>256, 256, 3</td><td style='text-align: center; word-wrap: break-word;'>✗</td></tr><tr><td rowspan="2">local fold (k=2)</td><td style='text-align: center; word-wrap: break-word;'>0.4</td><td style='text-align: center; word-wrap: break-word;'>64</td><td style='text-align: center; word-wrap: break-word;'>J</td><td style='text-align: center; word-wrap: break-word;'>256, 256, 256</td><td style='text-align: center; word-wrap: break-word;'>✓</td></tr><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;'>J</td><td style='text-align: center; word-wrap: break-word;'>256, 256, 3</td><td style='text-align: center; word-wrap: break-word;'>✗</td></tr></table>

<div style="text-align: center;">Table 1. Implementation specifications. Each block contains four types of hyperparameters: search radius (r), the number of grouping neighbors (S), sampling centroids ( $N^{l}$), and the number of output channels of each MLP layer. Max stands for the existence of a max-pooling layer at the end of the block. SA stands for the set abstraction level of PointNet encoder. The local folding blocks are divided into two parts at max-pooling for the clear representation.</div>

接下来，我们引入另一层三层MLP，用于将高维嵌入映射到三维坐标。直观而言，由于每个关节仅关注其自身的局部区域，只有这种MLP-MAX-MLP结构才能有效计算出相对位移。因此，我们沿用了残差块设计[^15]。最终的关节坐标是通过将相对位移输出与先前预测的坐标相加得到的。因此，第k个模块中第j个关节的估计坐标表示为：

 $$ \mathbf{j}_{j}^{k}=h_{r}(\mathop{{M A X}}_{1\leq s\leq S}(h_{f}([\mathbf{p}_{s,j}^{l}-\mathbf{j}_{j}^{k-1},\mathbf{f}_{s,j}^{l},\mathbf{e}_{j}^{k-1}])))+\mathbf{j}_{j}^{k-1}, $$

其中，$h_r$ 和 $h_f$ 表示共享权重的多层感知机。$\mathbf{j}_{j}^{k-1}$ 代表前一个全局折叠解码器或局部折叠块中第 j 个输出的关节坐标。$\mathbf{p}_{s,j}^l$ 和 $\mathbf{f}_{s,j}^l$ 分别是第 j 个关节的第 s 个邻居坐标及其特征，这里 l 表示第 l 个集合抽象层级。$\mathbf{e}_{j}^{k-1}$ 表示折叠嵌入的第 j 行与其相邻两个关节的嵌入在全局折叠解码器或局部折叠块中的拼接结果。

---

#### 3.5. 损失函数

作为我们的损失函数，我们采用了平滑 L1 损失，它比 L2 损失对异常值更不敏感。平滑 L1 损失的定义如下：

 $$ L1_{smooth}(\mathbf{x})=\begin{cases}0.5|\mathbf{x}|,&\left|\mathbf{x}\right|<0.01\\|\mathbf{x}|-0.005,&otherwise\end{cases}. $$

由于网络的全局折叠块和局部折叠块会分别输出估计的坐标，我们通过以下的关节损失函数对所有输出进行监督：

 $$ \mathcal{L}=\sum_{j=1}^{J}L1_{s m o o t h}(\mathbf{j}_{j}^{0}-\mathbf{j}_{j}^{*})+\sum_{k=1}^{K}\sum_{j=1}^{J}L1_{s m o o t h}(\mathbf{j}_{j}^{k}-\mathbf{j}^{*}), $$

其中，$\mathbf{j}_j^*$ 表示第 j 个关节的真实坐标，K 表示堆叠的局部折叠块的数量。

### 4. 实验

#### 4.1. 实验设置

我们在 NVIDIA TITAN RTX GPU 上使用 PyTorch 进行了实验。训练时，我们采用 Adam 优化器 [^19]，参数 beta1 = 0.5、beta2 = 0.999，学习率 $\alpha$ = 0.001。输入网络的点数被预处理为 1,024 个，批量大小设为 32。网络的实现细节见表 1。除了输出坐标和残差的层之外，所有多层感知机层都采用了批量归一化 [^16] 和 ReLU [^25] 激活函数。同时，为避免过拟合，我们采用了在线数据增强技术，包括随机旋转（绕 z 轴在 [-37.5, 37.5] 度之间）、三维缩放（[0.9, 1.1]）以及三维平移（[-10, 10] 毫米）。我们使用公开的手部姿态数据集——ICVL [^36]、MSRA [^35] 和 NYU [^40]——来评估所提出模型的性能。我们在 ICVL 数据集上训练模型 400 个周期，在 NYU 数据集上训练 200 个周期，在 MSRA 数据集上训练 80 个周期（60 个周期后学习率衰减为原来的 0.1）。

#### 4.2. 数据集与评估指标

MSRA 数据集。MSRA 数据集 [^35] 提供了来自 9 名受试者的超过 76K 帧数据。每位受试者包含 17 种手部姿态。每帧数据的真实标签包含 $J = 21$ 个关节，其中包括 1 个腕关节和每个手指的 4 个关节。遵循最新研究 [^35] 的做法，我们采用留一受试者交叉验证策略来评估该数据集。

ICVL 数据集。ICVL 数据集 [^36] 是一个常用的深度流手部姿态数据集，分别提供 22K 帧训练数据和 1.6K 帧测试数据。

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td rowspan="2">Methods</td><td colspan="3">Mean error (mm)</td><td rowspan="2">Input</td><td rowspan="2">Type</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>ICVL</td><td style='text-align: center; word-wrap: break-word;'>MSRA</td><td style='text-align: center; word-wrap: break-word;'>NYU</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>DeepModel [^46]</td><td style='text-align: center; word-wrap: break-word;'>11.56</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>17.04</td><td style='text-align: center; word-wrap: break-word;'>2D</td><td style='text-align: center; word-wrap: break-word;'>R</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>DeepPrior [^27]</td><td style='text-align: center; word-wrap: break-word;'>10.4</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>19.73</td><td style='text-align: center; word-wrap: break-word;'>2D</td><td style='text-align: center; word-wrap: break-word;'>R</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Ren-4x6x6 [^14]</td><td style='text-align: center; word-wrap: break-word;'>7.63</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>13.39</td><td style='text-align: center; word-wrap: break-word;'>2D</td><td style='text-align: center; word-wrap: break-word;'>R</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Ren-9x6x6 [^42]</td><td style='text-align: center; word-wrap: break-word;'>7.31</td><td style='text-align: center; word-wrap: break-word;'>9.7</td><td style='text-align: center; word-wrap: break-word;'>12.69</td><td style='text-align: center; word-wrap: break-word;'>2D</td><td style='text-align: center; word-wrap: break-word;'>R</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>DeepPrior++ [^26]</td><td style='text-align: center; word-wrap: break-word;'>8.1</td><td style='text-align: center; word-wrap: break-word;'>9.5</td><td style='text-align: center; word-wrap: break-word;'>12.24</td><td style='text-align: center; word-wrap: break-word;'>2D</td><td style='text-align: center; word-wrap: break-word;'>R</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Pose-Ren [^3]</td><td style='text-align: center; word-wrap: break-word;'>6.79</td><td style='text-align: center; word-wrap: break-word;'>8.65</td><td style='text-align: center; word-wrap: break-word;'>11.81</td><td style='text-align: center; word-wrap: break-word;'>2D</td><td style='text-align: center; word-wrap: break-word;'>R</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>DenseReg [^42]</td><td style='text-align: center; word-wrap: break-word;'>7.3</td><td style='text-align: center; word-wrap: break-word;'>7.2</td><td style='text-align: center; word-wrap: break-word;'>10.2</td><td style='text-align: center; word-wrap: break-word;'>2D</td><td style='text-align: center; word-wrap: break-word;'>D</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>CrossInfoNet [^6]</td><td style='text-align: center; word-wrap: break-word;'>6.73</td><td style='text-align: center; word-wrap: break-word;'>7.86</td><td style='text-align: center; word-wrap: break-word;'>10.08</td><td style='text-align: center; word-wrap: break-word;'>2D</td><td style='text-align: center; word-wrap: break-word;'>R</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>JGR-P2O [^8]</td><td style='text-align: center; word-wrap: break-word;'>6.02</td><td style='text-align: center; word-wrap: break-word;'>7.55</td><td style='text-align: center; word-wrap: break-word;'>8.29</td><td style='text-align: center; word-wrap: break-word;'>2D</td><td style='text-align: center; word-wrap: break-word;'>D</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>3DCNN [^11]</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>9.6</td><td style='text-align: center; word-wrap: break-word;'>14.1</td><td style='text-align: center; word-wrap: break-word;'>3D</td><td style='text-align: center; word-wrap: break-word;'>R</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>SHPR-Net [^4]</td><td style='text-align: center; word-wrap: break-word;'>7.22</td><td style='text-align: center; word-wrap: break-word;'>7.76</td><td style='text-align: center; word-wrap: break-word;'>10.78</td><td style='text-align: center; word-wrap: break-word;'>3D</td><td style='text-align: center; word-wrap: break-word;'>R</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>HandPointNet [^9]</td><td style='text-align: center; word-wrap: break-word;'>6.94</td><td style='text-align: center; word-wrap: break-word;'>8.5</td><td style='text-align: center; word-wrap: break-word;'>10.54</td><td style='text-align: center; word-wrap: break-word;'>3D</td><td style='text-align: center; word-wrap: break-word;'>R</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Point-to-Point [^12]</td><td style='text-align: center; word-wrap: break-word;'>6.3</td><td style='text-align: center; word-wrap: break-word;'>7.7</td><td style='text-align: center; word-wrap: break-word;'>9.10</td><td style='text-align: center; word-wrap: break-word;'>3D</td><td style='text-align: center; word-wrap: break-word;'>D</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>V2V [^24]</td><td style='text-align: center; word-wrap: break-word;'>6.28</td><td style='text-align: center; word-wrap: break-word;'>7.59</td><td style='text-align: center; word-wrap: break-word;'>8.42</td><td style='text-align: center; word-wrap: break-word;'>3D</td><td style='text-align: center; word-wrap: break-word;'>D</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Ours</td><td style='text-align: center; word-wrap: break-word;'>5.95</td><td style='text-align: center; word-wrap: break-word;'>7.34</td><td style='text-align: center; word-wrap: break-word;'>8.58</td><td style='text-align: center; word-wrap: break-word;'>3D</td><td style='text-align: center; word-wrap: break-word;'>R</td></tr></table>

<div style="text-align: center;">Table 2. Comparison of the proposed method with previous state-of-the-art methods on the ICVL, MSRA and NYU datasets. Mean error indicates the mean distance error. Input indicates the input representation of 2D (depth image) or 3D (voxel or point cloud). Type D and R indicate the detection-based method and regression-based method, respectively.</div>

每帧数据的真实标签包含 $J = 16$ 个关节，其中包括 1 个掌关节和每个手指的 3 个关节。由于这些帧还包含人体区域，我们首先按照 [^26] 中提出的方法从深度图像中裁剪出手部区域，再利用全局折叠解码器输出的关节位置来分割手部区域的图像。

NYU 数据集。NYU 数据集是从三个不同视角采集的。每个视角包含 72K 帧训练图像和 8K 帧测试图像，均由微软 Kinect 传感器采集。遵循近期研究的做法，我们仅使用一个视角，并且训练和测试时仅使用总共 36 个标注关节中的 14 个。手部区域的分割过程也与 ICVL 数据集中的方法一致。

评估指标。我们采用两种常用指标来评估手部姿态估计的性能：平均距离误差和成功率。平均距离误差衡量的是整个测试集上所有关节的估计坐标与真实坐标之间的平均欧几里得距离。成功率则是指平均距离误差低于某一距离阈值的帧数所占比例。

#### 4.3. 与现有先进方法的比较

我们将HandFoldingNet与其他先进方法进行比较，其中包括基于2D（深度图像）输入的方法：基于模型的方法（DeepModel）[^46]、DeepPrior [^27]、改进版DeepPrior（DeepPrior++）[^26]、区域集成网络（Ren-4x6x6 [^14]、Ren-9x6x6 [^42]）、Pose-Ren [^3]、密集回归网络（DenseReg）[^42]、CrossInfoNet。

---

![Image](images/d5f9a4a33f141e3c2aab3aa81993d98eec47159b8b2b9a0ca396419eb40ed285.jpg)

![Image](images/cee211e5b84653cf027de98c2fc117dee226149e187f4ed439d8d190c6deab8f.jpg)

![Image](images/c80634dc51777132e30611e8908b1a032bc24aef49afd7a91f60a67608310d5f.jpg)

<div style="text-align: center;">Figure 6. Comparison with the state-of-the-art methods using the ICVL (left), MSRA (middle) and NYU (right) dataset. The success rate is shown in this figure.</div>

![Image](images/6eb4a43c4c62d8679ca51e10fb50f8f49dd72baef3fed0e54a7db532cd6b4de3.jpg)

<div style="text-align: center;">Figure 7. Qualitative results of HandFoldingNet on the ICVL (left), MSRA (middle) and NYU (right) dataset. Hand depth images are transformed into 3D points as shown in the figure. Ground truth is shown in black, and the estimated joint coordinates are shown in red.</div>

[^6]: and JGR-P2O [^8], and methods with 3D (point cloud or voxel) input: 3DCNN [^11], SHPR-Net [^4], HandPointNet [^9], Point-to-Point [^12] and V2V [^24]. Figure 6 shows the success rate on the ICVL, NYU, and MSRA dataset. The qualitative results are represented in Figure 7.

表2总结了三个数据集上基于平均距离误差的性能表现。结果显示，我们的方法在ICVL数据集上的表现优于现有方法，平均距离误差仅为5.95毫米。所提出的模型在MSRA数据集上的误差也位列第二低，在NYU数据集上则位列第三低。在使用3D输入的方法中，我们的方法在ICVL和MSRA数据集上的表现均优于其他先进方法。此外，在所有三个数据集上，HandFoldingNet在基于回归的方法中均展现出最先进的性能。图6表明，当误差阈值分别低于10毫米、13毫米和25毫米时，我们的方法在ICVL、MSRA和NYU数据集上均能达到最高的成功率。

#### 4.4. 消融实验

我们开展了消融实验，以评估模型中各个组件对性能的影响。以下实验均基于ICVL数据集进行评估。局部折叠模块的有效性。该实验旨在验证加入所提出的局部折叠模块后精度的提升情况。为了与包含1个全局折叠模块和2个局部折叠模块的所提网络（三重折叠）进行对比，我们引入了仅提供全局折叠功能的浅层网络（单层折叠）、仅包含1个局部折叠模块的网络（双层折叠），以及包含3个局部折叠模块的网络（四重折叠）。表3展示了不同局部折叠数量的模型之间的性能对比。

结果表明，局部折叠能显著减小距离误差。该实验证明，仅依赖单一全局特征进行估计的全局折叠能力相对较弱，而局部特征有助于修正最终的关节坐标。尽管增加更多局部折叠模块会提高推理开销，但如4.5节所分析，所提模型（三重折叠）的参数数量和运算量相较于现有模型并不显著。不过结果也显示，模型性能在三重折叠时便已达到饱和。原因是第三个局部折叠产生的额外梯度会干扰反向传播过程，从而增加训练难度。值得注意的是，双层折叠的性能仍优于一些参数规模和运算量更小的基于点云的网络。

局部特征与空间依赖性的有效性。我们评估了聚合特征图中关键特征组成部分的贡献，即局部特征和空间依赖性特征。我们进行了两项独立实验：1）不使用局部特征；2）不使用空间依赖性。在不使用局部特征的情况下，我们移除聚合图中的分组局部特征成分，同时保留空间依赖性成分。而在不使用空间依赖性的情况下，我们移除重新排列后的折叠嵌入，保留局部特征。表4显示，平均距离误差增加了

---

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>Global fold</td><td style='text-align: center; word-wrap: break-word;'># Local fold</td><td style='text-align: center; word-wrap: break-word;'>Mean error (mm)</td><td style='text-align: center; word-wrap: break-word;'>#Params</td><td style='text-align: center; word-wrap: break-word;'>FLOPs</td></tr><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;'>8.13</td><td style='text-align: center; word-wrap: break-word;'>0.38M</td><td style='text-align: center; word-wrap: break-word;'>0.46G</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>✓</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>6.34</td><td style='text-align: center; word-wrap: break-word;'>0.78M</td><td style='text-align: center; word-wrap: break-word;'>0.78G</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>✓</td><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'>5.95</td><td style='text-align: center; word-wrap: break-word;'>1.28M</td><td style='text-align: center; word-wrap: break-word;'>1.10G</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>✓</td><td style='text-align: center; word-wrap: break-word;'>3</td><td style='text-align: center; word-wrap: break-word;'>6.08</td><td style='text-align: center; word-wrap: break-word;'>1.78M</td><td style='text-align: center; word-wrap: break-word;'>1.48G</td></tr></table>

<div style="text-align: center;">Table 3. Comparison of different numbers of local folding blocks used in the model. # Local fold indicates the number of local folding blocks attached after the global folding decoder. # Params indicates the total number of parameters of the network. FLOPs indicates the total number of floating-point operations required for the network inference.</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>Local feature</td><td style='text-align: center; word-wrap: break-word;'>Spatial dependency</td><td style='text-align: center; word-wrap: break-word;'>Mean error (mm)</td><td style='text-align: center; word-wrap: break-word;'># Params</td><td style='text-align: center; word-wrap: break-word;'>FLOPs</td></tr><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;'>7.90</td><td style='text-align: center; word-wrap: break-word;'>1.21M</td><td style='text-align: center; word-wrap: break-word;'>1.04G</td></tr><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;'>6.35</td><td style='text-align: center; word-wrap: break-word;'>1.08M</td><td style='text-align: center; word-wrap: break-word;'>0.91G</td></tr><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;'>5.95</td><td style='text-align: center; word-wrap: break-word;'>1.28M</td><td style='text-align: center; word-wrap: break-word;'>1.10G</td></tr></table>

<div style="text-align: center;">Table 4. Comparison of different settings between the local feature and spatial dependency.</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>Sampling level</td><td style='text-align: center; word-wrap: break-word;'>Mean error (mm)</td><td style='text-align: center; word-wrap: break-word;'>#Params</td><td style='text-align: center; word-wrap: break-word;'>FLOPs</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>input</td><td style='text-align: center; word-wrap: break-word;'>6.58</td><td style='text-align: center; word-wrap: break-word;'>1.21M</td><td style='text-align: center; word-wrap: break-word;'>1.04G</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>first $l=1$</td><td style='text-align: center; word-wrap: break-word;'>5.95</td><td style='text-align: center; word-wrap: break-word;'>1.28M</td><td style='text-align: center; word-wrap: break-word;'>1.10G</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>second $l=2$</td><td style='text-align: center; word-wrap: break-word;'>6.48</td><td style='text-align: center; word-wrap: break-word;'>1.34M</td><td style='text-align: center; word-wrap: break-word;'>1.17G</td></tr></table>

<div style="text-align: center;">Table 5. Comparison of different set abstraction levels for local features.</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>Methods</td><td style='text-align: center; word-wrap: break-word;'># Param</td><td style='text-align: center; word-wrap: break-word;'>Speed</td><td style='text-align: center; word-wrap: break-word;'>Time (ms)</td><td style='text-align: center; word-wrap: break-word;'>GPU Type</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>V2V-PoseNet [^24]</td><td style='text-align: center; word-wrap: break-word;'>457.5M</td><td style='text-align: center; word-wrap: break-word;'>3.5</td><td style='text-align: center; word-wrap: break-word;'>23 + 5.5</td><td style='text-align: center; word-wrap: break-word;'>TITAN X</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>HandPointNet [^9]</td><td style='text-align: center; word-wrap: break-word;'>2.58M</td><td style='text-align: center; word-wrap: break-word;'>48</td><td style='text-align: center; word-wrap: break-word;'>8.2 + 11.3</td><td style='text-align: center; word-wrap: break-word;'>GTX1080</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Point-to-Point [^12]</td><td style='text-align: center; word-wrap: break-word;'>4.3M</td><td style='text-align: center; word-wrap: break-word;'>41.8</td><td style='text-align: center; word-wrap: break-word;'>8.2 + 15.7</td><td style='text-align: center; word-wrap: break-word;'>TITAN XP</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Ours</td><td style='text-align: center; word-wrap: break-word;'>1.28M</td><td style='text-align: center; word-wrap: break-word;'>84</td><td style='text-align: center; word-wrap: break-word;'>8.2 + 3.7</td><td style='text-align: center; word-wrap: break-word;'>TITAN RTX</td></tr></table>

<div style="text-align: center;">Table 6. Comparison of the model size and inference time for the methods using the 3D input. Speed stands for the frame rate (fps) on a single GPU. Time stands for the total computation time including preprocessing time and model inference time.</div>

1.55毫米。同样，当不使用空间依赖性时，平均距离误差增加了0.40毫米。这些实验表明，这两种特征对提升估计精度都至关重要。同时，局部特征对性能的提升更为高效，因为它所需的参数和FLOPs更少，却能实现比利用空间依赖性更好的性能。

局部特征的采样层级。HandFoldingNet在PointNet编码器中包含三个集合抽象层级，每个层级具有不同的输入点密度和特征复杂度。因此，我们必须谨慎确定抽象层级，以便局部折叠模块能够有效收集额外的局部特征。为了分析抽象层级对性能的影响，我们分别将输入层、第一集合抽象层和第二集合抽象层作为局部折叠模块的输入进行实验。表5表明，采用第一集合抽象层的输出点云能取得最佳性能，因为关节周围的邻近点足够多（输入点密度高），且它们提供的特征信息也足够丰富（输入特征复杂度高）。另一方面，输入点云的复杂度不足，因为它仅包含3D表面法向量。因此，直接利用输入点云进行局部折叠，无法有效捕捉能够提升性能的必要特征。相反，使用更高的抽象层级（采样层级2）会降低性能。尽管第二层级的特征复杂度足够高，但点在3D空间中实际上较为稀疏，导致局部折叠无法聚集足够的点。

#### 4.5. 运行时间与模型大小

在NVIDIA TITAN RTX GPU上测试，HandFoldingNet处理每个点帧的平均运行时间为11.9毫秒，其中预处理耗时8.2毫秒，网络推理耗时3.7毫秒。因此，它能以约84.0帧/秒的速度实时运行。表6显示，在基于3D输入的方法中，我们的方法总延迟最低。在基于点云的方法中，我们的方法推理速度也最快，预处理时间仅需8.2毫秒。此外，我们提出的网络参数数量极少，仅为1.28M。与以往的最先进模型相比，我们的模型所需参数最少。

### 5. 结论

在本文中，我们提出了HandFoldingNet——一种新颖且高效的神经网络，它以点云为输入并估计3D手部姿态。该网络通过利用多尺度特征（包括全局特征和逐关节局部特征）来实现精确的关节坐标估计。在三个具有挑战性的基准测试上的实验结果表明，我们的网络在消耗最少计算资源的同时，性能优于以往的最先进方法。消融实验也验证了其主要组件对提升精度和效率所起的作用。

## 致谢

本研究部分得到了韩国政府资助的信息通信技术规划与评估研究所（IITP）人工智能研究生项目（IITP-2019-0-00421）以及ICT创新融合项目（IITP-2020-0-00821）的支持。程文灿得到了中国国家留学基金委（CSC）的支持。

---

## 参考文献

[^1]: Panos Achlioptas, Olga Diamanti, Ioannis Mitliagkas, and Leonidas Guibas. Learning representations and generative models for 3d point clouds. In International conference on machine learning, pages 40–49, 2018. 3

[^2]: Andrew Brock, Theodore Lim, James M Ritchie, and Nick Weston. Generative and discriminative voxel modeling with convolutional neural networks. arXiv preprint arXiv:1608.04236, 2016. 3

[^3]: Xinghao Chen, Guijin Wang, Hengkai Guo, and Cairong Zhang. Pose guided structured region ensemble network for cascaded hand pose estimation. Neurocomputing, 395:138–149, 2020. 1, 3, 6

[^4]: Xinghao Chen, Guijin Wang, Cairong Zhang, Tae-Kyun Kim, and Xiangyang Ji. Shpr-net: Deep semantic hand pose regression from point clouds. IEEE Access, 6:43425–43439, 2018. 1, 2, 3, 6, 7

[^5]: Wencan Cheng and Sukhan Lee. Point auto-encoder and its application to 2d-3d transformation. In International Symposium on Visual Computing, pages 66–78. Springer, 2019.

[^6]: Kuo Du, Xiangbo Lin, Yi Sun, and Xiaohong Ma. Cross-infonet: Multi-task information sharing based hand pose estimation. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, pages 9896–9905, 2019. 1, 6, 7

[^7]: Ali Erol, George Bebis, Mircea Nicolescu, Richard D Boyle, and Xander Twombly. Vision-based hand pose estimation: A review. Computer Vision and Image Understanding, 108(1-2):52–73, 2007. 1

[^8]: Linpu Fang, Xingyan Liu, Li Liu, Hang Xu, and Wenxiong Kang. Jgr-p2o: Joint graph reasoning based pixel-to-offset prediction network for 3d hand pose estimation from a single depth image. In European Conference on Computer Vision, pages 120–137. Springer, 2020. 6, 7

[^9]: Liuhao Ge, Yujun Cai, Junwu Weng, and Junsong Yuan. Hand pointnet: 3d hand pose estimation using point sets. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 8417–8426, 2018. 1, 2, 3, 6, 7, 8

[^10]: Liuhao Ge, Hui Liang, Junsong Yuan, and Daniel Thalmann. Robust 3d hand pose estimation in single depth images: from single-view cnn to multi-view cnns. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 3593–3601, 2016. 1, 3

[^11]: Liuhao Ge, Hui Liang, Junsong Yuan, and Daniel Thalmann. 3d convolutional neural networks for efficient and robust hand pose estimation from single depth images. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 1991–2000, 2017. 1, 3, 6, 7

[^12]: Liuhao Ge, Zhou Ren, and Junsong Yuan. Point-to-point regression pointnet for 3d hand pose estimation. In Proceedings of the European conference on computer vision (ECCV), pages 475–491, 2018. 1, 2, 3, 6, 7, 8

[^13]: Rohit Girdhar, David F Fouhey, Mikel Rodriguez, and Abhinav Gupta. Learning a predictable and generative vector

物体的表征方法。载于欧洲计算机视觉会议论文集，第484–499页。施普林格出版社，2016年。3

[^14]: Hengkai Guo, Guijin Wang, Xinghao Chen, Cairong Zhang, Fei Qiao, and Huazhong Yang. Region ensemble network: Improving convolutional network for hand pose estimation. In 2017 IEEE International Conference on Image Processing (ICIP), pages 4512–4516. IEEE, 2017. 1, 3, 6

[^15]: Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep residual learning for image recognition. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 770–778, 2016. 5

[^16]: Sergey Ioffe and Christian Szegedy. Batch normalization: Accelerating deep network training by reducing internal covariate shift. In International conference on machine learning, pages 448–456. PMLR, 2015. 6

[^17]: Cem Keskin, Furkan Kıraç, Yunus Emre Kara, and Lale Akarun. Hand pose estimation and hand shape classification using multi-layered randomized decision forests. In European Conference on Computer Vision, pages 852–863. Springer, 2012. 3

[^18]: Sameh Khamis, Jonathan Taylor, Jamie Shotton, Cem Keskin, Shahram Izadi, and Andrew Fitzgibbon. Learning an efficient model of hand shape variation from depth images. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 2540–2548, 2015. 3

[^19]: Diederik P Kingma and Jimmy Ba. Adam: A method for stochastic optimization. arXiv preprint arXiv:1412.6980, 2014. 6

[^20]: Rui Li, Zhenyu Liu, and Jianrong Tan. A survey on 3d hand pose estimation: Cameras, methods, and datasets. Pattern Recognition, 93:251–272, 2019. 1

[^21]: Shile Li and Dongheui Lee. Point-to-pose voting based hand pose estimation using residual permutation equivariant layer. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 11927–11936, 2019. 1, 2, 3

[^22]: Hui Liang, Junsong Yuan, and Daniel Thalmann. Parsing the hand in depth images. IEEE Transactions on Multimedia, 16(5):1241–1253, 2014. 3

[^23]: Eric Marchand, Hideaki Uchiyama, and Fabien Spindler. Pose estimation for augmented reality: a hands-on survey. IEEE transactions on visualization and computer graphics, 22(12):2633–2651, 2015. 1

[^24]: Gyeongsik Moon, Ju Yong Chang, and Kyoung Mu Lee. V2v-posenet: Voxel-to-voxel prediction network for accurate 3d hand and human pose estimation from a single depth map. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 5079–5088, 2018. 1, 3, 6, 7, 8

[^25]: Vinod Nair and Geoffrey E Hinton. Rectified linear units improve restricted boltzmann machines. In Icml, 2010. 6

[^26]: Markus Oberweger and Vincent Lepetit. Deepprior++: Improving fast and accurate 3d hand pose estimation. In Proceedings of the IEEE international conference on computer vision Workshops, pages 585–594, 2017. 6

## [^27]: Markus Oberweger, Paul Wohlhart, and Vincent Lepetit. Hands deep in deep learning for hand pose estimation. arXiv preprint arXiv:1502.06807, 2015. 6

---

[^28]: Charles R Qi, Hao Su, Kaichun Mo, and Leonidas J Guibas. Pointnet: Deep learning on point sets for 3d classification and segmentation. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 652–660, 2017. 1, 4

[^29]: Charles Ruizhongtai Qi, Li Yi, Hao Su, and Leonidas J Guibas. Pointnet++: Deep hierarchical feature learning on point sets in a metric space. In Advances in neural information processing systems, pages 5099–5108, 2017. 2,4

[^30]: Pengfei Ren, Haifeng Sun, Qi Qi, Jingyu Wang, and Weiting Huang. Srn: Stacked regression network for real-time 3d hand pose estimation. In BMVC, page 112, 2019. 1, 3

[^31]: Gernot Riegler, Ali Osman Ulusoy, and Andreas Geiger. Octnet: Learning deep 3d representations at high resolutions. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 3577–3586, 2017. 1

[^32]: Javier Romero, Dimitrios Tzionas, and Michael J Black. Embodied hands: Modeling and capturing hands and bodies together. ACM Transactions on Graphics (ToG), 36(6):245, 2017. 3

[^33]: Abhishek Sharma, Oliver Grau, and Mario Fritz. Vconv-dae: Deep volumetric shape learning without object labels. In European Conference on Computer Vision, pages 236–250. Springer, 2016. 3

[^34]: Toby Sharp, Cem Keskin, Duncan Robertson, Jonathan Taylor, Jamie Shotton, David Kim, Christoph Rhemann, Ido Leichter, Alon Vinnikov, Yichen Wei, et al. Accurate, robust, and flexible real-time hand tracking. In Proceedings of the 33rd Annual ACM Conference on Human Factors in Computing Systems, pages 3633–3642, 2015. 3

[^35]: Xiao Sun, Yichen Wei, Shuang Liang, Xiaoou Tang, and Jian Sun. Cascaded hand pose regression. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 824–832, 2015. 2, 6

[^36]: Danhang Tang, Hyung Jin Chang, Alykhan Tejani, and Tae-Kyun Kim. Latent regression forest: Structured estimation of 3d articulated hand posture. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 3786–3793, 2014. 2, 6

[^37]: Danhang Tang, Jonathan Taylor, Pushmeet Kohli, Cem Keskin, Tae-Kyun Kim, and Jamie Shotton. Opening the black box: Hierarchical sampling optimization for estimating human hand pose. In Proceedings of the IEEE international conference on computer vision, pages 3325–3333, 2015. 3

[^38]: Jonathan Taylor, Lucas Bordeaux, Thomas Cashman, Bob Corish, Cem Keskin, Toby Sharp, Eduardo Soto, David Sweeney, Julien Valentin, Benjamin Luff, et al. Efficient and precise interactive hand tracking through joint, continuous optimization of pose and correspondences. ACM Transactions on Graphics (TOG), 35(4):1–12, 2016. 3

[^39]: Anastasia Tkach, Andrea Tagliasacchi, Edoardo Remelli, Mark Pauly, and Andrew Fitzgibbon. Online generative model personalization for hand tracking. ACM Transactions on Graphics (ToG), 36(6):1–11, 2017. 3

[^40]: Jonathan Tompson, Murphy Stein, Yann Lecun, and Ken Perlin. Real-time continuous pose recovery of human hands using convolutional networks. ACM Transactions on Graphics (ToG), 33(5):1–10, 2014. 1, 2, 3, 6

[^41]: Dimitrios Tzionas, Luca Ballan, Abhilash Srikantha, Pablo Aponte, Marc Pollefeys, and Juergen Gall. Capturing hands in action using discriminative salient points and physics simulation. International Journal of Computer Vision, 118(2):172–193, 2016. 3

[^42]: Chengde Wan, Thomas Probst, Luc Van Gool, and Angela Yao. Dense 3d regression for hand pose estimation. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 5147–5156, 2018. 6

[^43]: Weiyue Wang, Duygu Ceylan, Radomir Mech, and Ulrich Neumann. 3dn: 3d deformation network. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 1038–1046, 2019. 3

[^44]: Zhirong Wu, Shuran Song, Aditya Khosla, Fisher Yu, Linguang Zhang, Xiaoou Tang, and Jianxiong Xiao. 3d shapenets: A deep representation for volumetric shapes. In Proceedings of the IEEE conference on computer vision and pattern recognition, pages 1912–1920, 2015. 3

[^45]: Yaoqing Yang, Chen Feng, Yiru Shen, and Dong Tian. Foldingnet: Point cloud auto-encoder via deep grid deformation. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 206–215, 2018. 2, 3

[^46]: Xingyi Zhou, Qingfu Wan, Wei Zhang, Xiangyang Xue, and Yichen Wei. Model-based deep hand pose estimation. arXiv preprint arXiv:1606.06854, 2016. 6
