Abstract
本文处理了室内环境中的无监督深度估计任务。这项任务非常具有挑战性,因为在这些场景中存在大量的非纹理区域。这些区域可以淹没在常用的处理户外环境的无监督深度估计框架的优化过程中。然而,即使这些区域被掩盖了,性能仍然不能令人满意。在本文中,我们认为非区分点匹配的性能不佳。为此,我们提出了P2网络。
(一)
我们首先提取具有较大局部梯度的点,并采用以每个点为中心的斑块作为其表示。然后在补丁上定义多视图一致性损失。该操作显著提高了网络训练的鲁棒性。
(二)
此外,因为在室内场景中,那些无纹理的区域(例如,墙壁、地板、屋顶等),通常对应于平面区域,我们建议利用超像素作为一个平面先验。我们使预测的深度被每个超像素内的一个平面良好地拟合。在NYUv2和ScanNet上的大量实验表明,我们的P2网络优于现有的近似方法。
3 Method
3.1 Overview
我们的目标是学习一个深度估计的室内环境,只有单目视频。在最近在无监督深度估计[60]上取得成功之后,我们的P2网包含了两个可学习的模块: DepthCNN和PoseCNN。DepthCNN以目标视图图像作为输入,输出相应的深度Dt。PoseCNN以源视图图像Is和目标视图图像It作为输入,预测连续两帧之间的相对姿态Tt→s。
一种常用的策略是首先用预测的深度图Dt和摄像机运动Tt→s合成一个新的视图It',并最小化合成视图It'与其对应的真实视图It之间的光度一致性误差。然而,当直接将该策略应用于室内场景时,训练过程很快就会崩溃。
我们的观察是,纹理区域有利于深度估计和摄像机运动估计。相比之下,室内场景中较大的非纹理区域很容易淹没整个训练过程,即使这些区域被掩盖,结果仍然很模糊。因此,我们建议选择具有较大局部方差的代表性关键点。然而,正如在以前的无监督学习框架[18,19]中所做的那样,用单一强度值表示一个点是非区别的,并可能导致错误匹配为了解决这个问题,我们提出了一个补丁匹配模块,一种基于补丁的表示方法,它将一个点与以该点为中心的局部窗口相结合,以增加它们的鉴别能力,并最小化基于补丁的多视点光度一致性误差。为了处理大的非纹理区域,我们提出了一个平面正则化模块,使用大的超像素提取均匀色,并强制执行一个超像素内的预测深度图可以用一个平面来近似。我们的P2网络的概述如图1所示。
3.2 Keypoints Extraction
与室外场景不同的是,室内场景中大量的非纹理区域很容易淹没训练过程,导致DepthCNN总是预测无穷大的深度,而PoseCNN总是给出一个一致旋转。因此,在训练过程中,应该只保留纹理区域内的点,以避免网络被困在这些无用的结果中。在此,我们采用了直接稀疏测度法(DSO)[8]中的点选择策略,其具有有效性和高效性。DSO中的点是从具有大强度梯度的像素中采样的。图3显示了提取的DSO关键点的示例。
我们的直接方法相对于基于匹配的方法[58]的一个关键优势是我们不需要预先计算图像之间的匹配,这本身就是一个具有挑战性的问题。因此,我们只需要从目标图像中提取一次点即可。不需要手工制作用于匹配的描述符。因此,我们的方法更加稳健。此外,请注意,我们的方法不限于特定类型的关键点检测器。其他斑点检测器(例如SURF [1])也会产生一致的结果。
总结
使用DSO关键点来避免网络陷入琐碎的结果。DSO从具有大强度梯度的像素中采样点,在训练过程中保留纹理区域内的点避免网络陷入琐碎的结果。
3.3 Patch-based Multi-view Photometric Consistency Error
利用上一步提取的关键点,我们可以通过比较相应像素的值来定义一个光度一致性误差。(一般的操作---光度损失误差---基于点的)
【缺点】----改进
然而,这种基于点的表示不够具有代表性(缺点),而且很容易导致错误匹配,因为在一个图像中有许多像素具有相同的强度值。
(其他的改进方法)在传统的稀疏SLAM管道[8]中,为了克服上述挑战,在每个点pi的局部窗口上定义了一个支持域Ωpi。然后在每个支持域Ωpi上累积光度损失,而不是单个孤立点。这种操作将会有更加稳健的结果,由于提取的关键点与其支持域的结合。----受到启发!
【基于补丁的重建过程----损失函数改进---patch-based multi-view phtometric consistency error】
受上述操作的启发,这里我们提出了一个基于补丁的重建过程,如图2所示。
原来的重投影操作
具体来说,我们从目标视图t提取DSO关键点,原始的基于点的扭曲过程首先将关键点重投影到源视图是:
(进行重投影操作,将target的关键点投影到对应的原始图上,这里是点到点的操作,然后进行采样操作)
各个参数的解释,内参,相对位姿,原视图,目标视图,深度,在原始图上进行采样操作。
现在我们的操作
有一个局部窗口来代表这一个点的像素值,对于这个局部窗口(support region)里的点---使用相同的depth值。
重建过程为:
(对于局部窗口进行重投影,patch-based,而不是只一个点)
这个局部窗口---support domain支持域
【优点】
- 更好区分,更鲁棒(SLAM角度)。
- 有更大区域的有效梯度值(因为是一个区域内的,很多是相同的像素值如果针对纹理区域的话),相对于双线性插值。
最终的光度损失函数
支持域的定义----N范围
在monodepth2里,使用了L1损失以及结构相似性损失,这里同样使用相同的结合方式。不一样的地方在于,使用【基于块的多视图的光度损失】,得到最终的光度损失值。
- 双线性插值的使用
- monodepth2里的最小值光度损失的改进的使用
3.4 Planar Consistency Loss
分段平面区域检测---假设颜色均匀的区域为平面区域
使用的方法----Felzenszwalb superpixel segmentation----贪婪策略,会检测到很多平面区域(也是有问题的)
关于这个方法可以看:https://blog.csdn.net/weixin_46109921/article/details/130167975?spm=1001.2014.3001.5501
平面检测的例子如上图所示。
如何做的?
1.提取超像素,只保留大于1000像素的区域---因为平面区域一般都比较的大;
2.平面区域SPPm----每一个像素值都对应一个深度D(pn),将平面区域内的所有像素值投影到三维空间里;
3.使用一个平面参数Am来统一三维空间中的点(在同一平面上投影到三维空间中的点),使得他们能够在同一平面上。
如何求解---最小二乘法
已知Pn,Ym--->求Am
求得Am后即可求得对应的深度值,比较准确的平面深度值,作为监督信号。
3.5 Loss Function
所有部分的损失函数加起来作为整体的损失函数。
4 Experiments
4.1 Implementation Details
monodepth2的框架---depthnet+posenet
Adam
epoch
learning rate
random flipping + color augmentation
288*384 for training
original resolution---test
median scaling strategy?---evaluation
参考文章
https://www.sohu.com/a/448625703_715754
标签:P2Net,论文,视图,像素,---,区域,平面,关键点 From: https://blog.51cto.com/u_12074581/6192282