Reading Handy: Towards a high fidelity 3D hand shape and appearance model

论文地址:https://rolpotamias.github.io/Handy/

作者:Rolandos Alexandros Potamias, Stylianos Ploumpis, Stylianos Moschoglou, Vasileios Triantafyllou, Stefanos Zafeiriou. From Imperial College London and Cosmos.

发表: CVPR23

链接: https://github.com/rolpotamias/handy


handy
handy

如果你去做这个任务,会怎么做?作者做的方法和你想的有什么差异?

Q:我感觉这个任务听起来还挺直观的,就是用GAN去训练外观,定义一些更多vertices的mesh template,用超级大量的样本去训练堆效果嘛?hand model的定义会有什么新意吗?我倒是想不出来。

A:确实很直观,hand model的定义没什么太大区别。贡献点主要在于:1. 很大很好很variant的新数据集,造成了很好的Handy 2. 用StyleGAN来学texture,而不是传统的PCA,得到的texture更高频细节,更好。

Why:

  1. VR AR发展,对人手的建模、追踪和重建的研究变得流行,因为手是一个重要的显示人的行为的东西
  2. 大部分工作基于MANO,只有很粗糙的low polygon count,而且只基于31个样本构建,distribution不够宽
  3. 大部分工作都忽略了材质的构建

What:

  1. 提出一个large-scale的hand model,包含了形状和外观,用超过1200个人类样本训练,样本有large diversity
  2. 构建Synthetic dataset,训练一个hand pose estimation网络,从单张图像中重建手
  3. 提出一个基于GAN的有高频细节的手的外观+形状重建方法,即使是in-the-wild的单视角图像作为输入

读前疑问:

  1. 看上去作者是用NeRF做了一个high fidelity的hand model。我不太清楚技术细节如何实现,尤其是nerf如何跟parametric model结合,如果训练一个nerf layer,让它可以根据单张输入图像infer一个新手。不知道我哪里来的误解,总之不是用的nerf诶……
  2. fig 1 看上去效果有点假……似乎是皮肤反光率的问题,用的什么lighting representation呢?没什么representation,纯粹用PCA去掉了阴影成分
  3. 居然连皱纹、血管、指甲油也能出来,确实是高频细节了。有针对这些东西做特别的优化吗?还是全是那个style-based GAN的功劳,或者大样本量的功劳呢?真是大力出奇迹呀。还真就是GAN的功劳……?

How:

1. 收集large-scale数据集

raw scan:3000 vertices meshes。1208个人,包括关于他们的meta data,比如性别,年龄,身高,种族等。这些人的diversity比较大

2. 形状重建

  1. 对齐3D scans 和 mesh template
    1. 用了两组template,一个是低分辨率的MANO,它可以直接用进SMPL人体模型中,有778个顶点;一个是高分辨的template,有8407个顶点
    2. 获得稠密的correspondence的方法是:
      1. 从多视角渲染这些raw scans,用MediaPipe来检测2D关键点
      2. 用linear triangulation来把2D关键点转换到3D;利用手指骨架到表面尖端的投影来检测指尖。
      3. 用3D关键点来把template和3D scans的表面对齐
      4. 用Non-rigid Iterative Closest Point algorithm (NICP)来registration,寻找稠密的顶点对应关系
  2. 转换成规范的张开手掌的姿势
    1. 用PCA构建一个手部形状模型。
    2. 公式和MANO几乎一样,\(\beta\) \(\theta\) 两个参数,分别是形状和姿势参数。

3. 高分辨率外观模型

  1. 叫一个图像学艺术家(😳)设计了一个UV template,把scans给unwrap成那样了
  2. 对UV textures进行预处理,去掉阴影和光照:用PCA来识别描述阴影的因素,然后把这些因素去掉。(PCA居然这么好用?!)
  3. 用一个图像处理步骤,将手部纹理映射到更自然的颜色,包括增加亮度,伽玛校正,以及调整色调。
  4. 训练过程:不像其他方法那样直接把外观空间映射到一个低频PCA域,而是用GAN来建模材质。学习率较小,0.001;一个正则权重50也很有效。(啊?这个GAN就这么一句带过吗?直接用的StyleGANv3?)

实验

  1. 和MANO比hand model:
    1. 更紧致,5个主成分表现90% variance,mano需要9个才行
    2. 泛化到数据集外的手的能力更强
    3. 特异性误差(specificity error)?衡量生成的手和ground truth的误差
  2. 重建小孩的手,效果更好
  3. 从单张图像进行3D重建:
    1. 生成数据集:用自己训的GAN模型生成30000张图像,为了更真实,渲染的手跟ShapeNet中的物体有交互,以及是和用SMPL表示的人放在一起的
    2. 模型直接参考3,14,16;加了一个预测材质参数的分支
    3. loss:L2 between estimated and gt shape parameter, pose parameter,and 3D vertices; L1 between estimated and gt UV map;L1 between estimated and gt 2D image;LPIPS loss on two images
    4. 另外设计了in-the-wild数据集,用预训练的模型预测handy 姿势、形状和材质参数,然后只优化材质参数w来拟合材质。
    5. 优化函数包括L1 and LPIPS loss on two images,以及一个对w的L2正则。得到了改进的材质参数w‘之后,finetune回归网络。
    6. 为了定量评估所提出方法的纹理重建,我们向网络提供数据中使用的扫描设备的图像。gt UV map用的是之前registration后得到的。(我不理解诶,这样真的能跟HTML公平比较吗?一方面你的handy就是从这些数据中来的,当然能对in-distribution的东西拟合得更好啊?另一方面HTML生成的UV map和你的定义是一样的吗?这个gt UV map对它来说有用吗?)
    7. 结论是:handy+GAN能得到高频细节,甚至皱纹、戒指、纹身、指甲油、白癜风之类的;handy+PCA会过渡平滑,甚至对肤色的重建失败;HTML更不行。
  4. Test on FreiHand 刷新了指标,7.8 MPVPE and MPJPE……
  5. 从点云重建形状和姿势。降维打击了MANO和LISA,即使用Hand+MANO+10个PCA Components,也比其他方法好很多……