Brief
19年ICCV的一篇从单张图像上回复出三维人体的一个工作看这个是因为老板给发的就当闲鱼时间过去了,学习的开端吧。
目前该工作已经开源了。
这里是 paper
这是是 code
Abstruct
- 作者提出了一个高效的可以从单张图像中重建出具有细节信息的人体模型,包括了人脸,头发穿着以及皱纹,并且是可以在一个可交互式的帧率下进行。
- 重建的结果甚至可以包含在单张图像中被遮挡的部分
- 作者说他们主要解决的思想是将 shape regression问题转化为 image-to-image translateion 的问题
- 作者方法的输入是部分特征图,首先该方法会估算替代图的特征法线和特征向量,该部分可以使得重建出来的模型具有细节。
- 最后一点是该模型是在综合训练集上训练的,但是却对真实世界的图像的3D模型表达很好
Introuction
- 本文解决的问题:从单张图像中回复三维人体模型,然后就是一堆应用的话。文中作者核心在强调的是细节信息。
- 论文索引分类
(1)很大一部文章在侧重于从单张图像上对姿态重建和模糊身形重建,很少的文章注意在细节上的重建工作。
(2)一些重单目相机中可实时的恢复姿态和非刚性变形。
但是上述的两类文章的做法都学要提前捕获静态模板
(3)其他静态的工作在SMPL模型的基础花式虐狗恢复静态人体模型
(4)voxel-based的方法在肢体上的恢复会产生误差,需要事后拟合
(5)Model-based的方法最robust,但是一般在细节上比较缺乏。作者综合了一下有三个原因:
- 首先,他们主要依赖轮廓来拟合,或者基于cnn的回归加上拟合,忽略了RGB值中包含的丰富的光照和阴影信息
2.由于输入和输出没有对齐,从图像像素直接回归到三维mesh是困难的。此外,高分辨率mesh的预测需要基于mesh的神经网络,(这里是指的图卷积结构吗)但比标准的2D CNNs更难训练。
3.它们依赖于三维姿态估计,很难获得准确的姿态
基于上述的三种观察到的细节表现不足的问题,作者提出将 shapr-regression转化为 image-to-image translation的问题,如下图:
作者首选是将输入图片转化为很多不完整的细节,接着采用tex2shape网络将这些细节转化为normal 和 displancement maps. 最后maps增广出一个平滑的具有多细节的模型
上述得到的输入和输出对(input and output)映射到SMPL模型的pose-independent UV-mapping。
UV-mapping则是将人体在二维图像上展开,因此每一个像素对应到3D点的每一个表面点。
作者采用的DensePose从图像中获得部分纹理结构,然后再投射到UV空间,而不是采用的在mesh上回归细节的做法。
每一个像素点都储存了一个normal和一个displacement vector用于转化为细节信息,因此我们模型叫做 tex2shape
contributions
Related work
作者从三个方向介绍了这方面研究工作的进展
Pose and shape reconstruction
和上文的内容大致一样
Face reconstruction
最新的一些面部重建方法采用 shading-based refinement的方法对集合信息进行提升,作者说这类工作和他们工作的相关性在于不同脸部渲染网络的整合使用。
Garment reconstruction and modeling
- 不采用着装特点直接估计着装下的身体形态
Method
本文的工作所重建出来的模型,应该是一个可动态的,包含细节信息的这样一个人体模型。这其中也应该包括了在图像中被 遮挡的形态。和以前工作不同的是作者不采用精确的 3D POSE信息,而是才有一个pix2pix的网络结构,如下图:
这里的UV tranmsofm即是转化到UV-Shape 空间,后面载采用一个类似GAN的主体结构生成3D模型。
3.1 Parametric body model
SMPL是一个穿最少衣服的扫描模型中学习得到的身体模型,定义为参数和,返回的参数是个定点参数和个脸部信息。shape参数表示的是训练数据的前10个主要成分。因为单目相片存在的固有的尺寸不精确问题,作者的方法使得独立于身体高度,作者的方法采用标准的高度估算参数同时也独立于姿态参数。不能采用SMPL描述的细节则是通过UV空间的向量来生成。
3.2. UV parameterization
SMPL模型的格点信息具有6890个,但是分辨率并不是很高,并不能具有足够的细节信息,第二个问题则是mesh并不是一个标准的密集表示形式,因此CNNs结构不能直接应用。因此作者为了采用CNNs结构,作者提出采用一个well-established的格网参数化模型:UV mapping,UV map 将表面展开成一张图片,这里的U和V即是两个轴,每个mesh拓扑定义一次映射,并通过相邻顶点的重心插值将映射中的每个像素分配到表面上的一个点。通过UV映射,我们可以将mesh增广到更高的几何分辨率。
作者采用的UV-MAP实际上是两个变换矩阵,一是 normals ,另外一个是displacement vectors 的map,前者Map具有更强的可视化信息,后者Map更多的是替换下表面的而细腻。
4. Dataset Generation
- 作者为了训练网络,合成了一个数据集(牛)
讲了一些合成数据的细节信息,不做记录。
4.1Scan registration
- 扩展到高分辨率mesh
上文中说到过原来的分辨率的表达是不够的,作者将表面一分为四,扩展为定点以及表面。
- registration
虽然关节优化通常是可取的,但在分阶段进行时,配准要稳健得多:我们首先计算3D姿态,然后是身体形状,最后是非刚性细节。
具体算法流程:
(1)我们通过渲染多个摄像头的扫描并最小化2D重投影误差来发现3D landmark特征。
(2)然后我们优化SMPL pose 参数θ来解释估计3 D关节位置
(3)最后,我们通过优化SMPL顶点的位置来恢复细粒度的细节
4.2 Spherical harmonic lighting
SH 函数是用于在多张图中的同一人体模型合成时采用的照明函数,很多细节,先跳过
4.3. UV map synthetization
- 方法
在UV贴图中,网格的每个面在UV图像中都有一个二维的对应面。给定一个三维网格和一组每个顶点的信息,可以通过标准渲染合成一个UV贴图。顶点之间的信息是通过重心插值来填充的,这意味着,考虑到高分辨率registatrater,我们可以简单地渲染详细的UV位移和法线贴图
5 Model and Training
这应该是文中比较重要的部分内容,这一部分,作者主要讲了网络结构,损失函数和训练方法等。
5.1. Network architectures
作者的网络包括两个CNNs结构,一个是UV映射,一个是SMPL的参数,主要的网络结构和上面的第二张图一样,后面的生成模型是一个CGAN的网络,一个U-Net的生成器和一个PatchGAN的判别器。
- 特征
作者采用的局部纹理信息时512×512的大小,基于以下的观察:
(1)当mapping pisels从一个高分辨率1024×1024到UV,辨率足够高,以包含大多数像素从前景,并不是太高,以防止大empty region。
(2)使用训练集的网格分辨率,较大的UV地图只会包含更多的内插数据。
5.2 Losses and training scheme
- 衡量指标
(1)SSIM、Multi-SSIM
5.3. Input partial texture map
- densepose
首先采用densepose处理左图得到中间的图,然后再映射到输入图像得到部分细节信息。