与一般网络的区别
普通算法结构与本文算法结构对比。其实这里指的普通结构就是GC-Net。本文网络不同之处就是代价聚合的过程更加牛逼,有aggregation guidance与aggregation proposal,这样聚合之后的代价空间一定是更好哒
网络的总体介绍
A1就是特征提取,用的是残差双塔结构
A2特征向量构成部分,
A3用3D卷积计算特征向量之间的相似度,形成最初的成本向量
代价聚合部分是由两支网络构成。分别是指导网络guidance stream B1,还有proposal streamB2。
最后的结果是由WTA得到也是经过softargmin操作
A1:特征提取 对每个像素都需要很强的特征表示,用很深的网络结构可以较好且鲁棒的处理弱纹理区域以及很小的结构(所以现在的网络提取特征层太小了?),同样,提取特征的是两个共享权重的子网络。残差网络之前用的stride=2的层是为了节约计算。每个卷积层后面都跟着bn,relu。图中后面的stride应该是1,应该是图画错了
这个是特征提取的网络结构,与GC-Net相差不大
A2 特征向量构建
特征向量构建操作,是由简单的移动和concat操作来构成最终的特征向量,与GC-Net一样。
注意我的左图前景偏右,右图前景偏左,因此我generate的顺序是跟图中相反
A3 相似度计算
3D卷积因为考虑三个维度height,width与disparity,因此,它不光能考虑纹理内容信息也有结构几何信息,缺点呢,就是耗时且消耗资源,所以要调制解调啊。
这个是结构信息,与GC-Net一样的。注意输出要多一个上采样,使得最终出来的是D×H×W。输入顶多就只算一个feature volume而不是cost volume,输出才是真正的cost volume
Cost Aggregation代价聚合
因为前面生成的cost volume是由局部特征值构成,所以会存在很多错误,而cost aggregation代价聚合则从全局视角来对这些错误的cost值进行修正。此外,成本聚合使得输出图更加的平滑和连续。代价空间聚合类似一个卷积的操作(??此处不是很明白)
我们用一个两个分支的网络。proposed cost aggregation可以直接在原始的cost volume上面进行处理。以一个端到端训练的方式在深度cost计算网络中进行计算。
cost aggregation可以作为是cost aggregation proposal(潜在的cost aggregation结果)的选择。
因此,两个分支网络这样设计:一个是生成代价聚合proposal,另外一个是选择最好的proposals。
proposal分支使用3D卷积网络来产生可能的代价聚合结果。guidance分支直接以2D卷积的方式从相关图像中提取信息。一个轻型卷积网络用在提取这种low_level的结构信息从一个全局的视角来指导选择。
前几个卷积层的特征蕴含着大量的low_level的结构信息(因此,前几层虽然耗时,也不能强行的给他减少通道数啊~),此外,后几层有着强大的high_level semantic信息(所以语义信息是在后几层)。对于代价聚合来说,结构信息与语义信息都非常的重要。proposal分支保留了语义信息,guidance分支带来的是结构信息。生成的proposal里面蕴含着大量的semantic 信息,结构信息则用在全局的视角当中来估计每个proposal。
B1 Proposal Sub-Network
Proposal网络是从height,width以及深度三个尺度去生成可能的cost aggregation结果。3个3D卷积与原始的cost volume来对接。卷积核分别是3×1×1,聚合的是视差维度,接着1×3×1和1×1×3滤波器处理height和width维度。最后一个1×1×1滤波器用来总结潜在的cost 聚合结果,D×H×W×G,G代表着成本聚合的数量。
B2 Guidance Stream
既然proposal是用最后一层的特征出来的,就会有着很强的semantic信息,而缺少low_level的结构信息。这个guidance 分支就是用来从据全局的一个视野来引入结构信息。直接从reference图(左图)中提取结构信息。2D卷积来做这样的事,先是一个5×5和3×3的卷积核来从一个大视野范围内来提取结构信息。最后一个1×1用来summarize。最后,guidance转变成一个可能性的值通过softmax,就是相当于做一个置信度。评价不同的aggregation proposal性能的。
最后,通过一个fusion决策来选择合适的proposal。fusion操作选择最好的作为代价空间聚合的结果。
C:视差计算Disparity computation
就是来自于GC-Net,不过该文中没有强调scale操作,不知源码有没有实现,两个好处,使得结果更加平滑且可微。不是创新点,不过多阐述