Monodepth/SFMLearner自监督深度估计复现

author:张一极

date:2024年01月06日22:34:06

相关paper:Unsupervised Learning of Depth and Ego-Motion from Video

1.基本原理:

关于自监督进行单目深度估计的思路,首先数据集采用视频流的多帧形式,监督信号来自于上下帧的重建差异,核心重建算法即:

(1)psKT^tsD^t(pt)K1pt

公式的含义是,通过相机内参矩阵 K、目标视图到源视图的相对姿态变换矩阵 T^ts、预测的目标视图深度图 D^t(pt) 和目标视图中像素的齐次坐标 pt,可以计算出该像素在源视图中的投影坐标 ps,然后通过投影坐标,在原图采样后进行插值填充,重建图像。

接着进行图像比较,Lvs=sp|It(p)I^s(p)|,

针对整个图像,计算一个重建损失,利用可微分的重建损失,得到最后的监督信号,所以他可以实现持续学习,在不断读入下一帧的同时针对上一帧进行重建,同时计算重建损失后,进行参数调整。

2.复现代码:

总体训练流程:

a.定义数据集

b.定义模型和损失函数:

c.定义训练流程:

3.模型定义部分和变换解析:

深度预测模型(dispnet):

输入为[3,h,w],输出为[1,h,w]:

位姿预测网络:

输入:

在前向传播中,目标图像和源图像堆栈沿通道维度拼接,形成输入张量 inputs,其维度为 [批量大小, 6, 高度, 宽度]。

输出:

通过深度网络和姿态网络的输出,得到输入像素映射算法的参数,即:

image-20240319204034913

这里的pt和D^t(pt)