【参考算法】地平线双目深度估计参考算法StereoNetPlus-v1.2.1
1. 引言
本文将介绍地平线基于公版的双目深度估计算法StereoNet做的优化设计。首先介绍了双目深度估计的原理以及双目点云和Lidar点云的对比,然后由公版StereoNet的介绍切入到地平线参考算法的针对性优化,最后对可视化结果进行了解读。
2.双目深度估计原理
2.1 基本假设
假设双目系统是标准形式,即:
两相机内参数相同,即焦距、分辨率等参数一致;
两相机光轴平行;
成像平面处于同一水平线;
假设以左相机坐标系为主坐标系,也就是说两相机只存在X轴方向上的平移变换。
2.2 几何法

P是待测物体上的某一点,
O_R与O_T分别是两个相机的光心,
p、p':点P在两个相机感光器上的成像点,相机的成像平面经过旋转后放在了镜头前方
f为相机焦距,B为两相机中心距,Z为我们想求得的深度信息。


公式中,焦距f和摄像头中心距B可通过标定得到,因此,只要获得了视差d=X_R−X_T,就可以计算出深度Z。
视差是同一个场景在两个相机下成像的像素的位置偏差。
2.3 相机参数推导法


相机模型和各种坐标系介绍:https://blog.csdn.net/qq_40918859/article/details/122271381



2.4 双目点云和激光雷达点云的比较
参考链接:https://www.zhihu.com/question/264726552
感知距离
双目模型在近处比较有优势(几十米),在远处的时候类似于单目,而Lidar感知距离可以达到200m+(210-250)。
点云密度
双目的点云比Lidar要稠密。双目模型估计出的深度是像素级别的,camera分辨率越大,点云就越稠密。而Lidar的采样点覆盖相对于场景的尺度来讲,具有很强的稀疏性。
精度
Lidar是主动方法,双目是被动方法,而且双目是根据模型估计视差计算出的深度,存在一定的标定、安装误差以及深度失真问题,所以其输出的深度信息的精度是不及Lidar的,但是需要注意的是Lidar受天气影响更大。
缺失(Missing):边界缺失是指高质量RGB图像中存在真实对象边界,但在深度图中这些边界丢失了;
- 虚假(Fake):虚假边界是指在深度图中存在对象边界,但在RGB图像中不存在真实边界的情况;
错位(Misaligned):RGB图像和深度图中均有真实边界,但彼此没有很好的对齐;
黑夜不work
3. StereoNet
3.1 基本情况
dataset: SceneFlow
Input shape: 540x960
精度:

3.2 网络结构

1.特征提取
采用共享权重的孪生神经网络提取双目图像的特征,使用K个下采样block进行高层特征提取;
2.Cost volume构建
Cost volume是在双目匹配中用于衡量左右视图的相似性的张量。
特征下采样之后,在低分辨率下计算cost volume,输出的shape是

Cost volume的计算方式为concat,即将左右视图的特征图在通道维进行concat:
通过concat获得的cost volumes不包含有关特征相似性的信息,因此在后续模块中需要更多参数来学习相似度函数。
maxdisp是预先设定的最大视差,也就是模型能预测到的最大视差。
3.Cost volume优化和计算视差
获得4D cost volume,使用conv3d进行优化。
然后基于优化后的cost volume获得低分辨率下的视差图。cost volume优化后得到Nx1xDxHxW大小的特征图,然后使用softmax得到在每个视差值下的概率。
相关代码:
4. refine到原图
利用层次化微调模块来逐渐对视差图进行修复,补充高频信息以实现边缘保留。具体做法是对粗糙的低分辨率视差图进行上采样,并根据粗糙视差图和原始左视图rgb输入预测出一个残差图,加到该视差图中获得一个细化视差图。
具体操作:
首先将深度图和 RGB 图像拼接(Concatenate),得到的拼合张量再经过一个 3x3 的卷积操作得到 32 通道的表示张量,之后再通过 6 个 残差块(Residual Block)的操作,每个残差块由于卷积、批正则化(Batch Normalization)、矫正线性单元(Leakey ReLU)等操作;为了扩大网络,在每个残差块中使用了扩张(Dilate)卷积的操作,最后经过一个 3x3 的卷积,得到最后的单通道深度图。
SteroNet由左右图的特征经过连接得到一个4D cost volume, 之后利用3D卷积进行代价聚合得到最终的视差图,这种方式导致其计算成本十分高昂。
4.StereoNetPlus
4.1总体结构

4.2模型优化点
4.2.1 特征提取
使用MixVarGENet+FPN来提取双目图像的多尺度特征;
4.2.2 Cost Volume构建和优化
采用AANet的思想,基于相关性构建多尺度cost volume,并进行尺度内和跨尺度融合,最终输出1/8原图尺度下的cost volume。
AANet网络
作者通过设计两个有效且高效的成本聚合模块:自适应同尺度聚合模块(Adaptive Intra-Scale Aggregation)
和自适应跨尺度聚合模块(Adaptive Cross-ScaleAggregation)来实现成本聚合。并且使用特征相关性而不是concat的方式构造多尺度Cost Volume。

cost volume构建
使用1/8,1/16, 1/32原图尺度下的特征图构造多尺度cost volume;
ISA

CSA
双目图像进行下采样后,在相同的patch尺寸下,纹理信息将更具鉴别性,所以跨尺度成本聚合算法中引入了多尺度交互。最终的cost volume是通过对不同尺度的成本聚合结果进行自适应组合得到的,公式如下:

$$\hat{C}^s$$: 是跨尺度cost聚合后的最终cost volume;
$$\tilde{C}^k$$: 尺度为k的cost volume的尺度内聚合;
$$f_k$$:用于实现每个尺度的cost volume的自适应组合的函数;
$$f_k$$取决于cost volume $$\tilde{C}^k$$和$$\hat{C}^s$$的分辨率,对于cost volume $$\hat{C}^s$$:

下面将对公式中的3种情况进行说明:
$$\mathcal{I}$$:identity函数;
$$(s-k)stride-2 3\times3 convs$$:为了保证不同尺度的cost volume分辨率一致,使用(s-k)个stride为2 的conv3x3做下采样;
$$upsampling \bigoplus 1\mathrm{x}1 conv$$:采用双线性上采样将cost volume到相同的分辨率,然后采用1x1卷积对齐通道数;
优化效果
由于没有使用conv3d,所以相对于基础版模型,性能有了一定的提升。
基础版模型:720P输入下,单核fps 18.22, latency:54.9ms, 960*540输入下精度1.12(浮点)
4.2.3计算粗略视差
使用融合后的1/8尺度下的cost volume计算小图视差。
对粗略视差进行上采样时,会用到邻域点的特征,所以用了一个 unfold 的一个操作,先把这个视差从那个小图上面取出来,取出来过后,然后上采样,然后再跟featuremap 预测出来的权重去相乘,最后会得到一个最终的时差值。这种做法会减少 refine 的过程中的计算量。
这里为了进一步节省耗时,使用conv2x2替换unfold操作:
4.2.4 refine 原图
使用左图特征预测出权重,然后和上采样到原图尺寸的粗略视差相乘,这样就得到了最终视差。
CoEx

特征提取:使用MobileNetV2作为主干特征提取器,因为它具有轻量级的特性,并构建了一个U-Net方式的上采样模块,在每个尺度层次上都有长跳跃连接;
构建cost volume:在左右图像的1/4尺度上提取的特征图构建相关层,以输出D/4×H/4×W/4 cost volume;
cost volume聚合:使用了3D卷积的沙漏结构,但减少了通道数量和网络深度以降低计算代价,在每一个模块之后加入引导代价体激励;
Guided Cost volume Excitation (GCE):利用从图像中提取的特征图作为成本聚合的指导,以提高精度
GCE
CoEx使用DeconvResModule融合P1/2、P1/4、P1/8的左图特征,从而获得原始图像分辨率下的视差权重。

将预测到的权重和上采样到原图大小的粗略视差相乘:

将双线性插值优化为最近邻插值;
此部分在模型的后处理部分进行。
4.3计算深度并可视化
4.3.1计算深度
根据获得的视差计算像素深度:

4.3.2 可视化

可视化结果从左至右为:left左图、right右图、disparity视差图、根据视差计算的depth深度图;
视差图中的颜色代表:颜色越红,视差值越小;颜色越蓝,视差值越大;
深度图中的颜色代表:颜色越红,对应的像素深度值则越小;颜色越蓝,对应的像素深度值则越大;
- 视差图到深度图的计算原理可参考【双目深度估计】—原理理解中的几何法,相应代码可以参考config文件中的process_outputs函数。
参考链接
https://blog.csdn.net/sinat_29819401/article/details/129382207
https://blog.csdn.net/wjinjie/article/details/122303148
https://github.com/meteorshowers/X-StereoLab
https://zhuanlan.zhihu.com/p/302888864
https://blog.csdn.net/gy1153441419/article/details/126709760
https://zhuanlan.zhihu.com/p/58165275



