
# 一种用于沉浸式可穿戴设备中手部姿态估计的4.45毫秒低延迟3D点云神经网络处理器

Dongseok Im、Sanghoon Kang、Donghyeon Han、Sungpill Choi和Hoi-Jun Yoo

韩国大田市儒城区大德路291号KAIST电子工程系，邮编305-701

电子邮件：<mailto:dsim@kaist.ac.kr>

## 摘要

本文提出了一种用于低延迟手部姿态估计（HPE）系统的3D点云神经网络（PNN）处理器。该处理器采用异构核心架构来加速卷积层（CLs）和采样分组层（SGLs）。所提出的基于窗口的采样分组（WSG）技术可直接从流式深度图像中采样并分组3D点，从而将吞吐量提升$\times2.34$。此外，最大池化预测（MPP）技术可将64个输入数据合并为1个输出，同时使吞吐量提升$\times1.31$。另外，基于平铺数据的MPP（TMPP）技术利用平铺输入数据来执行MPP操作，以此掩盖MPP带来的延迟。最终，该处理器在HPE系统中实现了4.45毫秒的延迟表现。

## 引言

对于头戴式显示器（HMD）以及增强现实/虚拟现实（AR/VR）设备等可穿戴设备而言，利用手指动作和手势的自然用户界面（NUI）是实现与虚拟物体顺畅交互的关键。为了实现对手指动作和手势的精准且稳健的识别，需要借助手部姿态估计（HPE）系统来测算手部关节的3D位置。近年来，借助可靠的3D深度传感器，基于点云的神经网络（PNN）能够构建出精准且稳健的HPE系统[^1]（见图1顶部）。它克服了以往处理器的缺陷[^5]，比如因误差累积导致的初始化敏感性和跟踪失败问题。然而，其在GPU上的软件实现会导致高延迟（20.5毫秒）[^1]，进而造成用户感受到的响应和交互不自然。因此，为了实现NUI中的快速响应，需要将其延迟控制在5毫秒以内[^2]，但这极具挑战性：不仅卷积层（CLs）的计算量巨大（每次推理需处理2.1吉普特运算），而且采样分组层（SGLs）中的最远点采样（FPS）、球查询（BQ）和表面法线估计（SNE）等采样分组（SG）算法也无法并行处理。

本文提出了一种用于NUI快速响应的低延迟（<5毫秒）PNN处理器。它采用异构核心架构来加速SGLs和CLs，具备以下三个关键特性：1）基于窗口的采样分组（WSG）技术，可并行加速SGLs并降低计算成本；2）最大池化预测（MPP）技术，可提升CLs的吞吐量；3）基于平铺数据的MPP（TMPP）技术，可掩盖MPP带来的延迟。最终，所提出的处理器在HPE系统中实现了4.45毫秒的延迟表现。

## 所提出的基于点云的神经网络处理器

所提出的处理器由三种不同的并行核心组成：SG核心（SGCs）、卷积核心（CCs）和MPP核心（MPPCs）（见图1下方）。SGCs从乒乓深度缓冲区加载8位流式深度图像，并利用WSG计算SGLs。SGCs的输出被传递给CCs，随后CCs利用来自全局权重存储器的8位权重执行卷积运算。五个输入/输出存储器（IOMEMs）中的一个会将输入数据广播给四个处理单元（PEs），以计算四个输出通道的卷积结果。每个PE会生成由八个输入通道相加得到的部分和，再将其与IOMEM中预先计算的部分和进行累加。MPPCs则利用来自全局二进制权重存储器的权重的符号位执行二进制卷积（BC），并将MPP结果传递给CCs。

1. WSG通过利用深度图像中的相邻像素排列来加速SGLs的计算（见图2）。32个SGCs并行生成32个$8 \times 8$窗口，这些窗口会以恒定的步长沿流式方向在深度图像上滑动以实现均匀采样。窗口内的点会被存入串行输入并行输出移位寄存器（SIPOReg）中，该寄存器最多可容纳三个点。BQ单元会从SIPOReg中取出最旧的点，若该点与中心点的距离小于阈值，则将其分组。与此同时，SNE单元会根据SIPOReg中存储的三个点来计算用于SGL0的法向量。之后，分组点的三维相对坐标及其对应的法向量会被传递给CC。当窗口内的64个点全部计算完毕后，SGC会开始计算下一个窗口，而SGL1则执行卷积运算。SGC采用与SGL0生成的采样图像相同的方式来计算SGL1，但仅存储分组点的索引以供后续的CL使用。由于WSG并非在整个点云内计算SGLs，而是在窗口内计算，因此它能减少97.6%的计算量以及58.6%的外部存储器访问量，且精度损失不到0.5%。此外，WSG还支持流水线阶段的并行计算。最终，该处理器在HPE系统中的吞吐量提升了$\times 2.34$。

2. 所提出的MPP通过预测最大池化层的最大值来降低CL中的延迟（见图3）。由于PNN中的ConvNets包含64对1和128对1的最大池化层，大部分卷积结果并不会被传递到下一层。因此，MPPC会执行BC运算并筛选出K个最大的候选值作为MPP结果。MPPC中的MPP PE会通过八个BC单元生成BC结果，再将这些结果累加得到最终的BC输出。最终的BC输出会与候选列表（CDList）中预先计算好的BC输出进行比较，数值较大的那个会覆盖原有索引和值。CC中的每个PE会生成与CDList中MPP结果相对应的卷积输出，并在这些输出中执行最大池化运算。最终，该处理器降低了CL2s的延迟（见图3右上），并在HPE系统中实现了$\times 1.31$的吞吐量提升。

3. TMPP能够通过使用分块数据来隐藏MPP的延迟（见图4）。在CC完成CL1计算之前，MPPC会处于空闲状态。为解决这一问题，CL1在x空间方向上被划分为四个块。CC会对其中一个块执行卷积运算，并将其输出传递给MPPC。随后，MPPC可以在CC计算CL1的下一个块的同时，对分块数据执行MPP运算。最终，TMPP隐藏了其他三个块的MPP延迟，并将整个ConvNet的延迟降低了54.2%（见图4右侧）。

## 实现结果与结论

所提出的PNN处理器采用65纳米CMOS工艺制造，图5展示了该芯片的照片以及HPE系统的可视化结果。该处理器在1.2伏供电电压下的最高工作时钟频率可达150兆赫兹。该处理器的延迟为4.45毫秒，比GPU快$\times4.61$。

---

（表I）。在TMPP的ConvNet0-ConvNet1-ConvNet2层中，当K取值为8-8-32时，该处理器在MSRA15数据集上的HPE误差为8.24毫米[^6]，此时涉及21个手指关节。在40兆赫兹时钟频率和0.78伏供电电压下，其最高能效达到5.62 TOPS/W，这一数值远高于以往的研究成果（表I）。

## 参考文献

[^1]: L. Ge, et al., “Hand PointNet,” CVPR, 2018.

[^2]: S. Mangiante, et al., “Vr is on the edge: How to deliver 360 videos in mobile networks,” ACM SIGCOMM, 2017.

[^3]: J. Lee, et al., “UNPU,” ISSCC, 2018.

[^4]: NVIDIA, “GTX 1080,” <https://www.nvidia.com/en-us/geforce/products/10series/geforce-gtx-1080>.

[^5]: S. Choi, et al., “A 9.02mW CNN-Stereo-Based Real-Time 3D Hand-Gesture Recognition Processor for Smart Mobile Devices,” ISSCC, 2018.

[^6]: X. Sun, et al., “Cascaded Hand Pose Regression,” CVPR, 2015.

![Image](images/bd56b92a93a728237f9ac891744a3a78b0efd42918d0aa8e7b7d6ec48482f08a.jpg)

<div style="text-align: center;">Fig. 1 HPE System Flow and the Proposed Heterogeneous Core Architecture.</div>

![Image](images/67e290555cc2bfdf0c094b3e980dc3ef2a3efde2bb14b030484a5527655ded30.jpg)

<div style="text-align: center;">Fig. 2 SGC Architecture with the WSG Algorithm.</div>

![Image](images/429539d2d75b286e9232aad01fe0b8a257fdd76f79063e567bee6c8966a7e2dd.jpg)

<div style="text-align: center;">Fig. 3 MPP Concept and its Architecture for Reduction of Latency in CL2.</div>

![Image](images/f5ca50864bf3d379f499c94f058824cafbdac9e504e391a08887bc3f256e556d.jpg)

<div style="text-align: center;">Fig. 4 TMPP Concept with Its Latency Reduction.</div>

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

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'>Technology</td><td style='text-align: center; word-wrap: break-word;'>65 nm</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Area</td><td style='text-align: center; word-wrap: break-word;'>16 $mm^{2}$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Supply Voltage</td><td style='text-align: center; word-wrap: break-word;'>0.78-1.2 V</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Frequency</td><td style='text-align: center; word-wrap: break-word;'>40-150 MHz</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>On-chip SRAM</td><td style='text-align: center; word-wrap: break-word;'>362 KB</td></tr><tr><td colspan="2">Convolution + MPP Performance</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Throughput</td><td style='text-align: center; word-wrap: break-word;'>307.2 $^{{*}}$ / 737.3 GOPS (8b)</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Power</td><td style='text-align: center; word-wrap: break-word;'>35.0 mW @ 0.78 V
273 mW @ 1.2 V</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Energy-efficiency</td><td style='text-align: center; word-wrap: break-word;'>5.6 TOPS/W @ 0.78 V
2.70 TOPS/W @ 1.2 V</td></tr><tr><td colspan="2">SG Performance</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Throughput</td><td style='text-align: center; word-wrap: break-word;'>177.6 GOPS (8b)</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Power</td><td style='text-align: center; word-wrap: break-word;'>18.5 mW @ 0.78 V
129 mW @ 1.2 V</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Energy-efficiency</td><td style='text-align: center; word-wrap: break-word;'>2.6 TOPS/W @ 0.78 V
1.38 TOPS/W @ 1.2 V</td></tr><tr><td colspan="2">HPE System Performance
(150 MHz, 1.2V)</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>HPE Algorithm</td><td style='text-align: center; word-wrap: break-word;'>PNN</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>HPE Latency</td><td style='text-align: center; word-wrap: break-word;'>4.45 ms</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>HPE Power</td><td style='text-align: center; word-wrap: break-word;'>266 mW</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>HPE Error</td><td style='text-align: center; word-wrap: break-word;'>8.24 mm</td></tr></table>

$^{1}$未应用MPP

<div style="text-align: center;">Fig. 5 Chip Photograph and Performance Summary.</div>

![Image](images/b44b7e25296f8f19b68a543355623c07272e5361acc6e880f5ea19b299fddd92.jpg)

<div style="text-align: center;"><Latency of HPE System></div>

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

<div style="text-align: center;">Fig. 6 Measurement Results in the HPE System.</div>

<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>ISSCC18 [^3]</td><td style='text-align: center; word-wrap: break-word;'>GTX 1080 [^4]</td><td style='text-align: center; word-wrap: break-word;'>ISSCC18 [^5]</td><td colspan="3">This Work</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Technology</td><td style='text-align: center; word-wrap: break-word;'>65 nm</td><td style='text-align: center; word-wrap: break-word;'>16 nm</td><td style='text-align: center; word-wrap: break-word;'>65 nm</td><td colspan="3">65 nm</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Area</td><td style='text-align: center; word-wrap: break-word;'>16 $mm^{2}$</td><td style='text-align: center; word-wrap: break-word;'>314 $mm^{2}$</td><td style='text-align: center; word-wrap: break-word;'>16 $mm^{2}$</td><td colspan="3">16 $mm^{2}$</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Supply Voltage</td><td style='text-align: center; word-wrap: break-word;'>0.63-1.1 V</td><td style='text-align: center; word-wrap: break-word;'>N/A</td><td style='text-align: center; word-wrap: break-word;'>0.7-1.2 V</td><td colspan="3">0.78-1.2 V</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Maximum Clock Frequency</td><td style='text-align: center; word-wrap: break-word;'>200 MHz</td><td style='text-align: center; word-wrap: break-word;'>1,607 MHz</td><td style='text-align: center; word-wrap: break-word;'>100 MHz</td><td colspan="3">150 MHz</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>On-chip SRAM</td><td style='text-align: center; word-wrap: break-word;'>256 KB</td><td style='text-align: center; word-wrap: break-word;'>8 GB</td><td style='text-align: center; word-wrap: break-word;'>781.5 KB</td><td colspan="3">362 KB</td></tr><tr><td colspan="7">Convolution Performance</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>Peak Throughput [GOPS]</td><td style='text-align: center; word-wrap: break-word;'>691.2 (8b)</td><td style='text-align: center; word-wrap: break-word;'>8,228 (FP32)</td><td style='text-align: center; word-wrap: break-word;'>19.7 (16b)</td><td colspan="3">737.3 (8b)</td></tr><tr><td rowspan="2">Peak Power [mW]</td><td style='text-align: center; word-wrap: break-word;'>@5MHz\n0.63V</td><td style='text-align: center; word-wrap: break-word;'>3.2</td><td rowspan="2">180,000</td><td style='text-align: center; word-wrap: break-word;'>@60MHz\n0.9V</td><td style='text-align: center; word-wrap: break-word;'>6.57</td><td style='text-align: center; word-wrap: break-word;'>@40MHz\n0.78V</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>@200MHz\n1.1V</td><td style='text-align: center; word-wrap: break-word;'>297</td><td style='text-align: center; word-wrap: break-word;'>@100MHz\n1.2V</td><td style='text-align: center; word-wrap: break-word;'>21.3</td><td style='text-align: center; word-wrap: break-word;'>@150MHz\n1.2V</td></tr><tr><td rowspan="2">Energy-efficiency [TOPS/W]</td><td style='text-align: center; word-wrap: break-word;'>@10MHz\n0.66V</td><td style='text-align: center; word-wrap: break-word;'>5.57</td><td rowspan="2">0.0457</td><td style='text-align: center; word-wrap: break-word;'>@60MHz\n0.9V</td><td style='text-align: center; word-wrap: break-word;'>1.80</td><td style='text-align: center; word-wrap: break-word;'>@40MHz\n0.78V</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>@200MHz\n1.1V</td><td style='text-align: center; word-wrap: break-word;'>2.3</td><td style='text-align: center; word-wrap: break-word;'>@100MHz\n1.2V</td><td style='text-align: center; word-wrap: break-word;'>0.92</td><td style='text-align: center; word-wrap: break-word;'>@150MHz\n1.2V</td></tr><tr><td colspan="7">HPE Performance</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>HPE Algorithm</td><td style='text-align: center; word-wrap: break-word;'>N/A</td><td style='text-align: center; word-wrap: break-word;'>General Purpose</td><td style='text-align: center; word-wrap: break-word;'>ICP-PSO</td><td colspan="3">PNN</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>HPE Latency</td><td style='text-align: center; word-wrap: break-word;'>N/A</td><td style='text-align: center; word-wrap: break-word;'>20.5 ms $^{[1]}$</td><td style='text-align: center; word-wrap: break-word;'>33.3 ms</td><td colspan="3">4.45 ms</td></tr></table>

表1 对比表。
