sfm-learner学习心得

一、 sfm-learner

A、sfm-learner核心运行流程图如下图所示

sfm-learner学习心得
核心:Depth CNN和Pose CNN
具体过程:
1、目标视图作为Depth CNN的输入生成具有每个像素深度的深度图,即Dt^
2、对于Pose CNN则将目标视图和源视图作为输入,输出相机的相对姿态T^tt1,T^tt+1
3、Depth CNN和Pose CNN的输出,即Dt^T^tt1,T^tt+1;用来逆向翘曲(wrap)源视图以生成目标视图。
4、利用复原图与目标视图之间的误差用于训练Depth CNN和Pose CNN,至此我们可以无监督的训练我们的神经网络。
Lvs=sp|It(p)I^s(p)|

B、Illustration of the differentiable image warping process.

可微深度图像渲染

对于目标视图上的每一点Pt,首先利用预测的深度和相机姿态将它们映射(project)到源视图上,然后利用双线性插值得到翘曲图像在Pt处的值。

psKT^tsD^t(pt)K1pt

其中Ps是连续的,可以利用双微边采样,线性插值Ps四个相邻像素的值来近似Is(Ps)、用一个ωij表示线性插值,此处通过投影几何学得到的像素warping的坐标能够充分利用估计的深度和估计的相机姿态。

建模的限制

基于三个假设:

  1. 场景是静态的
  2. 源视图与目标视图之间没有遮挡
  3. 表面是理想镜面反射,这样图像的一次性误差才有意义。
    对目标视图的每个像素添加置信系数E^s得到:
    Lvs=spE^s(p)|It(p)I^s(p)|

克服梯度的局限性

模型的梯度主要来源于I(pt)与其相邻的四个I(pt),如果ps位于一个缺少纹理的区域或者当前的估计不够准确。解决策略:
1、利用网络结构约束输出平滑,是的梯度从有意义的区域传输到邻近的区域;
2、明确多尺度与平滑损失:允许梯度能直接从更大的空间区域得到。通过将第二种思路应用到该工作中,用为他对网络结构框架不敏感,预测深度图时,我们通过最小化二阶梯度的L1范数来得到。最后的损失函数:
sfm-learner学习心得

二、 sfm-Net

sfm-learner学习心得
一对帧作为输入,我们的模型将帧与帧之间的像素运动分解到三维场景深度,三维相机旋转,平移