sfm-learner学习心得
一、 sfm-learner
A、sfm-learner核心运行流程图如下图所示
核心:Depth CNN和Pose CNN
具体过程:
1、目标视图作为Depth CNN的输入生成具有每个像素深度的深度图,即;
2、对于Pose CNN则将目标视图和源视图作为输入,输出相机的相对姿态,;
3、Depth CNN和Pose CNN的输出,即和,;用来逆向翘曲(wrap)源视图以生成目标视图。
4、利用复原图与目标视图之间的误差用于训练Depth CNN和Pose CNN,至此我们可以无监督的训练我们的神经网络。
即
B、Illustration of the differentiable image warping process.
可微深度图像渲染
对于目标视图上的每一点,首先利用预测的深度和相机姿态将它们映射(project)到源视图上,然后利用双线性插值得到翘曲图像在处的值。
其中是连续的,可以利用双微边采样,线性插值四个相邻像素的值来近似、用一个表示线性插值,此处通过投影几何学得到的像素warping的坐标能够充分利用估计的深度和估计的相机姿态。
建模的限制
基于三个假设:
- 场景是静态的
- 源视图与目标视图之间没有遮挡
- 表面是理想镜面反射,这样图像的一次性误差才有意义。
对目标视图的每个像素添加置信系数得到:
克服梯度的局限性
模型的梯度主要来源于与其相邻的四个,如果位于一个缺少纹理的区域或者当前的估计不够准确。解决策略:
1、利用网络结构约束输出平滑,是的梯度从有意义的区域传输到邻近的区域;
2、明确多尺度与平滑损失:允许梯度能直接从更大的空间区域得到。通过将第二种思路应用到该工作中,用为他对网络结构框架不敏感,预测深度图时,我们通过最小化二阶梯度的范数来得到。最后的损失函数:
二、 sfm-Net
一对帧作为输入,我们的模型将帧与帧之间的像素运动分解到三维场景深度,三维相机旋转,平移