作者和机构
解决的问题
使用线性模型对衣服进行编码
左边四幅图展示的是3D身体和服装重建的应用。右边三幅图展示的是服装编辑和姿势重建。
难点
需要找到一种参数量较少的服装模型表示
在人体上生成宽松衣服的模型
相关工作
目前有许多方法尝试从多张图像,3D扫描或RGBD数据中学习到服装模型,然而,很难获取到足够多的数据来表示服装的复杂性,因而真实数据训练的模型泛化性不够好,在生成训练集以外的服装时会出现问题。而使用软件生成的数据训练,其效果取决于数据的质量。
最近又出现了一些新的方法,比如Bcnet等,但这些方法的局限性要么是需要为每一种衣服训练一个特定的模型,要么是使用了十分复杂的表示形式。
目前很多重建人体的工作都是直接推断出SMPL的参数,而不生成服装参数。要在人体上重建服装模型,一种做法是将服装表示成SMPL网格的偏移量,这种做法在面对宽松服装时效果很差。或者使用非参数表示方法,包括体素化方法,几何图像,双平面深度图,可视外壳。最强大的方法是基于隐函数的表示方法。最近一些方法结合了多种表示法,如SMPL+体素,以及SMPL+隐函数。但那些方法能够重建丰富的细节,但不能够同时控制服装和姿势。
方法的优势
- 使用低维带语义的隐向量来表示服装,可以对服装的样式和尺寸进行编辑。
- 可以同时表示人体形态姿势和服装样式尺寸,可以表示不同拓扑结构的服装,如衬衫,夹克,套头衫等。
- 模型完全可微,可以与深度学习进行集成。
- 可以对野生图片进行3D扫描和3D重建。
方法
相比于SMPL,SMPLicit多了两个参数 z c u t \pmb{z}_{cut} zzzcut和 z s t y l e \pmb{z}_{style} zzzstyle,分别与服装的尺寸和样式有关。该方法主要是学习一个隐式函数
C ( p , β , z c u t , z s t y l e ) ↦ R + C(\pmb{p}, \pmb{\beta}, \pmb{z}_{cut}, \pmb{z}_{style})\mapsto \R^+ C(ppp,βββ,zzzcut,zzzstyle)↦R+
该函数代表对于给定的一点 p ∈ R 3 \pmb{p}\in\R^3 ppp∈R3,求得 p \pmb{p} ppp到服装表面的距离。在空间中采样到足够多的点之后,就可以通过得到的距离场,运用Marching Cubes算法构建3D网格。
Marching Cubes算法:计算三维离散数据场中的等值面的算法。算法基本思想是对体素逐个处理,找到与等值面相交的立方体,采用插值计算出等值面与立方体边的交点。
作者还学习了一个基于顶点的偏移场,用于为不同人体姿势下的服装变形建模,然后使用SMPL蒙皮方法构建服装模型。完整的SMPLicit函数是
C ′ ( θ , β , z c u t , z s t y l e ) ↦ G C'(\pmb{\theta}, \pmb{\beta}, \pmb{z}_{cut}, \pmb{z}_{style})\mapsto \mathcal{G} C′(θθθ,βββ,zzzcut,zzzstyle)↦G
其中 G \mathcal{G} G为最终的网格模型。
下图第一行表示训练过程,第二行表示预测过程。
SMPLicit-core训练
训练过程中,对于任意一个服装-人体数据对,计算得到其UV人体遮挡图 U U U(Occlusion map),即SMPL人体被服装遮挡的网格点在UV图中像素置为1,否则置为0。然后训练一个图像编码器 f : U ↦ z c u t ∈ R D f:U\mapsto z_{cut} \in \R^D f:U↦zcut∈RD。 对于 z s t y l e z_{style} zstyle,参照DeepSDF构建auto-decoder进行训练。
SDF:符号距离函数,将空间中的一个点映射到这个点到某个表面上的距离。比如 f ( p ) = ∣ ∣ p ∣ ∣ − 1 f(\pmb{p})=||\pmb{p}||-1 f(ppp)=∣∣ppp∣∣−1表示将点 p \pmb{p} p