
# MEgATrack：用于虚拟现实的单色自中心关节手部追踪技术

韩尚辰、刘贝贝、兰迪·卡贝萨斯、克里斯托弗·D·特威格、张培昭、杰夫·佩特考、余子豪、蔡俊荣、穆扎费尔·阿克拜、王铮、阿萨夫·尼坦、董刚、叶雨婷、陶玲玲、万成德、罗伯特·王，Facebook Reality Labs

![Image](images/676e0b649959fab5adf2fef79f22c807646f0e684b22cd26e19dd7d1f1bb0e01.jpg)

![Image](images/d7313286ee5392192ba3181055eecdd26dd81ea3fba22cbd756dc5afc2314062.jpg)

![Image](images/176fc51fce02a6c0bf921fe719d77ac4776521341ec9ce7c13d1acbdbf298245.jpg)

<div style="text-align: center;">Fig. 1. We present a real-time hand-tracking system using four monochrome cameras mounted on a VR headset. We output the user's skeletal poses and rigged hand model meshes. Here we show some snapshots of users using our system to drive interactive VR experiences.</div>

我们提出了一种实时手部追踪系统，用于驱动虚拟和增强现实（VR/AR）体验。该系统采用四台鱼眼单色摄像头，能够在较大的工作区域内为不同用户生成精确且抖动低的3D手部运动数据。我们通过设计用于手部检测和手部关键点定位的神经网络架构来实现这一目标。我们的手部检测网络能够稳健地应对各种真实世界环境；关键点估计网络则利用追踪历史信息来生成空间和时间上一致的手部姿态。我们设计了可扩展的半自动化机制，结合人工标注和自动追踪技术来收集大量多样化的真实数据。此外，我们提出了一种“先检测后追踪”的方法，既提升了手部运动的流畅度，又降低了计算成本；优化后的系统在PC上的运行频率可达60Hz，在移动处理器上也可达到30Hz。这些成果共同构成了实用的手部捕捉系统，它已成为Oculus Quest VR头显的默认功能，用于实现输入操作和社交互动。

CCS概念：• 计算方法 → 计算机视觉。

其他关键词：动作捕捉、手部追踪、虚拟现实

## ACM参考格式

韩尚辰、刘贝贝、兰迪·卡贝萨斯、克里斯托弗·D·特威格、张培昭、杰夫·佩特考、余子豪、蔡俊荣、穆扎费尔·阿克拜、王铮、

王、阿萨夫·尼坦、董刚、叶雨婷、陶玲玲、万成德、罗伯特·王。2020年。MEgATrack：用于虚拟现实的单色自中心关节手部追踪技术。《ACM图形学汇刊》第39卷第4期，文章编号87（2020年7月），共13页。<https://doi.org/10.1145/3386569.3392452>

## 1 引言

近年来VR/AR技术的进步推动了Oculus Quest、微软HoloLens和HTC Vive等商用头显在游戏、虚拟训练以及虚拟世界社交等领域的普及。作为新型计算平台，VR/AR仍在探索多种输入方式，包括鼠标键盘、游戏手柄、六自由度（DOF）运动控制器和可穿戴手套。基于视觉的手部追踪有望比这些外设提供更便捷、交互阻力更低的输入方式。例如，用户无需携带或充电额外设备，也无需佩戴可穿戴装置。不过，要成为真正便捷的输入方式，手部追踪必须能够适应环境和用户的差异，支持较大的工作区域，并能产生响应迅速且精准（抖动低）的运动以实现目标定位和选择。由于VR/AR头显的便携性越来越强，手部追踪输入系统还必须在较低的计算资源消耗下运行。

以往的大多数手部追踪研究都聚焦于外部深度摄像头或RGB摄像头。深度摄像头能以2.5D点云的形式提供手部几何信息，但这类摄像头对硬件设计和功耗有额外要求。相比之下，RGB摄像头更容易集成，而且随着深度学习技术的进步，其应用价值也在不断提升。因此，借助神经网络从单个RGB摄像头预测手部姿态已成为热门的研究方向。

尽管已经取得了持续进展，但仍有几个问题阻碍了基于RGB的手部追踪技术在VR/AR领域的应用。首先，从单个RGB摄像头预测3D手部姿态本身存在固有的

---

难以求解的问题，因为存在尺度歧义，这使得它无法直接满足驱动VR输入所需的3D姿态估计要求。虽然通过双目视觉可以解决尺度歧义问题，但现有方法难以轻松适配以实现多视角下的稳定预测。其次，大多数基于RGB的方法要么专注于关键点回归[Cai et al. 2018; Iqbal et al. 2018; Spurr et al. 2018; Yang and Yao 2019; Zhang et al. 2016; Zimmermann and Brox 2017a]，要么同时进行姿态和形状重建[Boukhayma et al. 2019; Ge et al. 2019; Hasson et al. 2019; Zhang et al. 2019b]，但这两种方式都不太适合满足VR/AR应用中对自我存在感的维持要求。前者无法直接用于渲染真实的手部网格或重新定位手部动作；后者则无法保证手部形状随时间的一致性。第三，以往基于RGB的追踪研究并未利用或针对时间信息进行评估，导致预测结果存在抖动，无法满足瞄准任务的需求。据我们所知，目前尚无相关研究量化这一问题，也未给出解决思路。

最后，对于基于学习的手部追踪系统而言，或许最关键的问题是获取足够的高质量真实数据。由于手部经常发生自遮挡现象，手动标注图像中的手部关键点并不现实。现有的一些方法采用多视角采集系统来应对这些挑战，但这类系统便携性较差，限制了在多种背景和光照环境下采集数据的能力。作为变通方案，[Zimmermann et al. 2019]采用绿幕进行背景替换作为后期处理，但无法支持光照变化。[Zhang et al. 2016]则利用基于深度的手部追踪方法来为RGB视图生成真实数据。虽然这是一种更具扩展性的解决方案，但要确保深度追踪器在严重遮挡情况下仍能保持足够精度，本身就是一个难题。另一种生成真实训练数据的方法是合成图像[Mueller et al. 2018]。然而，如何生成足够逼真的合成数据，以训练出能跨用户和环境泛化的网络，目前仍不明确。

本研究的主要贡献如下：

我们提出了一种使用四个安装在身上的单色鱼眼摄像头来输出3D手部姿态估计的追踪系统。据我们所知，这是首个能在不同环境和用户中稳定追踪、支持大工作范围，且不仅能在PC上，还能在移动处理器上实现实时性能的手部追踪系统。

- 我们提出了一种新的关键点估计架构，该架构利用了追踪历史信息，从而提升了帧间的时间平滑度以及多视角间的空间一致性。

- 此外，我们阐述了如何利用便携且轻便的数据采集方法高效生成多样化、高质量的标签，且所需的人工标注量极少。

## 2 相关工作

基于RGB的方法。早期的基于RGB的方法[de La Gorce等人，2008年；Prisacariu和Reid，2011年；Stenger等人，2006年]遵循“分析-合成”范式，将手部模型与边缘、肤色、轮廓以及光流等低级视觉线索相匹配。由于手部具有自相似性、细微的颜色变化以及严重的自遮挡现象，这一任务极具挑战性。后续的研究通过为跟踪系统添加彩色手套[Wang和Popović，2009年]或多摄像头装置[Ballan等人，2012年]来解决这些难题。另一种研究思路是利用最近邻算法在数据集中寻找匹配的图像/姿态对[Athitsos和Sclaroff，2003年]。

当前最先进的技术以基于深度学习的方法为主，这类方法可直接回归手部骨骼关键点的坐标[Cai等人，2018年；Iqbal等人，2018年；Spurr等人，2018年；Tekin等人，2019年；Yang和Yao，2019年；Zhang等人，2016年；Zimmermann和Brox，2017a]，且在拥有充足训练数据时能达到很高的精度。近期的研究[Cai等人，2018年；Iqbal等人，2018年；Spurr等人，2018年；Tekin等人，2019年；Yang和Yao，2019年]主要聚焦于逐帧估计。由于这类方法大多忽略了运动线索，因此当手指被遮挡时，结果可能会出现抖动现象。其中一个显著的例外是[Cai等人，2019年]，该方法利用图卷积来提取时间信息，但却忽略了手部形状的一致性。最近，[Boukhayma等人，2019年；Ge等人，2019年；Hasson等人，2019年；Zhang等人，2019b]将深度神经网络扩展到可直接恢复手部形状和姿态的领域。不过，这些方法并未涉及个性化过程，也无法保证同一用户的手部形状在不同帧间保持一致。

我们的方法与以往的研究有所不同，因为我们专注于以人眼为中心的AR/VR输入场景。我们并未使用RGB摄像头，而是选用单色摄像头——在低光照条件下，单色摄像头的信噪比优于同类型的RGB摄像头。我们使用鱼眼镜头来扩大交互范围，但这也需要重新定义手部关键点估计问题，以便预测距离而非深度。此外，输入应用对抖动更为敏感，而且从AR/VR头戴设备的以人眼为中心视角来看，跟踪过程更容易出现自遮挡现象。为解决这些问题，我们提出了一种融入跟踪历史的关键点回归网络，该网络能输出时间上更平滑的结果，并有助于解决自遮挡问题。

基于深度的方法。深度传感器已被广泛应用于手部跟踪领域[Mueller等人，2019年；Oikonomidis等人，2012年；Sharp等人，2015年；Tagliasacchi等人，2015年；Taylor等人，2016年、2017年；Zhang等人，2019a]。基于模型的方法能够将手部网格可靠地拟合到深度传感器提供的重建点云上，但这种方法无法推广到RGB图像。

除了少数例外情况[Zhang等人，2016年]，大多数基于深度的方法都采用主动照明技术[Mueller等人，2019年；Sharp等人，2015年；Tagliasacchi等人，2015年；Taylor等人，2016年、2017年；Zhang等人，2019a]，这种技术在无纹理环境中能提供更高的精度。然而，由于构建广角投影仪难度较大，主动照明会限制视场角（FOV），进而缩小交互范围。此外，深度摄像头比单色摄像头体积更大、功耗更高，因此难以集成到VR/AR头戴设备中。

虽然我们在推理阶段使用单色摄像头，但为了训练神经网络，我们借助基于深度的手部跟踪技术[Taylor等人，2017年]来生成精确的 Ground Truth，从而充分利用两种系统的优势。

---

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

<div style="text-align: center;">Fig. 2. Hand-tracking pipeline. Our system takes inputs from 4 monochrome VGA (640x480) cameras. We first compute a per-hand, per-image bounding box using either the hand detection network (DetNet) or by extrapolating the hand pose from the previous frames (Section 3.3). We crop each image using the bounding box and feed the resulting hand image into the hand keypoint network (KeyNet). The input is further augmented using keypoint features generated from the extrapolated hand pose (Section 3.4). The network predicts a 2D location heatmap and 1D relative distance heatmap for each of the predefined 21 hand keypoints. The keypoints are used to fit a template hand model for each hand (Section 3.5). Finally the output of the previous two frames are used to predict the pose in the next frame, which is used to improve both the bounding boxes and keypoint estimation.</div>

训练数据的生成。手动标注3D手部姿态既繁琐又不可靠。在手部自遮挡的情况下，人工标注容易出现时间上的抖动现象，且不同标注者之间也难以达成一致意见 [Supancic et al. 2015]。为了尽量减少人力投入，[Oberweger et al. 2016; Tompson et al. 2014] 提出将人工标注与基于模型的跟踪技术相结合：要么仅标注部分关键帧 [Oberweger et al. 2016]，要么手动初始化跟踪器 [Tompson et al. 2014]。而 [Simon et al. 2017] 则采用多摄像头系统并结合引导式标注方式，仅需标注者给出所估计的姿态是否准确的二元判断即可。

另一类研究方法则利用合成数据。为了缩小真实数据与合成数据之间的分布差异，[Mueller et al. 2018; Shrivastava et al. 2017] 借助生成对抗网络（GAN）来提升合成数据的真实感。另外，[Dibra et al. 2017; Wan et al. 2019] 会先用合成数据对姿态估计网络进行初始化，随后通过最小化模型拟合误差，让该网络在未标注的真实数据上进行微调。

利用其他模态的摄像头，例如惯性测量单元（IMU）[Huang et al. 2018] 或磁式6D传感器[Yuan et al. 2017]，也是生成精准手部姿态标注的有前景的途径。不过，佩戴这些传感器会改变手部的外观，尤其是对RGB或单色图像输入而言，因此这些方法并不适合用于训练基于深度学习的系统。

在本研究中，我们采用深度跟踪器来生成用于训练关键点估计网络的真实手部姿态数据。当跟踪器失效时，这种基于模型的跟踪技术仅需极少的人工干预（仅需提供2D边界框）。我们的系统能在不牺牲灵活性的前提下，最大程度地保证真实数据的质量。因此，相较于以往提出的任何RGB数据集，我们的训练集在手型、姿态及背景变化方面更加丰富多样，规模也更大 [Zhang et al. 2016; Zimmermann and Brox 2017a]。

### 3 基于单色摄像头的手部跟踪 3.1 概述

我们在图2中概述了我们的手部跟踪系统。系统以四台单色摄像头采集的图像为输入（见第3.2节），先检测每张图像中的左手和右手，从而生成一组边界框（见第3.3节）。接着从图像中裁剪出每个边界框，并将其送入能够检测手部21个关键点的网络中（见第3.4节）。最后利用得到的关键点来拟合3D手部姿态（见第3.5节）。

我们的手部模型由两部分组成：运动学手部骨架 $\mathbf{S}$ 和网格模型 $\mathbf{M}$。手部骨架 $\mathbf{S}$ 包含26个自由度（DOF）——其中6个DOF用于表示全局变换 $\{\mathbf{R}, \mathbf{t}\}$，每个手指有4个表示关节旋转的DOF。此外，我们在手上定义了21个关键点：每个手指的掌指关节（MCP）、近侧指间关节（PIP）、远侧指间关节（DIP）以及指尖位置，还有腕部和手掌中心（注意拇指有3个关键点而非4个）。我们可以通过以下公式计算某个关键点的全局位置：

 $$ p_{i}(\theta)=T_{b_{i}}(\theta)\cdot p_{i}^{b_{i}} $$

其中 $b_{i}$ 表示与关键点 i 相关联的骨骼索引，$T_{b_{i}}$ 是世界空间骨骼变换，它是手部姿态 $\theta$ 的函数，而 $p_{i}^{b_{i}}$ 是骨骼 $b_{i}$ 局部空间中的关键点位置。最后，网格模型使用传统的线性混合蒙皮进行绑定。

### 3.2 摄像头配置

我们使用了四台同步工作的全局快门VGA摄像头来驱动手部追踪器（见图3）。每台摄像头覆盖的视场范围为$150^{\circ}$（宽度）、$120^{\circ}$（高度）以及$175^{\circ}$（对角线长度）。图3展示了这种摄像头配置下的覆盖范围。画面下方中央区域由两台或更多摄像头共同覆盖（立体视觉模式，红色/橙色/绿色），从而确保这些区域的追踪精度最高。

---

![Image](images/8984b4640868be4372a5e99d1b9f960407d37c624a6d3de99085df7b78aa793b.jpg)

<div style="text-align: center;">Fig. 3. Camera configuration. On the left is a frame holding the 4 monochrome VGA fisheye cameras (circled in blue) that we use for hand-tracking. The frame has a hollow front plate so users can see their hands for data collection purposes. On the right we plot the combined field of view at 50cm distance from the center of the 4 cameras. The angle increases linearly as we move out from the center of the plot.  $0^{\circ}$ corresponds to the forward-facing (imagine looking forward and extending a ray from the bridge of your nose). We color code the areas by how many cameras can see them: 4(red), 3(orange), 2(green), 1(blue), 0(black).</div>

而人体工程学交互最可能发生的区域，则通过侧边的单摄像头进行手部追踪（单目模式，蓝色），不过其追踪精度会有所降低（详见第5节）。这样的设计确保了尽可能大的工作空间。

### 3.3 手部检测

手部检测的任务是在每张输入图像中找出每只手的外接矩形框。其中的关键挑战在于要确保算法在各种现实环境中都能保持鲁棒性。为应对这一挑战，我们针对这种摄像头配置收集了一个规模庞大且种类丰富的手部检测数据集，并采用半自动标注方法完成标注（详见第4.2节）；同时，我们提出了一种简单高效的CNN架构，将其命名为DetNet。

DetNet的设计灵感来源于轻量级的单次检测器[Liu et al. 2016; Redmon and Farhadi 2017](SSD)，这类检测器能够同时完成定位与分类任务。我们进一步利用了“任何输入图像中最多只会出现两只手”这一特性，因此将DetNet设计为能直接从VGA分辨率的输入图像中回归出每只手的二维中心坐标及半径。此外，还有一个标量形式的“置信度”输出，用于指示图像中是否存在对应的手。有关网络架构的更多细节，请参阅补充材料。

训练过程中，我们采用了相应的损失函数。

 $$ L=\sum_{i\in\{left,right\}}L_{loc,i}+\lambda L_{conf,i}, $$

其中，$L_{loc,i}$通过均方误差损失来约束外接圆参数，$L_{conf,i}$则利用标准的二元交叉熵损失来约束手部置信度；系数$\lambda$用于平衡这两项损失的权重（训练DetNet时取$\lambda = 100$）。这些损失值会对左右手的情况分别求和。我们生成的检测用外接矩形框，是能够恰好容纳网络输出之圆的最小正方形；只有当置信度高于0.5时，才会生成这样的矩形框。

基于跟踪的检测方法。一般来说，为了保证在所有视角下都能找到双手，需要在四张图像上运行DetNet。由于我们的目标是移动端架构，即便对于经过功耗优化的DetNet架构而言，逐帧运行该方法也过于耗费资源。为克服这一限制，当能够追踪到手部时，我们便采用基于跟踪的检测方式。我们首先根据前两个已追踪到的手部姿态来推算当前手部的姿态，$\hat{\theta}_{t} = 2\theta_{t-1} - \theta_{t-2}$。基于跟踪的检测利用这个推算出的姿态$\hat{\theta}_{t}$：将手部关键点投影到每台摄像机中，再以最小外接圆作为检测结果。若当前没有可追踪的手部，我们就对下一帧图像运行DetNet。为了进一步降低计算量，我们仅轮流在某一台摄像机上运行DetNet。一旦在单张图像中检测并追踪到手部，就能利用已追踪的姿态在下一帧中为其余摄像机生成边界框，从而实现后续的立体跟踪。最终形成的系统几乎能瞬间（在两个时间步内）重新获取手部信息，且仅需一次DetNet评估（若两只手都已被追踪，则无需评估）。基于跟踪的检测还有额外优势：生成的边界框在时间上更为平滑；若逐帧运行DetNet，边界框会出现抖动，进而给后续流程带来更多噪声。有关这些优化所带来的效果的详细定量评估结果，请参阅第5.4节。

### 3.4 关键点估计

我们的关键点估计网络KeyNet，会根据手部检测步骤中预测的边界框所对应的图像裁剪区域，预测手部上的21个关键点。以往的关键点估计研究通常独立处理每张图像，这对实时多摄像机系统而言存在若干弊端。首先，当手部在重叠的摄像机视角间移动时，由于每个视角被独立处理，且手部部分超出画面范围的视角会给关键点估计带来困难，导致预测质量下降。其次，由于未强制保证时间一致性，关键点容易出现抖动，尤其是被遮挡的手指部位。

为解决这两个问题，我们对网络结构进行了调整，将推算出的关键点作为额外的网络输入。在第5节中，我们将展示这种架构如何有效提升空间和时间一致性，进而实现低抖动的跟踪系统。

KeyNet的输入是手部检测步骤中得到的方形边界框裁剪图像。为确保整个手部可见，我们将裁剪尺寸扩大了20%。与手部检测步骤类似，若手部正在被追踪，我们会推算出之前的3D手部姿态，并将21个关键点投影到图像上。随后，我们将这21个关键点的坐标作为额外信息加入KeyNet的输入中。每个关键点坐标包含一个归一化至$[0, 1]$的2D关键点坐标，以及一个1D相对距离坐标——我们将在下一节介绍这一坐标。若手部未被追踪，该通道会被替换为零值。

网络会为预测的21个关键点分别输出一张2D热图，这些热图是根据[Tompson等人，2014年]的方法通过高斯函数计算得出的。此外，我们还预测一张1D热图，用于编码每个关键点的相对距离（详见下一节）。为了训练

---

![Image](images/cb28495a1e6aa276cd1fba9337d51ad8a93e84fdebe998dcc9fe32af534f215a.jpg)

<div style="text-align: center;">Fig. 4. We use a 2D example to demonstrate the advantage of predicting relative distance over relative depth. The red and blue curves correspond to the same shape appearing in different locations. The cropped view of these two curves will be identical for an equidistance (fisheye camera) projection. We consider two points on the curve as keypoints. Left: while the cropped images of the two curves are identical, the depth values are different. A network that uses the image to predict the relative depth between the keypoints will struggle to resolve the ambiguity in the ground truth. Right: the two images have the same relative distance values, so the keypoint network can reliably map the input to a single relative distance prediction.</div>

该网络，我们使用均方误差损失函数来约束2D和1D距离热图的输出。

 $$ L_{2D}=\|\boldsymbol{H}_{2D}-\hat{\boldsymbol{H}}_{2D}\|_{2}^{2}+\alpha\|\boldsymbol{H}_{1D}-\hat{\boldsymbol{H}}_{1D}\|_{2}^{2} $$

这里，$H_{2D}$、$\hat{H}_{2D}$、$H_{1D}$、$\hat{H}_{1D}$分别是真实的和预测的二维热图，以及真实的和预测的距离热图。$\alpha$是一个用于在训练过程中平衡两种损失项的参数，实际应用中将其设为0.05。我们的网络仅设计用于预测左手的关节点。若要预测右手的关节点，只需将网络的输入和输出沿x轴镜像即可。

深度与距离的预测。以往关于3D姿态预测的研究多采用2D图像空间中的关节点和1D相对深度值[Zimmermann和Brox 2017b]。对于正交或弱透视相机而言，深度与图像空间的预测相互正交，因此选择深度作为预测量效果较好。然而，鱼眼相机更适合用等距投影模型[Kannala和Brandt 2006]来描述，此时光线由其与相机主轴的夹角$\theta$来参数化。因此，对于画面边缘附近的裁剪图像而言，在图像平面上正交地预测深度会产生歧义；详见图4（左）。

如图4（右）所示，预测相对距离能确保给定的输入图像对应唯一的输出值。

 $$ d_{i}^{\mathrm{r e l}}=\frac{d_{i}-\bar{d}}{\phi} $$

此处，$d_i$表示关节点i到相机中心的距离，$\bar{d} = \sum_i d_i/n$是所有关节点的平均距离，而$\phi$则是手部骨骼的全局尺度（见第3.6节）。

### 3.5 基于模型的姿态估计

一旦我们获得了手部的21个3D关节点，便可求解手部的姿态。

 $$ \theta=\min_{\theta}(E_{\mathrm{2D}}+w_{1}E_{\mathrm{dist}}+w_{2}E_{\mathrm{temporal}}). $$

2D误差项$E_{2D}$用于确保结果与检测到的2D关节点一致，

 $$ E_{\mathrm{2D}}=\sum_{i,j}\|\Pi_{j}(p_{i}(\theta))-\hat{p}_{i,j}\|_{2}^{2}, $$

其中，$\Pi_{j}$是将3D空间中的点投影到第j个相机图像空间的函数，而$\hat{p}_{i,j}$则是第j个相机图像空间中第i个预测的关节点。

相对距离的1D误差项为：

 $$ E_{\mathrm{d i s t}}=\sum_{i,j}||(d i s t_{j}(p_{i}(\theta))-d i s t_{j}(p_{0}(\theta))-\phi\cdot(\hat{d}_{i,j}^{r e l}-\hat{d}_{0,j}^{r e l})||_{2}^{2}, $$

其中，$dist_j$是计算某点到第j个相机距离的函数，$\hat{d}_{i,j}^{rel}$则是第j个相机中第i个关节点的预测相对距离坐标。

时间项用于确保追踪到的手部姿态具有平滑性。

 $$ E_{\mathrm{t e m p o r a l}}=||\theta-\theta_{t-1}||_{2}^{2} $$

$\theta_{t-1}$是上一帧中可用的手部姿态。需要注意的是，该项采用了恒定位置运动模型，因为我们发现恒定速度模型在手部快速运动时容易出现超调现象。实际应用中，$w_1$和$w_2$分别被设为0.04和20。我们采用Levenberg-Marquardt求解器，若有上一帧的有效手部姿态则以此作为初始值，否则使用中性手部姿态。

### 3.6 求解手部尺度

单张图像中，用户手部的大小与其到相机的距离之间存在固有的歧义。我们通过运行自动校准流程来解决这一问题，从而估算出手部处于STEREO区域时的尺寸。我们沿用KeyNet输出的关节点预测结果，但为了提升估算精度，还引入了不同拍摄时间的多帧图像约束。我们首先选取左或右手在STEREO区域可见的帧进行采样。我们在姿态参数中新增了一个全局尺度参数$\phi$（左手和右手共用），随后最小化多帧版本的$E_{2D}$。

 $$ \min_{\theta_{t},\phi}\sum_{t=1}^{n}E_{2\mathrm{D}}(\theta_{t},\phi) $$

其中，$\theta_{t}$ 表示特定时间点 t 的手部姿态，而 $E_{2D}(\theta_{t},\phi)$ 则表示在时间 t 拍摄的所有图像中的关键点误差。需要注意的是，同时求解手部姿态和缩放比例是关键，这样优化器才能调整距离以补偿缩放差异。雅可比矩阵的块对角结构使我们能够在 $O(n)$ 中计算出列文伯格-马夸特搜索方向。

## 4 大规模数据生成

与 [Zimmermann et al. 2019] 的研究结果类似，我们发现基于现有RGB手部姿态数据集训练出的网络在新环境和相机配置下的泛化能力较差。因此，我们觉得有必要自行生成数据集来训练DetNet和KeyNet。这两项任务的要求有所不同：手部检测仅需标注框足够精确即可，但要求相机配置尽可能与目标配置一致；而关键点估计对相机的敏感度则较低。

---

![Image](images/b01cafa8fe59df87b2d701e724913c462abeae7087a803d283f33df3c84a228f.jpg)

<div style="text-align: center;">Fig. 5. Multi-camera system for keypoint annotation. Left image shows the multi-camera rig with a single depth camera (in red circle) and 6 monochrome cameras (in blue circles). The rig is attached to a backstrap so that user can put it on and walk out to environments with various lightings and backgrounds. Right images show captured frames and generated ground truth. We intentionally place left hand in front of depth camera with minimum occlusion. To this end, the ground truth is generated based on depth camera and projected to other monochrome views.</div>

（因为网络仅能看到裁剪后的图像），但需要对整个手部姿态进行精确标注。因此，我们开发了两种可扩展的方法，用于在真实场景中为DetNet和KeyNet生成高质量的训练数据。

### 4.1 基于深度信息的手部追踪来获取关键点标签

为了给KeyNet的训练生成关键点标签，我们利用基于深度信息的手部追踪系统生成真实值关键点标注，再将这些关键点投影到多个校准好的单色视图中。图5展示了我们的硬件设置：六个帧率为60Hz的单色鱼眼摄像头被安装在刚性框架上，用以模拟以自我为中心的视角；一台帧率为50Hz的深度相机用于捕捉并标注受试者的手部动作。这些摄像头在空间和时间上均经过校准，因此基于深度信息的手部追踪器生成的关键点可以被重新投影并插值到单色视图中。我们的采集装置具备移动性，能够高效捕捉不同的光照和环境变化。

为确保关键点标注的质量，必须最大化基于深度信息追踪的精度。因此，我们要求用户手持手部时让掌心始终朝向深度相机，从而避免手指被遮挡。由于单色摄像头被安装在框架周围，最终得到的单色图像仍能捕捉到各种更具挑战性、遮挡情况较多的视角，这些视角可用于训练KeyNet（见图5右侧）。

我们使用经过校准的、针对特定用户的模板手模型来进行追踪，该模型基于高质量的手部扫描数据构建 [Romero et al. 2017]。我们会手动标注每个序列第一帧中的手部边界框，随后追踪后续帧中的手部。手部姿态的估算结合了关键点估计 [Tompson et al. 2014] 和基于模型的追踪技术 [Tagliasacchi et al. 2015]。在初步完成一个序列的追踪后，我们会通过联合优化3D数据来重新处理该序列。

![Image](images/df0f698fe899e244aac1fb053a4f0f67a90f31a7bfc7789f0ac6ad1ae317b183.jpg)

<div style="text-align: center;">Fig. 6. Examples of semi-automatically labelled bounding boxes. Each row corresponds to images from different views captured at the same time. Accurately annotating hand region in images at low light (see Row 1), partially observed hands (see Row 2) and disambiguating left versus right hand is a challenging task for human annotator. On the contrary, our system only needs manual annotation at few frames. Annotation will then propagate to other views and subsequent frames. The examples here are sampled from a sequence of 10k frames where the annotation was done at about 100 bounding boxes per second. Given the capture system is mobile, the sequence features large background and lighting variations.</div>

深度误差、关键点误差以及整个序列的时间平滑度都会被纳入优化范畴。最后，我们会再次人工检查各序列，以剔除存在问题的帧。

### 4.2 半自动边界框标注

为了训练出足够精确的DetNet，我们需要与我们在实际场景中看到的摄像头配置及环境相匹配的数据的边界框标签。因此我们发现，第4.1节中描述的那种专门化设置并不够用，最好是直接对头戴设备拍摄的图像进行标注（见图3）。为了最大化标注任务的吞吐量和效率，我们采用了一种新颖的半自动边界框标注解决方案，该方案利用了第3.3节中介绍的基于跟踪的检测方法。用户手动为初始帧标注出手部边界框后，我们会利用训练好的KeyNet以及我们的跟踪流程来推导后续帧中的手部姿态，进而得到相应的边界框。如果标注员发现跟踪器失效，她只需重新标注一个新的边界框，被跟踪的手部位置便会自动更新。图6展示了一些手部检测示例数据，用以证明这种标注方法的效率。

---

## 5 评估

在本节中，我们首先详细介绍如何利用第4节介绍的方法所标注的数据来训练DetNet和KeyNet。接着，我们会在采用不同真实值机制标注的独立数据集上对我们的流程进行评估，以避免偏差。此外，我们还在三个公开数据集上评估该流程，以便更深入地了解系统的优缺点。

### 5.1 实现细节

DetNet的训练。我们利用第4.2节介绍的标注工具生成了260万张用于训练DetNet的图像。我们使用随机梯度下降优化器对该网络进行75个周期的训练，学习率为0.001，动量参数为0.9。我们将输入图像进行随机强度缩放作为数据增强手段，以模拟环境和光照的变化。

KeyNet的训练。KeyNet以一张$96 \times 96$单色图像和一个63维向量（外推关键点）作为输入，输出$21 \times 18 \times 18$二维热图和$21 \times 18$一维热图。为了使KeyNet能够应对快速运动及跟踪失败的情况，我们采用多种外推策略作为数据增强手段。对于90%的训练数据，我们根据前两个真实值手部位姿计算出的外推位姿来生成关键点，这与运行时采用的方式类似；其余10%的数据则使用20帧前的手部位姿来计算关键点。初步实验表明（见5.3节），直接输入关键点特征会导致网络退化，只会简单复制输入关键点的结果，而无法从图像输入中学习特征。因此，我们通过添加高斯噪声来对关键点特征进行增强。

为了让KeyNet能进一步适应各种现实场景，我们在训练期间精心应用了几种增强策略。首先，为了模拟部分超出画面范围的手部情况，我们会随机将图像边界处的矩形区域像素强度设为零。此外，我们对输入图像和关键点施加随机强度缩放以及随机几何平移、旋转和缩放操作，以模拟光照和视角变化。为了模拟没有关键点特征可用的初始化阶段，我们会以一定概率将关键点分支的所有数值设为零。这种增强策略有助于网络在不依赖输入关键点特征的情况下从图像中学习特征。我们的训练数据集包含约200万个样本，每次训练迭代时都会应用上述所有增强策略的组合。我们使用随机梯度下降优化器对该网络进行75个周期的训练，学习率为0.025，动量参数为0.9。

请注意，尽管许多检测和点估计架构[He et al. 2017]都是端到端训练的，但我们分别训练了KeyNet和DetNet。这样做的好处是，我们可以为KeyNet和DetNet使用具有不同特性的独立数据集，具体如第4节所述。此外，由于KeyNet不依赖于DetNet的评估结果，我们能够采用基于跟踪的检测方法；我们在第5.4节中证明该方法不仅更高效，而且更精确。

手部尺度校准。VR头戴设备配备了用于检测其是否被佩戴在用户头上或取下的硬件。因此我们能知晓何时可能正在追踪新用户，进而开始尺度校准。该过程大约耗时5秒。在离线评估中，我们利用序列的前100帧进行校准，随后使用更新后的手部模型重新追踪以生成结果。

推理阶段。在实时运行我们的系统时，为了降低计算量，我们限制DetNet仅对单张图像进行评估，且限制KeyNet在任何给定帧中对每只手最多评估两张图像。我们的系统在配备NVIDIA GTX 1080 GPU的PC上能以60Hz的频率运行，包括VR渲染在内的系统总延迟约为60毫秒。我们还进一步训练了两个计算需求更低的新模型：KeyNet-F和DetNet-F，它们能够在搭载Hexagon v62 DSP的Snapdragon 835移动处理器上以30Hz的频率运行。

### 5.2 评估数据集

我们收集了四个评估序列，涵盖了各种手指运动、快慢不同的手部动作以及简单的手与手交互场景。为避免偏差，我们采用了与训练时不同的真实值获取方法。我们并未依赖基于深度的手部追踪技术，而是使用了基于标记的手部追踪系统[Han et al. 2018]，该系统能达到亚毫米级的精度。我们直接在用户的皮肤上放置3毫米的半球形标记，以尽量减少外观上的改变。需要注意的是，这些标记仅出现在评估集中，因此训练好的KeyNet不会因标记的外观而产生过拟合。

### 5.3 KeyNet的消融研究

为了评估所提出的KeyNet架构的独立贡献，我们训练了三种KeyNet变体。

- KeyNet-S仅将单张图像作为输入，不使用关键点特征。

- KeyNet-N采用与KeyNet相同的架构，但在训练过程中不对关键点特征添加高斯噪声。

- KeyNet-F是一种类似KeyNet的快速模型，但能在Hexagon V62 DSP上实时运行。

评估指标。为了衡量追踪精度，我们使用平均关键点位置误差（MKPE），它计算所有帧中估计关键点与真实关键点之间的平均3D欧几里得距离（单位：毫米）。我们还通过估算关键点加速度来衡量估计结果的时间平滑度，计算公式如下：

 $$ acc_{i,t}=p_{i,t-1}+p_{i,t+1}-2p_{i,t} $$

其中$acc_{i,t}$和$p_{i,t}$分别是第t帧中第i个关键点的加速度和位置。鉴于常见的VR/AR交互场景中不存在突然的手指运动，加速度可以作为时间平滑度的良好近似度量。我们报告平均关键点加速度（MKA），它计算所有关键点加速度的平均值。

定量评估。我们将追踪性能分为两种场景：立体视觉追踪和单目视觉追踪。由于立体视觉追踪区域和单目视觉追踪区域中的手部姿态分布存在差异，我们通过运行我们的流程来模拟单目视觉追踪场景。

---

<div style="text-align: center;">Table 1. Ablative study by using different variants of proposed KeyNet and hand model obtained from different sources. We use generic, calibrated and scanned to refer to the default hand model, the hand model obtained by solving for the hand scale in STEREO and the hand model obtained from a scanning system respectively. We highlight the rows corresponding to our proposed methods in the table in each section.</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td rowspan="2">Method</td><td colspan="2">STEREO</td><td colspan="2">MONOCULAR</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>MKPE</td><td style='text-align: center; word-wrap: break-word;'>MKA</td><td style='text-align: center; word-wrap: break-word;'>MKPE</td><td style='text-align: center; word-wrap: break-word;'>MKA</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Ground truth</td><td style='text-align: center; word-wrap: break-word;'>NA</td><td style='text-align: center; word-wrap: break-word;'>1.95</td><td style='text-align: center; word-wrap: break-word;'>NA</td><td style='text-align: center; word-wrap: break-word;'>1.95</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>KeyNet-S + scanned</td><td style='text-align: center; word-wrap: break-word;'>11.4</td><td style='text-align: center; word-wrap: break-word;'>5.47</td><td style='text-align: center; word-wrap: break-word;'>15.1</td><td style='text-align: center; word-wrap: break-word;'>6.49</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>KeyNet-N + scanned</td><td style='text-align: center; word-wrap: break-word;'>17.6</td><td style='text-align: center; word-wrap: break-word;'>2.13</td><td style='text-align: center; word-wrap: break-word;'>29.7</td><td style='text-align: center; word-wrap: break-word;'>2.50</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>KeyNet-F + scanned</td><td style='text-align: center; word-wrap: break-word;'>11.3</td><td style='text-align: center; word-wrap: break-word;'>3.07</td><td style='text-align: center; word-wrap: break-word;'>14.9</td><td style='text-align: center; word-wrap: break-word;'>3.79</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>KeyNet + scanned</td><td style='text-align: center; word-wrap: break-word;'>11.0</td><td style='text-align: center; word-wrap: break-word;'>2.96</td><td style='text-align: center; word-wrap: break-word;'>15.7</td><td style='text-align: center; word-wrap: break-word;'>3.72</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>KeyNet + generic</td><td style='text-align: center; word-wrap: break-word;'>19.7</td><td style='text-align: center; word-wrap: break-word;'>2.85</td><td style='text-align: center; word-wrap: break-word;'>38.8</td><td style='text-align: center; word-wrap: break-word;'>3.36</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>KeyNet + calibrated</td><td style='text-align: center; word-wrap: break-word;'>11.4</td><td style='text-align: center; word-wrap: break-word;'>2.94</td><td style='text-align: center; word-wrap: break-word;'>15.6</td><td style='text-align: center; word-wrap: break-word;'>3.65</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>KeyNet + scanned</td><td style='text-align: center; word-wrap: break-word;'>11.0</td><td style='text-align: center; word-wrap: break-word;'>2.96</td><td style='text-align: center; word-wrap: break-word;'>15.7</td><td style='text-align: center; word-wrap: break-word;'>3.72</td></tr></table>

在STEREO的相同帧上进行处理，只是丢弃其中一个视图。由于两种条件下使用的手部姿态和背景相同，因此能进行公平的比较。

表1的中间部分展示了使用扫描系统获取的手部模型时，不同网络架构的性能表现。我们提出的KeyNet所产生的MKPE与基线KeyNet-S相近，但在立体视觉和单目视觉模式下，其MKA均显著降低。这表明我们提出的KeyNet架构通过融入关键点特征，有效提升了时间平滑性，同时并未牺牲精度。此外，我们验证了数据增强的有效性：它将立体视觉/单目视觉模式下的MKPE从17.6毫米/29.7毫米（KeyNet-N）降低至11.0毫米/15.7毫米（KeyNet）。KeyNet-N由于过度依赖时间信息，导致MKA较低，因而无法准确预测手部姿态。值得注意的是，与我们提出的KeyNet相比，KeyNet-F所用的权重仅为原模型的约7%，却仍能达到与之相当的精度和平滑度。

表1的底部部分显示了求解手部尺度的重要性（第3.6节）。当使用通用手部模型时，系统的精度会大幅低于使用扫描系统获取的手部模型的情况。当追踪器在单目模式下运行时，这种精度下降更为明显，因为单视图下深度歧义的解决严重依赖于手部模型尺度的准确性。采用我们提出的方法来确定手部尺度后，追踪精度便接近基于3D扫描拟合的手部模型所对应的精度。

定性评估。图7展示了一个手部部分超出视野范围的棘手案例。基线KeyNet-S模型无法对拇指尖做出有意义的预测。而我们提出的KeyNet则能有效利用追踪历史来做出更精准的预测。图8展示了基线KeyNet-S与所提KeyNet在两种不同视角下的关键点预测结果。我们提出的KeyNet再次借助追踪历史，使得两种视角下的预测结果都保持一致的正确性。

![Image](images/af270c974556c0c18ffcb287b6eab69f018a7dddfea6ec1e39c6ad49604af56e.jpg)

<div style="text-align: center;">Fig. 7. Temporally consistent predictions by KeyNet. The hand is partially out of the image boundary in the input image but our proposed KeyNet can still utilize tracking history to produce a plausible hand pose compared to the baseline KeyNet-S.</div>

![Image](images/c2225bc95066055966492ecc02bd3e7c8025ae75caef60e5f3602dd759e3e522.jpg)

![Image](images/9b09f7c621faf4d8802160552c4b1ed9bc6da634b390e0316879d480f4452d2c.jpg)

<div style="text-align: center;">Fig. 8. Spatially consistent predictions by KeyNet. Baseline model KeyNet-S produces correct predictions for the middle and ring finger tips in view 1 but produces 2 modes for each keypoint in view 2 due to more severe occlusion. Our proposed KeyNet leverages the input keypoint features and produces consistent predictions across the 2 views.</div>

<div style="text-align: center;">Table 2. We evaluate variants of our hand detection method through changing the number of views per frame available to DetNet (1 or 4) and toggling detection-by-tracking (track or no-track). DetNet-F corresponds to the fast model that can be run on a mobile processor. This table shows the precision and recall metrics using different hand detection methods for each of the 4 camera views: top left (TL), bottom left (BL), bottom right (BR), top right (TR).</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>Detection method</td><td style='text-align: center; word-wrap: break-word;'>TL</td><td style='text-align: center; word-wrap: break-word;'>BL</td><td style='text-align: center; word-wrap: break-word;'>BR</td><td style='text-align: center; word-wrap: break-word;'>TR</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>DetNet x 4 + no-track</td><td style='text-align: center; word-wrap: break-word;'>0.94/0.93</td><td style='text-align: center; word-wrap: break-word;'>1/0.99</td><td style='text-align: center; word-wrap: break-word;'>1/0.97</td><td style='text-align: center; word-wrap: break-word;'>0.93/0.95</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>DetNet x 4 + track</td><td style='text-align: center; word-wrap: break-word;'>0.98/0.99</td><td style='text-align: center; word-wrap: break-word;'>1/1</td><td style='text-align: center; word-wrap: break-word;'>1/1</td><td style='text-align: center; word-wrap: break-word;'>0.99/1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>DetNet x 1 + track</td><td style='text-align: center; word-wrap: break-word;'>0.98/0.99</td><td style='text-align: center; word-wrap: break-word;'>1/1</td><td style='text-align: center; word-wrap: break-word;'>1/1</td><td style='text-align: center; word-wrap: break-word;'>0.99/1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>DetNet-F x 1 + track</td><td style='text-align: center; word-wrap: break-word;'>0.98/0.99</td><td style='text-align: center; word-wrap: break-word;'>1/0.99</td><td style='text-align: center; word-wrap: break-word;'>1/1</td><td style='text-align: center; word-wrap: break-word;'>0.99/1</td></tr></table>

### 5.4 手部检测的消融研究

精确度和召回率指标。我们使用精确度和召回率来衡量每种手部检测方法的准确性。具体而言，若DetNet预测的手部置信度大于0.5，则将其定义为正预测。若满足以下三个条件，则定义为真正例预测：（1）预测的边界框宽度与真实边界框宽度的差异在20%以内；（2）所有投影后的真实关键点都位于裁剪后的图像边界内；（3）超过16个真实关键点位于整幅图像的边界内。

---

![Image](images/e5cb79bad8dc8c556c74995a8554d98ce72f25472e7ce9c4b67c83227a65805a.jpg)

<div style="text-align: center;">Fig. 9. We follow a detection-by-tracking paradigm to localize hand. Leveraging results from tracking history makes our method robust to challenging cases, e.g., partial occlusion.</div>

定量评估。在我们的系统中，不同摄像头拍摄到的手部视图可能存在显著差异。例如，底部摄像头往往能捕捉到更多用户身体及周围环境作为背景，而顶部摄像头则更容易拍到天花板。这给不同视图下的手部检测方法性能带来了挑战。表2展示了针对每种摄像头视图，采用不同手部检测方法的精确度和召回率指标。当我们对每一帧的所有图像运行DetNet时，顶部两个摄像头的手部检测性能明显逊于底部两个摄像头，这表明DetNet在不同摄像头视图下的表现存在差异。采用第3.3节所述的基于跟踪的检测方法后，所有视图下的性能均有所提升，且不同视图间的性能差异也显著缩小。这说明基于跟踪的检测方法比每帧都依赖DetNet更为稳健。我们还发现，在优化后的运行时设置中，即便限制DetNet每帧仅在一个视图上运行，相关指标也不会受到明显影响。这表明我们的优化策略对系统性能的影响微乎其微。最后，当我们启用基于跟踪的检测功能时，快速模型DetNet-F的表现与默认的DetNet相近。

定性评估。图9展示了一个位于图像边界的手部实例：DetNet未能检测到左手，而我们提出的基于跟踪的检测方法却成功识别了该手部。更广泛地说，DetNet在不同图像区域的表现存在差异，尤其是当训练数据分布存在偏差时；而基于跟踪的检测方法对手部在图像中的位置不敏感，能在不同图像区域生成一致的预测结果。

### 5.5 不同手部运动的评估

我们的数据集包含多种旨在对跟踪系统施加真实压力的手部运动类型。手指运动序列用于测试系统在立体视觉场景下捕捉细微手指运动的能力；手-手运动序列用于测试系统在立体视觉场景下处理轻微手间遮挡的情况。慢速和快速运动序列则用于测试系统在较大空间内（包括立体视觉和单目视觉场景）捕捉手部运动的能力。表3展示了各序列对应的系统性能，其中手指运动序列下系统的准确率最高。

<div style="text-align: center;">Table 3. Tracking accuracy and temporal smoothness of our system evaluated on different motion sequences. MKA GT measures MKA of the ground truth keypoints.</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>sequence</td><td style='text-align: center; word-wrap: break-word;'>MKPE</td><td style='text-align: center; word-wrap: break-word;'>MKA</td><td style='text-align: center; word-wrap: break-word;'>MKA GT</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>finger motion</td><td style='text-align: center; word-wrap: break-word;'>9.4</td><td style='text-align: center; word-wrap: break-word;'>2.1</td><td style='text-align: center; word-wrap: break-word;'>1.4</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>hand-hand</td><td style='text-align: center; word-wrap: break-word;'>11.4</td><td style='text-align: center; word-wrap: break-word;'>2.2</td><td style='text-align: center; word-wrap: break-word;'>1.4</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>slow motion</td><td style='text-align: center; word-wrap: break-word;'>11.8</td><td style='text-align: center; word-wrap: break-word;'>3.8</td><td style='text-align: center; word-wrap: break-word;'>2.3</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>fast motion</td><td style='text-align: center; word-wrap: break-word;'>14.7</td><td style='text-align: center; word-wrap: break-word;'>5.9</td><td style='text-align: center; word-wrap: break-word;'>3.5</td></tr></table>

![Image](images/92f739a282af5f3eba8b8be599dca62224d38fc4697e039635ed8f238d5a5c11.jpg)

<div style="text-align: center;">Fig. 10. Qualitative results on our evaluation dataset. Each row shows the input image, ground truth keypoints, reconstructed hand mesh and corresponding estimations (from left to right).</div>

手-手运动序列中的手间遮挡情况更具挑战性，因此系统的准确率相比手指运动序列略有下降。值得注意的是，尽管我们并未用任何手-手数据训练KeyNet，但该系统仍能较好地应对部分复杂情况。慢速和快速运动序列中手部的活动范围更大，导致更多帧只能依靠单目视觉进行跟踪，整体跟踪准确率也因此低于另外两种始终采用立体视觉跟踪手部的情况。图10展示了各序列中的一些示例。

---

![Image](images/45bd826b95eac395b7c95d6bc26217e6ea0d7d2fa233d12c303c4788410c9df5.jpg)

![Image](images/c3427887f0d7867db19de96381d20d9fa4a9da808d2ea632277419edae7aad22.jpg)

![Image](images/f1a064dd10d9182221820fc4c77a04bcbe076acf30e04e5e0b6359826b55d8fb.jpg)

<div style="text-align: center;">Fig. 11. PCK plots on public benchmarks. From left to right, we show the percentage of correct keypoints with respect to different error thresholds across all frames on STB [Zhang et al. 2016], Dexter+object [Mueller et al. 2017] and EgoDexter [Sridhar et al. 2016] benchmarks. The AUC is shown in the legend. The depth-based method [Sridhar et al. 2016] is drawn with dashed line in the middle plot.</div>

### 5.6 公共数据集上的评估

除了对我们收集到的测试集进行评估外，我们还在三个公开数据集上展示了评估结果：立体手姿跟踪基准测试（STB）[Zhang et al. 2016]、EgoDexter（ED）[Mueller et al. 2017]以及Dexter+Object（D+O）[Sridhar et al. 2016]。每个数据集仅包含RGB图像，我们在运行跟踪器之前会将这些RGB图像转换为灰度图像。我们的DetNet是针对自身相机配置专门设计的，因此无法泛化应用到这些数据集上。因此，我们手动为第一帧或跟踪失败时提供边界框，这一做法与我们在4.2节中介绍的标注方法类似；其余帧则依赖基于跟踪的检测方式。我们提取骨骼中的关键点，并报告正确关键点百分比（PCK）曲线。开展此项工作的目的是更好地了解我们的系统是否能泛化到非自我中心视角以及手物交互场景，因为无论是我们的处理流程还是数据收集过程中均未专门处理这些情况。

在STB上的评估。我们采用[Zimmermann和Brox 2017a]中使用的划分方式，得到15000对/3000对训练/测试立体图像对。我们在训练序列中确定用户手部尺寸，并使用得到的手部模型在评估序列中进行跟踪。无论训练还是评估阶段，我们的跟踪器始终同时处理两个视角的图像。为解决关键点定义上的差异，我们利用训练序列，将跟踪器识别出的关键点通过线性映射转换为数据集提供的真实关键点。图11展示了3D PCK曲线。从PCK曲线来看，我们的结果略逊于当前最先进的方法。图12展示了STB中的一些示例帧。这些姿态虽由外部摄像头拍摄，却常见于自我中心摄像头下的场景。我们观察到大多数失败情况出现在测试集的最后600帧中，这些帧中的姿态在自我中心视角下并不常见（见图13(b)）。若仅评估前2400帧，AUC值可达0.992；而最后600帧的AUC值仅为0.929。我们进一步利用STB训练数据训练了另一个KeyNet。使用该新KeyNet后，AUC分数提升至0.987，其中前2400帧的AUC值为0.995，最后600帧的AUC值为0.954。

在D+O上的评估。D+O包含来自单个RGB摄像头的数据，有两名用户与物体互动。由于单目视角存在固有的尺度模糊问题，我们为每位用户生成一个手部模型：先选取一个基础模型，再调整手部尺寸，最终选择根据真实标签得出的跟踪精度最高的模型。通过这种方式，我们希望了解该数据集上跟踪精度的上限。与不使用深度信息的方法相比，我们在该数据集上取得了最先进的结果（见图11）。图12展示了一些示例结果。由于该数据集仅对可见指尖提供了稀疏标签，遮挡严重的困难帧没有对应标签，因此不会影响整体指标。例如，对于图13(d)所示的情况，我们的系统生成了错误的姿态（食指和无名指位置有误），但这一帧并不会影响PCK曲线。

在ED数据集上的评估结果表明，该数据集包含来自第一人称视角摄像头的快速手部自由运动以及复杂的手-物体交互场景。我们采用与D+O数据集相同的方法获取手部模型。在该数据集上，我们再次取得了业界领先的结果（见图11）。不过，该数据集与D+O数据集存在同样的问题：具有挑战性的帧中并未提供真实标签。图12展示了一些示例结果。我们的跟踪器在手部自由运动序列以及部分手-物体交互帧中表现良好；但当物体严重遮挡手部时，其性能便会急剧下降（见图13）。

### 5.7 典型故障及未来工作

图13总结了本系统的一些典型故障案例。针对手部非常见视角下性能不佳的问题，可通过在训练集中增加这些视角的样本来解决。手-手交互及手-物体交互方面的故障，既反映了我们系统设计的局限性，也体现了这类任务本身的内在难度。我们认为，对两只手以及手持物体进行联合推理，是打造更优手部跟踪系统的重要方向。

---

<div style="text-align: center;">Dexter+Object</div>

![Image](images/13fc76cb33a0659b76348abe7fbefde331353f3ef8610be3c9ae445d598676ce.jpg)

<div style="text-align: center;">Fig. 12. Tracking results using our system on examples from STB, Dexter+Object and EgoDexter datasets.</div>

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

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

![Image](images/145dbb37f124b5e17f192e2fa2d63c3a2e7f9724fecb42a079521b9efb3b1af0.jpg)

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

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

![Image](images/ec2cec5e05ce0afe5972810b3f923a892b7aa74598a61b8771cff3345448b802.jpg)

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

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

<div style="text-align: center;">Fig. 13. Our system usually fails under complicated hand-hand interactions (a), uncommon view of the hand for egocentric cameras (b) and hand-object interactions (c), (d).</div>

## 6 结论

我们提出了一种面向VR/AR交互的实用实时手部跟踪系统。该系统采用四台视场部分重叠的第一人称鱼眼摄像头，从而能够实现大范围的跟踪区域。我们提出的手部检测网络DetNet，结合“先检测后跟踪”的策略，能够从容应对手部在多摄像头间移动的情况。我们提出的关键点估计网络KeyNet也会利用跟踪信息来生成空间和时间上一致的关键点预测结果，从而使系统能够生成适合交互的、低抖动的精准手部运动数据。我们的基于模型的姿态估计和手部尺寸校准功能采用了传统的线性混合蒙皮骨骼模型，因此很容易集成到交互式体验中。以往的大多数研究仅聚焦于单个组件，很难了解手部跟踪系统在实际情况中的表现如何。我们的研究表明，要实现基于手部跟踪的交互体验，需要从摄像头配置到输出表示的全系统级设计。

我们的研究仍存在诸多局限。我们的系统能够处理单只手在空中的交互场景，但所提出的架构并未设计为能够处理手-手或手-物体交互。手-手与手-物体交互对于沉浸感至关重要，也是未来的研究方向。我们的手部尺寸校准功能仅限于调整手部的单一参数（尺寸），这在某些场景下可能无法满足足够的精度要求。

## 致谢

我们感谢Kyle Sorge-Toomey、Jenny Spurlock、Matt Longest、Jordan Massey和Kenrick Kin，他们设计并制作了我们在补充视频中展示的VR体验。

## 参考文献

Vassilis Athitsos和Stan Sclaroff。2003年。从杂乱图像中估计3D手部姿态。技术报告。波士顿大学计算机科学系。

Luca Ballan、Aparna Taneja、Jürgen Gall、Luc Van Gool和Marc Pollefeys。2012年。利用判别性显著点捕捉手部动作。收录于欧洲计算机视觉会议论文集。Springer出版社，第640–653页。

Adnane Boukhayma、Rodrigo de Bem和Philip HS Torr。2019年。从野外图像中估计3D手部形状与姿态。收录于IEEE计算机视觉与模式识别会议（CVPR）论文集。

蔡宇君、葛柳浩、蔡建飞和袁俊松。2018年。基于单目RGB图像的弱监督3D手部姿态估计。ECCV，Springer 12卷（2018年）。

蔡宇君、葛柳浩、刘军、蔡建飞、谭达仁、袁俊松和Nadia Magnenat Thalmann。2019年。利用时空关系通过图卷积网络进行3D姿态估计。载于IEEE国际计算机视觉会议（ICCV）论文集。

戴晓亮、张培钊、吴碧晨、尹宏旭、孙飞、王阳汉、Marat Dukhan、胡云青、吴一鸣、贾扬清、Peter Vajda、Matt Uyttendaele和Niraj K. Jha。2019年。ChamNet：通过平台感知的模型适配实现高效网络设计。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。

Martin de La Gorce、Nikos Paragios和David J Fleet。2008年。基于模型的带纹理、阴影和自遮挡的手部跟踪。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。IEEE出版社，第1–8页。

Endri Dibra、Thomas Wolf、Cengiz Oztireli和Markus Gross。2017年。如何利用无标注深度数据优化3D手部姿态估计？载于3DV会议论文集。

葛柳浩、任舟、李云成、薛泽豪、王颖颖、蔡建飞和袁俊松。2019年。基于单张RGB图像的3D手部形状与姿态估计。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。

韩尚辰、刘贝贝、Robert Wang、叶雨婷、Christopher D. Twigg和Kenrick Kin。2018年。基于光学标记的深度标签在线手部跟踪。ACM

---

《图形学汇刊》第37卷第4期，文章编号166（2018年7月），共10页。<https://doi.org/10.1145/3197517.3201399>

Yana Hasson、Gül Varol、Dimitrios Tzionas、Igor Kalevatykh、Michael J. Black、Ivan Laptev和Cordelia Schmid。2019年。学习手部与被操纵物体的联合重建。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。<https://www.di.ens.fr/willow/research/obman>

何凯明、G. Gkioxari、P. Dollár和R. Girshick。2017年。Mask R-CNN。载于2017年IEEE国际计算机视觉会议（ICCV）论文集。第2980–2988页。

何凯明、张翔宇、任少卿和孙剑。2016年。用于图像识别的深度残差学习。载于IEEE计算机视觉与模式识别会议论文集。第770–778页。

黄英豪、Manuel Kaufmann、Emre Aksan、Michael J. Black、Otmar Hilliges和Gerard Pons-Moll。2018年。Deep Inertial Poser：学习从稀疏惯性测量数据中实时重建人体姿态。《ACM图形学汇刊》（SIGGRAPH Asia会议论文集）（2018年），第185:1–185:15页。两位第一作者贡献相当。

Umar Iqbal、Pavlo Molchanov、Thomas Breuel、Juergen Gall和Jan Kautz。2018年。通过潜在2.5D热图回归进行手部姿态估计。载于欧洲计算机视觉会议论文集。

J. Kannala和S. S. Brandt。2006年。一种适用于普通镜头、广角镜头和鱼眼镜头的通用相机模型与标定方法。《IEEE模式分析与机器智能交易》第28卷第8期（2006年8月）。

刘伟、Dragomir Anguelov、Dumitru Erhan、Christian Szegedy、Scott Reed、Cheng-Yang Fu和Alexander C Berg。2016年。SSD：单次多框检测器。载于欧洲计算机视觉会议论文集。

Franziska Mueller、Florian Bernard、Oleksandr Sotnychenko、Dushyant Mehta、Srinath Sridhar、Dan Casas和Christian Theobalt。2018年。用于从单目RGB图像实时进行3D手部追踪的生成式手部模型。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。

Franziska Mueller、Micah Davis、Florian Bernard、Oleksandr Sotnychenko、Mickel Verschoor、Miguel A. Otaduy、Dan Casas和Christian Theobalt。2019年。利用单个深度相机实时重建两只交互手部的姿态与形状。发表于《ACM图形学交易》（TOG）第38卷第4期。

Franziska Mueller、Dushyant Mehta、Oleksandr Sotnychenko、Srinath Sridhar、Dan Casas和Christian Theobalt。2017年。基于以自我为中心的RGB-D传感器在遮挡情况下实现实时手部追踪。载于国际计算机视觉会议（ICCV）论文集。10. <https://handtracker.mpi-inf.mpg.de/projects/OccludedHands/>

Markus Oberweger、Gernot Riegler、Paul Wohlhart和Vincent Lepetit。2016年。高效生成用于精细手部姿态估计的3D训练数据。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。

Iasonas Oikonomidis、Nikolaos Kyriazis和Antonis A Argyros。2012年。追踪两只强交互手部的关节运动。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。IEEE出版社，第1862–1869页。

Victor Adrian Prisacariu和Ian Reid。2011年。用于人机交互的鲁棒3D手部追踪。载于人脸与手势会议论文集。IEEE出版社，第368–375页。

Joseph Redmon和Ali Farhadi。2017年。YOLO9000：更优、更快、更强。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。

Javier Romero、Dimitrios Tzionas和Michael J. Black。2017年。具身化手部：手部与身体的联合建模与捕捉。发表于《ACM图形学交易》（SIGGRAPH Asia会议论文集）第36卷第6期，2017年11月。

Mark Sandler、Andrew Howard、Menglong Zhu、Andrey Zhmoginov和Liang-Chieh Chen。2018年。MobileNetV2：倒置残差结构与线性瓶颈。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。

Toby Sharp、Cem Keskin、Duncan Robertson、Jonathan Taylor、Jamie Shotton、David Kim、Christoph Rhemann、Ido Leichter、Alon Vinnikov、Yichen Wei等。2015年。精准、鲁棒且灵活的实时手部追踪技术。载于CHI会议论文集。

Ashish Shrivastava、Tomas Pfister、Oncel Tuzel、Joshua Susskind、Wenda Wang和Russell Webb。2017年。通过对抗式训练从模拟及无监督图像中学习。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。

Tomas Simon、Hanbyul Joo、Iain A Matthews和Yaser Sheikh。2017年。利用多视角自举法在单张图像中检测手部关键点。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。

Adrian Spurr、Jie Song、Seonwook Park和Otmar Hilliges。2018年。跨模态深度变分手部姿态估计。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。

Srinath Sridhar、Franziska Mueller、Michael Zollhoefer、Dan Casas、Antti Oulasvirta和Christian Theobalt。2016年。基于RGB-D输入实时追踪操作物体的手部关节。载于欧洲计算机视觉会议（ECCV）论文集。17. <http://handtracker.mpi-inf.mpg.de/projects/RealtimeHO/>

Björn Stenger、Arasanathan Thayananthan、Philip HS Torr和Roberto Cipolla。2006年。基于模型的层级贝叶斯滤波器手部追踪技术。发表于《IEEE模式分析与机器智能交易》第9卷，第1372–1384页。

James S Supancic、Grégory Rogez、杨毅、Jamie Shotton和Deva Ramanan。2015年。基于深度的手部姿态估计：数据、方法与挑战。载于国际计算机视觉会议（ICCV）论文集。

Andrea Tagliasacchi、Matthias Schroeder、Anastasia Tkach、Sofien Bouaziz、Mario Botsch和Mark Pauly。2015年。用于实时手部追踪的鲁棒关节ICP算法。《计算机图形学论坛》（几何处理研讨会）第34卷第5期（2015年）。

Jonathan Taylor、Lucas Bordeaux、Thomas Cashman、Bob Corish、Cem Keskin、Toby Sharp、Eduardo Soto、David Sweeney、Julien Valentin、Benjamin Luff等。2016年。通过姿态与对应点的联合连续优化实现高效且精确的交互式手部追踪。《ACM图形学交易》（TOG）第35卷第4期（2016年），第143页。

Jonathan Taylor、Vladimir Tankovich、Danhang Tang、Cem Keskin、David Kim、Philip Davidson、Adarsh Kowdle和Shahram Izadi。2017年。用于超快速追踪交互式手部的关节距离场。《ACM图形学交易》（TOG）（2017年）。

Bugra Tekin、Federica Bogo和Marc Pollefeys。2019年。H+O：以第一人称视角统一识别3D手部-物体姿态与交互。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。

Jonathan Tompson、Murphy Stein、Yann Lecun和Ken Perlin。2014年。利用卷积网络实现人体手部的实时连续姿态恢复。《ACM图形学交易》（TOG）（2014年）。

Chengde Wan、Thomas Probst、Luc Van Gool和Angela Yao。2019年。通过拟合训练进行自监督3D手部姿态估计。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。

Robert Y Wang和Jovan Popović。2009年。利用彩色手套实现实时手部追踪。《ACM图形学交易》（TOG）第28卷第3期（2009年），第63页。

Linlin Yang和Angela Yao。2019年。用于图像合成与姿态估计的潜在手部解耦。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。

Shanxin Yuan、Qi Ye、Bjorn Stenger、Siddhand Jain和Tae-Kyun Kim。2017年。BigHand2.2M基准测试：手部姿态数据集及最新技术分析。载于IEEE计算机视觉与模式识别会议（CVPR）论文集。

张浩、柏子豪、雍俊海和徐峰。2019a。交互融合：实时重建手部姿态及手-物交互中的可变形物体。《ACM图形学交易》（TOG）第38卷第4期（2019年）。

张佳伟、焦建波、陈明亮、曲良琼、徐晓斌和杨庆雄。2016年。利用立体匹配技术进行3D手部姿态追踪与估计。arXiv预印本arXiv:1610.07214（2016年）。

张雄、李强、张文博和郑文。2019b。从单目RGB图像端到端恢复手部网格。载于国际计算机视觉会议（ICCV）论文集。

Christian Zimmermann和Thomas Brox。2017a。学习从单张RGB图像估计3D手部姿态。载于IEEE国际计算机视觉会议论文集，第4903–4911页。

Christian Zimmermann和Thomas Brox。2017b。学习从单张RGB图像估计3D手部姿态。载于IEEE国际计算机视觉会议（ICCV）。<https://lmb.informatik.uni-freiburg.de/projects/hand3d/https://arxiv.org/abs/1705.01389>。

Christian Zimmermann、Duygu Ceylan、杨继梅、Bryan Russell、Max Argus和Thomas Brox。2019年。FreiHAND：一个用于从单张RGB图像无标记捕捉手部姿态与形状的数据集。arXiv:1909.04349 [cs.CV]

## 网络架构

DetNet。DetNet的输入为VGA（640×480分辨率）图像。表4展示了DetNet-F架构。其主干网络包含一个$4 \times 4$平均池化层，可将图像下采样至160×120分辨率。我们采用高效倒置残差构建块（IRB）[Dai等人，2019年；Sandler等人，2018年]来搭建网络。这种高效架构在Hexagon v62 DSP上评估单张图像仅需5毫秒。我们默认的DetNet以Resnet34 [He等人，2016年]作为主干网络，其余部分与DetNet-F一致。该架构在NVIDIA GTX 1080 GPU上评估单张图像仅需2毫秒。

KeyNet。KeyNet的输入为96×96分辨率的图像以及63维的关键点特征向量。表5展示了KeyNet-F架构。它采用了与DetNet相同的IRB。这种高效架构在Hexagon v62 DSP上评估4张图像仅需14毫秒。我们默认的KeyNet同样采用Resnet34的变体作为主干网络，其中conv2_x、conv3_x和conv4_x被定义为“主干图像层”，conv5_x则被定义为“主干融合层”。该网络在NVIDIA GTX 1080 GPU上评估4张图像仅需8毫秒。

---

<div style="text-align: center;">Table 4. Architecture for DetNet-F</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>Stage/Output</td><td style='text-align: center; word-wrap: break-word;'>Input</td><td style='text-align: center; word-wrap: break-word;'>Operator</td><td style='text-align: center; word-wrap: break-word;'>Exp size</td><td style='text-align: center; word-wrap: break-word;'>Out Channels</td><td style='text-align: center; word-wrap: break-word;'>Stride</td><td style='text-align: center; word-wrap: break-word;'>Repeat</td></tr><tr><td rowspan="12">Backbone</td><td style='text-align: center; word-wrap: break-word;'>$1 \times 640 \times 480$</td><td style='text-align: center; word-wrap: break-word;'>AvgPool2d $4 \times 4$</td><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;'>4</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$1 \times 160 \times 120$</td><td style='text-align: center; word-wrap: break-word;'>Conv2d $3 \times 3$, BN, Relu</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>32</td><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$32 \times 80 \times 60$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>96</td><td style='text-align: center; word-wrap: break-word;'>32</td><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$32 \times 40 \times 30$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>96</td><td style='text-align: center; word-wrap: break-word;'>32</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$32 \times 40 \times 30$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>192</td><td style='text-align: center; word-wrap: break-word;'>64</td><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$64 \times 20 \times 15$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>384</td><td style='text-align: center; word-wrap: break-word;'>64</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>2</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$64 \times 20 \times 15$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>384</td><td style='text-align: center; word-wrap: break-word;'>64</td><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$64 \times 10 \times 8$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>384</td><td style='text-align: center; word-wrap: break-word;'>64</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>3</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$64 \times 10 \times 8$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>384</td><td style='text-align: center; word-wrap: break-word;'>96</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$96 \times 10 \times 8$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>576</td><td style='text-align: center; word-wrap: break-word;'>96</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>2</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$96 \times 10 \times 8$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>576</td><td style='text-align: center; word-wrap: break-word;'>128</td><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$128 \times 5 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>768</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;'>2</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>160 $\times$ 5 $\times$ 4</td><td style='text-align: center; word-wrap: break-word;'>$128 \times 5 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>768</td><td style='text-align: center; word-wrap: break-word;'>160</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td rowspan="2">Hand center</td><td style='text-align: center; word-wrap: break-word;'>$160 \times 5 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>Conv2d $1 \times 1$, BN</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>4</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$4 \times 5 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>AvgPool2d $5 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>4</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$2 \times 2$</td><td style='text-align: center; word-wrap: break-word;'>$4 \times 1 \times 1$</td><td style='text-align: center; word-wrap: break-word;'>Reshape $2 \times 2$</td><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;'>-</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Hand radius</td><td style='text-align: center; word-wrap: break-word;'>$160 \times 5 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>Conv2d $1 \times 1$, BN</td><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;'>1</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$2 \times 1 \times 1$</td><td style='text-align: center; word-wrap: break-word;'>$2 \times 5 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>AvgPool2d $5 \times 4$</td><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;'>1</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td rowspan="2">Hand cls</td><td style='text-align: center; word-wrap: break-word;'>$160 \times 5 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>Conv2d $1 \times 1$, BN</td><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;'>1</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$2 \times 5 \times 4$</td><td style='text-align: center; word-wrap: break-word;'>AvgPool2d $5 \times 4$</td><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;'>1</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$2 \times 1 \times 1$</td><td style='text-align: center; word-wrap: break-word;'>$2 \times 1 \times 1$</td><td style='text-align: center; word-wrap: break-word;'>Sigmoid</td><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;'>-</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td colspan="7">Table 5. Architecture for KeyNet-F</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Stage/Output</td><td style='text-align: center; word-wrap: break-word;'>Input</td><td style='text-align: center; word-wrap: break-word;'>Operator</td><td style='text-align: center; word-wrap: break-word;'>Exp size</td><td style='text-align: center; word-wrap: break-word;'>Out Channels</td><td style='text-align: center; word-wrap: break-word;'>Stride</td><td style='text-align: center; word-wrap: break-word;'>1</td></tr><tr><td rowspan="5">Backbone image</td><td style='text-align: center; word-wrap: break-word;'>$1 \times 96^{2}$</td><td style='text-align: center; word-wrap: break-word;'>Conv2d $3 \times 3$, BN, Relu</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>32</td><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$32 \times 48^{2}$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>32</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$32 \times 48^{2}$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>96</td><td style='text-align: center; word-wrap: break-word;'>32</td><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$32 \times 24^{2}$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>192</td><td style='text-align: center; word-wrap: break-word;'>32</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$32 \times 24^{2}$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>192</td><td style='text-align: center; word-wrap: break-word;'>64</td><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$64 \times 12^{2}$</td><td style='text-align: center; word-wrap: break-word;'>$64 \times 12^{2}$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>384</td><td style='text-align: center; word-wrap: break-word;'>64</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Backbone keypoints</td><td style='text-align: center; word-wrap: break-word;'>63</td><td style='text-align: center; word-wrap: break-word;'>Linear, Relu</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>4608</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$32 \times 12^{2}$</td><td style='text-align: center; word-wrap: break-word;'>4608</td><td style='text-align: center; word-wrap: break-word;'>Reshape $12 \times 12$</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>32</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td rowspan="7">Backbone fused</td><td style='text-align: center; word-wrap: break-word;'>$64 \times 12^{2}$, $32 \times 12^{2}$</td><td style='text-align: center; word-wrap: break-word;'>Concat</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>96</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$96 \times 12^{2}$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>384</td><td style='text-align: center; word-wrap: break-word;'>64</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$64 \times 12^{2}$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>384</td><td style='text-align: center; word-wrap: break-word;'>64</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$64 \times 12^{2}$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>384</td><td style='text-align: center; word-wrap: break-word;'>96</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$96 \times 12^{2}$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>480</td><td style='text-align: center; word-wrap: break-word;'>96</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$96 \times 12^{2}$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>576</td><td style='text-align: center; word-wrap: break-word;'>128</td><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$128 \times 6^{2}$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>768</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;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$128 \times 6^{2}$</td><td style='text-align: center; word-wrap: break-word;'>$128 \times 6^{2}$</td><td style='text-align: center; word-wrap: break-word;'>IRB $3 \times 3$</td><td style='text-align: center; word-wrap: break-word;'>768</td><td style='text-align: center; word-wrap: break-word;'>160</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td rowspan="2">Keypoint heatmap</td><td style='text-align: center; word-wrap: break-word;'>$160 \times 6^{2}$</td><td style='text-align: center; word-wrap: break-word;'>Conv2d $3 \times 3$ pad2, BN, Relu</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>63</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$63 \times 8^{2}$</td><td style='text-align: center; word-wrap: break-word;'>ConvTranspose2d $2 \times 2$</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>42</td><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$21 \times 18^{2}$</td><td style='text-align: center; word-wrap: break-word;'>$42 \times 16^{2}$</td><td style='text-align: center; word-wrap: break-word;'>Conv2d $3 \times 3$ pad2, BN, Relu</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>21</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td rowspan="2">Keypoint distance</td><td style='text-align: center; word-wrap: break-word;'>$160 \times 6^{2}$</td><td style='text-align: center; word-wrap: break-word;'>AvgPool2d $6 \times 6$</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>160</td><td style='text-align: center; word-wrap: break-word;'>6</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$160 \times 1^{2}$</td><td style='text-align: center; word-wrap: break-word;'>Conv2d $1 \times 1$, Relu</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>378</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>$21 \times 18$</td><td style='text-align: center; word-wrap: break-word;'>$378 \times 1^{2}$</td><td style='text-align: center; word-wrap: break-word;'>Reshape 18</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'>21</td><td style='text-align: center; word-wrap: break-word;'>-</td><td style='text-align: center; word-wrap: break-word;'></td></tr></table>
