SMPLR 论文笔记
作者:互联网
SMPLR 论文笔记
SMPL是一个参数化的模型,通过输入shape和pose两个参数可以输出一个真实的3D人体模型。但是预估SMPL的两个参数难度很大。即使通过神经网络进行回归也存在着很多劣势。论文中提及了一下3个直接使用神经网络回归shape和pose参数会引发的问题:
- SMPL many-to-one property .
- noise sensitivity of model.
- generate artifacts.
以上的三个问题会导致回归出来的参数在传进SMPL之后出现ill-pose 的情况。直接用2D图片回归最容易理解的问题就是图片的多样性会直接影响回归参数。比如人物在图片中的大小,噪音,例如重叠的关节部位等等。还有一些和预测人体姿势无关的特征,也会被多多少少的考虑到结果的预测过程中。
于是又有学者提出了使用2D关节或者身体的轮廓来回归SMPL的参数,这样做的好处肯定是要优于用整张图片来做预测的,因为给网络的训练数据只包含了必要的特征,但是这样的方式得到的结果仍然是次优的。文中提到了一下的2个原因:
- estimating 3D from 2D is an ill-posed problem.
- the loss is computed form noisy back-projected 2D estimation.
为什么说从2D预估3D是一个ill-posed 问题。我个人的理解是因为在3D空间中,可能会有多个人体姿势可以与输入的2D关节相匹配,它存在着一定的分歧(ambiguity)。为了解决以上的几个问题,本文的作者提出了一个新的模型,模型的大体结构如下图所示:
整个模型分为三个部分第一个部分是一个用于提取2D图片中人物关节位置的网络,称之为堆叠沙漏网络,堆叠沙漏网络在这篇笔记当中有一些基本的讲解。之后通过一个去噪网络对堆叠沙漏网络的输出做去噪,并将其从2D 提升至3D。最后使用两个结构基本一致的全连接网络来回归SMPL的两个参数。以上是整个模型的大致思路。而SMPLR指的是最后两个全连接网络组成的板块。下文以Model来表示论文提及的整个模型,即Model = CNN + autoencoder+smplr
论文中提及的SMPLR的优势如下:
- trained without the need of constrains on SMPL.
- independent to RGB data using millions of generated 3D mocap like data.
- end-to-end CNN
Model的训练过程是不会将SMPL包括在内的。所以自然不会被SMPL的条件所约束,但是这是否对模型的性能有益仍值得商榷。虽然说堆叠沙漏网络是端到端的网络,但是Model 并不是端到端,它的每一个板块都需要分开训练。
Model的一些细节:
SMPLR 使用的是MLP网络进行建模。使用两个结构相同的网络分别回归shape和pose参数。因为这两个参数在理论上是相互独立的。两个网络被分别定义为:
R
=
Ω
(
N
;
ϕ
p
)
R=\Omega(N;\phi_{p})
R=Ω(N;ϕp) 和
β
=
Ψ
(
B
;
ϕ
s
)
\beta =\Psi(B;\phi_{s})
β=Ψ(B;ϕs) 其中N是normalized relative joints。B是归一化相对距离向量。
SMPLR的输入是:JT 和 landmark
其中J是从T中选取的顶点集合。T是3D模型所有的顶点集合。因为并不是每一个顶点都对参数的回归起到相同的作用。所以作者根据经验挑去了一个顶点几个J,J
⊂
\subset
⊂T. J中包含的顶点对SMPL参数的回归更加有利。这样做可以在一定程度上节省计算资源。
在文中也提到了为什么要将landmark也加入到训练数据集中。首先若没有landmark,网络会将收敛至一个平均的body fatness。其次ill-posed的问题还是存在,因为关节的朝向是不稳定不明确的。最后一个原因是landmark很容易从mocap数据集中收集。
根据SMPLR中两个网络的定义和上述描述。作者将N定义成:
k(i)代表了副关节的索引。
在定义B的时候,有一个假定前提,即
B
∗
B^*
B∗是relative distance computed from template joints 。
J
L
∗
JL^*
JL∗ 是landmark。这里的template个人理解成pose和shape参数都是0的时候的模型。有了上述假设,B可以定义为:
另外,因为SMPL本身也是性别敏感的模型,不同的性别选择对模型输出的准确率也有着极大的影响。所以作者在shape参数上加入了一个针对性别的项。这一项只能是{-1,+1},并且和其他的shape参数一起当做回归问题处理。
SMPLR中的两个网路使用的是相同的损失函数L1。R与 β \beta β网络的损失分别记作 L R L_R LR和 L β L_\beta Lβ。这里不适用L2的原因是因为L2对噪音的输入的收敛和泛化的表现不如L1。SMPLR的训练也是分开的,两个小网络单独进行训练然后将得到的参数输入给SMPL,然后在SMPL的输出上添加一个L1损失。所以整个SMPLR的损失就 L R L_R LR + L β L_\beta Lβ + L s m p l L_{smpl} Lsmpl
记录完了SMPLR之后,现在可以来看看Denosing autoencoder。首先为什么要用到这个除噪自动编码器。是因为通过CNN 预测的关节会出现一个噪声。比如关节模糊或者看不到,重叠等问题。能看到的关节也存在着一些高斯噪音。除噪编码器的训练也是独立的,且它的训练数据集必须是包含了符合高斯分布的噪音的数据集,用没有噪音的数据集训练出来呢的除噪编码器是没有除噪的能力的。此外这个除噪编码器的结构还可以将2D的预测提升至3D(lift 2D to 3D)
除噪编码器的输入:CNN最初的预测。
除噪编码器的输出: 除噪之后的CNN预测。
损失函数: L1 loss.
一些训练的细节:
CNN使用的是5层堆叠沙漏网络,并将每一个沙漏网络的最后一层扩展。意思是原本的沙漏网络输出是 64 x 64 x 16(设原图像的大小是256 x 256。扩展之后就变成了 64 x 64 x 16 x 41。 41是关节和landmark的总和。网络的损失函数使用的是soft cross entropy loss。优化器用的Adam。学习率的选择也有所不同,对于堆叠沙漏网络而言是选用的0.01,其余的学习率均为0.001。
堆叠沙漏网络使用的是6-10的batchsize,大致在150-250个epoch收敛。
标签:沙漏,论文,SMPL,网络,笔记,SMPLR,2D,参数 来源: https://blog.csdn.net/weixin_52668444/article/details/118912666