我们已经通过多篇文章讲解了端到端的立体匹配模型的各种细节问题,不过还没有回答一个问题:这样的模型如何训练?那么这一篇文章就来谈论这个问题。
我们先来看看立体匹配模型训练的本质:端到端立体方法的训练过程旨在找到网络参数 W, 以最小化损失函数L(W,D,Theta), 其中D是估计的视差, 而Theta是监督线索。这里的损失函数定义为数据项和正则化项之和,其中
训练这个网络,可以有不同的监督程度,包括有监督学习、自监督学习,以及弱监督学习。其中有监督学习使用带有3D真实视差的标注数据进行训练,自监督学习则不需要真实视差,而是使用辅助线索(例如图像重建误差)进行训练,弱监督学习介于两者之间,使用部分标注数据或较弱的监督信号进行训练。
一些方法使用额外的线索形式(如对解决方案施加的约束)来提高精度和性能。这些附加线索可以增强模型的表现。无论用哪种方法,我们都需要确保模型的准确性和泛化能力,特别是泛化能力,它是模型泛化到新领域的能力,我在之后的文章中也会谈到。
如之前好几篇文章一样,今天的文章也大量参考引用了参考文献[1],再次对作者表示敬意!
本文同步发表在我的微信公众号和知乎专栏“计算摄影学”,欢迎扫码关注,转载请注明作者和来源,如果你觉得有用的话,真诚的希望你顺手点个赞,并推荐给你的朋友们!也欢迎你加入我的计算摄影知识星球和广大的计算摄影爱好者进行讨论交流。
Θ是监督线索
这种监督训练方法旨在最小化真实视差和估计视差之间的差异,这种差异由一个损失函数来描述,其形式如下:
其中,
我们看看其中几个关键点,即度量函数和损失函数的计算技巧
这里我想先特别谈谈度量函数的类型:
L2距离(欧几里得距离)是最常见和最基础的度量函数,计算估计视差和真实视差之间的平方误差。其优点是计算简单,梯度易于求解。然而,L2距离对异常值(outliers)非常敏感,因为误差的平方会放大大的差异。
L1距离(曼哈顿距离)则计算估计视差和真实视差之间的绝对误差。相比L2距离,L1距离对异常值的敏感度较低,因为误差是线性增长的。这使得L1距离在处理具有噪声或异常值的数据时更为鲁棒。
我们之前提到过的文章<End-to-End Learning of Geometry and Context for Deep Stereo Regression>[2]就使用了L1距离,其原文提到:
平滑 L1 距离则结合了 L1 和 L2 的优点,当误差较小时,使用 L2 距离;当误差较大时,使用 L1 距离。这样既能保证在小误差下的平滑性,又能在大误差下对异常值进行鲁棒处理。
之前有一篇文章Pyramid Stereo Matching Network[3],就使用了这种距离函数。作者在文章中提到下面的信息:
另外还可以用一个两参数的鲁棒函数 ρ(⋅) 来进行近似平滑L1距离,这种近似方法旨在结合平滑 L1 距离和鲁棒函数的优点,以处理异常值和噪声数据。具体的鲁棒函数 ρ(⋅) 通常具有两个参数,可以调节其在不同误差范围内的行为,使其在小误差时与 L2 距离类似,而在大误差时与 L1 距离类似,从而提高模型对异常值的鲁棒性。一般情况下,这种鲁棒函数 ρ(⋅) 可能类似于 Huber 损失,它结合了 L1 和 L2 的特点,具体公式如下
其中,δ 是一个调节参数:
这样,Huber 损失函数在小误差时提供了较高的惩罚(以减少误差),在大误差时对异常值有较高的鲁棒性。这种两参数的鲁棒函数在深度学习中的立体匹配任务中,特别是在处理有噪声的数据或存在异常值的数据时非常有用。它可以帮助模型更好地平衡精度和鲁棒性,从而提高模型的整体性能。
我之前提到过的文章StereoNet: Guided Hierarchical Refinement for Real-Time Edge-Aware Depth Prediction[4],就使用了这种近似的平滑L1函数,作者原文如下
不同的度量函数有各自的优缺点,选择适合具体应用场景的度量函数是提高立体匹配精度的重要一步。在实际应用中,常常结合多种度量函数或采用自适应方法,以应对不同的数据特征和任务要求。
在计算损失时,一些方法[5]会将上式中的损失限制在特定的像素或兴趣区域上,例如前景或可见像素,以排除异常值。
其他方法,例如Yao等人的工作[6],则将损失分为两个部分:一个针对初始视差,另一个针对精细视差,最终的总损失是两者的加权和,比如作者原文中写道:
自监督方法最初在光流估计中提出,是在没有足够真实视差数据情况下的可行方案。这些方法通常依赖图像重建损失,利用投影几何和多视图的时空一致性。其原理是,如果估计的视差图尽可能接近真实值,那么参考图像与任何其他图像之间的差异(但使用估计的深度图未投影到参考图像上)也会被最小化。
其损失函数形式如下:
文章中对光度损失的描述如下
文章[7]中关于光度损失的描述
这里的度量函数依然可以是前面说的L1距离或L2距离等,一些文献使用了更复杂的度量函数,例如结构不相似性度量来比较图像块之间的差异。
监督方法对于视差估计和深度重建而言非常有前途,但需要大量真实深度数据。然而,获取真实深度数据既昂贵又容易出错。自监督方法虽然不需要真实深度数据,而是利用数据本身生成监督信号,通常通过图像重建损失进行训练,但在没有真实深度标签的情况下,模型可能会在某些复杂场景中表现不佳。
弱监督方法结合了监督和自监督的优点,通过利用辅助信号来减少对手动标注的需求,从而在保证模型精度的同时,降低数据获取成本和标注错误的风险。
具体来说,Tonioni等人[8]使用传统立体匹配技术估计的深度作为监督信号,微调深度估计网络。由于这种深度数据可能是稀疏的、有噪声的且容易出错,他们提出了一种置信度引导的损失函数,对被认为不可靠的真实深度值进行惩罚。这个损失函数使用L1距离定义。从下图可以看出,经过这种方式可以得到更加准确的视差图:
Kuznietsov等人[9]则使用稀疏的真实深度数据进行监督学习,同时通过直接图像对齐/重投影损失,并强制深度网络在立体设置中生成与照片一致的稠密深度图。你可以看到作者使用无监督方法可以得到预测的深度图,而稀疏的真实深度数据则被用于监督训练,以提高预测深度图的准确性和鲁棒性。
这两种方法依赖于一个特定的视差算法,为了避免这种依赖,Zhou等人[10]提出了一种迭代方法,该方法从随机初始化的网络开始。每次迭代中,它计算从左图到右图以及从右图到左图的匹配,然后选择高置信度的匹配并将其作为标注数据加入到后续迭代的训练中,其中置信度通过左-右一致性计算。
作者给出的伪代码如下
今天我描述了训练端到端立体匹配网络的不同监督程度的方法,包括有监督学习、自监督学习,以及弱监督学习,其中:
通过结合以上这些方法,可以在视差估计和深度重建中取得更好的效果,既提高了模型的准确性,又减少了对昂贵和容易出错的标注数据的依赖。
本文同步发表在我的微信公众号和知乎专栏“计算摄影学”,欢迎扫码关注,转载请注明作者和来源,如果你觉得有用的话,真诚的希望你顺手点个赞,并推荐给你的朋友们!也欢迎你加入我的计算摄影知识星球和广大的计算摄影爱好者进行讨论交流。