Learning to Estimate 3D Hand Pose from Single RGB Images论文解析
论文网址:https://arxiv.org/pdf/1705.01389.pdf
论文代码:https://github.com/lmb-freiburg/hand3d
论文出处:2017 ICCV
1. 概述
-
论文主要讲述通过RGB图像估计出人手的三维姿态信息。
-
论文方法由3个子网络组成:第一个子网络从人手图像中进行手的分割和定位;第二个子网络定位2D图像的人手关键点;第三个子网络从2D关键点中推导出人手的3D姿态。
2. 简介
- 单个RGB图像的整个手的3D手势估计很困难,因为有很多含糊不清的关节点和严重的自我遮挡。
- 深度相机并不像普通彩色相机那样容易使用,它们只能在室内环境工作。
- 使用数据手套、标记、多态摄像机等方式严重限制了应用场景。
- 论文方法包括3个building blocks。(1)HandSegNet;(2)PoseNet;(3)PosePrior。
- 另一个困难是数据集的有限可使用性。因此本文创建了一个包含各种数据增强选项的综合数据集。
- 演示了使用3D手势进行手语识别的任务。
3. Hand pose表示
- 给定一个RGB图像,表示为:I ∈ R^{N×M×3},我们需要推导出它的3D pose。
- 定义hand pose 的一系列坐标:w_i = (x_i, y_i, z_i),表示J 个3D关键点的坐标。其中 i∈[1,J],J=21.
- 尺度归一化:推导一个尺度不变的3D结构通过训练一个网络来估计正规化的坐标。
其中s = ||w_{k+1} − w_{k}||_2是一个简单的依赖常量。通过一对关键点之间的距离来正规化距离到单位长度。选择k such that s = 1 ,即利用食指的第一根手骨的长度对手节点位置进行正则化。 - 位置归一化:还有一个问题是绝对坐标系的使用会给预测带来困难,所以本文采用了相对坐标系,以手掌节点的位置作为坐标原点对各个节点坐标进行平移。
归一化的3D坐标如下:
其中 r 是root index. 本文选择 r=0,即以手掌节点的位置作为坐标原点。
4. 3D hand pose估计
- 任务是从一个RGB single图像中估计出相对的3D坐标:w^rel。
- 具体方法如图2所示。
4.1 Hand segmentation with HandSegNet
对于手部分割,我们应用了一个基于CPM检测器并由其初始化的网络体系结构。他们将二维人体检测问题视为估计人体中心位置的分数图。最可能的位置被用作固定大小的切割图片的中心。由于手部尺寸在整个图像上急剧变化,并且很大程度上取决于清晰度,我们宁愿把手部定位视作分割问题。我们的HandSegNet是Wei等人的网络的一个较小的在我们的手部姿态数据集进行训练的版本。
HandSegNet提供的手模允许我们裁剪和归一化输入图像的大小,这简化了PoseNet的学习任务。HandSegNet的大致结构如下图所示。
网络结构,(Conv+ReLu)+MaxPool+Bilinear Upsampling(上采样了四倍)
Loss 函数, standrad softmax + cross entropy loss
Learning rate 初始化为 1e-5,2W次迭代后变为1e-6,3W次迭代后变为1e-7
做了简单的数据増广,random color hue augmentation of 0:1
4.2 Keypoint score maps with PoseNet
我们将2D关键点的定位视为二维评分图的估计。我们训练一个网络来预测J个评分图,其中每个得分图都包含某个关节点出现在某空间位置的可能性的信息。
其中c_i∈R^{N×M}
类似于CPM的Pose网络,该网络使用一个编码器–解码器架构。给定由编码器产生的图像特征的表示,初始分数图被预测并且在分辨率中被连续地细化。我们用CPM结构的模型作为初始化权重,通过训练得到手部关节点检测的模型。PoseNet的大致结构如下图所示。
网络结构,(Conv+ReLu)+MaxPool,最后的预测利用了17,24和31层的feature map
Loss 函数,L2 Loss
需要注意的是对于Ground Truth的处理,利用了均值为关节点位置,方差为25个像素的高斯分布。而对于不可见的节点,所有的概率值设为0。
对于数据crop这部分,采用了两个方法进行,一个是对bounding box的中心加了0均值,方差为10的高斯噪声,另一个是对节点热图加了0均值,方差为1.5的高斯噪声。训练过程初始学习率1e-4,每一万次缩小十倍。
4.3 3D hand pose with the PosePrior network
这部分应该是本文的核心。在得到了21个节点的分布热图后,如何推出3D位置信息是需要考虑的问题。
手部区域是多视角的,所以有必要先对手部区域的视角进行一下限制,从而使预测过程对视角有一定的不变性。
论文中采用了坐标变换,利用两部分对视角的坐标变换进行估计,从而使得某一个特点的节点的z坐标为0(为了使模型的坐标得到统一)。然后对左右手坐标进行了区分。
这部分网络同时有了两个任务,一个是预测节点位置信息,一个是估计视角角度,这两个任务用了接近相同的网络框架。再将预测结果进行融合得到最后的坐标。
一个中间量表示为:
其中R(wrel)∈ R3×3是一个3D的旋转矩阵。
对于左右手,坐标不同:
训练网络估计:(1) 3D坐标within 标准框架wc (2)旋转矩阵R(wrel)
4.4 Network training
- HandSegNet :standard softmax + cross-entropy loss
- PoseNet:L2 loss
- PosePrior:包括2个loss
(1)L2 loss for the canonical coordinates(正则坐标)
(2)L2 loss for canonical transformation matrix (正则变换矩阵)
总误差是Lc和Lr未加权的和。
5. 数据集
自制的Rendered hand pose dataset
- 包含20个不同的characters,39个 actions。
- 分成a validation set (R-val) and a training set (R-train)。
- 其中16个characters执行31个 actions用来做为训练集;4 characters with 8 actions 用来作为验证集。
6. 实验
(1)the detection of hand keypoints of the PoseNet with and without the hand segmentation network;
(2)the 3D hand pose estimation and the learned 3D pose prior.
6.1 HandSegNet
输入通过HandSegNet网络结构得到关于背景和手部上每个像素点的得分,再通过求最大值,二值化运算得到图上的手模。原图和手摸结合得到手部剪切图。
6.2 Keypoint detection in 2D
手部剪切图片输入PoseNet得到三个张量,每个张量都包含21个关节点的得分图。这三个张量可以理解为后一个张量是由前一个经过某些运算得到的关于关节点出现的位置更加精确的表示。选用精炼位置信息的最后一个张量,得分图上各个红色的点的位置便是剪切图片上手部关节点的坐标。
表1 显示的是使用HandSegNet和不使用HandSegNet(用ground truth代替)的PoseNet结果。
其中R-val为在自制的hand pose上的结果;S-val为在Stereo Hand Pose Tracking Benchmark数据集上的测试结果;Dexter为在Dexter数据集上的测试结果。
第一行是不用HandSegNet,直接利用Gt提取区域,可以看出来带来的影响还是比较大的。不同数据集也会有不同的影响。
6.2 3D pose 估计
网络输入是彩色图像,以及左手或右手的信息。网络估计手部分割掩模,定位2D中的关键点并输出最可能的3D姿势。
这部分的实验做的很有意思,由于第三个网络是根据2D热图恢复3D节点位置信息,可以认为通过训练,网络学到了一定的先验知识,现在我们可以考虑一下这种先验。
第二行代表了没有热图信息输入,此时存在着一定的先验分布,随着节点热图信息的加入,可以看出手指节点位置的预测越来越接近真实值,和贝叶斯估计有一定的相似性。