双目深度估计调研
双目深度估计原理:
立体图像的深度估计对于计算机视觉应用至关重要,包括车辆的自动驾驶、3D模型重建以及目标检测和识别。双目深度估计是双目3D感知的任务之一,主要目标是通过两个相机估计场景的深度信息。得当场景的深度信息后,就可以将图像中的各个点结合深度信息转换为点云(如Pseudo-Lidar算法),再通过点云目标检测/分割方法进行三维物体检测。
给定一对校正后的立体图像,深度估计的目标是计算参考图像中每个像素的视差d
。视差d
是指左右图像上一对对应像素之间的水平位移。对于左图像中的像素(x, y)
,如果在右图像的(x-d, y)
处找到其对应点,则该像素的深度D由fB d
计算,其中f
为相机的焦距,B为两个相机中心之间的距离,d
为视差,计算公式为d=xl-xr
。如图1所示,为立体视觉中,深度与视差的关系转换图。
图1 视差转换图
双目立体视觉计算流程,如图2所示:
图2 立体匹配流程
双目立体视觉计算流程包括四个部分:(1)特征提取,(2)跨图像特征匹配,(3)视差计算,(4)视差细化和后处理。
前两个块构造成本量Cost Volume,第三个块正则化Cost Volume,并输出视差图的初步估计。最后一个块细化和后处理初始视差图。
其中,Cost Volume是在双目匹配中用于衡量左右视图的相似性的一个 4D tensor(batch为1),也被用于光流估计中。一般构建Cost Volume的输入分别是左右视图的Feature map(维度B C H W
,B
是batch维度,C
是通道维度,H W
为Feature map的长和宽),输出为Cost Volume(维度为B C D H W
,有时通道维度为C有时为2C,这与Cost Volume的定义有关。D 为定义的最大视差)。
代表性工作
首先选取较为经典的网络,来阐述各种方式的原理。
有监督网络:
Pyramid Stereo Matching Network
Pyramid Stereo Matching Network简称PSMNet,是2018年提出的一个非常经典的基于神经网络的双目深度估计方法。PSMNet的整体网络结构如下图所示,
PSMNet流程如下:
1.输入图像:来自左、右两个相机的图像;
2.特征提取:采用参数共享的卷积网络进行特征提取,包含用于提取多分辨率特征的下采样和金字塔结构 ,也包括在扩大感受野的同时保持特征图分辨率不变的空洞卷积;
3.Cost Volume构建:采用左、右两个图像经过卷积网络后得到的特征图构建Cost Volume;
4.特征融合:采用3D卷积提取左、右特征图及不同视差级别之间的信息,得到特征融合后的Cost Volume;
5.视差计算:将特征融合后的Cost Volume上采样到原始分辨率,找到匹配误差最小的视差值。
PSMNet中提出用视差回归来估计连续视差图。每个视差d的概率由预测成本cd
通过softmax运算σ(·)
计算,预测的视差d是用每个视差d的概率加权的和来计算的,具体公式如下:
d=d=0Dmaxd×σ(∙)
损失函数设计:
由于存在视差回归,本文采用平滑L1损失函数来训练所提出的PSMNet。与L2损失相比,平滑L1损失具有鲁棒性和对异常值的低敏感性,因此被广泛应用于边界盒回归中用于目标检测。PSMNet的损失函数定义为:
Ld,d=1Ni=1NsmoothL1(di-di)
其中,smoothL1
计算公示如下:
smoothL1=0.5x2, ifx<1x-0.5, othewise
式中,N为像素点数量,d
为视差真值,d
为预测的视差。
其结果如下:
然而有监督的方式需要采集真实的视差图或深度图作为监督信号,这在公共数据集上较好实现,如果需要构建红外数据集,则其深度真值较难采集,故还需要调研无监督或半监督方法。
无监督深度估计网络:
Unsupervised Monocular Depth Estimation with Left-Right Consistency
本篇论文将深度估计看做图像重建问题,不需要使用groundtruth,利用极限几何约束,通过训练网络生成视差图像。
大体思路是首先将双目摄像头的左图作为整个网络的输入,经过一个卷积神经网络,输出两张分别对应双目摄像头左图和右图的视差图,再将真正的右图加进来,通过预测得到的视差图与拿过来的右图进行处理,生成左图。然后将生成的左图与真实的左图作对比,通过loss损失函数进一步反向传播训练网络。
相比较有监督网络,在生成视差的基础上多了一个视图合成网络,从而以重建的视图与源视图之间的差异来指导网络的训练,而不需要深度真值。
图3 无监督深度估计基本原理
损失函数为图像重建损失,通过最小化图像重建损失来指导网络的训练。核心的损失函数如下:
Iijl
为真实的左图逐点像素,Iijl
为预测的左图中的逐点像素。
以上是经典的立体视觉网络,关于双目深度估计的方法,近些年论文较多,可见下面工作汇总。
双目深度估计工作汇总:
CFNet: https://github.com/gallenszl/CFNet Pretrained
ESNet: An Efficient Stereo Matching Network https://github.com/macrohuang1993/ESNet
Hierarchical Neural Architecture Searchfor Deep Stereo Matching https://github.com/XuelianCheng/LEAStereo
YOLOStereo3D: A Step Back to 2D for Efficient Stereo 3D Detection
https://github.com/Owen-Liuyuxuan/visualDet3D
Domain-invariant Stereo Matching Networks GitHub - feihuzhang/DSMNet: Domain-invariant Stereo Matching Networks
Cascade Cost Volume for High-Resolution Multi-View Stereo and Stereo Matching https://github.com/alibaba/cascade-stereo/tree/master/CasStereoNet
FADNet: A Fast and Accurate Network for Disparity Estimation https://github.com/HKBU-HPML/FADNet released the pre-trained Scene Flow model.
AANet: Adaptive Aggregation Network for Efficient Stereo Matching, CVPR 2020 https://github.com/haofeixu/aanet
RAFT-Stereo: Multilevel Recurrent Field Transforms for Stereo Matching https://github.com/princeton-vl/raft-stereo pretrained
MobileStereoNet: Towards Lightweight Deep Networks for Stereo Matching https://github.com/cogsys-tuebingen/mobilestereonet pretrained
Correlate-and-Excite: Real-Time Stereo Matching via Guided Cost Volume Excitation https://github.com/antabangun/coex
Pyramid Stereo Matching Network
https://github.com/JiaRenChang/PSMNet pretrained
Anytime Stereo Image Depth Estimation on Mobile Devices
https://github.com/mileyan/AnyNet pretrained
StereoNet: Guided Hierarchical Refinement for Real-Time Edge-Aware Depth Prediction GitHub - andrewlstewart/StereoNet_PyTorch: StereoNet PyTorch Lightning
Iterative Geometry Encoding Volume for Stereo Matching(2023CVPR)
https://github.com/gangweiX/IGEV
可见光公开数据集:KITTI数据集、Flyingthings3D数据集、NYUv2、Make3D等数据集,可在如下链接找到: Machine Learning Datasets | Papers With Code
红外公开数据集:暂时未找到公开的双目红外数据集,有单目红外数据集。