作者和机构

解决的问题

使用线性模型对衣服进行编码

左边四幅图展示的是3D身体和服装重建的应用。右边三幅图展示的是服装编辑和姿势重建。

难点

需要找到一种参数量较少的服装模型表示

在人体上生成宽松衣服的模型

相关工作

目前有许多方法尝试从多张图像,3D扫描或RGBD数据中学习到服装模型,然而,很难获取到足够多的数据来表示服装的复杂性,因而真实数据训练的模型泛化性不够好,在生成训练集以外的服装时会出现问题。而使用软件生成的数据训练,其效果取决于数据的质量。

最近又出现了一些新的方法,比如Bcnet等,但这些方法的局限性要么是需要为每一种衣服训练一个特定的模型,要么是使用了十分复杂的表示形式。

目前很多重建人体的工作都是直接推断出SMPL的参数,而不生成服装参数。要在人体上重建服装模型,一种做法是将服装表示成SMPL网格的偏移量,这种做法在面对宽松服装时效果很差。或者使用非参数表示方法,包括体素化方法,几何图像,双平面深度图,可视外壳。最强大的方法是基于隐函数的表示方法。最近一些方法结合了多种表示法,如SMPL+体素,以及SMPL+隐函数。但那些方法能够重建丰富的细节,但不能够同时控制服装和姿势。

方法的优势

  1. 使用低维带语义的隐向量来表示服装,可以对服装的样式和尺寸进行编辑。
  2. 可以同时表示人体形态姿势和服装样式尺寸,可以表示不同拓扑结构的服装,如衬衫,夹克,套头衫等。
  3. 模型完全可微,可以与深度学习进行集成。
  4. 可以对野生图片进行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(p​p​​p,β​β​​β,zzzcut​,zzzstyle​)↦R+
该函数代表对于给定的一点p∈R3\pmb{p}\in\R^3p​p​​p∈R3,求得p\pmb{p}p​p​​p到服装表面的距离。在空间中采样到足够多的点之后,就可以通过得到的距离场,运用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(p​p​​p)=∣∣p​p​​p∣∣−1表示将点p\pmb{p}p​p​​p映射到其到以原点为球心,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}p​p​​p编码成相对向量矩阵Pβ∈RK×3P_\beta\in\R^{K \times3}Pβ​∈RK×3,每一行为Pβ,k=p−vkP_{\beta,k}=\pmb{p}-v_kPβ,k​=p​p​​p−vk​。作者说,这种过度参数化的表示方式能够推断出人体边界,效果比欧氏距离和重心坐标距离要好。

最后,给定p\pmb{p}p​p​​p,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(p​p​​p)。对于封闭隐形曲面需要有符号距离场,而服装是一个开曲面,因此使用无符号距离场来表达服装模型。

训练时使用的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(p​p​​p)∣
其中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,σn​III),即使用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​+λz​Lz​
其中λz\lambda_zλz​为超参数。

SMPLicit-core预测

在预测阶段,当我们需要生成适合人体的服装时,按以下步骤进行:

  1. 采样z∼N(μ∗1,σ∗I)\pmb{z}\sim \mathcal{N}(\mu *\pmb{1},\sigma*\pmb{I})zzz∼N(μ∗111,σ∗III),μ\muμ和σ\sigmaσ来自训练集的隐空间。
  2. 在T-pose人体周围密集采样得到点集,计算PβP_\betaPβ​,然后计算C(Pβ,z)C(P_\beta,\pmb{z})C(Pβ​,zzz)。
  3. 确定距离场阈值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:p​p​​p×θθθ×zzzθ​↦ddd∈R3,将默认姿态下的点映射到带有姿态信息的模型上。其中θ\pmb{\theta}θθθ是SMPL模型的姿态参数,zθ\pmb{z}_\thetazzzθ​是一个可以用类似于学习zstyle\pmb{z}_{style}zzzstyle​的方法学习到的隐向量。

在训练阶段,只需要对于T-pose下服装表面进行采样,对输入点的位置进行编码p↦Pβ\pmb{p}\mapsto P_\betap​p​​p↦Pβ​,极小化预测值和真实值的差别。在预测阶段,需要先用SMPLicit-core的方法计算得到PPP,然后加上偏移p↦p+d\pmb{p}\mapsto \pmb{p}+\pmb{d}p​p​​p↦p​p​​p+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点应用

  1. 如何在隐空间中进行插值,编辑尺寸和样式
  2. 如何将SMPLicit模型拟合到带穿着的人体3D扫描数据
  3. 如何将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=0min⁡i∣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》论文解读相关推荐

  1. 论文解读PCT: Point Cloud Transformer(用于点云处理的Transformer)

    最近几年transformer越来越火,在NLP.CV等领域都取得了很大的成功.这篇文章作者利用了transformer能够处理无序数据的特点,将transformer应用到点云的处理上.它的想法是基 ...

  2. CVM2021| PCT: Point cloud transformer(分类+分割任务SOTA)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨paopaoslam 来源丨 泡泡机器人SLAM 标题:PCT: Point cloud tra ...

  3. PCT: Point Cloud Transformer

    PCT:点云Transformer Meng-Hao Guo Tsinghua University gmh20@mails.tsinghua.edu.cn Jun-Xiong Cai Tsinghu ...

  4. FastFormers 论文解读:可以使Transformer 在CPU上的推理速度提高233倍

    自Transformers诞生以来,紧随其后的是BERT,在几乎所有与语言相关的任务中,无论是问题回答,情感分析,文本分类还是文本生成,都占据着NLP的主导地位. 与RNN和LSTM消失的梯度问题(不 ...

  5. Point Cloud Transformer(PCT)代码实现

    Point Cloud Transformer(PCT)代码实现 目前最火热的Transformer在自然语言和图像识别中扮演了极其重要的角色,在点云数据集中也不例外,清华大学近期提出在点云中运用Tr ...

  6. 论文解读:《基于BERT和二维卷积神经网络的DNA增强子序列识别transformer结构》

    论文解读:<A transformer architecture based on BERT and 2D convolutional neural network to identify DN ...

  7. Point Cloud Transformer(PCT)阅读翻译

    PCT: Point Cloud Transformer 1. Introduction transformer是一种 encoder-decoder结构,包含了三个模块:输入词嵌入,位置(顺序)编码 ...

  8. 论文阅读 PCT:Point Cloud Transformer

    论文阅读 PCT:Point Cloud Transformer PCT 介绍 Input Embedding native 版本 enhanced 版本 Attention PCT 介绍 PCT是基 ...

  9. AI论文解读:基于Transformer的多目标跟踪方法TrackFormer

    摘要:多目标跟踪这个具有挑战性的任务需要同时完成跟踪目标的初始化.定位并构建时空上的跟踪轨迹.本文将这个任务构建为一个帧到帧的集合预测问题,并提出了一个基于transformer的端到端的多目标跟踪方 ...

  10. 论文解读:《功能基因组学transformer模型的可解释性》

    论文解读:<Explainability in transformer models for functional genomics> 1.文章概括 2.背景 3.相关工作 4.方法 4. ...

最新文章

  1. 动词ing形式的5种用法_课后文档:英语语法思维第7课动词的5个形式的用法
  2. python关闭读写的所有的文件-python文件读写操作
  3. Redis三种特殊类型
  4. 有感而发 - 日新月异的SAP开发技术
  5. python 连接mysql_python连接MySQL
  6. 在 Visual Studio 2019 中为 .NET Core WinForm App 启用窗体设计器
  7. leetcode 706. 设计哈希映射
  8. python 发包爬取中国移动充值页面---可判断手机号是否异常
  9. android_ndk_build_flags 配置,Android studio配置NDK问题小结
  10. 【Vegas原创】如何配置 SQL Server 2005 以允许远程连接
  11. 成功解决:Could not initialize SDL - No available video device (Did you set the DISPLAY variable?)
  12. 后台访问突然出现一串代码,且不能显示页面
  13. excel只能在编辑栏粘贴_如何在Excel中切换到编辑模式
  14. 文件被别的程序打开无法删除怎么办?
  15. win10家庭版优化
  16. iOS自定义UITableViewRowAction
  17. Mybatis 注解开发
  18. Elasticsearch:运用 Java 对索引文档进行搜索
  19. pc端编码表必须为gbk才能正常启动软件_【干货】请收下这份非常完整的PCIE4.0 发送端测试SOP...
  20. 交易员都是用什么方法盈利的?

热门文章

  1. 商人必看的20大电影
  2. Real-time signal
  3. 2018年python薪资_最好的Python:2017和2018年至今我最喜欢的文章集
  4. ffmpeg 将一个视频裁剪多个部分,然后合并所有的裁剪为一个视频
  5. 《清平乐词》三篇——李白
  6. C#中判断空字符串的3种方法性能分析 1
  7. wamp mysql 没有启动,WAMP中mysql服务突然无法启动 解决方法
  8. JS中的Storage
  9. vue项目storage本地存储
  10. Vue2 Element | 一文带你快速搭建网页界面UI