本文是第一篇研究从单目图像中预测3D手姿的论文,发表于2017ICCV。先后主要包含三个阶段手势分割,2D关键点预测,3D关键点预测,并分别对应三个网络。
在摘要阶段介绍了相关背景并概述了工作内容。在第一部分介绍,讲述了流行的3D手姿估计,本文所采用的大致方法,以及在数据集方面存在的困难。在第二部分相关工作,讲述了二维人体姿态估计,三维人体姿态估计,并据此进行三维手姿估计。在第三部分手姿表示,讲述了手姿用何表示。在第四部分3D手姿估计,讲述了通过HandSegNet进行手部分割,通过PoseNet得到关键点得分图,根据PosePrior获取3D手姿,以及三个网络的损失函数。第五部分手姿估计数据集讲述了可用数据集及其补充。第六部分经验,讲述了2D关键点检测,提升估计到3D以及手语识别相关内容,还包括手姿表示,分析学习先验,比较。第七部分是总结。补充材料讲述了相关训练细节。
摘要:低成本的消费者深度相机和深度学习能够从单一深度图像中合理地估计3D手部姿势。在本文中,我们提出了一种从常规RGB图像中估计3D手部姿势的方法。由于缺少深度信息,该任务具有更多的模糊性。为此,我们提出了一种深度网络,它可以预先学习网络隐式3D清晰度。结合图像中检测到的关键点,该网络可以很好地估计3D姿态。我们引入了一个基于合成手模型的大规模三维手姿数据集,用于训练所涉及的网络。在包括手语识别在内的各种测试集上的实验,证明了在单色图像上进行3D手部姿态估计的可行性。
1.介绍
手是人类主要的操作工具。因此,它在空间中的位置、方向和清晰度对于许多潜在的应用来说是至关重要的,例如机器人中的物体切换,从演示中学习,手语和手势识别,以及使用手作为人机交互的输入设备。由于存在许多模糊性、强清晰度和严重的自遮挡,从单目图像中估计3D手部姿势是困难的,甚至比整个人体还要困难。因此,使用特定的传感设备,如数据手套或标记,这将应用限制在有限的场景。此外,多摄像机的使用严重限制了应用领域。大多数当代作品都依赖于深度相机拍摄的深度图像。然而,深度相机不像普通彩色相机那样普遍,而且它们只在室内环境中可靠地工作。
在本文中,我们提出了一种从单色图像中学习全3D手姿估计的方法,而不需要任何特殊设备。我们利用深度网络的能力,从数据中学习合理的先验,以解决歧义。我们的总体方法包含三种深度网络的结构,覆盖了通往3D姿势的重要子任务;参见图2。第一个网络提供了一个手分割来定位图像中的手。基于它的输出,第二个网络在2D图像中定位手的关键点。第三个网络最终从二维关键点推导出三维手部姿态,是本文的主要贡献。特别地,我们引入了一个规范的姿态表示来使这个学习任务可行。
与人体层面的3D姿态估计相比,另一个困难是数据的有限可用性。虽然人体姿势估计可以利用几个动作捕捉数据库,但几乎没有任何这样的数据用于手部。为了训练一个网络,需要一个具有真实3D关键点数据的大型数据集。由于没有这样的具有足够可变性的数据集,我们创建了一个具有各种数据增强选项的合成数据集。由此产生的手位姿估计系统在现有的小规模数据集上产生了非常有希望的定性和定量结果。我们还演示了使用3D手姿势的手语识别任务。
2.相关工作
二维人体姿态估计。受到MPII人体姿势基准[3]和卷积神经网络(CNN)这一领域在过去几年中取得了很大的进展的刺激。Toshev和Szegedy[24]的CNN架构直接从彩色图像输入回归二维笛卡尔坐标。最近的作品如Thompson et al[22]和Wei et al[19]转向了回归得分图。对于我们的部分工作,我们采用了与Wei et al[19]类似的网络架构。
三维人体姿态估计。我们在这里只讨论最相关的工作,并参考Sarafianos等[17]获取更多信息。像我们的方法一样,许多作品使用两部分方法结构[23,7,6,21,5]。首先,他们在2D中检测关键点,以利用当前CNN方法的鉴别能力,然后尝试将2D检测集提升到3D空间。提出了提升表示的不同方法:Chen等[6]使用2D到3D对应的数据库部署了给定2D预测的最近邻匹配。Tome等[21]基于概率PCA基的混合创建了一个概率3D姿态模型。Bogo等[5]优化了统计体型模型的3D关节位置与2D预测之间的重投影误差。Pavlakos等人[15]提出了一种体积方法,将姿态估计作为每体素分数预测的粗到细的方式,这为数据提供了自然的表示,但计算成本高,并且受GPU内存的限制,无法适应体素网格。近年来,已有几种方法将深度学习的二维关键点提升到三维姿态,用于人体姿态估计[26,11,16]。此外,Mehta等[10]使用迁移学习直接从单一网络的图像推断3D身体姿态。虽然这些工作都是关于3D身体姿势估计的,但我们提供了第一个3D手部姿势估计的工作,由于更强的清晰度和自咬合,以及可用的数据更少,这基本上更难。
手姿势估计。Athitsos和claroff[4]提出了一种基于边缘映射和倒角匹配的单帧检测方法。随着低成本消费者深度相机的出现,研究集中在深度数据的手部姿势。Oikonomidis等[14]提出了一种基于粒子群优化(PSO)的技术。Sharp等[18]增加了重新初始化的可能性。创建一定数量的候选姿势,并根据观察到的深度图像进行评分。Tompson等[22]使用CNN来检测2D中的手部关键点,这是基于多分辨率图像金字塔的条件。通过求解运动学逆优化问题,得到了机器人的三维姿态。Zhou等人[27]或Oberweger等人[12]等方法训练CNN,直接回归给定手工裁剪深度图的3D坐标。Oberweger等人[12]探索了在压缩瓶颈中对关键点坐标之间的相关性进行编码的可能性,Zhou等人[27]估计了运动链骨骼之间的角度,而不是笛卡尔坐标。Oberweger等[13]利用CNN可以从给定的姿态估计合成深度图。这使得他们能够通过最小化观察到的和合成的深度图像之间的距离来连续细化初始姿态估计。
目前还没有任何方法可以用基于学习的公式来解决从单色图像中估计3D手部姿势的问题。以前的方法不同,因为它们依赖于深度数据[22,27,12,13],它们使用显式模型通过匹配预定义的姿态数据库[4]来推断姿态,或者它们只基于初始姿态而不是完整的姿态估计执行跟踪[14,18]。
3.手姿表示
给定一个显示一只手的彩色图像,我们想要推断它的3D姿态。我们用一组坐标来定义手的姿态,它描述了J个关键点在三维空间中的位置,即在我们的例子中,i∈[1,J], J = 21。从单一的二维观测推断三维坐标的问题是不适定的。在其他模糊性中,有一个尺度模糊性。因此,我们通过训练网络来估计归一化坐标来推断一个尺度不变的3D结构其中是一个样本相关常数,它归一化了某对关键点到单位长度之间的距离。我们选择k使食指的第一根骨头s = 1。此外,我们使用相对三维坐标来学习手部姿势的平移不变表示。这是通过减去已定义的根关键点的位置来实现的。相对和归一化3D坐标由给出,其中r是根索引。在实验中,手掌关键点是最稳定的标志。因此我们用r = 0。
4.3D手姿估计
我们从单个输入图像估计三维归一化坐标。图2提供了一般方法的概述。在下面的小节中,我们将详细介绍其组件。
4.1通过HandSegNet进行手分割
对于手分割,我们部署了一个基于Wei等[19]的人检测器并由其初始化的网络架构。他们将二维人的检测问题视为估计人类中心位置的得分图。最可能的位置是作为一个固定大小的作物的中心。由于手的大小在图像中发生了巨大的变化,并且在很大程度上取决于清晰度,因此我们宁愿将手的定位视为分割问题。我们的HandSegNet是Wei等人在我们的手部姿势数据集上训练的网络的一个较小版本。HandSegNet提供的手掩码允许我们在大小上裁剪和规范化输入,这简化了PoseNet的学习任务。
4.2通过PoseNet获取关键点分数图
我们将二维关键点的定位定义为二维分数图。我们训练一个网络来预测J分数地图,其中每个图包含关于某个关键点出现在某个空间位置的可能性的信息。该网络使用编码器-解码器架构,类似于Wei等人的姿态网络[19]。给定编码器产生的图像特征表示,预测初始评分图,并在分辨率上依次细化。我们使用Wei et al[19]中的权重进行初始化,在其中应用,并重新训练网络用于手动关键点检测。
4.3通过PosePrior获取3D手姿
PosePrior网络学习预测相对的、标准化的3D坐标,条件是潜在的不完整或有噪声的评分图c(u, v)。为此,它必须学习可能的手部关节及其先验概率。根据评分图,它将在给定2D数据的情况下输出最有可能的3D配置。我们不是训练网络来预测绝对3D坐标,而是训练网络来预测一个规范框架内的坐标,并额外估计到标准框架中的变换。正如我们在6.2节的实验中所展示的那样,显式地强制一个对手的全局方向不变的表示有利于学习先验。给定相对归一化坐标,我们建议使用规范框架,它以以下方式与相关,其中为三维旋转矩阵,分两步计算。首先,寻找围绕x轴和z轴的旋转,使得某个关键点与标准坐标系的y轴对齐:然后,在给定关键点指标o下,一个绕y轴的旋转由下式计算,且η≥0。正则坐标系与原始坐标系之间的总变换由R给出。为了适当地处理左手和右手之间的对称性,我们沿着z轴翻转右手,这产生了侧不可知表示,类似于我们提出的规范坐标系。给定这个标准框架定义,我们训练我们的网络来估计标准框架内的3D坐标,并单独估计旋转矩阵,我们使用带有三个参数的轴-角符号进行参数化。估计变换R等价于预测给定样本相对于标准坐标系的视点。因此,我们把这个问题称为视点估计。
姿态先验的网络结构有两个并行处理流;参见图3。流使用几乎相同的架构给出在补充材料。他们首先用ReLU非线性在一系列6个卷积中处理J分数映射的堆栈。关于图像显示的是左手还是右手的信息与特征表示连接起来,并由两个完全连接的层进一步处理。流以线性激活的完全连接层结束,这产生了对视点R和规范坐标的估计。这两种估计结合起来就得到了的估计。
4.4网络训练
对于HandSegNet的训练,我们应用标准的软最大交叉熵损失,并用L2损失来训练PoseNet。PosePrior网络使用了两个损失项。首先是规范坐标的L2损失的平方基于网络预测和真实数据。其次,在正则变换矩阵上施加L2损失的平方:。总损失函数为Lc和Lr的未加权和。我们使用Tensorflow[2]和Adam solver[9]进行训练。学习过程的细节在补充材料中。
5.手姿估计的数据集
5.1可用数据集
有两个可用的数据集适用于我们的问题,因为它们提供了RGB图像和3D姿势注释。
所谓的Stereo Hand Pose Tracking Benchmark(立体手姿跟踪基准)[25]为18000对立体提供了21个关键点的2D和3D注释,分辨率为640 × 480。数据集显示了一个人的左手在6个不同的背景和不同的光照条件下。我们将数据集分为3000张图像的评估集(S-val)和15000张图像的训练集(S-train)。
Dexter[20]是一个数据集,提供了3129张图像,显示了两名操作员在受限的室内设置中对长方体进行不同类型的操作。该数据集提供彩色图像、深度图以及指尖和长方体角的注释。彩色图像的空间分辨率为640×320。由于不完整的手工注释,我们仅使用该数据集来研究我们的网络的交叉数据集泛化。我们把这个测试集称为Dexter。
我们将两个数据集的分辨率降低到320× 240,以与我们渲染的数据集兼容。当我们报告图像域中的像素精度时,我们将结果转换回原始分辨率中的坐标。
Tompson等人[22]的纽约大学手姿数据集,通常用于深度图像的手姿估计,不适用于基于颜色的方法,因为只提供了注册的彩色图像。在补充中,我们展示了更多的证据,为什么这个数据集不能用于我们的任务。
5.2Rendered hand pose dataset(渲染手姿数据集)
由于变化有限,可用样本数量有限,标注部分不完整,上述数据集不足以训练深度网络。因此,我们用一个新的训练数据集补充它们。为了避免标注人员在三维数据中标注性能较差的已知问题,我们利用了Mixamo中免费提供的带有相应动画的人类3D模型。然后我们使用开源软件Blender来渲染图像。该数据集在网上公开。我们的数据集是建立在执行39个动作的20个不同角色之上的。我们将数据分成一个验证集(R-val)和一个训练集(R-train),其中一个字符或动作只能在其中一个集中,而不能在另一个集中。我们建议将结果分割为16个字符,执行31个动作用于训练,4个字符执行8个动作用于验证集。对于每一帧,我们随机采样一个新的相机位置,它大致位于一个指针周围的球形附近。所有的手中心距离相机中心大约在40cm到65cm之间。左手和右手的可能性是相等的,相机旋转以确保从当前视点至少部分可见手。
在相机位置和方向固定之后,我们从从Flickr 4下载的1231张背景图像池中随机抽取一张背景图像。这些图片展示了不同种类的城市和风景。我们确保它们不包含人员。为了最大限度地提高数据集的视觉多样性,我们为每个渲染帧随机设置以下设置:我们应用0到2个方向光源和全局照明,这样采样的背景图像的颜色大致匹配。此外,我们随机的光的位置和强度。此外,我们使用有损JPG压缩保存我们的效果图,质量因子随机从无压缩到60%。
我们还随机化了镜面反射对皮肤的影响。我们的数据集总共提供了41258张用于训练的图像和2728张用于评估的图像,分辨率为320×320像素。所有样本都带有每个手的21个关键点骨架模型的完整注释,另外还有33个分割掩膜和背景。就分割掩膜而言,人类有一个类,每个手掌和每个手指由3个部分组成。图4显示了数据集中的一个示例。每根手指都由4个关键点表示:指尖,两个中间的关键点和位于手掌的末端。此外,在模型的手腕处有一个关键点。对于每个手键点,都有信息,如果它在图像中是可见的或遮挡的。给出了摄像机像素坐标系和摄像机中心世界坐标下的关键点标注。相机固有矩阵和真实深度图也可用,但没有在这项工作中使用。
6.经验
我们评估了整个方法的所有相关部分:(1)有和没有手分割网络的PoseNet的手关键点检测;(2)三维手姿态估计和学习的三维姿态先验。最后,我们将手姿估计应用于手语识别基准测试。
6.12D关键点检测
表1显示了PoseNet在二维关键点估计上的性能。我们报告了平均端点误差(EPE)像素和曲线下面积(AUC)的百分比正确关键点(PCK)对于不同的错误阈值;参见图6。
我们评估了两种情况:一种使用图像,其中手是用真实甲骨文(GT)裁剪的,另一种使用HandSegNet的预测进行裁剪(Net)。第一个案例显示了PoseNet单独的性能,而第二个案例显示了完整的2D关键点估计的性能。后一种情况的中位数和平均值之间的差异表明,HandSegNet在大多数情况下是可靠的,但有时不能正确分割手,这使得2D关键点预测失败。
结果表明,该方法在合成数据集(R-val)和立体数据集(S-val)上同样有效。Dexter数据集更困难,因为数据集与训练集不同,并且因为处理的立方体频繁遮挡手。我们在训练集中没有遮挡的样本(除了自遮挡)。
在图6中,我们展示了在更多样化的数据上进行训练有助于跨数据集泛化。虽然只在我们的合成数据集R-train上训练在Dexter上产生的结果比在有限的立体数据集S-train上训练要好得多,但在R-train和S-train上一起训练产生的结果最好。图5显示了该配置的一些定性结果。其他例子在补充部分。
6.2提升估计到3D
6.2.1姿势表示
通过将其与几种备选方案进行比较,我们评估了所提出的用于从2D关键点预测3D手部姿势的标准框架表示。所有变体共享一个公共的基本架构,该架构与4.3中提出的PosePrior的一个流相同。他们在空间分辨率为32 * 32像素的得分地图c上进行训练。为了避免过拟合,我们通过用方差为1.5像素的高斯噪声干扰关键点位置来增强得分图。此外,得分图是随机缩放和翻译的。表2显示了每个关键点产生的端点错误。
Direct方法试图将2D关键点直接提升到完整的3D坐标,而不使用标准框架。这是不利的,因为网络很难学习将手的全局旋转与关节分开。
Bottleneck方法受到Oberweger等人的启发,他们在估计坐标之前引入了瓶颈层。我们在最终的FC输出层之前插入了一个额外的FC层,并将其参数化为Oberweger等人的30个通道和线性激活。结果并不比Direct方法好。
Local方法结合了手的运动学模型,并使用网络估计模型的关节参数。我们通过估计角度和骨长来概括[27]。该网络被训练为每个关键点估计两个角度和一个长度,结果是63个参数。角度表示骨骼局部坐标系中的旋转。这种方法只在手总是从同一个方向显示时有效,但不能捕捉手的全局姿态。
最后,神经网络方法将二维关键点匹配到从训练集中获取最相似的样本,并从该样本[6]中检索3D坐标。虽然这种方法在训练集上效果最好,但它不能很好地推广到新的样本。
其他方法的泛化效果很好,在训练集和验证集上都有相似的误差。4.3中提出的方法效果最好,并用于以下实验。
6.2.2分析学习先验
为了检查网络预先学习的3D,我们输入缺少关键点的得分图,图8显示了从两个不同的角度进行的3D姿势预测。极端情况下,根本不提供关键点作为输入,显示了网络学习的规范先验。随着更多关键点的加入,网络根据这些额外的证据调整预测的姿态。该实验还模拟了二维关键点被遮挡的情况,并证明学习的先验使网络仍然可以检索合理的姿态。
6.2.3比较
由于目前还没有从RGB图像中进行3D手部姿态估计的工作,我们无法与其他方法进行比较。为了将我们的结果与文献粗略地联系起来,我们将其与Zhang等人[25]进行了比较,他们为深度数据上最先进的3D手部姿势跟踪提供了毫米的结果。他们在立体数据集Sval上进行实验,该数据集也包含RGB图像。由于与Zhang等人相比,我们的方法不使用深度数据,因此在尺度和绝对深度方面仍然存在歧义。因此,我们访问根关键点的绝对位置和手的比例来移动和缩放我们预测的3D手姿势,通过使用(1)和(2)产生公制世界坐标w。对于这个实验,我们在PoseNet预测的得分地图上训练PosePrior,使用与第6.2.2节实验相同的时间安排。
PoseNet按照6.1中所述单独训练,然后保持固定。图9显示了我们的方法在很大程度上优于Zhang等人[25]中提出的方法,尽管我们最终只使用深度图进行缩放和移动。此外,我们报告了Zhao等人[26]结合我们的PoseNet提出的提升方法的结果,我们以类似的方式训练PoseNet。结果不如提出的PosePrior。我们认为原因是使用分数图作为提升的输入比坐标更有优势,因为它可以处理手部关键点检测中的歧义。图7显示了三个不同数据集上具有完整处理管道的定性3D示例。
6.3手语识别
以前基于深度数据的手部姿势估计方法不能应用于大多数手语识别数据集,因为它们只有彩色图像。作为最后一个示例实验,我们使用我们的手姿势估计系统,并在其上训练了一个用于手势识别的分类器。该分类器是一个具有ReLU激活函数的全连接三层网络;c.f.网络细节的补充材料。
我们在所谓的RWTH German Fin-gerspelling Database(德国工业大学德语指纹拼写数据库)[8]上报告结果。它包含35个手势,代表字母表中的字母,德语变音,以及从1到5的数字。该数据集由20个不同的人组成,每个手势都要录音两次。除了字母J、Z、Ä、Ö和Ü是动态的外,大多数手势都是静态的。为了保持实验的简单性,我们在限定为30个静态手势的子集上进行实验。
数据库包含两个不同摄像机的记录,但我们只使用了一个摄像机。短视频序列的分辨率为320×240像素。我们将每个视频序列的中间帧作为彩色图像,将手势类标签作为训练数据。该数据集有1160张图像,我们通过签名者将其分为包含232张图像的验证集和包含928张图像的训练集。我们将图像大小调整为320 × 320像素,并对随机采样的256 × 256作物进行训练。由于这些图像是从压缩视频流中获取的,它们显示出我们的网络之前未见过的显著压缩伪影。因此,我们用手工关键点标记了来自训练集的50张图像,我们用来预先微调我们的PoseNet。然后,姿态估计部分保持固定,我们只训练GestureNet。表3显示了我们的系统在我们用于比较的手势子集上与Dreuw等[8]存档的可比结果。
7.总结
我们提出了第一个基于学习的系统,从单目图像中估计3D手部姿势。我们提供了一个大型合成数据集,使我们能够成功地训练网络完成任务。我们已经证明,网络事先学习了一个3D姿势,使其能够从现实世界图像中的2D关键点预测合理的3D手部姿势。
虽然该网络的性能甚至可以与使用深度图的方法相媲美,但仍有很大的改进空间。性能似乎主要受到缺乏带有真实世界图像和各种姿势统计数据的注释大规模数据集的限制。
补充材料:
A. HandSegNet架构和学习计划
表4包含了HandSegNet使用的架构。在批量为8的R-train上训练手分割,使用ADAM求解器[9]。使用Wei等人[19]对第1层到第16层的权重初始化网络,然后使用标准的软最大交叉熵损失训练40000次迭代。前20000次迭代的学习率为10的-5次方,后续10000次迭代的学习率为10的-6次方,直到最后的学习率为10的-7次方。除了随机色相增强0.1外,没有使用任何数据增强。从训练集的320×320像素图像中随机提取256×256作物。
B. PoseNet架构和学习计划
表5包含了用于PoseNet的架构。在所有情况下,训练的批大小为8,并使用ADAM求解器[9]。网络的初始16层使用Wei et al[19]的权值进行初始化,其余均随机初始化。使用L2损失训练网络进行30000次迭代。前10000次迭代的学习率为10的-4次方,后续10000次迭代的学习率为10的-5次方,直到结束的学习率为10的−6次方。对于得分图的真实值生成,我们使用方差为25像素的正态分布,均值等于给定的关键点位置。我们将结果映射规范化,如果有一个可见的关键点,则每个映射包含从0到1的值。对于不可见的关键点,图处处为零。
我们在轴对齐的作物上训练PoseNet,这些作物通过双线性插值调整到256×256像素的分辨率。选择边界框时,单个指针的所有关键点都包含在裁剪中。我们通过两种方式修改计算出的边界框来增强裁剪过程。首先,我们对边界框的计算中心添加噪声,该中心从方差为10像素的零均值正态分布中采样。边界框的大小也相应地改变,仍然包含所有手动关键点。其次,我们发现在颜色上添加一点噪声有助于提高泛化性能用于生成分数图的指针。因此,我们为真实关键点坐标添加一个均值为零、方差为1.5的正态分布,而每个关键点都是独立采样的。此外,我们应用了随机对比增强,比例因子在0.5和1.0之间,这是从均匀分布中采样的。
C.Poseprior架构
表6包含用于PosePrior每个流的体系结构。它使用了6个卷积层,然后两个完全连接的层。全连通层均使用ReLU激活函数,随机掉落一个神经元的概率为0.2。在第一个FC层之前,关于手侧的信息被连接到卷积层计算的平坦特征表示。所有空间维度的下降都是由于跨步卷积造成的。网络终止于一个估计P个参数的全连接层,其中P = 3用于视点估计,P = 63用于坐标估计流。
D. GestureNet架构和学习计划
我们使用Adam求解器训练GestureNet,批大小为8,初始学习率为10的−4次方,在15000次和20000次迭代时下降10年。训练在迭代30000处完成。该网络在随机裁剪的256×256图像上使用标准的软最大交叉熵损失进行训练。
E.其他结果
图10显示了所提出方法的结果。
F. NYU手姿数据集
3D手姿估计常用的基准是Tompson等人[22]的NYU手姿数据集。我们不能将它用于我们的工作,因为它只提供注册的彩色图像,专门为具有有效深度数据的像素提供颜色信息。这将导致图像损坏,如图11所示。这使得仅利用颜色的方法是不可行的。
论文链接:
https://arxiv.org/pdf/1705.01389.pdf
代码链接:
https://github.com/lmb-freiburg/hand3d