《SMPLicit: Topology-aware Generative Model for Clothed People》论文解读
作者和机构
解决的问题
使用线性模型对衣服进行编码
左边四幅图展示的是3D身体和服装重建的应用。右边三幅图展示的是服装编辑和姿势重建。
难点
需要找到一种参数量较少的服装模型表示
在人体上生成宽松衣服的模型
相关工作
目前有许多方法尝试从多张图像,3D扫描或RGBD数据中学习到服装模型,然而,很难获取到足够多的数据来表示服装的复杂性,因而真实数据训练的模型泛化性不够好,在生成训练集以外的服装时会出现问题。而使用软件生成的数据训练,其效果取决于数据的质量。
最近又出现了一些新的方法,比如Bcnet等,但这些方法的局限性要么是需要为每一种衣服训练一个特定的模型,要么是使用了十分复杂的表示形式。
目前很多重建人体的工作都是直接推断出SMPL的参数,而不生成服装参数。要在人体上重建服装模型,一种做法是将服装表示成SMPL网格的偏移量,这种做法在面对宽松服装时效果很差。或者使用非参数表示方法,包括体素化方法,几何图像,双平面深度图,可视外壳。最强大的方法是基于隐函数的表示方法。最近一些方法结合了多种表示法,如SMPL+体素,以及SMPL+隐函数。但那些方法能够重建丰富的细节,但不能够同时控制服装和姿势。
方法的优势
- 使用低维带语义的隐向量来表示服装,可以对服装的样式和尺寸进行编辑。
- 可以同时表示人体形态姿势和服装样式尺寸,可以表示不同拓扑结构的服装,如衬衫,夹克,套头衫等。
- 模型完全可微,可以与深度学习进行集成。
- 可以对野生图片进行3D扫描和3D重建。
方法
相比于SMPL,SMPLicit多了两个参数zcut\pmb{z}_{cut}zzzcut和zstyle\pmb{z}_{style}zzzstyle,分别与服装的尺寸和样式有关。该方法主要是学习一个隐式函数
C(p,β,zcut,zstyle)↦R+C(\pmb{p}, \pmb{\beta}, \pmb{z}_{cut}, \pmb{z}_{style})\mapsto \R^+ C(ppp,βββ,zzzcut,zzzstyle)↦R+
该函数代表对于给定的一点p∈R3\pmb{p}\in\R^3ppp∈R3,求得p\pmb{p}ppp到服装表面的距离。在空间中采样到足够多的点之后,就可以通过得到的距离场,运用Marching Cubes算法构建3D网格。
Marching Cubes算法:计算三维离散数据场中的等值面的算法。算法基本思想是对体素逐个处理,找到与等值面相交的立方体,采用插值计算出等值面与立方体边的交点。
作者还学习了一个基于顶点的偏移场,用于为不同人体姿势下的服装变形建模,然后使用SMPL蒙皮方法构建服装模型。完整的SMPLicit函数是
C′(θ,β,zcut,zstyle)↦GC'(\pmb{\theta}, \pmb{\beta}, \pmb{z}_{cut}, \pmb{z}_{style})\mapsto \mathcal{G} C′(θθθ,βββ,zzzcut,zzzstyle)↦G
其中G\mathcal{G}G为最终的网格模型。
下图第一行表示训练过程,第二行表示预测过程。
SMPLicit-core训练
训练过程中,对于任意一个服装-人体数据对,计算得到其UV人体遮挡图UUU(Occlusion map),即SMPL人体被服装遮挡的网格点在UV图中像素置为1,否则置为0。然后训练一个图像编码器f:U↦zcut∈RDf:U\mapsto z_{cut} \in \R^Df:U↦zcut∈RD。 对于zstylez_{style}zstyle,参照DeepSDF构建auto-decoder进行训练。
SDF:符号距离函数,将空间中的一个点映射到这个点到某个表面上的距离。比如f(p)=∣∣p∣∣−1f(\pmb{p})=||\pmb{p}||-1f(ppp)=∣∣ppp∣∣−1表示将点p\pmb{p}ppp映射到其到以原点为球心,1为半径的球面的距离。正值表示在表面外,负值表示在表面内,零值表示在表面上。
DeepSDF:是KInectFusion创造者 Dr.Newcombe 领导的 Facebook Reality Labs 团队发表在CVPR2019的工作。作者提出了一个Auto-Decoder,即丢弃Auto-Encoder的Encoder模块,仅保留Decoder,将隐向量和给定的点映射到该点的SDF值。隐向量表示的是三维模型。
由于希望服装随人体的形状变化而变化,作者将服装顶点相对于人体顶点进行编码。对于每一类服装,根据其与服装网格的接近程度,得到KKK个顶点聚类vk∈R3v_k\in \R^3vk∈R3。将空间中三维点p\pmb{p}ppp编码成相对向量矩阵Pβ∈RK×3P_\beta\in\R^{K \times3}Pβ∈RK×3,每一行为Pβ,k=p−vkP_{\beta,k}=\pmb{p}-v_kPβ,k=ppp−vk。作者说,这种过度参数化的表示方式能够推断出人体边界,效果比欧氏距离和重心坐标距离要好。
最后,给定p\pmb{p}ppp,PβP_\betaPβ,z=[zcut,zstyle]\pmb{z}=[z_{cut}, z_{style}]zzz=[zcut,zstyle],需要训练一个decoder:C(Pβ,z)↦R+C(P_\beta,\pmb{z})\mapsto \R^+C(Pβ,zzz)↦R+来预测无符号距离D(p)D(\pmb{p})D(ppp)。对于封闭隐形曲面需要有符号距离场,而服装是一个开曲面,因此使用无符号距离场来表达服装模型。
训练时使用的Loss函数如下。
Ld=∣C(Pβ,f(U;w1),zstyle;w2)−D(p)∣\mathcal{L}_d=|C(P_\beta,f(U;w_1),z_{style};w_2)-D(\pmb{p})| Ld=∣C(Pβ,f(U;w1),zstyle;w2)−D(ppp)∣
其中w1w_1w1为编码器zcut=f(U;w1)z_{cut}=f(U;w_1)zcut=f(U;w1)中的网络权重,每一个训练样本都需要有对应的zstylez_{style}zstyle,w2w_2w2为最后的decoder的权重。
在训练时,会在一个人体3D包围盒中和衣服模型附近均匀采样,分别训练了上身,裤子,裙子,鞋子和头发的模型。
为了能够平滑地插值和构建新服装,使用损失函数Lz=∣z∣\mathcal{L}_z=|\pmb{z}|Lz=∣zzz∣来约束z\pmb{z}zzz,使其服从正态分布。
作者还在服装表示潜向量当中添加了一个高斯噪声zσ∼N(0,σnI)\pmb{z}_\sigma\sim \mathcal{N}(0,\sigma_n\pmb{I})zzzσ∼N(0,σnIII),即使用C(Pβ,z+zσ)C(P_\beta,\pmb{z}+\pmb{z}_\sigma)C(Pβ,zzz+zzzσ)进行训练。作者说这在训练数据较少的情况下特别有帮助。最后的loss函数为
L=Ld+λzLz\mathcal{L}=\mathcal{L}_d+\lambda_z\mathcal{L}_z L=Ld+λzLz
其中λz\lambda_zλz为超参数。
SMPLicit-core预测
在预测阶段,当我们需要生成适合人体的服装时,按以下步骤进行:
- 采样z∼N(μ∗1,σ∗I)\pmb{z}\sim \mathcal{N}(\mu *\pmb{1},\sigma*\pmb{I})zzz∼N(μ∗111,σ∗III),μ\muμ和σ\sigmaσ来自训练集的隐空间。
- 在T-pose人体周围密集采样得到点集,计算PβP_\betaPβ,然后计算C(Pβ,z)C(P_\beta,\pmb{z})C(Pβ,zzz)。
- 确定距离场阈值tdt_dtd(作者设为td=0.1mmt_d=0.1mmtd=0.1mm,以使重建的服装没有缺陷,保持光滑),运用Marching Cubes算法构建3D网格。
带姿势的SMPLicit模型
前面的模型均为针对默认姿态T-pose下构建的。而对于在带有姿态的SMPL人体,作者使用TailorNet数据集训练一个网络P:p×θ×zθ↦d∈R3P:\pmb{p}\times \pmb{\theta} \times \pmb{z}_\theta \mapsto \pmb{d}\in \R^3P:ppp×θθθ×zzzθ↦ddd∈R3,将默认姿态下的点映射到带有姿态信息的模型上。其中θ\pmb{\theta}θθθ是SMPL模型的姿态参数,zθ\pmb{z}_\thetazzzθ是一个可以用类似于学习zstyle\pmb{z}_{style}zzzstyle的方法学习到的隐向量。
在训练阶段,只需要对于T-pose下服装表面进行采样,对输入点的位置进行编码p↦Pβ\pmb{p}\mapsto P_\betappp↦Pβ,极小化预测值和真实值的差别。在预测阶段,需要先用SMPLicit-core的方法计算得到PPP,然后加上偏移p↦p+d\pmb{p}\mapsto \pmb{p}+\pmb{d}ppp↦ppp+ddd,再通过姿态参数θ\pmb{\theta}θθθ对SMPL人体模型和变形后的服装模型进行蒙皮得到网格。
应用与实验
训练数据
BCNet数据集:该数据集中有手工剪裁的800k个短袖模型,973k个裤子模型,933k个裙子模型。本次仅使用了88797个长袖模型,44265个裤子模型,44435个裙子模型。
3D服装模型网络数据:夹克(23),毛衣(6),西装(2),连帽衫(5),上衣(12),鞋子(28),靴子(3),凉鞋(3)。作者将这些服装模型先调整到T-pose下的状态,在训练过程中随机调整人体的形状,并让服装能够适配其形状。
由于BCNet数据集和网络数据存在巨大的不平衡,在每次迭代时以0.5的概率选择网络数据,以0.5的概率选择BCNet数据集。
USC-HairSalon数据集:有343个高密度头发点云,大部分是长发。
为了训练带有姿态信息的服装模型,作者采用了带有200个衬衫和裤子实例的TailorNet。对于其余服装模型(除了鞋子,作者对于鞋子并未做进一步变形),作者仅训练了一个只通过zθ\pmb z_\thetazzzθ进行参数化的变形模型,使用Blender进行手动变形生成数据。
作者会展示3点应用
- 如何在隐空间中进行插值,编辑尺寸和样式
- 如何将SMPLicit模型拟合到带穿着的人体3D扫描数据
- 如何将SMPLicit模型用于图像感知任务
生成属性
作者使用PCA对隐空间进行分析,以方便进行插值。为了更好地对服装属性进行解耦,z=[zcut,zstyle]\pmb{z}=[\pmb{z}_{cut},\pmb{z}_{style}]zzz=[zzzcut,zzzstyle]的维度一般比较低,在4到18之间。zcut\pmb{z}_{cut}zzzcut的第一个主成分控制了袖子和裤腿的长度,第二个主成分控制了总体长度(对于上身衣服)或腰围高度(对于裤子和裙子)。上图(A)展示了前两个主成分的影响。并且作者发现完全对尺寸和样式解耦是不可能的,比如学习到的模型中上衣比短袖要更加宽松。
图(B)展示的是通过对zstyle\pmb{z}_{style}zzzstyle进行插值实现由短袖分别向连帽衫,敞开的夹克,上衣进行丝滑转变的过程。
图(C)展示的是短袖重定向到不同体型的人身上的结果。
拟合到3D扫描
作者使用Sizer数据集来展示如何拟合到3D扫描数据。拟合的目标是SMPLicit-core模型在未被扫描到的点的值为零。首先需要在上下身服装以及周围的3D空间均匀采样点。设qqq为扫描点,计算该点到扫描数据的距离d=dist(q,S)d=dist(q,S)d=dist(q,S)。由于SMPLicit-core模型是定义在T-pose下,然后获取身体相对编码Pβ(θ,β)P_{\pmb\beta}(\pmb\theta,\pmb\beta)Pβββ(θθθ,βββ)。接下来使用以下损失函数对模型CCC进行优化,使得其计算的距离与ddd一致。
L(β,θ,z)=∣C(Pβ(θ,β),z)−d∣\mathcal{L}(\pmb\beta,\pmb\theta,\pmb{z})=|C(P_{\beta}(\pmb\theta,\pmb\beta),\pmb{z})-d| L(βββ,θθθ,zzz)=∣C(Pβ(θθθ,βββ),zzz)−d∣
除此之外,作者还最小化扫描点与SMPL顶点之间的倒角距离,SMPL关节点与预测的扫描人体关节点之间的MSE,SMPL先验损失,z\pmb{z}zzz的正则项。在优化的时候先优化θ\pmb\thetaθθθ和β\pmb\betaβββ,再一起优化所有变量。
在实验中,作者采用CAPE和TailorNet作为对照。重建效果如上图所示。CAPE并没有为服装生成具体的网格,仅仅做了SMPL网格顶点的变形;TailorNet为上衣和裤子均训练了一套模型,生成了特定的网格;SMPLicit仅使用一个模型,即可生成不同样式,不同类型的服装。重建误差如下表所示。可以看到,SMPLicit的效果明显比CAPE要好,与TailorNet差不多。
拟合到图片
与SMPL类似,SMPLicit模型拥有鲁棒性以及具有语义,特别是在遮挡,复杂姿势,低分辨率图片中有很好的效果。要利用图片重建3D模型,首先需要检测到人像,使用Frankmocap获取每个人的姿势和形状参数(θ\pmb\thetaθθθ和β\pmb\betaβββ),分离服装语义分割块。然后将这些语义分割块输入到SMPLicit模型中得到不同层的3D服装模型。对于每一个服装语义块,首先在T-pose下的SMPL模型周围均匀采样ppp,将这些采样点变换到当前姿态下的点,去除被遮挡的点,最后将剩下的点映射到2D语义块上。如果投影点在服装分割块内则sp=1s_p=1sp=1,否则sp=0s_p=0sp=0。对于点ppp,有以下损失函数:
LI(z)={∣C(Pβ,z)−dmax∣,ifsp=0mini∣C(Pβi,z)∣,ifsp=1\mathcal{L}_I(\pmb{z})= \begin{cases} |C(P_\beta,\pmb z)-d_{max}|, if\ s_p=0\\ \min_i|C(P_\beta^i,\pmb z)|, if\ s_p=1 \end{cases} LI(zzz)={∣C(Pβ,zzz)−dmax∣,if sp=0mini∣C(Pβi,zzz)∣,if sp=1
上述损失意思是,当sp=0s_p=0sp=0时使得模型预测的是最大截止距离,即让点离得更远,当sp=1s_p=1sp=1时使得模型预测值向零值靠近。当有多个点映射到同一个像素的时候,取离当前服装表面最近的点,即距离最小的点。实验证明,这样能够防止服装变厚,有助于重建多件服装。作者还添加了正则项损失Lz=∣z∣\mathcal{L}_z=|\pmb z|Lz=∣zzz∣,与LI\mathcal L_ILI一起优化模型。
实验中,作者使用PIFuHD和Tex2Shape两种方法进行对照,结果如上图所示。从图中可以看到,PIFuHD难以合成非直立姿势的模型,Tex2Shape产生了很逼真的效果,但不能正确恢复所有服装的形状,比如最后一行的夹克。而SMPLicit则可以识别和生成出多层的服装,比如最后一层的夹克和衬衣。
再进一步,作者将SMPLicit运用到有多人的挑战性场景中,结果如下图所示。作者使用MPII数据集进行测试。在重建时,需要遍历所有检测到的SMPL模型,将身体模型投影到图像上,并屏蔽其他人的分割。这样的场景最困难的是要解决严重的遮挡问题。当然SMPLicit也不是表现得很完美,比如图中右下角的例子里的人的服装预测错误,是因为在图像分割的时候就产生了错误。
《SMPLicit: Topology-aware Generative Model for Clothed People》论文解读相关推荐
- 论文解读PCT: Point Cloud Transformer(用于点云处理的Transformer)
最近几年transformer越来越火,在NLP.CV等领域都取得了很大的成功.这篇文章作者利用了transformer能够处理无序数据的特点,将transformer应用到点云的处理上.它的想法是基 ...
- CVM2021| PCT: Point cloud transformer(分类+分割任务SOTA)
点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨 泡泡机器人SLAM 标题:PCT: Point cloud tra ...
- PCT: Point Cloud Transformer
PCT:点云Transformer Meng-Hao Guo Tsinghua University gmh20@mails.tsinghua.edu.cn Jun-Xiong Cai Tsinghu ...
- FastFormers 论文解读:可以使Transformer 在CPU上的推理速度提高233倍
自Transformers诞生以来,紧随其后的是BERT,在几乎所有与语言相关的任务中,无论是问题回答,情感分析,文本分类还是文本生成,都占据着NLP的主导地位. 与RNN和LSTM消失的梯度问题(不 ...
- Point Cloud Transformer(PCT)代码实现
Point Cloud Transformer(PCT)代码实现 目前最火热的Transformer在自然语言和图像识别中扮演了极其重要的角色,在点云数据集中也不例外,清华大学近期提出在点云中运用Tr ...
- 论文解读:《基于BERT和二维卷积神经网络的DNA增强子序列识别transformer结构》
论文解读:<A transformer architecture based on BERT and 2D convolutional neural network to identify DN ...
- Point Cloud Transformer(PCT)阅读翻译
PCT: Point Cloud Transformer 1. Introduction transformer是一种 encoder-decoder结构,包含了三个模块:输入词嵌入,位置(顺序)编码 ...
- 论文阅读 PCT:Point Cloud Transformer
论文阅读 PCT:Point Cloud Transformer PCT 介绍 Input Embedding native 版本 enhanced 版本 Attention PCT 介绍 PCT是基 ...
- AI论文解读:基于Transformer的多目标跟踪方法TrackFormer
摘要:多目标跟踪这个具有挑战性的任务需要同时完成跟踪目标的初始化.定位并构建时空上的跟踪轨迹.本文将这个任务构建为一个帧到帧的集合预测问题,并提出了一个基于transformer的端到端的多目标跟踪方 ...
- 论文解读:《功能基因组学transformer模型的可解释性》
论文解读:<Explainability in transformer models for functional genomics> 1.文章概括 2.背景 3.相关工作 4.方法 4. ...
最新文章
- 动词ing形式的5种用法_课后文档:英语语法思维第7课动词的5个形式的用法
- python关闭读写的所有的文件-python文件读写操作
- Redis三种特殊类型
- 有感而发 - 日新月异的SAP开发技术
- python 连接mysql_python连接MySQL
- 在 Visual Studio 2019 中为 .NET Core WinForm App 启用窗体设计器
- leetcode 706. 设计哈希映射
- python 发包爬取中国移动充值页面---可判断手机号是否异常
- android_ndk_build_flags 配置,Android studio配置NDK问题小结
- 【Vegas原创】如何配置 SQL Server 2005 以允许远程连接
- 成功解决:Could not initialize SDL - No available video device (Did you set the DISPLAY variable?)
- 后台访问突然出现一串代码,且不能显示页面
- excel只能在编辑栏粘贴_如何在Excel中切换到编辑模式
- 文件被别的程序打开无法删除怎么办?
- win10家庭版优化
- iOS自定义UITableViewRowAction
- Mybatis 注解开发
- Elasticsearch:运用 Java 对索引文档进行搜索
- pc端编码表必须为gbk才能正常启动软件_【干货】请收下这份非常完整的PCIE4.0 发送端测试SOP...
- 交易员都是用什么方法盈利的?