摘要
从单个深度图中用于3D手和人体姿势估计的大多数现有的基于深度学习的方法基于采用2D深度图并且直接回归关键点,例如手或人体关节,的3D坐标的共同框架,通过2D卷积神经网络(CNN)。这种方法的第一个弱点是2D深度图中存在透视畸变。虽然深度图本质上是3D数据,但是许多先前的方法将深度图视为2D图像,其可以通过从3D到2D空间的投影来扭曲实际对象的形状。这迫使网络执行透视失真不变估计。传统方法的第二个缺点是直接从2D图像回归3D坐标是一种高度非线性的映射,这导致学习过程中的困难。为了克服这些缺点,我们首先将3D手和人体姿势估计问题从单个深度图转换为体素到体素预测,该预测使用3D体素网格并估计每个体素是每个关键点的可能性。我们将模型设计为3D CNN,在实时运行时提供准确的估算。我们的系统在几乎所有公开的3D手和人体姿势估计数据集中都优于以前的方法,并且在HANDS 2017基于帧的3D手姿势估计挑战中获得第一。代码可在链接中获得(https://github.com/mks0601/V2V-PoseNet_RELEASE)。
1 介绍
准确的3D手和人体姿态估计是多种应用的活动识别的重要要求,例如人机交互或增强现实[34]。它已经在计算机视觉领域进行了数十年的研究,并且由于引入了低成本的深度相机而再次引起了相当大的研究兴趣。
最近,基于卷积神经网络(CNN)的强有力的判别方法在各种计算机视觉任务中优于现有方法,包括来自单个深度图的3D手和人体姿势估计[3,11,14,16,29]。尽管这些方法在3D手部和人体姿势估计方面取得了显着进步,但由于严重的自我遮挡,目标物体的高铰链式的形状和低质量的深度图像,它们仍然存在不准确的估计。分析以前基于深度学习从单个深度图像估计3D手和人体姿态的方法,这些方法中的大多数[1,3,7,14-16,24,29-31,47]基于采用2D深度图像并直接回归关键点,例如手或人体关节的3D坐标的共同的框架。但是,我们认为这种方法有两个严重的缺点。第一个是2D深度图像中的透视失真。由于2D深度图的像素值表示物点与深度相机的物理距离,因此深度图本质上是3D数据。然而,大多数先前的方法仅将深度图作为2D图像形式,其可以通过将其投影到2D图像空间来扭曲3D空间中的实际对象的形状。因此,网络看到一个扭曲的对象,并负担执行失真不变的估计。我们可视化图1中2D深度图像的透视畸变。第二个缺点是深度图和3D坐标之间的高度非线性映射。这种高度非线性的映射妨碍了学习过程,并阻止网络精确估计关键点的坐标,如Tompson等人所论述的那样[46]。这种高非线性归因于每个关键点只需要从输入回归一个3D坐标的事实。
图1:2D深度图像中透视畸变的可视化。3D点云与3D姿势具有一对一的关系,但由于透视失真,2D深度图像具有多对一的关系。因此,网络被迫执行透视失真不变的估计。通过将3D点云平移ΔX=-300,0,300mm(从左到右)并且ΔY=-300,0,300mm(从下到上)来生成2D深度图。在所有情况下,ΔZ设定为0毫米。MSRA数据集中的真实人手大小和相机投影参数的类似值用于我们的可视化。
为了应对这些限制,我们提出了用于姿势估计的体素到体素预测网络(V2V-PoseNet)。与之前的大多数方法相比,V2V-PoseNet采用体素网格作为输入,并估算每个体素是每个关键点的可能性,如图2所示。
图2:来自单个深度图像的3D姿态估计的输入和输出的各种组合。以前的大部分工作都将2D深度图像作为输入,并估算关键点的3D坐标,如(a)中所示。相反,所提出的系统采用3D体素化网格并估计每个关键点的每体素可能性,如(d)中所示。注意,(b)和(d)仅由成为完全卷积结构的卷积层组成。
通过将2D深度图像转换为3D体素化形式作为输入,我们的网络可以看到物体的实际外观而没有透视变形。此外,估计每个关键点的每体素可能性使得网络比直接从输入估计3D坐标的高度非线性映射更容易地学习期望的任务。我们进行了一次彻底的实验,以证明所提出的输入和输出体素表示在3D手和人体姿势估计中从单个深度图的有用性。比较输入(即,2D深度图和体素化网格)和输出(即,3D坐标和每体素似然)类型的四种组合的性能。
实验结果表明,所提出的体素到体素预测允许我们的方法在几乎所有可公开获得的数据集中实现最先进的性能(即三个3D手[39,41,45]和一个3D人类[16]姿势估计数据集),而它实时运行。我们还在HANDS 2017基于帧的3D手姿势估计挑战[55]获得第一。我们希望所提出的系统从单个深度图成为3D手和人体姿势估计问题的里程碑。现在,我们假设术语“3D姿势估计”指的是3D空间中手或人体关键点的定位。
我们的贡献可归纳如下。
- 我们首先将从单个深度图估计3D姿态的问题转变为体素到体素的预测。与直接从2D深度图像回归3D坐标的大多数先前方法不同,我们提出的V2V-PoseNet估计来自体素化网格输入的每体素可能性。
- 我们通过比较每种输入类型(即2D深度图和体素网格)和输出类型(即3D坐标和每体素可能性)的性能,凭经验验证了体积输入和输出表示的有用性。
- 我们使用几乎所有现有的3D姿势估计数据集进行大量实验,包括三个3D手和一个3D人体姿势估计数据集。我们表明,与最先进的方法相比,所提出的方法产生了更为精确的结果。所提出的方法也首先在HANDS 2017基于帧的3D手姿势估计挑战中进行。
2 相关工作
基于深度的3D手姿势估计。手姿势估计方法可以分为生成方法,判别方法和混合方法。生成方法采用预先定义的手模型,并通过最小化手工制作的成本函数将其与输入深度图像相结合[35,42]。粒子游泳优化(PSO)[35],迭代最近点(ICP)[40]及其组合[33]是用于获得最佳手姿势结果的常用算法。
判别方法直接定位来自输入深度图的手关节。基于森林的随机方法[21,23,39,41-43,48]提供快速准确的表现。然而,他们利用手工制作的特征,并通过最近的基于CNN的方法[1,3,4,6,7,10,11,14,15,24,29,30,37,45,50,51]可以自己学习有用的功能克服。Tompson等人[45]首先利用CNN通过估算每个手关节的2D热图来定位手部关键点。Ge等人[10]通过利用多视图CNN来估计每个视图的2D热图,从而扩展了这种方法。Ge等人[11]直接通过3D CNN将2D输入深度图转换为3D形式和估计的3D坐标。郭等人[14,15]提出了一个区域集合网络来准确估计手部关键点的三维坐标,陈等人[3]通过迭代地重新估计估计的姿势来改进这种网络。Oberweger等人[29]通过利用最近的网络架构,数据增强和更好的初始手局部化改进了他们之前的工作[30]。
提出了混合方法来结合生成和判别方法。Oberweger等人[31]通过反馈循环训练判别和生成CNN。周等人[58]预先定义了手模型并估计了模型的参数,而不是直接回归3D坐标。Ye等人[53]使用空间注意机制和分层PSO。Wan等人[47]使用两个深度生成模型,共享潜在空间和训练的鉴别器来估计潜在姿势的后验。
基于深度的3D人体姿势估计。基于深度的3D人体姿势估计方法也依赖于生成和判别模型。生成模型通过发现预定义体模型和输入3D点云之间的对应关系来估计姿势。ICP算法通常用于3D体跟踪[8,13,18,22]。还提出了另一种方法,如模板处理高斯混合模型[52]。相比之下,判别模型不需要身体模板,他们直接估计身体关节的位置。传统的判别方法主要基于随机森林。Shotton等人[36]将每个像素划分为一个身体部位,而Girchick等人[12]和Jung等人[20]直接回归了身体关节的坐标。荣等人[57]使用随机树行走算法(RTW),显着减少了运行时间。最近,Haque等人[16]提出了使用CNN和多轮递归神经网络的视点不变姿态估计方法。他们的模型学习了视点不变特征,这使得模型对视点变化具有鲁棒性。
使用深度信息的体积表示。吴等人[49]介绍了深度图像的体积表示,并超越了现有的手工制作的基于描述符的三维形状分类和检索方法。他们将每个体素表示为二进制随机变量,并使用卷积深度置信网络来学习每个体素的概率分布。最近的一些作品[26,38]也将3D输入数据表示为3D对象分类和检测的体积形式。我们的工作遵循[26]的策略,其中提出了几种类型的体积表示(即占用网格模型),以充分利用丰富的三维信息源,并有效地处理大量的点云数据。他们提出的CNN架构和占用网格的性能优于Wu等人[49]。
3D姿态估计中的输入和输出表示。用于从单个深度图[1,3,7,14-16,24,29-31,47]进行3D姿态估计的大多数现有方法基于图2(a)中的模型,该模型采用2D深度图像并直接回归3D坐标。最近,Ge等人[11]和邓等人[6]将2D深度图像转换为基于3D体积形式的截断符号距离函数,并直接回归3D坐标,如图2(c)所示。在从RGB图像进行的3D人体姿态估计中,Pavlakos等人[32]通过2D CNN估算每个身体关键点的每体素可能性,如图2(b)所示。为了估计RGB图像的每体素可能性,他们将离散化的深度值视为特征图的通道,这导致每个深度值的不同内核。与所有上述方法相反,我们提出的系统通过来自体素化输入的3D完全卷积网络估计每个关键点的每体素可能性,如图2(d)所示。据我们所知,我们的网络是第一个使用3D CNN从体素输入生成体素输出以进行3D姿态估计的模型。
3 概述提出的模型
我们模型的目标是估计所有关键点的3D坐标。首先,我们通过重新投影3D空间中的点并将连续空间离散化,将2D深度图像转换为3D体积形式。在对2D深度图像进行体素化之后,V2V-PoseNet将3D体素化的数据作为输入并估计每个关键点的每体素可能性。每个关键点的最高似然响应的位置被识别并扭曲到真实世界坐标,这成为我们模型的最终结果。图3显示了所提出的V2V-PoseNet的整体架构。我们现在描述目标对象定位改进策略,生成所提出模型的输入的过程,V2V-PoseNet,以及在以下部分中提出的方法的一些相关问题。
图3:V2V-PoseNet的总体架构。V2V-PoseNet采用体素化输入并通过编码器和解码器估计每个关键点的每体素可能性。为了简化图形,我们绘制了每个没有Z轴的特征图,并将所有关键点的3D热图组合在一个体积中。3D热图中的每种颜色都表示同一手指中的关键点。
4 重新定位目标对象本地化
为了定位关键点,例如手或人体关节,在3D空间中包含手或人体的立方体盒是先决条件。这个立方体框通常放置在参考点周围,参考点是使用真实关节位置[30,31,58]或手部区域[3,14,15]周围的简单深度阈值后的质心获得的。但是,在现实世界的应用中,利用地面真实关节位置是不可能的。而且,通常,使用通过简单深度阈值计算的质量中心不能保证由于杂乱场景中的质心计算中的错误而将对象正确地包含在所获取的立方体框中。例如,如果其他对象靠近目标对象,则简单深度阈值方法无法正确过滤其他对象,因为它将相同的阈值应用于所有输入数据。因此,计算出的质心变得错误,这导致立方体盒仅包含目标对象的一部分。为了克服这些限制,我们参考Oberweger等人[29]训练了一个简单的2D CNN获得一个精确的参考点,如图4所示。该网络采用深度图像,其参考点通过手区域周围的简单深度阈值计算,并输出3D偏移从计算的参考点到地面真实关节位置的中心。可以通过将网络的输出偏移值添加到计算的参考点来获得重新定义的参考点。
图4:参考点重新定义网络。该网络采用裁剪的深度图像,并将当前参考点到地面-真实关节位置中心的3D偏移输出。
5 生成提出系统的输入
要创建所提出系统的输入,应将2D深度图转换为体素化形式。为了对2D深度图进行体素化,我们首先将深度图的每个像素重新投影到3D空间。在重新投影所有深度像素之后,基于预定义的体素尺寸将3D空间离散化。然后,通过在第4节中获得的参考点周围绘制立方体框来提取目标对象。如果体素被任何深度点占据,我们将网络输入V(i,j,k)的体素值设置为1,否则为0。
6 V2V-PoseNet
6.1 构建块设计
我们在设计V2V-PoseNet时使用了四种构建模块。第一个是体积基本块,它由体积卷积,体积批量标准化[19]和激活函数(即ReLU)组成。该块位于网络的第一部分和最后部分。第二个是从[17]中选项B的2D残差块延伸出来的体积残差块。第三个是体积下采样块,与体积最大池化层相同。最后一个是体积上采样块,它由一个体积反卷积层,体积批量标准化层和激活函数(即ReLU)组成。将批量标准化层和激活功能添加到反卷积层有助于简化学习过程。残差块的内核大小为3×3×3,下采样和上采样层的内核大小为步长2的2×2×2。
6.2 网络设计
V2V-PoseNet执行体素到体素预测。因此,它基于3D CNN架构,其将Z轴视为附加空间轴,使得内核形状为w×h×d。我们的网络架构基于沙漏模型[28],经过略微修改后可以进行更精确的估算。如图3所示,网络从7×7×7体积基本块和体积下采样块开始。在对特征图进行下采样之后,三个连续的残差块提取有用的局部特征。残差块的输出分别通过图5和6中描述的编码器和解码器。
图5:V2V-PoseNet的编码器。每个块下面的数字表示每个特征图的空间大小和通道数。我们绘制了没有Z轴的每个特征图,以简化图形。
图6:V2V-PoseNet