Hand Pose Estimation(3)

今天看的论文还是和手势识别相关的,是2019年的CVPR,如下:

Paper: Learning joint reconstruction of hands and manipulated objects

这篇文章新奇的是,它是我看的第一篇关于“操作”的,就是对于正在操作一件物品的手,同时估计出手和物体的姿态。并且手和物体模型之间保持很好的接触。

Abstract

预测手和物体的操作模型(hand-object manipulations)一直是很重要的课题,而本文的重心在于重建出操作过程中的手和物体模型,这就更加有难度了,因为手和模型有可能互相堵塞(occlusion),但这也同时在一定程度上简化了问题,因为手和物体之间应该时刻保持接触,既不能分开,也不能插入(Interpenetrate),本文就根据这点提出了一个新的Contact Loss,在端到端网络上让保持模型的物理接触。

本文使用RGB数据作为输入,同时本文也做了一个新的大尺度的合成数据集。

Contributions

  1. 本文设计了第一个端到端可训练网络,来进行从RGB信息中进行手和物体的联合3D重建。
  2. 本文提出了一个新的Contact Loss,来“惩罚”手和物体之间的异常接触。
  3. 本文提出了一个新的大尺度的合成数据集(手和物体接触)。

Proposed Method Details

提出的网络如图:

该网络分为两个Branch,第一部分先在一个正则化的坐标空间中重建出物体形状,第二部分则预测出手的mesh,同时也提取出必要的信息来将物体转换到与手相关联的坐标系统当中。

Differentiable hand model

由其他身体姿态方法引入SMPL参数模型启发,本文也引入了MANO手模型,作为一个可区分层(Differentiable Layer)(MANO是一个数据模型,能够将pose($\theta$)和shape($\beta$)参数映射成mesh),其中pose参数捕捉到手节点之间的角度(angles),而shape参数则用来控制特定的人的手的变形。

同时手姿态是设置在一个低维度子空间,本文并没有预测整个45维的姿态空间,而是预测了30个姿态(Pose)的PCA组件(Component)。

对顶点(Mesh上的)和节点(骨骼上的)位置的监督:
首先用编码器(Encoder)从单张图片上生成特征$\Phi_{\text { Hand }}$,再在特征$\Phi_{\text { Hand }}$上生成参数$\theta$和$\beta$,本文将mesh生成器(Generator),作为一个可区分网络层(Differentiable Network Layer)加入到网络里面,由$\theta$和$\beta$生成手的mesh顶点$V_{\text {Hand}}$和16个手的骨骼节点,除此之外,本文还从mesh的顶点中挑选了5个顶点当做指尖的骨骼节点,最后得到了21个手的关键节点 $J$,最后的监督则是在$\Phi_{\text { Hand }}$和$J$两者同时监督,Loss为${L}2$。

Regularization on hand shape $\mathcal{L}_{\beta}$:稀疏的监督(手的形状没有限制)可能会造成奇怪的mesh变形,所以由引入了正则器(Regularizer)$\mathcal{L}_{\beta}=|\beta|^{2}$,来手的形状上让预测结果与MANO训练集更加接近,即$\beta=\overrightarrow{0} \in \mathbb{R}^{10}$。

最后的Hand Loss可以定义为:
$\mathcal{L}_{\text {Hand}}=\mathcal{L}_{V_{H a n d}}+\mathcal{L}_{J}+\mathcal{L}_{\beta}$

Object mesh estimation

本文使用AtlasNet作为网络的物体识别模块,并且本文通过实验发现当输入的点是从表面采样出来的时候,能有更好的生成效果。所以最后物体部分的Loss,采用了Chamfer Loss,是通过计算预测出来的顶点与从物体外表面上随机采样出来的点的真值的差异得到的。

Regularization on object shape:$\mathcal{L}_{E}, \mathcal{L}_{L}$,为了保证生成的物体mesh有明确的表面和好的质量的三角化,但是AtlasNet并没有现式的(Explicitly)保证生成的mesh的质量,所以还需要Loss,这里引入了边正规化Loss(Edge-regularization Loss) $\mathcal{L}_{E}$ 和 弯曲度正规化(Curvature-regularizing Loss) $\mathcal{L}_{L}$

物体Mesh的正则化损失Object Loss就可写为:

Hand-relative coordinate system:为了保证手和物体的大小尺度保持一致,不过大和过小,这里又引入了另外两种Loss $\mathcal{L}_{S}, \mathcal{L}_{T}$,
来保证大小(Scale)和角度(Radius)的正确,以物体的质点为中心。最后再引入Chamfer Loss$\left(\mathcal{L}_{V o b j}\right)$,所以当训练与手相关的坐标的Loss就可以写成:

Contact Loss

首先定义:
为点到点集合之间的距离。

为点集到点集之间的距离。

同时还定义了一个“处罚”方程:$l_{\alpha}(x)=\alpha \tanh \left(\frac{x}{\alpha}\right)$,$\alpha$为动作的距离特征。

Repulsion:本文定义了一个排斥(Repulsion) Loss $\mathcal{L}_{R}$,用来惩罚(Penalize)手和物体之间的互融(手伸到物体里面去了)。首先为了检测出互融,本文首先检测在物体里面的手顶点(Vertices),而既然物体模型是一个变形的球形,并且是防水的(Watertight)?所以我们从手的顶点处发射出一个射线(Ray),,通过计算射线与物体表面相交的次数就能知道该顶点是否在预测出的Mesh里面(物体里面为$\operatorname{Int}(O b j)$ Interior of the Object),那么$\mathcal{L}_{R}$:

其中$r设为2cm$

Attraction:本文另外定义了一个吸引(Attraction) Loss $\mathcal{L}_{A}$,来惩罚当手的顶点在物体周围,但没有与表面接触的情况,这仅仅用在$\operatorname{Ext}(O b j)$ Exterior of the Object的顶点上。

最后本文发现离表面近的区域有六个(五个指尖和一部分手掌),如下图左边所示:

那么吸引Loss就可以定义为:
$\left\{C_{i}\right\}_{i \in[1,6]}$,

其中$\alpha$为1cm,远于这个距离的,吸引力会大幅度的变小,并变得不可估计。

那么总的接触(Contact) Loss可定义为:

其中$\lambda_{R} \in[0,1]$

最后网络首先用$\mathcal{L}_{\text {Hand}}+\mathcal{L}_{\text { Object }}$训练,之后继续用$\mathcal{L}_{\text {Hand}}+\mathcal{L}_{\text {Object}}+\mu_{C} \mathcal{L}_{\text {Contact}}$训练,其中$\mu_{C}$设为10。

ObMan Dataset

为了克服缺少适合的训练数据这个不足,本文生成了一个大尺度的手抓物体的合成数据集(ObMan)。分别从以下角度选择:Objects、Grasps、Body pose、Texture四个角度从各个数据集中选择适合的数据集。

最后,选择背景的图片(从另外数据集中选择出来的),最后使用(Blender),为了保证手和物体都是可见的,如果合成图中手的可见像素个数少于100个或者物体只有少于40%部分是可见的,就将该图片抛弃。