Slip the surly bonds of earth, to touch the face of God

[论文解读] Real-time Hand Tracking under Occlusion from an Egocentric RGB-D Sensor

很久没写博客了,之前很多想法因为严重的拖延症而没有实现,惭愧啊。很想吐槽一下百度,不给钱坚决不收录我的网站,还是用谷歌吧

算了,言归正传。

介绍

最近在做跟手?有关的工作,比如手语翻译、手势追踪、手骨架提取这些。这篇论文就是17年ICCV一个工作,主要工作是通过深度学习的方式从RGB-D视频中提取手的骨架,就像这样:

《[论文解读] Real-time Hand Tracking under Occlusion from an Egocentric RGB-D Sensor》

可以看到,这个方法可以很好地重建出有物体遮挡的手骨架,这也是这项工作的一个贡献点。另外,它还可以重建骨架的三维信息,可以使用第一人称视角(采集器放肩膀上或者头上)进行视频采集,而且做到了实时。

这里是项目的网址:Real-time Hand Tracking under Occlusion from an Egocentric RGB-D Sensor。里面有介绍视频。不仅提供了paper和supplemental doc,还提供了训练使用的synthhand数据集。

演示视频:

特点:

  • 第一人称采集,实时提取
  • 背景杂乱、手部遮挡、手与物体的交互
  • 单相机RGBD采集
  • 3D关节点坐标和2D关节点Heatmap

架构

先上图

《[论文解读] Real-time Hand Tracking under Occlusion from an Egocentric RGB-D Sensor》

一部分一部分看。

第一个红色网络左面是对于采样相机的操作。一般RGBD相机都会有一个彩色摄像头和一个深度摄像头,而且通常来说它们的位置姿态会有一些略微的不同。这一步就是将彩色图和深度图进行对其,输出RGBD通道的4维图像D

第二部分,也就是HALNet和它的输出,目的是将原图中的手部区域提取出来。具体做法是通过一个由ResNet-50改进而来的cnn网络,输出手部根节点的heatmap(每个像素的值代表该节点位于此像素点的概率),然后通过这个heatmap和根节点的深度计算手部区域的bounding box,也就是D〰️。

第三部分,也就是JORNet,结构同HALNet基本一致,不过输出有变化,输出两部分,一部分是所有节点的heatmap,另一部分是所有节点的三维坐标,也就是PL。这个三维坐标加上根节点的坐标就是全局三维坐标。

第四部分,就是途中绿色的模块,叫做运动姿态调整。简单讲就是将手的关节点heatmap和三维坐标做一个优化、约束和时间平滑。输出的手模型Θ并不是关节点的三维坐标,接下来会讲。

两个网络HALNet和JORNet都使用作者他们做的一个数据集——SynthHands来训练。

手模型

文中用到的手模型有两个:

《[论文解读] Real-time Hand Tracking under Occlusion from an Egocentric RGB-D Sensor》

左面的一个用在神经网络里,一共21个关节点,它们可能有image的uv坐标,世界三维坐标等特征。heatmap和joint pos都是这些关节点的坐标信息。

右面的一个用在最终输出的优化模型里,是一个运动骨架自由度模型,根节点有6个自由度——3个平移项和3个旋转项。蓝色节点有两个旋转自由度,亮蓝色节点有一个旋转自由度。一共是26维的向量。

手部定位和3D关节点回归

首先是从RGB图像和Depth图像生成RGBD图像:

$$
D=colormap(R,G,B,Z)
$$
至于怎么做相机校准,这里就不细讲了,扔上一只公式:

《[论文解读] Real-time Hand Tracking under Occlusion from an Egocentric RGB-D Sensor》

然后经过HALNet,输出根节点的heatmap,接下来做手部抠图:

$$
\tilde{D}=imcrop(D,H_R)
$$

最后对根节点位置做一个后处理,平滑网络输出可能的奇异项。先对每一个时间点的输出位置打一个标签,certain或uncertain。如果t时刻输出位置的置信度小于0.1并且t-1时刻输出位置的距离大于30个pixel,那么t时刻的输出就打uncertain标签,反之就是certain标签。对于uncertain的输出,使用下式计算平滑后的节点坐标:

$$
\phi_t=\phi_{t-1}+\delta^k\frac{\phi_{c-1}-\phi_{c-2}}{\Vert \phi_{c-1}-\phi_{c-2}\Vert}
$$

其中,\(\phi_{t-1}\)表示t时刻的根节点位置(无论certain还是uncertain),\(\phi_{c-1}\) 表示t时刻之前最后一个certain的根节点位置。\(\delta\)是一个参数,文中取0.98,k则是c-1到t经过了多少帧。

这样就最大程度减小了网络输出偶发错误给后续工作带来的影响。

得到了手部区域的box图像,再使用JORNet计算21个关节点的heatmap和三维坐标。

手部姿态优化

这一步将heatmap和三维坐标融合到之前说的自由度手部模型中。通过优化一个能量函数:

$$
\varepsilon(\Theta)=E_{data}(\Theta,p^G,H)+E_{reg}(\Theta)
$$

包含data项和正则项,分别代表用自由度模型去逼近heatmap和三维坐标,以及关节自由度本身的约束和时间平滑操作。细节公式文章里有,这里就不细讲了。

通过这样一个优化,最终的自由度手部模型就计算出来了。接下来展示一下前一步中两个网络的具体细节。

HALNet和JORNet

都是Resnet-50的微调,为了保证它的实时性:

《[论文解读] Real-time Hand Tracking under Occlusion from an Egocentric RGB-D Sensor》

里面两个残差块结构:

《[论文解读] Real-time Hand Tracking under Occlusion from an Egocentric RGB-D Sensor》

激活函数使用Relu,卷积层添加了BatchNormalization。

在网络中间层也输出了中间层loss,一共有三个,同Main loss共同组成网络loss。两个网络的loss细节:

《[论文解读] Real-time Hand Tracking under Occlusion from an Egocentric RGB-D Sensor》

heatmap loss和三维坐标loss都使用欧式距离。

结果

《[论文解读] Real-time Hand Tracking under Occlusion from an Egocentric RGB-D Sensor》

第一行和第二行表示在Depth图和RGB图上的骨架,最后一行表示虚拟空间中转动摄像机视角看到的骨架,表示生成的三维模型是正确的。

《[论文解读] Real-time Hand Tracking under Occlusion from an Egocentric RGB-D Sensor》

同样适合第三人称视角的摄像机

这篇文章在hand tracking领域融合了深度学习的方法,有物体遮挡的情况下也能做出不错的结果,值得借鉴。个人感觉如果能结合目前的目标检测方法Yolo、SSD等或许会有其它的思路。

点赞
  1. 梦醒说道:

    他们没公开源码吗 :lol: :lol: :lol:

    1. MeteorsHub说道:

      最近公开了model+weights

      1. 梦醒说道:

        他们说要用机构邮件地址发才行 :cry: 。。。。。。大佬你问他们要模型了嘛 :lol:

        1. MeteorsHub说道:

          机构邮件是保证非商业用途,我没有要,文章发布时他们还没有公开模型

发表评论

电子邮件地址不会被公开。