DeepPrior++: Improving Fast and Accurate 3D Hand Pose Estimation

摘要

  DeepPrior[18]是一种基于深度学习的简单方法,可以在给定深度图的情况下预测手的关节3D位置。自2015年初公布以来,在一些令人印象深刻的工作中表现优异。在这里,我们通过简单的改进表明:添加ResNet层,数据增强和更好的初始手部定位,我们在三个主要基准(NYU,ICVL,MSRA)上实现了比更复杂的最新方法更好或更相似的性能,同时保持了原始方法的简单性。我们的新实现可在https://github.com/moberweger/deep-prior-pp上找到。

1 介绍

  准确的手势估计是许多人机交互或增强现实任务的重要要求,并且在计算机视觉研究界引起了很多关注[9,10,16,20,21,34,36,43]。即使使用结构光或时间飞行传感器等3D传感器,它仍然非常具有挑战性,因为手具有高自由度,并且在图像中表现出自相似和自遮挡。
  一种流行的3D手姿态估计方法是DeepPrior,由[18]引入。DeepPrior是一种基于深度网络的方法,它使用单个深度图像作为输入,并直接预测手骨架的3D关节位置。DeepPrior的关键思想是将主成分分析(PCA)计算出的先前3D手势明确地整合到卷积神经网络中。这为3D手姿势估计提供了一种简单,准确且快速的方法。
  自原始论文发表以来,机器学习和深度神经网络领域取得了巨大的进步。我们利用该领域的最新进展更新原始方法。因此,我们将结果方法称为DeepPrior++。特别:

  • 我们通过引入残差网络[7]来提取特征图,更新了模型架构,使模型更加强大;
  • 我们改进了初始手部定位方法。DeepPrior中的这一步是基于启发式的。这里我们使用训练好的方法;
  • 我们改进了训练程序,以利用现有数据中的更多信息。

我们在https://github.com/moberweger/deep-prior-pp上公布了我们的改进代码,希望它对社区有用。
  在下文中,我们将在第3节中简要回顾原始的DeepPrior方法,然后在第4节中介绍我们的修改。第5节中对修改进行了评估,并与公共基准数据集上的最新方法进行了比较。

2 相关工作

  有大量的早期工作涉及手部姿势估计,我们参考[3]进行概述。2015年,对基准数据集[30]的几项工作的评估表明,DeepPrior在准确性和速度方面表现最好。自那时以来取得了巨大的进步,在这里我们简要回顾相关的工作。我们使用三个主要基准数据集中的至少一个(即NYU[40],MSRA[28]和ICVL[34])中使用常用错误度量来报告结果,和所有工作进行比较。这些工作在本节中标有星号*。
  许多最近的方法利用手部运动树的层次结构。[35*]沿骨架树前进并预测树内子关节的位置。类似地,[44*](Lie-X)预测沿骨架树的更新,其更正初始姿势并使用李代数来约束这些更新。孙等人[28*](HPR)估计每个手指的归一化坐标系中的关节位置,[25]为每个手指使用单独的回归量来预测在最近邻公式中组合的空间和时间特征。[46]引入了一个专注于每个关节的空间注意机制和一个额外的优化步骤来强制运动约束。[14]沿着运动树将手分成较小的子区域。[45]*为每个姿势预测一个姿势类,并为每个类训练一个单独的姿势回归量。所有这些方法都需要多个预测器,每个关节或手指一个,并且额外的回归器通常用于算法的不同迭代。因此,不同模型必须训练和评估的回归模型的数量范围从数十个到多于50个。
  为了克服这个缺点,有几项工作将运动层次结构整合到一个CNN结构中。郭等人[6*](REN)为输入特征的不同空间区域训练子网集合,Madadi等人[15*]使用树状CNN架构来预测运动树的不同部分。但是,这需要根据注释专门设计的CNN架构。
  还提出了输入深度图像的不同数据表示。邓等人[2*](Hand3D)将深度图像转换为3D体积,并使用3D CNN预测关节位置。然而,3D网络显示出低计算效率[23]。不同的是,[42*]使用表面法线而不是深度图像,但是当前深度传感器不容易获得表面法线,因此引入了额外的计算开销。Neverova等[17]*将手部分的分割与关节位置的回归相结合,但分割对传感器噪声敏感。
  不直接预测3D关节位置,[40*]提出了一种预测不同关节的2D热图的方法。[5*]扩展了这项工作并使用了多个CNN用于预测来自深度图像的不同重投影的热图,每次重投影需要单独的CNN。此外,这些方法需要复杂的后处理以使运动模型适应热图。
  Bouchacourt等人[1*](DISCO)提出了一个概率框架,使用网络来学习手部姿势的后验分布,并且可以从分布采样。但是,目前还不清楚如何在实践中将这些采样结合起来。Wan等人[41*](CrossingNets)使用两个生成网络,一个用于手势,一个用于深度图像,并学习这两个网络之间的共享映射,其涉及在复杂过程中训练多个网络。
  Oberweger等人[19*](Feedback)学习CNN以合成手的深度图像并使用合成的深度图像来预测初始手姿势的更新。同样,这需要训练三种不同的网络。
  周等人[48*](DeepModel)通过引入一个强制执行的附加层,将手模型集成到CNN中3D手模型的物理约束,其中约束必须事先手动定义。
  Fourure等[4*](JTSC)通过引入共享表征来利用来自不同数据集的不同注释,这是一个有趣的想法来收集更多训练样本,但在处理传感器特征时具有缺点。
  张等人[47*]将姿势估计表示为多元回归问题,然而,这需要在运行时解决复杂的优化问题。
  最近也有一些基于模型的生成方法引起了很多关注。尽管非常准确,[12*],[26],[32*],[37*]的工作需要手的3D模型,应该根据用户的手进行调整[26],[33*],并在推理期间运行复杂的优化。
  与这些最近的方法相比,我们的方法更容易且更快速地训练,具有更简单的架构,更准确,并且以相当的速度运行,即实时。

3 原始的DeepPrior

  在本节中,我们将简要回顾一下原始的DeepPrior方法。更多细节可以在[18]中找到。
  DeepPrior旨在从单个深度图像估计3D手部关节位置。它需要一组标有3D关节位置的深度图像用于训练。
  为简化回归任务,DeepPrior首先执行手部的3D检测。然后它估计包含手的粗略3D边界框。和[34]一样,DeepPrior假定手是距离相机最近的对象,并从深度图中提取以该对象的质心为中心的固定大小的立方体。然后,它将提取的立方体大小调整为128×128的标准化为[-1,1]的深度值块。
  深度不可用的点(结构光传感器可能发生,例如,深度值比立方体的背面更远)被指定为深度为1.此归一化对于学习阶段很重要,为了从手到相机的不同距离不变。
  考虑到手的物理约束,不同的3D关节位置之间存在强相关性。因此,DeepPrior不是直接预测3D关节位置,而是在较低维空间中预测姿势的参数。由于这强制了手姿势的约束,这提高了预测的可靠性。
  如图1所示,DeepPrior通过使用3D手姿势数据PCA中的主要成分初始化最后一层的权重,在网络结构之前实现姿势。然后,使用标准反向传播训练整个网络。
image
图1:原始DeepPrior的网络架构。C表示卷积层,其中滤波器的数量和滤波器大小如图所示,FC是具有神经元数量的完全连接层,P是具有池化大小的最大池化层。所示的多层网络可以是任意的神经网络,具有用于先前的附加层。DeepPrior通过从应用于3D手姿势数据的PCA预先计算最后一层的权重来引入姿势先验。

4 DeepPrior++

  在本节中,我们将描述我们的更改以增强原始的DeepPrior方法,其中包括改进的训练数据增强,更好的手部定位以及更强大的网络架构。有关实现级别的详细信息,请参阅代码。

4.1 改进的训练数据增强

  由于我们的方法是数据驱动的,因此我们的目标是从可用数据中尽可能多地利用信息。文献[13,40]中使用了许多不同的增强方法,例如缩放,翻转,镜像,旋转等。在这项工作中,我们使用深度图像,这产生了特定的数据增强方法。具体来说,我们使用旋转,缩放和平移,以及它们的不同组合。
  旋转:手可以轻松地围绕前臂旋转。可以通过深度图像的简单平面内旋转来近似该旋转。我们使用图像的随机平面内旋转,并通过将3D注释投影到2D图像上,应用相同的平面内旋转,并将2D注释投影回3D坐标来相应地改变3D注释。旋转角度采用均匀分布采样,间隔为[-180°,180°]。
  缩放:MSRA[28]和NYU[40]数据集包含不同的人,手的大小和形状不同。虽然DeepPrior没有明确的规模不变,但我们可以通过改变训练数据中裁剪的大小来训练手大小不变的网络。因此,我们通过从正态分布采样的随机因子(深度为1,方差为0.02)从深度图像缩放裁剪的3D边界框。这会改变裁剪立方体中手部大小的外观,并根据随机因素缩放3D关节位置。
  平移:由于手部3D定位不完美,我们通过向手部3D位置添加随机3D偏移来增强训练集,并将深度图像的作物的3D位置居中。我们从正态分布中对随机偏移进行采样,方差为5mm,这与我们使用的手部3D检测器的误差相当。我们还根据此偏移修改3D注释。
  在线增强:增强是在训练期间在线进行的,因此网络在每个时期看到不同的样本。这导致总共超过1000万个不同的样本。增强有助于防止过度拟合并且对于手与训练集的偏差更加稳健。虽然样本是相关的,但它在测试时显着有帮助,正如我们在实验中所示。
  强大的先验:同样,我们也改进了先验,这是通过将PCA应用于3D手势而获得的。我们通过在3D中随机使用原始姿势的旋转,缩放和平移来采样1M姿势。我们使用这组增强的3D姿势来计算先验。

4.2 精确的手部定位

  原始的DeepPrior使用了非常简单的手部检测。它基于手的深度分割的质心。因此,使用深度阈值分割手,并计算3D质心。然后,围绕质心提取3D边界框。
  DeepPrior++仍然使用此方法,但引入了一个精确步骤,可显着提高最终的准确性。该细化步骤依赖于回归CNN。该CNN应用于以质心为中心的3D边界框,并经过训练以预测中指掌指关节(MCP)的位置,我们将其作为参考。我们还使用增强训练数据来训练CNN,如第4.1节所述。
  对于实时应用程序,我们不是从每个帧中提取质心,而是将此回归CNN应用于前一帧的手部位置。这仍然准确,同时在实践中更快。

4.3 更强大的网络架构

  残差网络。自DeepPrior引入以来,对更好的深层架构进行了大量研究[8,24,31],残差网络(ResNet)架构[8]似乎是性能最佳的模型之一。
  们的模型类似于[8]的50层ResNet模型。由于ResNet最初是用于图像分类,我们调整架构以适应我们的回归问题。最重要的是,我们删除了全局平均池化,并添加了两个完全连接层。网络输入为128×128像素,值归一化为[-1,1]。采用的ResNet模型如图2所示。网络包含一个初始卷积层,包含64个滤波器和2×2最大池化。该卷积层之后是四个残差模块,每个模块具有2×2的步长,并且具有{64,128,256,256}个滤波器。
image
图2:我们的ResNet架构。C表示卷积层,其中滤波器的数量和滤波器大小如图所示,FC是具有神经元数量的完全连接层,D是具有丢弃神经元的概率的丢弃层,R是具有滤波器数量和过滤器大小的残差模块,以及P具有池化区域大小的最大池化层。来自深度图像的手部裁剪被送入ResNet,预测最终3D手部姿势。
  用于细化手部定位的更简单的模型如图3所示。它由三个具有最大池化的卷积层和两个带有Dropout的全连接层组成。
image
图3:用于精确手部定位的网络架构。如图2所示,C表示卷积层,FC表示完全连接层,D表示Dropout层,P表示最大池化层。来自深度图像的初始手工裁剪被馈送到网络,该网络预测偏移以校正不准确的手部定位。
  我们使用具有标准超参数和学习率为0.0001的梯度下降算法ADAM[11]来优化网络参数,并训练100个周期。
  使用Dropout进行正则化。ResNet模型可以过度拟合,我们经历过这种行为,特别是在手部姿势变化较小的数据集上[34]。因此,我们将Dropout[27]引入模型,该模型被证明可以提供一种有效的神经网络正规化方法。我们在残余模块之后的两个完全连接的层上应用具有0.3的压差率的二进制Dropout。这样可以培训高容量的ResNet模型,同时避免过度拟合并实现高度准确的预测。

5 评估

  我们在三个用于手势估计的公共基准数据集上评估我们的DeepPrior++方法:NYU数据集[40],ICVL数据集[34]和MSRA数据集[28]。为了与其他方法进行比较,我们将重点放在原始DeepPrior论文之后发布的作品上。在文献中使用不同的评估指标用于手姿态估计,并且我们报告的数字在论文中陈述或者如果提供的话从图表测量,和/或绘制相关图表用于比较。
  对于所有实验,我们报告30维PCA先验的结果。通过使用有效的数据增强实现,所有实验的训练时间相同,在配备3.2GHz和64GB RAM的Intel i7和nVidia GTX 980 Ti显卡的计算机上大约需要10小时。

5.1 评估指标

  我们使用两种不同的指标来评估准确性:

  • 首先,我们将3D手部姿势估计的准确性评估为平均3D关节误差。这是文献中最常用的度量标准,并且由于评估的简单性,允许与许多其他工作进行比较。
  • 作为第二个更具挑战性的指标,我们绘制了所有预测关节低于给定的最大欧几里德距离真实值的帧的分数[38]。

5.2 NYU数据集

  NYU数据集[40]包含超过72k的训练和8k多视角RGB-D数据的测试帧。使用结构化的基于光的传感器捕获数据集。因此,深度图显示缺失值以及噪声轮廓,这使得数据集非常具有挑战性。对于我们的实验,我们仅使用来自单个相机的深度数据。数据集具有准确的注释,并表现出不同姿势的高度可变性。训练集包含来自单个用户的样本和来自两个不同用户的测试集样本。我们遵循既定的评估协议[18,40],并使用14个关节来计算指标。
  我们的结果与现有技术方法的比较一起显示在表1中。我们将DeepPrior++与几种相关方法进行比较,它明显优于其他方法。
image
表1:与NYU数据集[40]的最新技术进行比较。我们以毫米为单位报告平均3D误差。DeepPrior ++的表现明显优于该数据集的所有其他方法。
  在图4中,我们将我们的方法与其他判别方法进行比较。虽然Supancic等人[30]一小部分帧报告了非常准确的结果,我们的方法在大多数帧中表现得更好。
image
图4:与NYU数据集[40]中最先进的判别方法的比较。 我们绘制了所有关节距离最大距离的帧的分数。曲线下面的较大区域表示更好的结果。我们提出的方法在其他判别方法中表现最佳。(最好彩色观看)
  在图5中,我们使用不同的评估协议比较了现有技术的方法,即我们遵循[32,37]的协议,他们评估测试集的前2400帧。同样对于该协议,我们明显优于Taylor等人的现有技术方法[37]。请注意,[32,33,37]需要一个可能是用户特定的3D手模型,而我们的方法仅使用没有任何3D模型的训练数据。
image
图5:与NYU数据集[40]上最先进的基于模型的方法进行比较。我们根据[32,37]的协议绘制帧的分数,其中每帧的平均关节误差在距离真实值的最大距离内。曲线下面的较大区域表示更好的结果。我们提出的方法甚至优于该数据集上基于模型的方法,超过90%的帧具有小于10mm的误差。(最好彩色观看)

5.3 ICVL数据集

  ICVL数据集[34]包括一个超过180k深度帧的训练集,显示各种手部姿势。测试集包含两个序列,每个序列大约700帧。使用飞行时间相机记录数据集,并具有16个带注释的关节。深度图像具有高质量,几乎没有任何缺失深度值,并且具有很少噪声的清晰轮廓。尽管作者提供了不同的人工旋转训练样本,但我们仅从真正的22k帧开始,并应用4.1节中描述的数据增强。然而,与其他数据集[28,40]相比,该数据集的姿态可变性是有限的,并且注释相当不准确,如[18,30]中所讨论的。
  我们在表2中展示了与不同的最新方法的比较。同样,我们的方法显示了最先进的准确性。但是,与其他方法的差距要小得多。这可能是因为数据集更容易,姿势变化较小[30],并且由于评估注释中的错误[18,30]。
image
表2:与ICVL数据集的最新技术比较[34]。我们以毫米为单位报告平均3D误差。
  在图6中,我们将DeepPrior++与ICVL数据集[34]上的其他方法进行了比较。我们的方法与Guo等人[6]的工作类似,Wan等人[42],唐等人[35],都在这个数据集上实现了最先进的准确性。这可能表明数据集上的性能是饱和的,剩余的错误是由于注释的不确定性。这一实证研究结果与[30]中的讨论类似。虽然唐等人[35]在图6的曲线的某些部分表现略好,我们的方法在NYU数据集上表现得更好,如图5所示。
image
图6:与ICVL数据集[34]的最新技术比较。我们绘制了所有关节距离真实值最大距离的帧的分数。一些作品显示了类似的误差曲线,可以作为该数据集饱和性能的指标。 (最好彩色观看)

5.4 MSRA数据集

  MSRA数据集[28]包含大约76k深度帧。它是使用飞行时间相机拍摄的。数据集包括来自9个不同受试者的序列。我们遵循共同评估协议[5,29,41]并执行留一法交叉验证:我们对8个不同的受试者进行训练并评估剩余的受试者。我们为每个受试者重复此过程,并报告不同运行的平均错误。
  表3中显示了平均3D误差的比较。再次,DeepPrior++ 的表现优于现有方法3mm。在图7中,DeepPrior ++也优于绘制的度量标准上的所有其他方法,这表明它还能够处理不同用户的手。
image
表3:与MSRA数据集[28]的最新技术比较。我们以毫米为单位报告平均3D误差。DeepPrior ++的表现明显优于该数据集的所有其他方法。
image
图7:与MSRA数据集[28]的最新技术比较。我们绘制了所有关节距离真实值最大距离的帧的分数。曲线下面的较大区域表示更好的结果。我们的方法明显优于当前最先进的判别方法。(最好彩色观看)

5.5 消融实验

  我们进行了额外的实验,以显示我们修改的贡献。我们评估了对NYU数据集[40]的修改,因为它具有最准确的注释,具有不同的姿势,以及两个不同的用户进行评估。

5.5.1 训练数据增强

  为了评估训练过程的贡献,我们测试了不同的数据增强方案。结果显示在表4中。使用数据增加导致精度增加超过7mm。最重要的是,增加手部平移可以解决手部检测部分中的错误,并且增加旋转会影响旋转的手部姿势,从而有效地扩大了训练姿势。
image
表4:新训练程序对NYU数据集的影响[40]。通过使用不同的数据增强方法,可以显着提高准确度。在第一行中,我们不使用任何数据扩充。在最后一行中,我们对训练数据应用增强,但不是先计算姿势,显示先前具有良好姿势的重要性。
  尽管增加比例不像增加NYU数据集上的平移或旋转帮助那么大,但是在用户手的大小未被准确确定的情况下,即在实际应用中的新用户,它可以有所帮助。有趣的是,通过增强3D手势来计算先验也是非常重要的。如果数据被增强,但是先验是从原始3D手姿势计算的,则与没有数据增加相比,准确性更差,因为先前的表达不足以捕获增强的手姿势的方差。

5.5.2 手部定位

  此外,我们评估手部定位对最终3D关节误差的影响。对于此实验,我们使用ResNet架构和所有数据增强。结果显示在表5中。使用手的真实位置可以实现最高精度,这在实践中是不可行的,因为真实的探测器不能提供完美的手部定位。这表明,通过使用更精确的3D手部定位方法仍有改进的余地。
image
表5:手部定位精度对NYU数据集的影响[40]。真实定位给出了最低的3D姿势误差,但这种定位在实践中并不适用。我们对常用质心定位(CoM)的改进将精度提高了1mm以上。
  从非常简单的质心定位开始,并通过细化估计的质心定位,该步骤将3D定位误差降低了近20mm。这反过来又使最终的平均3D姿势误差进一步提高1mm以上。

5.5.3 网络架构

  我们评估表6中不同网络架构的影响。我们使用精细的手部本地化和所有数据增强来训练两个网络。改进的训练程序和更好的定位已经将原始架构的结果提高了3mm以上(距离[18]19.8mm)。使用所提出的ResNet架构,由于模型的更高容量,平均精度可以再提高4mm。我们还评估了原始架构,但改变了卷积层,使得它们使用与ResNet架构相同数量的过滤器,但这种架构仍然不如ResNet。
image
表6:网络架构对NYU数据集的影响[40]。最近的ResNet架构比原始网络架构表现得更好,即使使用与原始架构的ResNet相同数量的过滤器(带有更多过滤器的原始版本)。最重要的是,我们仍然可以在手动跟踪应用程序中以30fps保持实时性能。
  ResNet架构比原始实现慢,但它仍然能够在单个GPU上以超过30fps的速度运行,使其适用于实时应用程序。

5.6 定性评估

  我们在图8中显示了几个定性结果,我们将其与原始的DeepPrior进行比较[18]。通常,与原始的DeepPrior相比,DeepPrior ++提供了明显更好的结果,特别是在高度清晰的姿势上。这可以归因于数据增加和更好的定位,也可以归因于更强大的CNN结构,这使得CNN能够学习用于复杂关节的高度准确的姿势。
image
图8:NYU数据集上的DeepPrior和DeepPrior ++之间的定性比较[40]。我们展示了在深度图像上投影的推断的3D关节位置。真实值以蓝色显示,预测的姿势以红色显示。DeepPrior ++提供的结果明显优于原始DeepPrior的结果,特别是在复杂姿势上。(最好彩色观看)

6 讨论和结论

  自DeepPrior发布以来,关于姿势估计的其他工作在深度学习框架中引入了一个姿势,显示了此类先验的重要性:

  • [22]提出用编码器替换PCA计算的线性变换。首先将该编码器与解码器一起训练,以预测姿势的紧凑表示。由于解码器具有更复杂的形式,因此它在准确性方面带来了一些改进。
  • [39]考虑人体姿势估计并且还使用自动编码器,但是计算比原始姿势更大尺寸的姿势嵌入,这似乎显着提高了身体姿势估计情况下的准确性。
  • [49]通过从2D热图估计3D手部关节位置来学习姿势,将先验分解为规范坐标和相对运动,而我们之前使用PCA学习并不区分这两者。

  也许本文提出的工作的高级结论是我们的社区在比较方法时应该小心:通过关注其不同的步骤,我们能够使DeepPrior++的表现明显优于原始的DeepPrior,并且表现相似或更好比起最近的作品,而两种方法的关键思想是相同的。

猜你喜欢

转载自blog.csdn.net/sinat_27990891/article/details/81346934