无监督单目深度估计 Unsupervised Monocular Depth Estimation with Left-Right Consistency 论文方法分析

最近在做深度估计相关的毕业设计,一般的基于深度学习单目深度估计算法都是基于监督学习的方法,也就是说我希望输入一张拍摄到的单目照片,将它通过卷积神经网络后生成一张深度图。在这个过程中我们就要求需要有大量的深度图样本用来做训练,但在实际过程中深度图标注是非常困难的。
1.大体思路
Unsupervised Monocular Depth Estimation with Left-Right Consistency 论文提出了一种无监督的单目深度估计方法,但我认为这种方法并不是完全的无监督,只是针对深度图的输出是无监督的,因为它使用右图或左图来代替深度图作为网络的groundtruth。这种方法的大体思路是这样的,首先我假设有一个双目摄像头,我将双目摄像头的左图作为整个网络的输入,经过一个卷积神经网络我的输出是两张分别对应双目摄像头左图和右图的视差图,我再将真正的右图加进来,通过我预测得到的视差图与拿过来的右图进行处理,我就生成了左图。将我生成的左图与真实的左图作对比,我就得到了loss损失函数,进一步反向传播训练网络。也就是说,这个网络达到最佳效果时,我们输入一张左图,通过卷积神经网络能够得到一张很好的视差图,再将视差图与真实的右图一起进行处理,完美的还原出我们的左图。但我们的任务是通过左图获得一张深度图,其实在我们的网络中,我们只需要将后面的视差图与右图一起生成左图的过程取消掉,就能够生成深度图了。那么我们为什么要加入后面的部分进行训练呢?如果我们没有后面的生成左图的过程,那么我们就只能以深度图作为label来进行训练,深度图的获得非常麻烦,而通过加入后面的环节,我们的label就变成了左图或者右图,这样我们就很好的避开了深度图作为label的问题。
2.详解
在这里插入图片描述在这里插入图片描述文章中介绍了以上三种无监督的方法。

第一种:Native:首先输入的是一张双目摄像机拍摄到的左图,经过一个卷积神经网络生成以右图为基底的视差图,之后通过以右图为基底的视差图与左图输入一起重新生成右图,这样我们只需要将双目摄像机的左图作为输入,右图作为输出即可实现视差图的求取,而不需要制作深度图作为groundtruth。

第二种:NO LR:首先输入的还是一张双目摄像机拍摄到的左图,经过一个卷积神经网络生成以左图为基底的视差图,之后通过以左图为基底的视差图与双目摄像机的右图一起重新生成预测左图,这样我们只需要将双目摄像机的左图作为输入,左图作为输出即可实现视差图的求取,同时在训练过程中需要加入双目摄像机右图的参与过程。

第三种:作者的方法:首先输入的还是一张双目摄像机拍摄到的左图,经过一个卷积神经网络后生成了分别基于左图为基底和右图为基底的两张视差图,在代码中实现的时候,基于左图为基底和右图为基底的两张视差图是叠在一起的。之后在基于左图为基底的视差图中加入双目摄像机的右图,生成对于左图的预测图,在基于右图为基底的视差图中加入双目摄像机的左图,生成对于右图的预测图,这样对于整个网络的输入是左图,label是左图和右图,在中间的过程中生成基于左图的视差图和基于右图的视差图。具体的损失函数线下文。

3.网络中的损失函数由三个损失函数组成
在这里插入图片描述
网络的损失函数有三个,我们沿着网络前向的方向进行分析。首先,值得一提的是,在实际代码计算过程中,并不是使用一张图来计算的,无论是视差图还是左图和右图的图片都是组成了金字塔型,即原图、原图长宽都变为1/2、原图长宽都变为1/4和原图长宽都变为1/8的图片。
我们将图片经过VGG或残差卷积神经网络,编码器过程将图片尺寸降维到原图片尺寸的1/128,之后解码器过程使用插值和反卷积神经网络的方法得到尺寸分别为原图、原图的1/2、原图的1/4和原图的1/8的特征图,将这些特征图与编码过程中得到的相同尺寸的特征图进行叠加,之后将新的特征图通过通尺寸卷积的方法生成四个尺寸的视差图。
在这里,一方面我们希望视差图能够尽可能的连续,所以我们对得到的四个视差图获取其梯度图,进一步使得梯度尽可能的连续;另一方面我们希望生成的基于两个基底的视差图能够尽可能地相似,所以这里是用逐像素比较的方法。
生成视差图后,其中又加入了对应的左图和右图原图的金字塔图,生成相应的预测的左图和右图,将真实的左图和右图做比较,所以我们使用了下面的第(1)种损失函数,其中SSIM部分找两张图片的相似程度,后面部分直接比较两张图片的像素差,进一步使得预测的图像和真实的图像尽可能地相像。
(1)
这个损失函数是用于比较原图与重建的左图或者右图,进一步求得整个网络的损失情况loss。
在这里插入图片描述

(2)
为鼓励差异在局部平滑,对视差梯度∂d进行L1惩罚。 由于深度不连续性经常发生在图像梯度上,所以使用图像梯度∂I用一个边缘的术语来加权这个成本。
也就是说这个惩罚项是为了使生成的视差图能够尽可能的连续。
在这里插入图片描述
(3)
在损失函数中加入这个惩罚项是为了使得生成的两个视差图能够尽可能地相似。
在这里插入图片描述
代码解析:
https://blog.csdn.net/bofu_sun/article/details/89278632
https://blog.csdn.net/bofu_sun/article/details/89163968
https://blog.csdn.net/bofu_sun/article/details/89138003

  • 10
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值