monodepth2 理解

monodepth2 理解

原文文章:Digging Into Self-Supervised Monocular Depth Estimation

1.研究目的与当前主要问题
目的:通过单一图片获取景深图
对应方法:自监督学习来执行单目深度估计,本文提出一系列改进方法,来提升自监督深度学习估计方法精度。
研究背景:通过一张图片求解深度,没有第二个输入图片的情况下,似乎无法使用三角测量,但是我们可以考虑通过大量样本集去训练神经网,然后让其去预测一张新的,但是为了监督学习我们需要对每一张图片都需要获取精确的地面真实深度,这本身就是巨大的挑战。那在缺乏地表真实深度的情况下,怎样完成对模型的训练?
一种方法是利用图像重建作为监督信号来训练深度估计模型。在这里,模型被给定一组图像作为输入,要么是以立体对的形式,要么是以单目序列的形式。通过对给定图像预测深度,并将其投影到附近的视图中,通过最小化图像重构误差来训练模型。
立体像对:同步立体图像对在训练过程中是可用的,通过预测它们之间的像素视差,可以训练一个深度网络在测试时进行单目深度估计。(核心:通过预测相对图像间的视差)
特点:使得相机姿态估计成为一次性离线校准(左右眼像平面变换),但可能会导致与遮挡和纹理复制等相关的问题。
研究时发现通过仔细选择外观损失和图像分辨率,可以仅使用单目训练达到立体双目训练的性能
单目视频:一种有吸引力的替代立体图像监督的方法,但它也带来了一系列挑战。除了估计深度外,模型还需要估计训练过程中时间图像对之间的帧间运动。这通常涉及到训练一个以有限帧序列作为输入,并输出相应的摄像机变换的位姿估计网络

2.研究意义(创新点)
意义:
(1)它可以以低廉的价格成本,辅助(补充)用于自动驾驶汽车的激光雷达传感器,并支持新的单照片应用,如图像编辑和AR合成
(2)通过使用大量未标注数据集求解深度,也可以达到为下游识别任务的深度神经网络进行预训练的目的。
创新点:
1一个最小重投影误差,逐像素计算,用来处理单目视频序列中的帧间遮挡问题,进而提升算法处理遮挡场景的鲁棒性
2一种全分辨率多尺度采样方法,可以减少视觉伪影
3一种auto-masking loss,用来忽略训练像素中违反相机运动假设的像素点,筛除那些静止和相对静止的像素

3.思想脉络(实验原理与流程)
原理:
1自监督训练原理:在立体相对的训练中,像对间是有着已知的相对位姿,这样便可以对图像进行重建来作为监督信号来训练深度估计模型,然而在单目序列的相对位姿并不能提前知道,但是通过训练位姿估计网络来预测相对位姿是可能的。即在训练阶段,同时使用预测相机的位姿和深度图,从而最小化重投影误差
2如何计算重投影误差损失呢?从多个原图像来计算重投影误差,一种想当然的方法就是误差取平均,但是当目标图像某些像素可见但在其他某些源图像不可见呢?比如图像遮挡(汽车移动,原来那个位置是车,下张图片那个位置是车移走后的房子),图像边界像素跑出去。这样会导致这部分像元不匹配,从而产生一个很高的光度误差,在整体表现上,即旁边像元表现良好,就这个误差特别大,即平均重投影可能会导致模糊的深度不连续
解决方法:不取平均,而是用最小值
3自监督训练通常建立在移动摄像机和静态场景假设下,那假如摄像机静止或物体运动,性能会产生很大影响,怎么解决?
自动屏蔽:它过滤掉那些不会在序列中从一帧到下一帧改变外观的像素。这样做的效果是让网络忽略与摄像机以相同速度移动的对象,甚至当摄像机停止移动时忽略单目视频中的整个帧。(当相机和另一个物体都以相似的速度移动时,过滤点这些静止像素,防止他们被计算在loss中。同样,当相机处于静止状态时,mask会滤除图像中的所有像素)
4多尺度估计
首先对低分辨率图像(从中间层)到输入图像分辨率的低分辨率深度图进行上采样,而不是对模糊的低分辨率图像进行光度误差计算,然后重投影,重新取样,并在更高的输入分辨率下计算误差。这个过程类似于匹配图像块,因为低分辨率视差值将负责在高分辨率图像中扭曲整个像素快。这有效地约束了深度图在每个尺度上都朝着同一个目标努力,即尽可能精确地重建高分辨率输入目标图像。(个人理解:一张图像经过多次卷积池化,其维度,分辨率都在下降,我们用低尺度图像来确定一个大致范围,但不进入损失函数计算,而是用高分辨率图像来计算误差)
5网络结构
深度解码网络:基于U-Net架构,即编码-解码器网络,具有跳转连接,是我们能够表示深层抽象特征以及局部信息。编码网络用ResNet18,用imageNet上预先训练的权重进行迁移学习;解码网络类似于(Unsupervised monocular depth estimation with left-right consistency文章中的网络),在输出处使用sigmoid激活函数,在其他地方使用ELU非线性激活函数。我们将sigmoid输出σ转换到深度,通过公式在这里插入图片描述
,这里a和b是用来约束D取值在0.1到100个单位之间的。 在解码器中,我们使用反射填充来代替零填充,当采样落在图像边界之外时,返回源图像中最近的边界像素的,这极大地减少了现有方法中发现的边界瑕疵。
对于姿态估计,使用轴角表示来预测旋转,并将旋转和平移输出缩放0.01。
对于单目训练范式,我们使用三帧的序列长度,位姿网络是由一个ResNet18构成的,修改后接受一对彩色图像(六个通道)作为输入,并预测单个6自由度的相对位姿。我们做水平翻转以及如下的训练数据扩充策略,以50%的几率:随机亮度、对比度、饱和度和色调抖动,其范围分别为±0:2、±0:2、±0:2和±0:1。重要的是,彩色图像扩充只适用于图像被馈送到网络阶段,而不是用来计算在这里插入图片描述
6网络训练
核心:通过基于目标图像和由源帧(帧+1或-1)所得的重建目标图像之间的相似性计算损失。
重建过程:通过姿态网络从源帧计算转换矩阵,然后通过旋转和平移信息计算源帧到目标图像间的映射,另一边通过使用深度网络预测目标图像的深度图,结合姿态网络转换的矩阵,将其投影到具有固有内参矩阵的摄像机中,进而获取重建的目标图像。此过程需要将深度图转换成3D点云,通过姿态将点云转换到另一个坐标系后,在使用相机内参将3D点转成2D点,最后通过所得点用作从目标图像进行双线性差值采样网络。
monodepth2 理解_第1张图片

7网络缺点:
与所有基于深度估计的图像重建方法一样,当场景包含违反我们的Lambertian假设(朗伯体假设)的对象时,我们的模型就会崩溃
当目标是扭曲,反射和色彩饱和时,效果不好;同时当边界模糊,形状复杂时,效果也较差
monodepth2 理解_第2张图片

4.结论
本文:提出了三种架构和一些可以用来组合的损失项,使得单目深度估计的性能得到大大提升,三种架构分别可以使用单目视频序列,立体双目图像对,或者两者结合的方式进行训练:
1一种新颖的外观表面匹配损失,以解决在使用单目监督时出现的像素遮挡问题
2一种新颖而简单的auto-masking方法,可以忽略在单目训练图像中没有发生相对相机运动的像素点
3在输入分辨率下执行所有图像采样的多尺度外观匹配损失,导致深度伪影的减少

你可能感兴趣的:(计算机视觉,神经网络,人工智能)