标题:3D Menagerie: Modeling the 3D Shape and Pose of Animals
链接:https://arxiv.org/pdf/1611.07700
本文是一篇很经典的3D动物重建的文章。作者以四足动物的玩具模型为样本,为四足动物建立了铰接式3D模板,并提出了基于单图的模板拟合方案。
作者使用3D扫描仪扫描了41个四足动物的玩具模型,其中包含了猫,狗,狐狸,狮子,老虎,马等等。作者为每个模型手工设置了缩放比例,然后手动标注了36个关键点。
作者将他们的形状模型称作Global/Local Stitched Shape model(GLoSS),意思是最终的模型是由一个个局部组合而成的。
这里模型构建的前期准备包括:
人工设计的模板:主要是要保证物体的相似和顶点数的固定。这里是从Turbosquid website上下载得到的一个母狮子的模板。
模板的拆分结果:手动把下载的模板拆成了33个部分
蒙皮权重,动画序列:模板自带的
这里作者为模板设计了一套参数用于表示其变化,包括部分位置l,部分旋转角度r,形状参数s,姿势参数d。而模型的变化主要就来源于两方面:
姿势变化:这里作者是将动画序列的每一帧都视作一个不同的动作,然后用PCA分解每个部分的顶点形变用户获得姿态的形变空间,从而得到姿势参数d。
形状变化:这里形状变化也是定义在每个部分上的,其参数s包含了七种变化:整体缩放,x轴缩放,y轴缩放,z轴缩放,xy与z的等比例缩放(顶点的x,y坐标根据z坐标的大小进行缩放),xz与y的等比例缩放,yz与x的等比例缩放。
这里是说如何将模板与扫描结果对齐(a)。这里分为两步,第一步是使用梯度下降进行基于keypoint和扫描结果的部分对齐(b&c)。第二步是使用as-rigid-as-possible算法对模型细节(主要是连接处)进行修饰(d)。
这里做的就是将模板的每个部分都与扫描结果对齐,要获得的参数就是上节中提到的部分位置l,部分旋转角度r,形状参数s,姿势参数d。用到了以下几个对齐损失:
形状先验:基于下载的模板计算形变后的马氏距离
对称约束:对称的部分应当有相似的形变结果,如四肢,爪子与躯干。
连接点约束:不同部位之间的连接点应当获得相似的结果,这里使用了l2距离。
3D扫描损失:就是扫描结果与模板顶点的损失,这里用了geman mcclure robust wrror function。
关键点损失:扫描结果关键点与模板关键点的l2损失。
法线损失:对于不同部分之间的连接点,作者希望他们的法向量之差与扫描结果相似。这个感觉优化的东西和连接点约束相似,只不过影响范围稍广。
尾巴姿态损失:这是根据模板动画中尾巴的运动学习到的先验分布。
这里也是使用的梯度下降,但其目标是修饰不同部位的连接处。用到了上面提到的3D扫描损失和关键点损失来保证大体形状不变,然后使用ARAP约束来增强模型的细节保留度。
通过上面一节我们已经可以将模板对齐到不同的扫描结果了,因此这里作者就对模型做了进一步的调整获得最终的参数化模型。
首先作者将所有模型通过LBS恢复到统一的姿势,然后对不同的形状做了PCA来获得形状的分解向量作为形状参数。加上控制姿势的LBS参数和控制模型位置的位移参数一同构成了最终的参数化模型。
构建完参数化模型后需要与3D扫描结果进行重新对齐,用到的损失包括:姿势先验,形状先验,3D扫描损失,关键点损失。(注意,这里要获得的参数与上节不同)
这里作者还使用了co-registration的方案,好像是将扫描结果与模板拟合结果的顶点坐标先做pca,然后提取其中前30个维度做l1损失。(不确定)
这里主要用到的就是基于图像手动标注的关键点和剪影,用于得到目标模型的形状和姿态参数。优化函数包括以下几个部分:
关键点损失:关键点之间的l2损失
剪影损失:剪影之间的bi-directional distance。为了排除标注误差的干扰,作者还是按照从粗糙到精细的方式进行剪影拟合。
形状先验:即要求形变参数不要偏离均值太多
姿态显眼:即要求姿态参数不要超过手动制定的范围太多
优化方式:先按照躯干点初始化整个模型的深度,即位移参数中的y轴。之后通过关键点优化全局旋转和位移参数的剩余部分。再然后使用上述除剪影损失外的所有损失来预测包括形状和姿态在内的所有参数的值。最后再将剪影损失加入其中来获得精炼后的结果。这种层级式优化的方案有助于模型避免局部最优。