01
论文的主要思想
如图1所示,网络的输入只需左相机图像,在训练阶段通过左右相机图像作为监督。注意,这里的无监督学习指的是,不需要深度图作为监督,但仍需左右相机图像对网络进行监督,采集数据时,仍需要采集左右相机图像。
图1
图2所示为网络的主要结构,其中C代表卷积,UC代表向上卷积(转置卷积),S代表双线性采样,US代表上采样,SC代表跳跃连接。
注意:s代表双线性采样,其实主要用于增强生成的视差图,因为视差图经常会出现一些噪声点甚至是空洞,因此很有必要通过双线性插值来增强生成的视差图。
SC存在的目的其实就是在多尺度Feature Map上进行视差图的生成,这个思想和FCN以及多尺度物体检测的原理是相同的。
图2
图1中,经过backbone处理后,划分了三个分支,通过卷积分别生成左右两个图像的视差图,dl和dr。然后通过图2的操作,并根据右视差图 左图像,可以重建出右相机图;同样,根据左视差图 右相机图像可以重建出左相机图,前期在训练阶段,输入只有左相机图,以左相机图和右相机图作为标签,参与到上述的计算中,这样做的意义是,根据左右相机的真实图来一定程度上监督直接通过左相机回归出的左右视差图的效果和质量。
02
损失函数部分
损失函数主要包括三部分,如下图所示:
下面将会逐步介绍这三个损失函数。
Appearance matching loss
在这里,论文中SSIM使用的是3x3的block,且α=0.85。
关于SSIM的计算公式如下所示:
其实这个就是重建出来的左右图像和真实的左右相机图像的损失函数,注意,文中说到的无监督只是说没有真实的深度信息作为标签,并不是没有真实左右相机图像。
Disparity Smoothness Loss
这个是视差图平滑度损失,论文中,作者鼓励局部梯度平滑。
Left-Right Disparity Consistency Loss
这个其实是左右视差图的差异损失,从左图像恢复出的视差图和从右图像恢复出的视差图理论上应该是一样的,但是会有一些微小的差异,这里也是做了一个监督,使左右视差图生成的视差近似相同,也是为了后面直接从左相机图像生成左右视差图做了一个监督。
通过这三个分支的训练,左相机图像已经知道如何去生成左右视差图了,在生成的左右视差图的基础上,可以进行最终深度图的回归。
03
多尺度的预测
注意这里为什么会有skip connection,其实就是,在这里网络并不满足于某个特定的尺度,而是设定了四种尺度,也就是前面预测出来的左右视差图和主体特征以及前面的特征会做一个concat,后面再次进行卷积,得到新的特征,在这个新的特征的基础上再次进行视差图的生成。
这一点特别像FCN和多尺度物体检测中的做法,多尺度也保证了在不同scale上搜索最佳结果的可能。
04
最终深度图的计算
如下面的黄色加重文字所示,前面根据左右视差图处理后(最简单的就是左右视差图相加求和,和除以2,如果左右视差图对应位置的值相差太大,则该位置处的视差有问题),会得到最终的优化视差图,左右相机距离b已知,相机焦距f已知,可以通过公式计算出最终的深度。
05
如何采集数据?对数据有什么要求?
这种操作方式,其实只是对数据没有什么太多的要求,因为后面有直接从视差图生成左右图的监督,所以不需要做一些传统的立体校正和匹配,因为这里压根就没有用到立体相机计算出来的视差。
06
实验结果
该算法在无人驾驶领域有着重要应用价值,但是由于其厘米级的精度,不适合一些要求较高的场景。
参考论文:
Unsupervised Monocular Depth Estimation with Left-Right Consistency
源代码:
https://github.com/apllolulu/monodepth
上述内容,如有侵犯版权,请联系作者,会自行删文。