0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于深度学习立体匹配的基本网络结构和变种

3D视觉工坊 来源:计算摄影学 2023-04-07 10:04 次阅读

深度学习立体匹配之 MC-CNN中两种结构:MC-CNN-fst和MC-CNN-acrt。这两个算法由Zbontar和LeCun共同研发,分别代表了速度与精度的平衡。MC-CNN-fst关注于快速处理,而MC-CNN-acrt则更注重匹配精度。这两种算法为深度学习立体匹配技术的发展奠定了基础,而从效果上看他们明显超过了当时很多优秀的立体匹配算法,成为了SOTA。我们先看看当前的学习地图:

c5b1a6f8-d4cf-11ed-bfe3-dac502259ad0.jpg

学习进度地图 那么在本篇文章中,我将更深入地探讨基于深度学习的立体匹配算法,涉及一系列有趣的网络结构和变种。我会带你首先回顾这两个算法的基本架构,然后讨论如何通过网络变种、训练策略、正则化和视差估计等技巧来进一步提升它们的性能。这篇文章旨在帮助大家全面地了解深度学习立体匹配算法的发展现状和研究趋势。今天的文章大量参考引用了参考文献[1],再次对作者表示敬意! 1. 基本网络结构回顾

1.1 网络架构回顾

下面是我上次提到的Zbontar和LeCun[2][3]提出的两种算法的架构图,这是是深度学习立体匹配领域最基础的结构。其中一个被作者命名为MC-CNN-fst,另外一个则命名为MC-CNN-acrt,其后缀fst和acrt分别代表fast和accurate,顾名思义MC-CNN-fst追求的是计算效率,而MC-CNN-acrt追求的则是准确性。

c5c743dc-d4cf-11ed-bfe3-dac502259ad0.jpg

MC-CNN的两种架构 我们可以利用下图来描述它们的共同点,它们都是由左右两条分支组成了特征提取的网络,提取出来的特征图都会进入到决策模块,该模块负责计算出左右两个Patch对应的两个特征图之间的相似度,所以整个网络分为特征提取和分类决策这两部分。

c5df6926-d4cf-11ed-bfe3-dac502259ad0.jpg

基本网络构成 它们的不同点是:

特征提取网络不同。除开层数等信息之外,fast结构还在特征提取网络的尾部添加了归一化层,用于对特征图进行归一化。

分类决策部分不同,fast结构中,特征图在每个分支中已经进行了归一化。所以分支决策部分直接是计算两个归一化的特征图的点积,及余弦相似度。而在accurate架构中,特征图首先在通道维度连接在一起,然后经过多个全连接层,再通过Sigmoid函数得到最后的相似度得分

这种架构可以快速判断左右两幅图中取出的两个Patch是否相似,结构也很简单,所以很多学者采用了这种架构,并进行了改进,我在下一节会谈到各种改进方向。

1.2 相似度计算

在特征提取之后,特征被送入上层模块进行相似度的计算。相似度计算是立体匹配算法的核心部分,可以分为两大类:手动相似度计算和决策网络。

1.2.1 手动相似度计算

手动相似度计算无需训练,它直接通过一些预先定义好的距离度量方法计算特征之间的相似性。常见的手动相似度计算方法包括L2距离、余弦距离、归一化的相关度或归一化内积等。这些方法的优势在于可以通过卷积操作实现,提高计算效率,并且无需训练。然而,它们可能无法充分适应不同的数据集特性,导致匹配精度受到限制。MC-CNN-fst算法就是采用的这种方式

c5f4887e-d4cf-11ed-bfe3-dac502259ad0.jpg

快速架构采用余弦相似度

1.2.2 采用神经网络计算相似度

与手动相似度计算相比,用于决策的神经网络需要训练,但可以提供更准确的相似度计算结果。决策网络可以采用1x1卷积、全卷积层实现,或通过卷积层与全连接层的组合实现。决策网络与特征提取模块联合训练,从而学习到更适应当前数据集的相似度计算方式, MC-CNN-acrt就是典型代表

c611aa9e-d4cf-11ed-bfe3-dac502259ad0.jpg

准确架构采用Sigmoid结果 全连接层实现的方法包括Han等人[4]的全连接层+SoftMax,Zagoruyko和Komodakis[5]的方法,以及Zbontar等人[3]提出的MC-CNN-acrt网络。在这些方法中,特征提取分支的特征图的结合方式有两种:一种是在通道层面连接[4][5][3],另一种是通过类似Mean Pooling等方式连接[5],这样可以处理任意多个Patch的相似度,而不用改变网络结构。

c626aade-d4cf-11ed-bfe3-dac502259ad0.jpg

决策网络的优点是相似度计算结果更加适配当前的数据集,因此匹配精度更高,但相应地计算速度会更慢。因此,在实际应用中,需要根据具体问题和场景权衡决策网络与手动相似度计算方法的选择。

2. 网络的变种

在上面结构的基础上,很多学者研究了各种改进和提升的方法,这一节我们就来谈谈各种改进

2.1 引入Max-pooling操作处理大视差和大尺度Patch

回顾一下最简单的立体匹配代价计算公式:

c6423830-d4cf-11ed-bfe3-dac502259ad0.png

SAD代价计算公式 我们看到整个计算的时间复杂度是O(WHSD),其中W/H是图像的长宽,S是支持窗的尺寸,D则是视差值的范围。所以支持窗越大,计算复杂度越高。对应到我们的深度学习架构中,特征图越大,计算复杂度越高。对应到我们深度学习的方法里面,则是特征图越大,计算复杂度越高,视差范围越大,计算复杂度越高。所以为了解决原始MC-CNN在处理大视差和大尺寸Patch时的效率问题,Zagoruyko和Komodakis[37]以及Han等人[4]在每层后面都添加了max-pooling和下采样操作。这样做的目的是使网络能够适应更大的Patch尺寸和视角变化。通过这种方式,增强的架构能够在保持较高匹配精度的同时提高处理速度,因为这样得到的特征图尺寸更小,如下图所示:

c65ac5f8-d4cf-11ed-bfe3-dac502259ad0.jpg

加入Max Pooling前后对比

2.2 引入SPP模块增强网络结构应对不同尺度输入时的灵活性

另一个重要的改进是在特征计算分支的末端加入了空间金字塔池化(SPP)模块。SPP模块可以输入任意尺寸的特征Patch,输出固定尺寸的特征图(如图2-c所示)。SPP的Pooling尺寸根据输入尺寸而改变,这样使得不同尺寸的输入可以得到相同尺寸的输出。这样当输入的Patch尺寸改变时,网络结构不用改变。这一点对于处理不同尺寸的图像数据具有重要意义,使得这个架构更具灵活性。

c67356ae-d4cf-11ed-bfe3-dac502259ad0.jpg

加入SPP前后对比

2.3 使用ResNet使得网络可以更深

这一点我想很多读者都不陌生,ResNet已经广泛应用在各种领域的神经网络里面了,所以尽管最初时,类似MC-CNN这样的算法还没有采用残差网络结构,后续的算法几乎都加入了这个结构。比如Shaked and Wolf [6]就使用了ResNet,构建了如下的网络结构,这里浅红色标注的部分就是典型的残差模块,这使得我们可以训练非常深的网络,从而捕捉到图像中更高层次的特征:

c688784a-d4cf-11ed-bfe3-dac502259ad0.jpg

采用ResNet加深网络

2.4 使用空洞卷积或SPP得到更大的感受野

我在70. 三维重建5-立体匹配1,立体匹配算法总体理解中讲过,在重复纹理、无纹理区域我们是希望尽量采用大尺寸的支持窗来来提升信噪比和像素之间的区分度。

c6a1e5be-d4cf-11ed-bfe3-dac502259ad0.jpg

不同尺度的支持窗 对应到我们深度学习的算法中,则是我们在某些时候需要更大的感受野。扩大感受野的方法有多种,比如增大输入Patch的尺寸、或是使用更大的卷积核再配合带有更大步长的池化操作降低尺寸。前者会导致计算复杂度上升,后者则会导致特征图的分辨率降低使得细节丢失。所以就有了两种更好的方式

2.4.1 使用空洞卷积来提升感受野尺寸

第一种方法是使用空洞卷积——顾名思义,空洞卷积的卷积核是有空洞的,这样使得我们可以有更大的感受野,但是计算量却不改变,这种技巧后来被用到了很多领域。

c6bc1ede-d4cf-11ed-bfe3-dac502259ad0.jpg

空洞卷积 下图是普通卷积(左)和空洞卷积(右)的对比:

c6d458be-d4cf-11ed-bfe3-dac502259ad0.jpg

2.4.2 使用SPP来提升感受野尺寸

我们上面见过引入SPP模块可以使得网络可以灵活应对不同尺寸的输入,而其中一个重要的应用就是利用SPP模块来扩大感受野。比如Park et al. [11]提出了一种叫做FW-CNN的网络架构,其中引入了一个简称为4P的模块,即所谓Per-pixel Pyramid Pooling - 逐像素的金字塔池化操作。 我们之前讲过,如果采用更大的卷积核,加上更大步长的小尺寸的池化操作,可以扩大感受野——但这样会导致丢失原始特征图中的细节信息。如果换成更大尺寸的池化操作,但步长设置为1呢,这样当然也可以有更大的感受野——但同样也会丢失图像的细节。于是,这里的4P操作就对每个像素同时采用多种不同尺寸的池化窗口,并将输出连接以创建新的特征图。生成的特征图包含了从粗到细的尺度信息:

c6edf79c-d4cf-11ed-bfe3-dac502259ad0.jpg

4P操作可以加入到网络的不同位置,在FW-CNN中,4P模块的位置如下所示:

c701d762-d4cf-11ed-bfe3-dac502259ad0.jpg

FW-CNN的这种方式虽然扩大了感受野,但是4P模块需要和全连接层一样,每个视差层级计算一次,所以计算量比较大。因此,Ye et al. [7]等提出了一种改进的方式,把SPP放到每个特征计算分支的末尾,并且采用多尺度的SPP,既降低了计算量,又能有较大的感受野。

c716b6c8-d4cf-11ed-bfe3-dac502259ad0.jpg

2.5 使用多尺度特征得到更好的结果 前面的方法都是采用一种尺寸的输入Patch,但在基础架构的基础上,还可以扩展到学习多尺度的Patch的特征,进一步提升效果,比如Zagoruyko和Komodakis[5]中提到了一种架构如下:

c7302d6a-d4cf-11ed-bfe3-dac502259ad0.jpg

这里有两种输入,第一种是从输入的Patch中心裁剪32x32的区域送入网络,第二种是将输入的64x64的Patch缩小为32x32送入网络。因此前者比后者的解析力更高。这样网络在单次前向推理后就可以提取到不同尺度和解析力的特征,效果也就更好,效率也较高。Chen et al. [8]等提出了一种类似的结构,只不过两组流各自做各自的特征提取和分类决策,决策的结果再通过投票整合到一起,作为最后的输出。

c74a558c-d4cf-11ed-bfe3-dac502259ad0.jpg

2.6 改变网络结构,得到更高的效率

2.6.1 一次性计算所有视差层级的代价

前面我们讲的方法在分类决策时,每个像素需要n_d次通过决策模块来计算代价,其中nd是视差层次的数量。如果我们的决策模块采用的是相关计算(类似内积计算),那么可以利用到相关性天然的高度并行性来大大减少前向传播次数。例如,Luo等人[9] 就提出了下面这样的结构,这里左图的Patch尺寸不变,但右图会采用更大尺寸的Patch,这样一次性最大可以把所有可能得右图Patch的特征全部提取出来,然后通过并行的相关性计算一次性把该像素所有可能的代价计算出来。在这个网络中,左图的特征是64维的,而右图提到的特征则是nd x 64维的。

c7621c44-d4cf-11ed-bfe3-dac502259ad0.jpg

并行相关度计算提升效率

2.6.2 一次性提取特征

我们之前展示的结构的输入都是两个Patch,而非整个图像。在Zagoruyko和Komodakis[5]中提到,实际上可以通过输入两个图像,一次性提取左右两个视图的特征图,不需要逐Patch的计算,也不需要每个视差层级计算一次

2.6.3 对整幅图计算代价,而非逐Patch计算

另外,在Zagoruyko和Komodakis[5]还提到,可以通过将决策网络中的全连接层改为1x1卷积操作,这样就可以对整幅图计算代价,而不是对Patch计算,当然每个视差层级还是需要计算一次。 以上两个方法在我上一篇文章种已经讲过了,下面是我当时给的伪代码

c77d18b4-d4cf-11ed-bfe3-dac502259ad0.jpg

加速推理的伪代码

2.7 整合特征提取和决策模块,得到更好的效果

在Zagoruyko and Komodakis [5]中还提到了一种特别的结构,输入的两个Patch从一开始就整合成多通道的图像送入网络。于是网络没有专门分开的特征提取模块,而是将特征提取与决策整合到一起,如下所示。这种结构训练比较简单,不过在推理时效率低,因为每个像素需要推理nd次:

c79f1e8c-d4cf-11ed-bfe3-dac502259ad0.jpg

通道维度上连接图像再送入网络 这种将多个输入直接在通道维度上连接再送入网络的方式很有用,我们之后还会看到类似的用法。这一节我们看到了多种网络结构的变种,而下一节我来介绍一下各类网络的训练策略。

3. 网络训练策略

我们之前看到的特征提取网络和代价决策网络都需要训练,而训练的策略则分为强监督型和弱监督型两类。我重点介绍一下强监督型训练,然后捎带提一下弱监督或自监督的训练策略

3.1 强监督型训练

这里面又分为两种形式。 第一种的训练样本的基本单元是一对patch,它们要么是匹配的正样本,要么是不匹配的负样本。网络要学习的是这一对patch间的匹配程度。那么如果输入的是正样本对,理想的匹配程度为1,如果输入的是负样本对,那么理想的匹配程度为0。通过某些损失函数的迭代约束,网络会调整自身权重,使得最终能够甄别出输入patch对之间是匹配的还是不匹配的。

c7b984d4-d4cf-11ed-bfe3-dac502259ad0.jpg

输入一对Patch进行训练 第二种的训练样本的基本单元是两对Patch,其中一对Patch是匹配的,其中右视图的Patch来自于与左视图对应的右极线上。另外一对Patch则是不匹配的。此时网络优化的目标是尽量放大这两对Patch的匹配值之间的差异。正样本对的相似度计算结果应该比负样本对的相似度计算结果大得多。

c7d06d34-d4cf-11ed-bfe3-dac502259ad0.jpg

输入两对Patch进行训练 强监督训练的损失函数用于衡量网络输出和学习目标之间的差异,主要有三类损失函数

L1距离

Hinge损失函数

交叉熵损失函数

3.2 弱监督型训练

为了减少对标注数据的需求,人们提出了弱监督训练方式,这通常是通过引入一些先验信息约束网络的学习过程来实现的,Tulyakov等人[10]就利用多实例学习(MIL)结合立体约束和关于场景的粗略信息,来训练立体匹配网络,而这些数据集并没有可用的真实标签。 跟传统的监督技术不同,弱监督训练并不需要成对的匹配和不匹配图像块。实际上,训练集是由N个三元组组成的。每个三元组包括:(1)从参考图像上的水平线上提取的W个参考块;(2)从右图像对应的水平线上提取的W个Patch,作者成为正Patch,它们跟W个参考块有可能是匹配的;(3)从右图像上另一个水平线上提取的W个负Patch,即与参考块绝对不匹配的块。这样一来,我们就可以直接从立体图像对中自动生成训练集,不需要手动进行标注了。 在训练网络时,研究人员使用了五个约束条件来引导学习过程:

对极约束:这个约束告诉我们,在左右图像中的匹配点必须位于相应的水平线上。

视差范围约束:它告诉我们每个像素的视差值在一个已知的范围内。

唯一性约束:对于每个参考像素,只能有一个唯一的匹配像素。

连续性(平滑性)约束:表示物体表面的视差变化通常是平滑的,除非在物体边界附近发生突变。

排序约束:指的是在左图像上的参考点之间的顺序应该与在右图像上的匹配点之间的顺序一致。

c7e553b6-d4cf-11ed-bfe3-dac502259ad0.jpg

根据这些约束条件,研究人员定义了三个损失函数来引导网络学习。其中,多实例学习(MIL)损失使用了对极约束和视差范围约束。收缩损失在MIL损失的基础上增加了唯一性约束,使得匹配点更加准确。收缩-DP损失则结合了所有约束条件,并利用动态规划来寻找最佳匹配。 通过这种方法,网络能够根据这些约束条件进行学习,从而在没有充分标注的数据集上实现立体匹配。

4. 思考和小结

在本文中,我们介绍了深度学习立体匹配方法的基础网络架构和常见的网络变种,以及训练策略。我们看到,在不同的应用场景下,立体匹配问题需要不同的解决方案。为了应对这些挑战,研究者们提出了各种改进和优化方法,从网络结构到训练策略都进行了探索。其中我们列出了网络结构的各种变种

c7fa30e2-d4cf-11ed-bfe3-dac502259ad0.jpg

尽管深度学习立体匹配方法已经取得了显著的进展,但仍然存在一些问题需要进一步研究和解决。例如,对于大视差和大尺度Patch的处理、不同尺度输入的灵活性、更高的效率等方面还有改进的空间。此外,如何将深度学习方法应用于实际应用中,也是需要进一步探索和研究的问题。 我们目前看到的方法,都是类似MC-CNN这样遵循了传统立体匹配架构的方法。我会在下一篇文章开始介绍端到端的立体匹配算法,它们遵循完全不同的策略和逻辑,一定会给你带来不一样的感受! 下面是你现在的位置,喜欢今天的文章就点个赞,持续关注我吧!

c8120528-d4cf-11ed-bfe3-dac502259ad0.jpg

学习进度地图

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4599

    浏览量

    92643
  • 网络结构
    +关注

    关注

    0

    文章

    48

    浏览量

    11068
  • 深度学习
    +关注

    关注

    73

    文章

    5492

    浏览量

    120977

原文标题:基于深度学习立体匹配的基本网络结构和变种

文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    立体匹配SAD算法原理

    立体匹配SAD算法matlab实现
    发表于 06-05 16:08

    神经网络结构搜索有什么优势?

    ,稍有不同就无法复现论文的结果。而网络结构作为一种特殊的超参数,在深度学习整个环节中扮演着举足轻重的角色。在图像分类任务上大放异彩的ResNet、在机器翻译任务上称霸的Transformer等
    发表于 09-11 11:52

    彩色镜像图像的立体匹配方法

    提出一种新的基于镜像图像的立体匹配方法,设计一种新的图像采集系统,采集获得物体的镜像图像,利用镜面成像特点,将立体匹配的搜索空间由二维降为可靠的一维。应用彩色
    发表于 04-15 09:39 37次下载

    基于蚁群优化算法的立体匹配

    立体匹配技术使得通过像点获取景物的距离信息,实现三维立体再现成为可能,是计算机视觉研究中最基本的关键问题之一。本文选择图像的边缘点作为匹配基元,以边缘特征点
    发表于 06-26 10:29 17次下载

    基于扩展双权重聚合的实时立体匹配方法

    立体匹配是对给定的一对立体图像计算视差图的过程。目前许多立体匹配的应用程序需要实时处理,但事实上立体匹配需要经历大规模的计算。幸运的是,无论硬件还是软件方面并行处理技术已经非常先进。因
    发表于 10-31 18:46 2次下载
    基于扩展双权重聚合的实时<b class='flag-5'>立体匹配</b>方法

    基于颜色调整的立体匹配改进算法

    随着立体视觉技术的飞速发展,越来越多的3D相关技术进入了人们的视野,如三维重建、运动估计、VR、AR、白动驾驶等。获取精准的深度信息是这些技术得以正确运用基础。而通过立体匹配获得的视差图则是获取
    发表于 11-02 11:07 0次下载
    基于颜色调整的<b class='flag-5'>立体匹配</b>改进算法

    超像素分割的快速立体匹配

    针对目前立体匹配中存在的匹配精度和匹配速度很难兼顾的问题,提出了一种基于稳定特征点和SLIC超像素分割算法的快速立体匹配。利用SURF算法高速有效地提取出特征点进行
    发表于 11-15 15:26 14次下载
    超像素分割的快速<b class='flag-5'>立体匹配</b>

    基于mean-shift全局立体匹配方法

    针对图像全局立体匹配精度高、计算量大的问题,提出基于mean shift图像分割的全局立体匹配方法。首先,通过mean shift算法对图像进行分割,获取图像同质区域数量和区域的标号。在计算匹配代价
    发表于 11-20 11:50 9次下载

    网络结构自动设计算法——BlockQNN

    神经网络结构设计一直是深度学习里的核心问题。在基于深度学习的分类、检测、分割、跟踪等任务中,基础神经网络
    的头像 发表于 05-17 09:44 5575次阅读
    <b class='flag-5'>网络结构</b>自动设计算法——BlockQNN

    双目立体匹配的四个步骤解析

    双目立体匹配可划分为四个步骤:匹配代价计算、代价聚合、视差计算和视差优化。
    的头像 发表于 08-31 10:08 5143次阅读

    如何使用跨尺度代价聚合实现改进立体匹配算法

    针对现有的立体匹配算法在精度和速度上不可兼得的现状,提出一种改进的跨尺度代价聚合立体匹配算法。通过强度和梯度算法计算匹配代价,利用引导滤波聚合匹配代价,采用跨尺度模型聚合各尺度的
    发表于 02-02 14:36 10次下载
    如何使用跨尺度代价聚合实现改进<b class='flag-5'>立体匹配</b>算法

    双目立体计算机视觉的立体匹配研究综述

    、半全局和基于深度学习立体匹配算法研究现状的基础上,阐述了匹配代价、代价聚合、视差计算/优化、视差校正在立体匹配算法中的实际应用,总结及展
    发表于 04-12 09:47 3次下载
    双目<b class='flag-5'>立体</b>计算机视觉的<b class='flag-5'>立体匹配</b>研究综述

    一种基于PatchMatch的半全局双目立体匹配算法

    近年来双目立体匹配技术发展迅速,高精度、高分辨率、大视差的应用需求无疑对该技术的计算效率提出了更高的要求。由于传统立体匹配算法固有的计算复杂度正比于视差范围,已经难以满足高分辨率、大视差的应用场
    发表于 04-20 11:31 13次下载
    一种基于PatchMatch的半全局双目<b class='flag-5'>立体匹配</b>算法

    融合边缘特征的立体匹配算法Edge-Gray

    为保证SAD算法的立体匹配效率,提高匹配精度,提出一种融合边缘特征的立体匹配算法 Edge-gray。通过边缘计算得到边缘特征图,在进行匹配的过程中,根据当前点与领域点的差值确定
    发表于 04-29 11:06 8次下载
    融合边缘特征的<b class='flag-5'>立体匹配</b>算法Edge-Gray

    CREStereo立体匹配算法总结

    立体匹配是计算机视觉的重要领域,通过给定一对经过校正的图像,计算对应像素之间的位移,即视差。
    的头像 发表于 05-16 09:05 2180次阅读
    CREStereo<b class='flag-5'>立体匹配</b>算法总结