由电子科技大学用国产深度学习框架旷视天元MegEngine开发的双目视觉立体匹配算法CREStereo ( CREStereo: Cascaded REcurrent Stereo matching network),CREStereo立体匹配算法是一种基于级联循环网络的立体匹配算法,旨在通过使用上下文推理来更好地理解场景中不同物体和表面之间的关系,从而提高立体匹配的准确性和效率。这使得网络能够更加确切地决定每个像素的深度,从而产生更准确的深度图和3D重建。
1 前言
立体匹配是计算机视觉的重要领域,通过给定一对经过校正的图像,计算对应像素之间的位移,即视差。立体匹配算法近年来因卷积神经网络的出现而获得了巨大进步。然而,由于薄结构、非理想的校正、摄像头模块不一致以及各种复杂场景等实际操作困难因素,从智能手机等消费级设备拍摄的真实图像对中准确提取差异仍然是一个巨大的挑战。为了解决这些问题,作者提出了CREStereo,即级联循环立体匹配网络,其特点是采用分层网络以一种从粗到细的方式递归地更新视差,并使用叠堆式级联架构进行高分辨率推理;设计自适应群局部相关层处理非理想校准问题;引入含有更丰富的光照、纹理和形状变化的新合成数据集以更好地适应现实场景。CREStereo在Middlebury和ETH3D等公共基准测试中的表现明显优于现有方法,并极大地提高了恢复视差的准确性。其主要贡献可以总结为:
为实际立体匹配提出了级联循环网络和叠堆式级联架构;
设计自适应群相关层来处理非理想校准问题;
创建新的合成数据集以更好地推广到现实世界场景;
2 相关背景
视觉领域中的立体匹配是一个具有挑战性的问题。传统算法可以分为局部和全局方法。局部方法使用支持窗口计算匹配成本,而全局方法将立体匹配视为一个优化问题。深度神经网络在立体匹配任务的性能表现越来越成熟,包括2D和3D的方法。对于真实世界图像的立体匹配仍是一个少有探索的问题,但是已经有了一些解决方案,比如自适应方法、小波合成网络和域自适应。同时,为训练深度立体模型,合成数据集是不可或缺的。尽管现有的合成数据集对于模型训练提供了高精度且密集的ground truth,但是这些数据集仍有许多限制,如对象形状的变化范围有限,失真/光流值的分布也较为局限。
3 方法
3.1 Adaptive Group Correlation Layer - 自适应组相关层(AGCL)
作者提出了一种自适应组相关层(AGCL)用于消除实际场景中立体相机校准不完美的影响。为了减少匹配的不确定性,仅在局部窗口中匹配点,通过加入注意力模块来聚合全局上下文信息。作者采用2D-1D交替本地搜索策略来提高匹配精度,而且使用形变搜索窗口来减少对遮挡或无纹理区域的依赖。此外,作者引入组相关以逐组计算局部相关性,从而显著降低了内存消耗和计算成本。
其中,局部关键点注意力是实现局部窗口匹配的核心,公式中的位置编码增强了特征映射的位置依赖性。形变搜索窗口将搜索窗口的形状更改为内容自适应形状,以此来更好地处理遮挡和无纹理区域。最后,组相关机制通过分组计算本地相关性,来进一步提高匹配精度。除此之外,2D-1D交替本地搜索策略能够提高网络的复杂度,以细化匹配结果。这些创新性设计使得AGCL领先于现有的视觉匹配方法,在立体匹配中具有广泛的应用前景。
局部匹配公式:
形变搜索窗口公式:
3.2 Cascaded Recurrent Network - 级联循环网络
作者提出了一种级联递归网络方法用于匹配光流。采用递归更新模块(RUM)和自适应组关联层(AGCL)来构建级联递归网络。分别在不同级联层中计算特征图的相关性,并独立地用几次迭代来细化视差。除了级联的第一层外,其他级联层均采用来自上一级的预测上采样版本作为初始化。最后,使用凸上采样获得输入分辨率的最终预测。
3.3 Stacked Cascades for Inference - 堆叠级联用于推理
作者提出了一种带有捷径的堆叠级联架构用于推理。预先对图像对进行下采样构建图像金字塔,并将它们馈送到相同训练的特征提取网络中,以利用多层次的上下文信息。对于堆叠级联的特定阶段,该阶段中的所有 RUM 与更高分辨率阶段的最后一个 RUM 一起使用。在训练期间,堆叠级联的所有阶段共享相同的权重,因此不需要进行微调。
3.4 Loss Function - 损失函数
作者所使用的损失函数采用类似于RAFT的指数加权L1距离,并使用上采样算子将输出序列调整到完整的预测分辨率。
3.5 Synthetic Training Data - 合成训练数据
作者在用于视差估计网络训练的合成训练数据的生成过程中使用Blender生成左右图像对和像素级准确的密集视差地图。通过多种来源扩展场景中主要内容的模型的形状,包括基于ShapeNet数据集的基本内容来源,以及Blender的sapling tree gen add-on和基本形状结合线框修改器生成模型。在场景内随机放置不同类型、颜色和亮度的灯光形成复杂的光照环境,并使用真实世界图像作为物体和场景背景的纹理。为了覆盖不同的基线设置,努力确保生成的数据的视差分布在宽范围内平滑分布。
4 实验
4.1 数据集和评估指标
作者所使用的数据集包括Middlebury、ETH3D和KITTI等公共基准测试数据集,以及Sceneflow、Sintel和Falling Things等用于训练的数据集。评估指标包括AvgErr、Bad2.0和D1-all等。其中,AvgErr表示平均误差,Bad2.0表示视差误差大于2像素的像素占比,D1-all表示左图像中视差异常像素的百分比。
4.2 实施细节
作者使用PyTorch框架实现了Crestereo网络。使用了8个NVIDIA GTX 2080Ti GPU进行训练,批次大小为16。整个训练过程设置为300,000次迭代。使用Adam 优化器,标准学习率为0.0004。在开始训练的时候,进行了一个渐进式预热过程,持续6000次迭代,其中学习率从5%线性增加到标准值的100%。在180,000次迭代后,学习率会线性降低到末尾训练过程中标准值的5%。这个模型使用384×512的输入大小进行训练。在进入模型之前,所有的训练样本都会经过一组数据扩充操作。为了模拟相机模块的不一致性和非理想矫正,我们使用多个数据扩充技术进行训练。首先,作者分别为两个输入应用不对称的色彩增强,包括亮度、对比度和伽马的变化。为了进一步提高对真实世界图像矫正误差的抵抗力,只对右侧图像进行空间扩充:轻微的随机单应性变换和非常小范围内(<2像素)的垂直平移。为了避免不合适的区域上的匹配错误,使用高度和宽度在50到100像素之间的随机矩形遮挡补丁。最后,为了适应来自各个来源的输入数据进入网络的训练输入尺寸、立体图像和视差的组合进行随机调整和剪裁操作。
4.3 消融实验
作者在通过消融实验来验证网络组件的有效性,除了级联堆叠中的消融实验外,所有评估分辨率均为768×1024。首先,比较了不同类型的相关性,发现使用2D和1D all-pairs相关性会导致准确度显著下降;其次,分析了AGCL部分的组件,固定的无学习偏移的相关窗口会降低准确性,同时组相关和局部特征注意力模块的去除也会降低准确性;接着,比较了不同级联阶段的性能,并发现级联的重要性;最后,引入了新的合成数据集,表明作者提出的数据集在域泛化方面更具优势。
5 总结
CREStereo立体匹配算法通过级联递归网络与自适应相关性,能够更好地恢复微妙的深度细节,比现有方法更好地处理难度场景。同时,通过合成数据集的精心设计,也能更好地处理非纹理或重复纹理区域。未来可以进行改进,以适应各种便携式设备,并最好实时运行。
-
编码
+关注
关注
6文章
935浏览量
54759 -
模型
+关注
关注
1文章
3158浏览量
48701 -
深度学习
+关注
关注
73文章
5491浏览量
120958
原文标题:立体匹配算法,CRestero是如何让它变得更加准确?
文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论