3D Clothed Human Reconstruction in the Wild
论文地址:https://arxiv.org/pdf/2207.10053.pdf
作者:Moon, Gyeongsik, Nam, Hyeongjin, Shiratori, Takaak
发表:CVPR 2022
链接:https://github.com/hygenie1228/ClothWild_RELEASE
单视图人体重建
一. 概括
最近的大多数三维人体重建方法都需要三维扫描来进行训练;因此,它们是在合成数据集上训练的,这些数据集由3D扫描和从扫描中渲染的图像组成。尽管利用这些合成数据集已经取得了重大进展,但它们都无法在野外图像上产生可靠的结果。
为什么? 野外图像是在我们的日常环境中拍摄的,比如杂乱的办公室和音乐厅,有各种各样的人体姿势、外观和严重的人体遮挡。而且人体的动作更加复杂。
本文提出:一个3D穿戴的人体重建框架,利用弱监督策略从野外数据集学习3D穿戴的人体。这里的弱监督指的是监督目标不是完整的三维数据,而是仅在单摄像头视角下定义的二维数据(即二维布料分割)
参考SMPL的相关定义,SMPLicit生成布料,DensePose告知每个人体像素对应于 SMPL 的 3D 人体表面,Pose2Pose做为3D人体重建方法
二. 方法(ClothWild)
ClothNet + BodyNet
1. ClothNet
给定一个输入图像
I
I
I,ClothNet预测
布料存在分数
c
=
(
c
1
,
.
.
.
,
c
N
c
)
c = (c_{1},...,c_{N_{c}})
c=(c1,...,cNc)
第
i
i
i个布料存在得分
c
i
c_{i}
ci表示人类穿着第
i
i
i种衣服的概率。
在去除原始 ResNet 最后部分的全连接层后,使用 ResNet-50从输入图像中提取图像特征向量
f
∈
R
2048
f ∈ R^{2048}
f∈R2048。图像特征向量
f
f
f 被传递到全连接层,然后是 sigmoid 激活函数,来预测布料存在分数
c
c
c
一组布料潜码
{
z
i
}
i
=
1
N
c
\left\{\mathbf{z}_{i}\right\}_{i=1}^{N_{c}}
{zi}i=1Nc(
N
c
=
5
N_{c}=5
Nc=5表示考虑的衣服数量,包括上衣、外套、裤子、裙子和鞋子)
第
i
i
i个布料潜码
z
i
∈
R
d
i
\mathbf{z}_{i} \in \mathbb{R}^{d_{i}}
zi∈Rdi表示第
i
i
i个3D布料的低维码,嵌入在3D布料模型的潜空间SMPLicit中,按照 SMPLicit 为鞋子设置
d
i
=
4
d_{i}=4
di=4,为其他衣服设置
d
i
=
18
d_{i} = 18
di=18。(一种布料生成模型 SMPLicit,它将 3D 衣服嵌入为代表布料风格和布料剪裁的潜在代码。 SMPLicit 涵盖各种各样的衣服,这些衣服的几何特性各不相同,例如袖长和宽松度。在我们的框架中,我们采用 SMPLicit 作为布料生成模型。)
使用
N
c
N_{c}
Nc全连接层从
f
f
f预测一组布料潜码
{
z
i
}
i
=
1
N
c
\left\{\mathbf{z}_{i}\right\}_{i=1}^{N_{c}}
{zi}i=1Nc,其中第
i
i
i个全连接层预测第
i
i
i个布料的潜码
z
i
z_{i}
zi。
性别
g
g
g。
性别
g
∈
R
2
\mathbf{g} \in \mathbb{R}^{2}
g∈R2是一个one-hot编码向量。
另一个全连接层,通过softmax激活函数,根据
f
f
f预测性别。
预测的一组布料潜码
{
z
i
}
i
=
1
N
c
\left\{\mathbf{z}_{i}\right\}_{i=1}^{N_{c}}
{zi}i=1Nc和性别
g
g
g被传递到SMPLicit。
2. BodyNet
通过输入图像
I
I
I预测SMPL人体模型的形状参数
β
∈
R
10
\beta \in \mathbb{R}^{10}
β∈R10和姿势参数
θ
∈
R
72
\theta \in \mathbb{R}^{72}
θ∈R72。
形状参数
β
β
β表示T姿势人体形状空间的PCA系数,形状参数
β
β
β被转发到 SMPLicit。姿势参数
θ
θ
θ表示人体关节的3D旋转。
使用 Pose2Pose作为BodyNet,利用局部和全局图像特征,它在野外基准测试中实现了最先进的性能。
3. 布料生成模型 Cloth Generative Model
布料生成模型将 3D 衣服嵌入到潜在空间中。使用 SMPLicit作为布料生成模型,它根据布料潜码、性别和人体形状生成 3D 布料的连续无符号距离场。
使用预先训练的 SMPLicit 并在训练 ClothWild 时修复它。给定布料潜码
{
z
i
}
i
=
1
N
c
\left\{\mathbf{z}_{i}\right\}_{i=1}^{N_{c}}
{zi}i=1Nc,性别
g
g
g和人体形状
β
β
β,SMPLicit输出第
i
i
i个布料的无符号距离场如下所示:
C
(
x
,
z
i
,
g
,
β
)
⟶
R
+
,
i
=
1
,
2
,
…
,
N
c
C\left(\mathbf{x}, \mathbf{z}_{i}, \mathbf{g}, \beta\right) \longrightarrow \mathbb{R}^{+}, \quad i=1,2, \ldots, N_{c}
C(x,zi,g,β)⟶R+,i=1,2,…,Nc
其中
x
∈
R
3
x ∈ R^{3}
x∈R3是规范 3D 空间中的 3D 查询点,其中人类处于 T 姿势。在规范的 3D 空间中,根据性别 g 和人体形状 β 建立 T 形裸体人体网格。
当第
i
i
i 块布料的存在得分
c
i
c_{i}
ci大于阈值(根据经验将其设置为 0.25)时,才对第
i
i
i 块布料进行步骤:在 T 形裸体人体周围,一组 3D 查询点将到 3D 布料表面的最近距离表示为无符号距离场。
4. 衣服与身体的融合
Marching Cubes. 在推理阶段,使用 Marching Cubes获得布料网格,它从 3D 离散标量场(例如无符号距离场)中提取等值面的网格。
通过在 3D 空间中密集采样 3D 查询点并将其转发到 SMPLicit 模型来计算无符号距离场。
然后通过 Marching Cubes 从无符号距离场中提取 T 姿势上的布料网格。
最终获得了一个T字形的着衣人体网格,它包括一个T字形的裸体人体网格和布料网格。
Pose Deformation. 分别将姿势变形应用于裸体人体网格和 T形着衣人体网格的布料网格。
使用 SMPL 的蒙皮变形以及 BodyNet 预测的姿态参数
θ
θ
θ使裸体人体变形。
将布料网格的每个布料顶点分配到最接近的裸体人体顶点,并对人体顶点应用相同的姿势变形使布料网格变形。
这种 SMPL 驱动的姿势变形具有可以用任意姿势而不是预测姿势使重建结果变形的优点,这使得动画成为可能。
三. 从野外数据集中学习(主要创新)
解决如何在没有任何3D扫描GT的野外数据集上训练本文的框架。(使用弱监督)
对于弱监督,可以使用剪影强制三维重建结果的投影接近野外数据集的二维监督目标(即布料分割)。然而,天真地采用这种策略在学习三维穿衣人体时会遇到三个困难。
2D 监督目标只提供单个摄像机视角的信息。因此,无法保证弱监督能恢复其他视点的三维几何图形布料分割的严重深度模糊性阻碍了三维服装的精确学习。由于布料分割中的每个像素都对应三维空间中的无数个点,因此很难指定衣服对应的三维点。投影三维重建结果与二维布料分割结果之间可能会出现像素级错位。由于无法获得野外图像的相机参数,我们需要额外预测相机参数,以投影出三维人体着装。这是一个高难度的问题,因为不同的相机参数和三维穿衣人的组合对应着相同的二维布匹分割。由于问题的不确定性,摄像机预测往往会失败,从而导致对二维图像空间的错误投影。
为此,设计了一种基于 DensePose 的损失函数,以解决根据投影对三维衣着人体重建进行弱监督时可能出现的问题。DensePose可以告知每个人体像素对应于 SMPL 三维人体表面的位置。利用 DensePose,我们基于 DensePose 的损失函数可以获得与 SMPL 表面周围的布料分割相对应的三维点。然后,它强制这些三维点成为三维布料的一部分。由于 DensePose 有效地限制了 SMPL 表面周围三维点的可能位置,因此大大降低了深度模糊性。此外,DensePose 已经与图像空间中的布面分割对齐;因此,我们无需预测相机参数,也无需将三维重建投射到二维图像空间。因此,我们基于 DensePose 的损失函数不会受到像素级错位的影响。
注意⚠️:ClothNet是框架中唯一可训练的模块,所有其他模块,包括 BodyNet 和 SMPLicit,都在训练期间固定。
总体损失函数:
L
total
=
λ
d
p
L
d
p
+
λ
r
e
g
L
r
e
g
+
λ
exist
L
exist
+
λ
gender
L
gender
L_{\text {total }}=\lambda_{\mathrm{dp}} L_{\mathrm{dp}}+\lambda_{\mathrm{reg}} L_{\mathrm{reg}}+\lambda_{\text {exist }} L_{\text {exist }}+\lambda_{\text {gender }} L_{\text {gender }}
Ltotal =λdpLdp+λregLreg+λexist Lexist +λgender Lgender
其中
λ
d
p
=
1
,
λ
r
e
g
=
0.1
,
λ
e
x
i
s
t
=
0.01
,
λ
g
e
n
d
e
r
=
0.01.
λ_{dp} =1, λ_{reg}=0.1, λ_{exist} =0.01, λ_{gender} =0.01.
λdp=1,λreg=0.1,λexist=0.01,λgender=0.01.
1. 基于DensePose的损失函数
DensePose 告知每个人体像素对应于 SMPL 的 3D 人体表面。基于DensePose的损失函数
L
d
p
L_{dp}
Ldp将布料分割和 DensePose 相结合,使重建的衣服接近布料分割。分为三个步骤:
Cloth-to-Body Mapping 将2D布料分割的像素放置在3D空间中 在定义 DensePose 的区域中,在布料分割上采样 2D 布料点
{
p
k
2
D
}
k
=
1
N
p
\left\{\mathbf{p}_{k}^{2 \mathrm{D}}\right\}_{k=1}^{N_{p}}
{pk2D}k=1Np,其中
N
p
=
196
N_{p}=196
Np=196是采样的2D点的数量。利用DensePose来告知每个人体像素对应于SMPL的3D人体表面的位置,以将2D布料点
{
p
k
2
D
}
k
=
1
N
p
\left\{\mathbf{p}_{k}^{2 \mathrm{D}}\right\}_{k=1}^{N_{p}}
{pk2D}k=1Np映射到T姿势人体表面上的3D布料点
{
p
k
3
D
}
k
=
1
N
p
\left\{\mathbf{p}_{k}^{3 \mathrm{D}}\right\}_{k=1}^{N_{p}}
{pk3D}k=1Np。 每个映射的 3D 布料点代表从布料分割中得出的布料标签(例如,上衣、裤子或非布料)。 Query Point Selection 选择 T 形人体周围的 3D 查询点进行损失计算。 对于每种布料类型,从3D边界框以21 × 21 × 21 的分辨率统一均匀采样 3D 查询点。从 3D 人体表面上的 3D 布料点
{
p
k
3
D
}
k
=
1
N
p
\left\{\mathbf{p}_{k}^{3 \mathrm{D}}\right\}_{k=1}^{N_{p}}
{pk3D}k=1Np中选择距离阈值
τ
τ
τ 内的 3D 查询点
{
x
j
}
j
=
1
N
q
\left\{\mathbf{x}_{j}\right\}_{j=1}^{N_{q}}
{xj}j=1Nq,其中
N
q
N_{q}
Nq是采样的3D查询点数量,距离阈值
τ
τ
τ对于外套设置为10cm,对于其他设置为3cm。 边界盒 Loss Calculation 定义了一个布料二元函数
S
i
(
⋅
)
S_{i}(\cdot)
Si(⋅)。如果距离3D查询点
x
j
x_{j}
xj最近的3D布料点属于第
i
i
i种布料,则
S
i
(
x
j
)
S_{i}\left(\mathbf{x}_{j}\right)
Si(xj)为1否则为0,基于DensePose的损失函数为:
L
d
p
=
1
N
c
N
q
∑
i
=
1
N
c
∑
j
=
1
N
q
(
S
i
(
x
j
)
∣
C
(
x
j
,
z
i
,
g
,
β
)
∣
+
(
1
−
S
i
(
x
j
)
)
∣
C
(
x
j
,
z
i
,
g
,
β
)
−
d
max
∣
)
\begin{aligned} L_{\mathrm{dp}} & =\frac{1}{N_{c} N_{q}} \sum_{i=1}^{N_{c}} \sum_{j=1}^{N_{q}}\left(S_{i}\left(\mathbf{x}_{j}\right)\left|C\left(\mathbf{x}_{j}, \mathbf{z}_{i}, \mathbf{g}, \beta\right)\right|\right. \\ & \left.+\left(1-S_{i}\left(\mathbf{x}_{j}\right)\right)\left|C\left(\mathbf{x}_{j}, \mathbf{z}_{i}, \mathbf{g}, \beta\right)-d_{\max }\right|\right)\end{aligned}
Ldp=NcNq1i=1∑Ncj=1∑Nq(Si(xj)∣C(xj,zi,g,β)∣+(1−Si(xj))∣C(xj,zi,g,β)−dmax∣) 其中,
d
m
a
x
d_{max}
dmax是无符号距离字段的最大截止距离,鞋子设置为0.01,其他设置为0.1。 第一个损失项使3D查询点
x
x
x的无符号距离接近于0,从而强制3D查询点
x
x
x属于第
i
i
i种布料;第二个损失项强制3D查询点
x
x
x不属于第i种布料。 通过
L
d
p
L_{dp}
Ldp对上述步骤建立的三维查询点进行监督,解决布料分割的深度模糊问题。
2. 其他损失函数
正则化损失 正则化损失函数
L
r
e
g
L_{reg}
Lreg 使预测的潜码接近布料潜在空间的平均值,从而产生可信的 3D 布料。正则化损失函数定义为:
L
r
e
g
∑
i
=
1
N
c
α
i
∥
z
i
∥
2
L_{reg}\sum_{i=1}^{N_{c}} \alpha_{i}\left\|\mathbf{z}_{i}\right\|_{2}
Lreg∑i=1Ncαi∥zi∥2,其中
α
i
\alpha_{i}
αi对于鞋子设置为0.1,对于其他设置为1.0。 由于基于 DensePose 的损失监督属于衣服部分区域的 3D 点,因此有可能学习仅依赖于这些区域的难以置信的衣服(例如,过厚的衣服或撕裂的衣服)。正则化损失通过限制输出服装接近平均值来防止这种情况发生。 布料存在损失 对于布料存在预测,计算二元交叉熵
L
exist
=
−
1
N
c
∑
i
=
1
N
c
(
c
i
∗
log
c
i
+
(
1
−
c
i
∗
)
(
1
−
log
c
i
)
)
L_{\text {exist }}=-\frac{1}{N_{c}} \sum_{i=1}^{N_{c}}\left(c_{i}^{*} \log c_{i}+\left(1-c_{i}^{*}\right)\left(1-\log c_{i}\right)\right)
Lexist =−Nc1∑i=1Nc(ci∗logci+(1−ci∗)(1−logci)),其中
∗
*
∗表示GT。 性别分类损失 对于性别分类,计算交叉熵
L
gender
=
−
(
g
m
∗
log
g
m
+
g
f
∗
log
g
f
)
L_{\text {gender }}=-\left(g_{m}^{*} \log g_{m}+g_{f}^{*} \log g_{f}\right)
Lgender =−(gm∗loggm+gf∗loggf),其中
g
m
g_{m}
gm和
g
f
=
1
−
g
m
g_{f}=1-g_{m}
gf=1−gm分别是输入人类为男性和女性的概率,
∗
*
∗表示GT。
四. 实验
1. 数据集
这些数据集都是野外的数据集,不是合成的人体数据集
MSCOCO 是一个大型野外数据集,它提供了具有各种人体姿势和外观的野外图像。在训练集上训练,并在验证集上评估。 预处理: 使用 DensePose 回归模型的输出结果作为基于 DensePose 的损失函数,因为 GT DensePose 只提供稀疏注释。 使用LIP进行布料分割,它包含了MSCOCO图像的布料分割注释。Look into Person (LIP) 是一个大规模的人体语义解析数据集,它包括了带有像素级人体部位标注(19种人体部位类别)和2D姿势标注(16个关键点)的50000张图像。这50000张图像裁剪自COCO数据集中的人物实例,图像尺寸均大于50 * 50. 它们覆盖了真实世界的各种场景,包括姿势和视角的改变、严重的遮挡、变化的外观以及低分辨率。 运行Homogenus获得性别注释,并将其预测作为监督目标。 DeepFusion2 是一个综合数据集,专注于捕捉各种服装风格的穿着人类,将其与 MSCOCO 一起用作附加训练集。 预处理: 通过与上述 MSCOCO 相同的程序获得 DensePose 和性别注释。对于布料分割注释,使用 SCHP(开箱即用的人工解析提取器,适用于其他下游应用。)来获取数据集的布料分割。 3DPW 是一个野外数据集,我们仅在对测试集视频的每 25 帧进行采样后将其用于评估目的。使用了两种3DPW项目:根据每个受试者的三维扫描结果注册的 T 摆姿人体网格和图像中人体的 SMPL 摆姿参数。由于注册的三维着装人体网格与 SMPL 人体网格具有相同的网格拓扑结构,因此我们按照与 SMPL 相同的蒙皮算法,用 SMPL 的姿势参数对注册的网格进行变形。我们将摆好姿势的注册网格用作 3DPW 的 GT 三维衣着人体。
2. 评估指标
Chamfer distance(CD)倒角距离 是三维穿衣人体重建与GT表面之间的三维距离。 在测量之前,我们将重建的全局旋转、缩放和平移严格对齐到GT表面。由于重构曲面与GT曲面之间没有语义匹配对,因此对重构曲面的对齐并不简单。对于对齐,我们假设重构和GT表面的相同人体部位(例如肩膀和膝盖)被投影到图像中的相同像素上。我们栅格化重构和GT表面,并配对两个顶点(即,一个来自重构,另一个来自GT表面),对应于相同的像素。在匹配对的基础上,对重建图像进行对齐,并以毫米为单位测量倒角距离。 Body-cloth correspondence (BCC) 是指在 T 姿态裸体人体表面上具有正确布料类型的三维点所占的比例。 它只考虑三维布料预测,不包括三维人体姿态预测。通过Cloth-to-Body Mapping将 GT 布料分割中一个布料标签的二维点映射到 T 姿态人体表面上布料到人体映射的三维点。如果三维点与重建布料之间的距离小于 3 厘米,我们就认为这些点被正确覆盖。我们计算正确覆盖点的比例,并平均所有布料标签(如上衣、裤子或非布料)的比例。
3. 与最先进的方法比较
定性结果 PIFu、PIFuHD和 ICON在被遮挡的人体场景中,效果并不理想。BCNet 也需要三维扫描来进行训练。因此,它是在没有野外图像的合成数据集上进行训练的,这也是在野外图像上结果较弱的原因。 SMPLicit fits没有利用图像特征,而图像特征能提供被遮挡和截断的人体部位的上下文信息。因此,它无法在被遮挡或截断的人体部位重建衣服。此外,其基于轮廓的损失函数的深度模糊性和像素级错位也会使拟合得到的衣服款式不正确。 定量结果 运行时间
4. 消融实验
所提出的基于 DensePose 的损耗在正确学习三维衣着人体方面的重要作用。 与之前的剪影损失相比,基于 DensePose 的损失的有效性。剪影损失强制将三维布料重建结果投射到二维布料分割上,剪影损失存在深度模糊和像素错位问题。 正则化损失有效性 正则化损失使预测的衣服处于三维布料模型的潜空间中。这是必要的,因为二维监督目标(如布料分割)只能提供衣服部分区域的信息。这种有限的信息会导致我们的 ClothWild 生成难以置信的衣服,如过厚的布和破损的布。正则化损失可以防止这种不恰当的学习,并鼓励重建合理的三维衣服,尽管只有衣服部分区域的信息。
五. 总结
我们提出的 ClothWild 是一种三维穿衣人体重建框架,它能从野外图像中获得显著的鲁棒性结果。为了消除合成数据集与野外数据集之间的领域差距,我们提出了弱监督管道和基于 DensePose 的损失函数。因此,我们的 ClothWild 在野外图像上的表现优于之前的 3D 穿衣人体重建方法。
文章来源
发表评论