3D【8】鸟类重建:Learning Category-Specific Mesh Reconstruction from Image Collections阅读笔记
该文章直接预测的是平均mesh的坐标偏差,相机参数和纹理uv图。里面有各种损失函数,很值得学习。
这篇论文还有个有意思的点,论文用的训练数据是没有对应的3D模型的(也就是一张图片没有对应的3D模型)。训练过程有点像3DMM的重建过程,即先估计3D模型,将模型渲染到2D;然后比较渲染的图片和原始图片的差异,以更新模型的参数。要将这个过程应用在神经网络中,由于渲染是不可导的,因此需要解决渲染这一步骤的求导问题。这个问题的解决可以看论文:Neural 3D Mesh Renderer
上图是模型的训练过程:图片经过encoder抽取出特征,然后预测相机参数、变形参数(平均模型的顶点坐标差值,)和纹理流;最后利用mask(前景背景掩蔽图)、特征点和纹理误差来更新网络参数。
损失函数
特征点
是第i个训练样本真实特征点, 是对应的预测特征点。其中 是相机参数。论文假设特征点可以由3D模型的其他顶点线性相加计算出来,因此有。A为一个线性方程的系数矩阵。
掩蔽
为样本i的掩蔽图, 代表利用3D mesh ,F是三角面片和相机参数 渲染出来的掩蔽图。
相机参数
惩罚项
1、拉普拉斯网格平滑
LV是拉普拉斯网格平滑中的拉普拉斯坐标,该项的目的是使LV=0,也就是令顶点的拉普拉斯坐标等于0。几何意思是使顶点i的坐标等于其相邻顶点的均值。
2、变形参数正则化
目的是防止变形过于夸张,并且使得变形结果更有意义。
3、特征点系数矩阵约束
这是个交叉熵损失函数,目的是使每个特征点对应的系数 应该是一个one-hot向量。
纹理
论文不是直接预测纹理图,而是预测纹理图中每个点在原始图片中的位置。3D模型中某一顶点的纹理,一般直接通过其uv坐标在纹理图中取得,论文的这个方法是先从预测出来的纹理流(矩阵)中获取x,y坐标,然后该顶点的纹理根据x,y在原始图片中得到(可以用双线性采样)。
是掩蔽图, 是输入图片 是渲染出来的图片。
上面的这个损失函数只能计算物体前面可见的纹理流,而对于3D mesh的背面就无法计算。因此作者还提出了如下损失函数:
其中G是双线性采样, 是the distance transform field of the foreground mask(不知道啥意思。。。。), 是纹理流。