[单目深度估计---学习记录二]MonoDepth2 论文与代码注释

MonoDepth2 论文回顾

MonoDepth2代码-个人注解地址

一、目的

从一个单个彩色输入图像自动推断出一个密集的深度图像。

二、主要理论

​ 在缺乏真实标签深度的情况下,一种方法是利用图像重建作为监督信号来训练深度估计模型。在这里,模型被给定一组图像作为输入,要么是以立体对的形式,要么是以单目序列的形式。通过对给定图像预测深度,并将其投影到附近的视图中,通过最小化图像重构误差来训练模型。

三、创新点

  1. 一个最小重投影误差,用来提升算法处理遮挡场景的鲁棒性

    如下图, 在这里插入图片描述 帧出现了遮挡像素,即使在深度预测正确的情况下,重建得到的图像也会有较大的损失(因为重建得到的图像是由在这里插入图片描述变换得到的,变换后遮挡依然存在)。此时深度预测正确,但损失很大,显然不合理。因此作者提出使用两帧中较小的一帧作为最终的损失,便能解决遮挡的问题。
    [单目深度估计---学习记录二]MonoDepth2 论文与代码注释_第1张图片

    最终的结果如下图,第一算损失,由此解决遮挡像素的问题。

[单目深度估计---学习记录二]MonoDepth2 论文与代码注释_第2张图片

  1. 一种全分辨率多尺度采样方法,可以减少视觉伪影

    具体做法:先将较低分辨率的深度图(从中间层)上采样到输入图像分辨率,然后在较高的分辨率下重新投影,重新采样并在输入分辨率上计算误差pe。此过程类似于匹配色块,因为低分辨率的视差值将负责warp高分辨率图像中的一个patch。这有效地限制了每个比例的深度图,以朝着相同的目标工作,即尽可能准确地重建高分辨率输入目标图像。

  2. 一种auto-masking loss,用来忽略训练像素中违反相机运动假设的像素点,筛除那些静止和相对静止的像素

    具体做法:对loss使用一个per-pixel mask ,用来选择性地为每个像素点赋予权重,与前人的做法不同的是,使用的是一个二值mask,即在这里插入图片描述在这里插入图片描述在前向时就能计算得到,而不用做预测。作者的观察是,在以下几种条件会出现序列中相邻帧之间保持相同的像素:

    1. 相机是静止的

    2. 是物体与摄像机保持相对平移运动

    3. 低纹理区域(low texture region)。

    因此在这里插入图片描述的计算方法如下,含义也就是选取出那些满足目标帧与重建帧的光度误差小于目标帧与对应相邻帧的位置设为1,否则为0。这样在这里插入图片描述 就能防止那些同速运动的物体被包含在损失内了。

在这里插入图片描述
auto-mask的效果如下图,第一行可以看出同速运动的汽车及远处的天空这些黑色的部分,都从损失中移除了。第二行是一张静止的图片,可以看出,基本整张图片都被移除了。

[单目深度估计---学习记录二]MonoDepth2 论文与代码注释_第3张图片

四、实现原理

参考

网络结构: 模型共由两个网络组成:Depth network及Pose network。作用: Depth network用来预测目标帧的深度在这里插入图片描述,Pose network用来预测两个输入帧的姿态变换 在这里插入图片描述原理: Depth Network使用图像语义分割中常用的U-net结构来实现,主要由解码器和编码器两个模块组成。Pose Network以两个彩色图像作为输入数据,预测单个6自由度相对姿势或旋转和平移参数。
[单目深度估计---学习记录二]MonoDepth2 论文与代码注释_第4张图片
训练实现: 在使用单目数据进行训练时,模型共需要输入3张连续影像,id分别是0、-1和+1,其中第0帧是要预测深度的帧,+1及-1是0帧的后一帧及前一帧。之后这里将目标帧输入到Depth Network中,获得预测到的深度 在这里插入图片描述 。再将分别将(-1,0),(+1,0)两组图片输入到Pose Network中,-1->0的姿态变换在这里插入图片描述及+1->0的姿态变换在这里插入图片描述。注意图中蓝色的shared encoder部分,表明两个网络可以使用相同的encoder来进行特征提取,之后再分别送入Depth Decoder及Pose Decoder中,以节省参数。

[单目深度估计---学习记录二]MonoDepth2 论文与代码注释_第5张图片
此时,我们就已经得到了目标帧0的深度 在这里插入图片描述及目标帧与前后相邻的两帧的姿态变换在这里插入图片描述在这里插入图片描述,再加上相机的内参K,通过以下公式能够得到重建的图片 在这里插入图片描述
在这里插入图片描述
由此便能够通过重建光影误差来计算损失:
在这里插入图片描述

五、不足之处

  1. 当场景包含违反Lambertian假设(朗伯体假设)的对象时,模型就会崩溃
  2. 当目标是扭曲,反射和色彩饱和时,效果不好;
  3. 当边界模糊,形状复杂时,效果也较差

你可能感兴趣的:(单目深度估计,计算机视觉,深度学习,自动驾驶)