论文解读:3D Hand Shape and Pose Estimation from a Singl RGB Image
由于最近做到了一些 3D Hand Pose Estimation 相关的内容,因而看了这篇CVPR19的 oral 论文,官方说公布源代码,但是github给的是个空repo,希望早点开源吧。
近些年来,基于 RGB图像+depth map 的 3D Hand Pose Estimation 在多个数据榜上基本饱和了,而由于本身2D single rgb image 生成 3D keypoints (21个) 的困难,目前并没有那么饱和。而最近涌现出了一批利用 depth map 来做 fine-tuning 的工作。这篇文章就是从此出发的。
总的来说,这篇论文的主要贡献在于提出了一套模型框架,不仅能够通过 RGB图像得到 Hand Pose, 同时能够从 Hand Mesh 中线性回归得到 Hand Pose。
模型总体架构
以下先从模型整体架构出发进行分析:
这篇论文模型的训练有两个阶段,第一个阶段在合成数据集上进行训练 (合成数据集由自己的手形配上COCO里面的不同背景融合得到),第二个阶段将第一阶段的模型在真实数据集上 fine-tuning, 美其名曰让模型更加鲁棒,从而能够在真实场景下表现更好。
合成数据集上的训练
合成数据集上的整体流程如上图所示:首先将 synthetic image 经过一个 two-stacked hourglass network,得到image的热力图,然后联合热力图和 hourglass network 的输出作为 resnet 的输入 feature maps (按照原文中8层的设置加上4层的pooling推测可能是浓缩 resnet18), 接着得到所谓的 latent feature 输出。然后将 latent feature 传给 graph cnn, 得到 1280 维的 3D hand mesh, 最后通过 linear regression (卷积后不接relu)得到 3D Hand Pose。
合成数据集上的损失函数由三个部分构成,分别为 heat-map loss, mesh loss 和 pose loss。
真实数据集上的训练
真实数据集上的整体流程如上图所示:模型在合成数据集上训练到满足一定要求之后,一直到graph cnn 输出,基本与上述合成数据集上一样的操作,唯一的区别是我们对 3d hand mesh 的操作不仅包括了 linear regression 得到 3d hand pose, 还包括了 mesh renderer 的操作,得到深度图 (后续将对各个步骤所使用的方法进行具体分析)。