CSPN:Learning Depth with Convolutional Spatial Propagation Network阅读笔记

一、先阅读总结

源代码:link
https://github.com/XinJCheng/CSPN
这篇论文是当前时间段立体匹配KITTI2015数据集榜单第一名,阅读后记录下来方便以后自己查阅。
这篇论文是从两个方面做的:depth completion(下图的上面部分) and stereo matching(下图的下面部分)。
首先,depth completion(深度完成)是单目复原三维;这篇论文是通过一张RGB图像一个这张图像的稀疏点云来稠密的复原三维,这是属于单目的,我没怎么认真看,因为我没做这一块。
我的工作是立体匹配这一块儿,所以我下面着重讲这一块论文的创新。
CSPN:Learning Depth with Convolutional Spatial Propagation Network阅读笔记

二、论文的主要创新点

在这篇论文中,他对于立体匹配的创新点主要是改进了PSMNet的SPP和后面的沙漏三维卷积;其实我发现2019年的论文大多都是在PSMNet网络上的改良;PSMNet网络必须吃透!!!下图为PSMNet网络:
CSPN:Learning Depth with Convolutional Spatial Propagation Network阅读笔记
论文首先是对上图左下角的SPP金字塔池化改良为卷积空间金字塔融合(CSPF)
对右下角的的沙漏网络改良为3D CSPN

2.1 CSPN

CSPN:Learning Depth with Convolutional Spatial Propagation Network阅读笔记
如上图所示,论文所提出的CSPN的计算方法有点类似卷积计算。
在论文中CSPN的公式为:
CSPN:Learning Depth with Convolutional Spatial Propagation Network阅读笔记
转换核ki, j∈ R[^k×k×c]是来自亲和力网络的输出;通常将内核大小k设置为奇数,以便围绕像素(i; j)的计算上下文是对称的,c是特征通道的数量。

2.2 卷积空间金字塔融合(CSPF)

在这里,我们可以看到,只要适当的内核大小和卷积步幅,SPP的每个分支都可以视为一步CSPN的特例。
形式上,给定一个大小为h×w×c的特征图,以及目标集合的特征图为p×q的空间,空间合并将计算每个分割网格内大小为h = p×w = q的平均值。通过将卷积核大小和步幅都设置为h = p×w = q,并且将k(a,b)中的所有值都统一,这等效于一步CSPN(等式(1))。在影响最终性能方面,功能可能会非常不同,如许多注意力模型所示[93]。因此,我们建议针对此SPP模块使用CSPN学习此类合并/转换内核k(a,b)。
们从同一特征块输出一个亲和矩阵进行空间池化,基于此我们进行了2D CSPN步骤,从而生成了大小为p×q的所需池化特征图。具体来说,采用目标尺寸为64 x 64、32 x 32、16 x16和8 x 8的特征图(图3(a)),并且所有特征图共享相同的网络输出以计算池内核。在实践中,我们的网络输出一个大小为h×w×1的单通道权重图,对于合并特征的每个目标大小,我们首先将权重图划分为合并区域,然后在每个区域内计算合并/转换内核k() 区域。但是,与其在等式中使用归一化。我们将内核值强制为正,并在所有输出值上对其进行归一化,而不会删除中心像素的内核值,形式为:
ki, j(a, b)= |kˆij(a,b)|/∑ab |kij(a,b)|。
输出权重图重复c次以匹配CSPN中的特征尺寸。
但在最后,论文增加了一个类似注意力机制的模型,也就是在最后不同尺度合并的时候训练其不同尺度的权重,而不是直接concat,网络输出一个大小为h×w×1的单通道权重图。

具体来说,我们将输出的空间金字塔特征连接为大小为l×h​​×w×c的4D特征量,并学习大小为l×3×3的变换核。在执行3D CSPN的步骤之后,不对图层尺寸进行填充,即使用[0; 1; 1]的填充大小,我们获得大小为h×w×c的融合特征图。在这里,我们还采用与CSPP中相同的内核标准化。在这里,我们使用一个独立的分支来计算空间金字塔每一层的转换内核,并将它们连接到3D CSPN内核。我们将此策略称为卷积特征融合(CFF),以简化描述。如图3(d)所示,我们最终的空间合并策略是CSPP和CFF的组合,我们称之为卷积空间金字塔融合(CSPF)。CSPF在我们的任务中比原始的SPP模块产生了显着的性能提升。
CSPN:Learning Depth with Convolutional Spatial Propagation Network阅读笔记
另外,论文还尝试采用Atrous SPP(ASPP)[32]代替SPP进行多尺度特征池化,而没有减小特征尺寸。
具体来说,ASPP使用膨胀卷积来获取各种上下文中的特征。类似地,通过学习金字塔每一层的空间相关转换内核,可以用膨胀卷积的相同方式执行CSPN。因此,我们也将ASPP扩展到圆弧CSPP(ACSPP),以计算空间金字塔特征。在我们的实验中,我们使用了ASPP [32]中提出的一组扩展速率,包括6 x 6、12 x 12、18 x18和24 x 24,发现ACSPP的性能优于CSPP。

2.3 3DCSPN卷积

CSPN:Learning Depth with Convolutional Spatial Propagation Network阅读笔记
文章的另一个创新是:将上图替换掉沙漏网络。

3DCSPN的定义

我们将CSPN扩展到3D以处理通常用于立体匹配估计的3D成本量[26]。我们在图2(c)中说明3DCSPN。类似于式 (1)给出3D特征量H∈Rd×m×n×c,其中d为附加特征尺寸,则3D CSPN的形式可写为:
CSPN:Learning Depth with Convolutional Spatial Propagation Network阅读笔记

3DCSPN学习立体匹配匹配

此步骤中,我们采用类似于PSMNet [89]的网络架构,如下图所示。左侧图像和右侧图像被馈送到两个权重共享的CNN,产生相应的特征图,通过级联来收集特征的空间池模块来自具有不同大小的子区域的表示。然后,将两个生成的特征图用于形成4D成本量,将其输入3D CNN中以进行视差回归。由于篇幅所限,我们请读者阅读原始文章以获取更多详细信息。在这里,我们进行了两项更改,将CSPF替换为其空间池模块,并在多尺度输出之后附加3DCSPN。在这里,我们使用建议的CSPF和3DCSPN更新空间池化和3D模块。CSPN:Learning Depth with Convolutional Spatial Propagation Network阅读笔记
在PSMNet中,从堆叠的沙漏网络的不同阶段输出大小为d / 4×h /4×w /4×1的三个预测的视差量。
这里d; h; w是输入图像的最大视差,高度和宽度。在每个阶段的视差量之后,我们附加一个内核大小为k×k×k的3D CSPN,以结合来自相邻像素的上下文,其中从与输出相同的特征块中学习亲和矩阵。
然后,应用三线性上采样将视差量上采样到d×h×w×1,以进行视差图回归,从而产生形状为h×w×1的输出。此处,3DCSPN完成了视差空间(ds)上的处理。
为了融合来自不同阶段的多个视差图输出,PSMNet手动设置权重以平均输出。
在我们的情况下,我们将它们连接为大小为s×h×w×1的4D体积,其中s = 3是视差图的数量。同样,我们可以执行3D CSPN,其内核大小为s×k×k,以连接多阶段预测,这在概念上类似于多尺度特征融合的注意力模型。最后,我们使用大小为[0; 1; 1]的特征填充,以便通过一次迭代将第一维减小为1,并获得形状为h×w×1的单个回归视差图以进行最终深度估计。

最后

我也只看了代码,对于CSPN的细节还是不太懂;看懂了代码再来补充。