一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于CGANs的立体匹配方法与流程

2021-10-24 11:31:00 来源:中国专利 TAG:匹配 方法 对抗 深度 生成

一种基于cgans的立体匹配方法
技术领域
1.本发明属于计算机视觉领域、深度学习技术领域,具体涉及一种基于cgans的立体匹配方法,cgans(conditional generative adversarial networks)是指条件生成对抗网络。


背景技术:

2.立体匹配在计算机视觉方向的众多应用中起到了至关重要的作用,例如机器人导航、自动驾驶、增强现实、手势识别、三维重建、军事侦察和维修检测。计算机视觉的目的是模仿人类利用视觉系统对三维场景中物体远近的感知。而立体匹配可以根据二维图像得到三维场景中的深度信息。立体匹配作为计算机视觉中关键的研究方向之一,它首先在两幅不同视点下的相机视图中对相关像素点进行匹配,然后计算相关像素点在水平位移上的差值来求取视差,最后通过数学模型得到深度信息。因为两个相关像素点之间的视差与深度信息存在比例关系,所以可以通过数学变换来合理的将获取深度信息的任务转换为计算视差的任务。立体匹配中一直存在遮挡、光照和弱纹理等问题,以往的各类算法都在致力于解决这些问题从而提高预测视差的精确度。
3.算法可以分传统的立体匹配算法和端到端的立体匹配算法两类。第一类传统的立体匹配算法包括匹配代价计算、代价聚合、视差计算和视差精细化四个步骤。但是这样分而治之的方法存在问题,一是增加超参数的数量;二是使立体匹配的实现过程变得繁琐;三是划分步骤的方法也不一定得到最好的结果,因为组合子问题的最优解不等于全局最优解;四是单个像素点的关联范围在计算视差的时候会受到聚合窗口的限制。第二类是端到端的立体匹配算法。深度学习作为人工智能与机器学习的关键研究领域之一,在计算机视觉方向取得了显著的成果。为了解决传统的立体匹配算法由于划分步骤而带来的问题,可以通过深度学习构造一个端到端系统来合并四个步骤。深度学习是一种训练多层神经网络的方法,它的训练过程是首先将训练数据输入到第一层神经元,通过非线性激活方法获取该层权重,然后这层神经元输出的数据作为输入传递到下一层继续获取对应层的权重,而权重的取值会根据学习进度的推进不断更新,最后得到合理的权重也就是学习到数据的分布式特征表示。深度学习中端到端的思想实现了一端输入数据,另一端直接输出结果的过程,这样可以改善人工设计带来的缺点。在端到端的深度神经网络中,每一层神经元进行语义信息的融合后产生的特征可以降低每一个像素点在预测视差时的独立性。因此端到端的立体匹配算法是指,通过输入两幅左右相机视图以输出对应的视差图,把中间的特征学习和信息融合都交给深度学习处理。
4.虽然以往的端到端的立体匹配算法解决了传统方法因为分步实现而存在的问题,但它们的本质是通过计算匹配点形成代价量,但对像素点与像素点的匹配不一定符合理想情况,会导致精度上的损失。同时,它们大部分都用到了3d卷积用来处理代价量,这样会导致计算成本十分高昂。


技术实现要素:

5.发明目的
6.本发明针对传统立体匹配算法因为分而治之带来的问题,和3d卷积处理代价量而导致计算成本高昂的问题,提供一种基于cgans的立体匹配方法。
7.技术方案
8.一种基于cgans的立体匹配方法,该方法包括:
9.图像输入:输入两幅左右相机视图和真实值,将其中的左图像和右图像分别作为参考图像和目标图像,而真实值作为标签对应左图像;
10.特征提取:使用伪孪生网络对输入的两幅左右相机视图分别进行特征提取,并且以通道维度融合提取到的特征;
11.生成视差图:融合后的特征作为cgans中的条件让生成器与判别器共享,生成器生成视差图;
12.鉴别真假:提取得到融合后的特征与真实值或生成的视差图一起输入到判别器中,然后判别器鉴别输入的样本是生成样本还是真实值;
13.训练模型:生成的视差图与真实值的误差以及判别器输出的结果用来引导网络模型学习。
14.进一步地,两幅左右相机视图输入之后要进行尺寸为256*256的剪裁操作,然后判断两幅图像的通道数是否为3,如果是就进行下一步操作,否则报错。
15.进一步地,处理输入为两幅图像的情况时,采用伪孪生网络的方法。算法中所使用的伪孪生网络由两支结构相同但权重不同的卷积神经网络构成。而提取到两个图像的特征输入到下一个模块之前需要变为一个输入,因此需要在通道维度上叠加。
16.进一步地,融合后的特征设置为cgans中的条件,该条件输入到生成器中的u

net。而u

net作为编码器解码器网络,会对输入进行下采样和上采样的操作从而生成一幅通道数为1的视差图。
17.进一步地,特征提取以通道维度叠加后结果作为条件与真实值或u

net输出结果一起输入到判别器中,判别器是通过卷积神经网络处理鉴别真或假的二分类问题,即输出一个概率值来表明输入样本是真实值还是生成样本。
18.进一步地,u

net生成的视差图通过l1传统损失函数计算与真实值之间的误差。l1传统损失函数如下:
[0019][0020]
其中,e
x,y
是指x符合训练数据分布和y符合真实值分布的期望,x为生成器g中的输入也是与判别器d共享的条件,g(x)是生成样本,y是真实值。
[0021]
判别器d对真实值y或生成样本g(x)的判断结果用来计算cgans的损失函数。cgans的损失函数如下:
[0022][0023]
其中,e
x
是指x符合训练数据分布的期望。
[0024]
而这两种损失函数一起通过adam优化方法进行梯度更新从而引导整个网络模型的训练。在训练网络的过程中,生成器g需要最小化损失函数而判别器d则需要最大化损失
函数。因此算法中使用的cgans最终的损失函数g
*
表示如下:
[0025][0026]
优点及效果
[0027]
为了获得较高精度的视差信息,解决传统立体匹配算法因为分而治之带来的问题,同时通过更好的方法代替以往需要3d卷积的端到端算法来预测视差,降低计算成本。本发明提供了一种基于cgans的立体匹配方法;本发明从深度学习中端到端的思想将传统立体匹配方法中四个步骤合为一个步骤,简化立体匹配算法的步骤且解决分而治之带来的问题。而相比以往的同类端到端算法,对于两张相似图片的处理采用伪孪生网络,消除了这部分卷积神经网络对后续u

net学习带来的负面影响。将cgans中对条件的设置从左右相机视图改为伪孪生网络提取到的特征图,从而减少了训练模型的参数量和降低了计算成本。对于cgans中生成器的选择,使用学习高层语义信息能力较好且具有跳层连接的u

net,以生成精度更高且效果更好的视差图。同时对u

net的网络结构进行调整,介于计算量和视差图的精确度之间找到了相对合适的层数设置。
[0028]
本发明方法采用cgans生成视差图来完成预测视差的任务,在提升一定精确度的情况下减少了对内存和时间的消耗,降低了计算成本,简化了立体匹配算法的实现过程。
附图说明
[0029]
图1为本发明提供的一种基于cgans的立体匹配方法网络结构图。
[0030]
图2为本发明提供的一种基于cgans的立体匹配方法的逻辑流程图。
具体实施方式
[0031]
下面结合附图对本发明做进一步的说明:
[0032]
实施例
[0033]
一种基于cgans的立体匹配方法,该方法包括:
[0034]
图像输入:输入两幅左右相机视图和真实值,将其中的左图像和右图像分别作为参考图像和目标图像,而真实值作为标签对应左图像;如图1所示。
[0035]
特征提取:使用伪孪生网络对输入的两幅左右相机视图分别进行特征提取,并且以通道维度融合提取到的特征;
[0036]
与以往的图像生成任务不同的是:对于双目立体匹配任务,输入不再是一幅图片而是两幅左右相机视图。对两幅左右相机视图进行输入处理的方法通常有两种,一是直接将两张原始图像在通道维度上进行堆叠,二是借鉴孪生网络,即使用结构相同且权重共享的两支卷积神经网络对输入分别进行特征的提取然后再融合这些特征。这两种方法虽然可以交给后续网络去学习数据分布,但是第一种方法会对特征学习产生不利影响,使得生成器g生成视差图的效果存在一定的局限性。第二种采用孪生网络的方法因为对像素点的相关性有所涉及而影响后续网络学习,而且会在一定程度上忽略求取视差时对左右相机视图微小差异的关注。
[0037]
所以为了改进效果,可以在生成器g的网络结构中通过权重不同的两个神经网络分支来实现特征提取,即伪孪生网络。这样不仅可以消除这一步计算相关性带来的影响,保留预测视差时对左右相机视图微小差异的关注,还可以降低后续网络学习的难度。
[0038]
将剪裁成尺寸大小为256*256的左右相机视图分别输入到两支结构相同但权重不同的卷积神经网络中进行特征提取的处理。作为输入的两幅图像分别经过两层输出通道数为64的卷积模块,然后经过三层输出通道数为128的卷积模块,图像大小一直保持为256*256。这部分卷积神经网络所使用的卷积模块由大小为3*3、步长为1和填充为1的卷积层,bn层和leakyrelu激活函数层组成。
[0039]
bn层是调用批量归一化(batch normalization)正则化方法。因为cgans学习的过程就是捕捉训练数据的分布规律的过程,但每次处理的图片分布规律在数值的表现方式上有所差异,这样不利于网络模型进行学习。所以可以利用深度学习中常见的批量归一化方法来统一输入数据的取值范围到区间[

1,1]内。这样除了解决网络模型学习困难这个问题,还有利于反向传播的梯度更新、对leakyrelu激活函数非线性的利用、加快网络收敛的速度和降低网络对调节超参数带来的敏感度。使用批量归一化时的具体处理方式是在卷积层之后基于批量数据(batch size)减去逐通道计算出的均值再除以标准差,而在训练中对图像进行除以标准差的操作时为了减少计算量可以将除数直接替换成数值255,即代表rgb最大通道数的8位无符号整型最大值。
[0040]
leakyrelu函数数学表达式如下,其中a
i
是(0, ∞)区间的固定参数,设置为0.2;x
i
表示输入到函数中的数值;y
i
表示函数的输出。
[0041][0042]
对两幅图像分别提取的特征在通道维度上叠加。作为生成器g的输入和判别器d的条件。
[0043]
生成视差图:融合后的特征作为cgans中的条件让生成器与判别器共享,生成器生成视差图;
[0044]
cgans中生成器和判别器共享的条件,是从两幅左右相机视图中利用伪孪生网络中的卷积层提取出更有分辨力的高层特征,来替代原始的图像像素条件。
[0045]
为了提高生成结果的精确度,这就需要解决立体匹配中存在的遮挡、光线和弱纹理等问题。而其中的关键在于学习高层语义信息,因此需要选择合适的网络作为cgans中的生成器,而编码器解码器结构的网络有能力处理这些问题。编码器处理轮廓、颜色、边缘、纹理和形状等低层特征,不断提取特征、缩小图片和增加感受野大小,解码器还原图像,处理利于理解和具有复杂语义的高层特征。u

net作为编码器解码器结构的网络之一,相比其他网络在生成视差图任务上存在优势。传统的cgans生成模型网络结构中要求所有数据信息从输入到输出要流过每一层,这无疑会加长训练的时间。对于立体匹配任务来说,输入的两幅左右相机视图和生成的视差图虽然需要经过复杂的转化,但两者的结构大致上是相同的,因此它们之间共享的低层语义信息是非常重要的。在特征学习的过程中防止这些信息的丢失和进行多余的转换操作,可以针对立体匹配的需求来调整特征学习模块的网络结构。而网络结构中具有跳层连接的u

net不仅能够实现输入输出之间的信息共享,也一定程度上避免了采用传统的cgans网络结构时带来的资源浪费。换一句话说,生成器网络的工作是将伪孪生网络提取到的特征在通道维度上融合后,交给u

net来学习并生成视差图。
[0046]
u

net对于输入的处理,会进行8次下采样和8次上采样的操作。下采样时所使用的
卷积模块是由大小为3*3、步长为2和填充为1的卷积层、bn层与leakyrelu激活函数层组成。上采样时所使用的卷积模块前七层是由大小为3*3、步长为2和填充为1的反卷积层,bn层与relu激活函数层组成,relu激活函数的数学表达式如下:
[0047][0048]
上采样的最后一层也就是输出层会将激活函数替换成tanh函数,该函数的数学表达式如下:
[0049][0050]
其中,e
x
是指输入值进行指数函数运算,e

x
是指输入值取负值后进行指数函数运算。
[0051]
输入进来的数据会经过3个输出通道数为256的卷积模块,5个输出通道数为512的卷积模块。在进行下采样的过程中,输入图像的长和宽每经过一个卷积模块都会缩小一半,从最初的128*128的大小在下采样过程结束时变为1*1。而在进行上采样的过程中,数据会经过4层输出通道数为512和3层输出通道数为256的反卷积模块,而数据在处理过程中,会利用u

net的跳层连接在通道维度上与下采样中相对应层的输出结果进行叠加,然后再输入到反卷积模块。而图像的长和宽每经过一个反卷积模块会扩大一半,从尺寸1*1逐渐调整为输出视差图时所需要的256*256大小,进行这样的处理是为了和步骤一中输入图像的尺寸保持一致。
[0052]
鉴别真假:真实值或生成的视差图与条件一起输入到判别器中,然后判别器鉴别输入的样本是生成样本还是真实值;
[0053]
对于判别器网络,不再使用原始的左右相机视图作为和生成器共享的条件,而是将条件的设置替换成伪孪生网络对两幅左右视图提取的特征图。条件与生成样本或真实样本在通道维度上堆叠后输入到四层输出通道数为64、128、256和512的卷积模块,然后利用输出通道数为1的输出层卷积模块输出一个概率值表明判别器的判断结果。判别器中所使用的前四层卷积模块在结构上和步骤三中u

net下采样时采用的卷积模块保持一致,而最后一层输出层卷积模块由大小为3*3、步长为2和填充为1的卷积层,sigmoid激活函数层组成。使用sigmoid函数是为了处理输入样本是真是假的二分类问题。sigmoid函数的数学表达式如下:
[0054][0055]
其中σ(x)是指代sigmoid函数的输出值。
[0056]
训练模型:生成的视差图与真实值的误差以及判别器输出的结果用来引导网络模型学习。
[0057]
训练时是先进行一次生成器g的训练然后是判别器d的训练,而提取两幅左右相机视图特征的伪孪生网络是和u

net一起训练的,以此循环直到训练结束。整个训练就是生成器g与判别器d进行博弈的过程,生成器g希望让u

net生成的视差图欺骗过判别器d,也就是让判别器d将生成样本鉴别为真,所以生成器g竭力最小化损失函数。而判别器d想提升自己
鉴别出生成样本为假的能力,所以判别器d竭力最大化损失函数。训练过程会在生成器g和判别器d都取得最优解的时候停止训练,理论上是达到纳什平衡。
[0058]
而关于训练的详细过程,就是通过损失函数来引导整个网络模型的训练,即依靠优化方法对梯度进行更新,梯度不断下降从而去接近最优解来更新权重参数。而关于权重参数,涉及权值初始化和优化方法两方面。
[0059]
权值初始化是为了让网络模型在数值空间中去寻求全局最优解的时候有一个较好的初始位置,这样有利于网络模型学习时候更好更快的收敛。卷积层的权值初始化时采用均值为0,方差为0.02的随机正态分布。
[0060]
网络模型搜索最优解的过程可以称作优化。优化时采用的方法是对梯度下降法改进的adam方法,使用adam方法的原因在于只要设置好初始的一些相关超参数的数值,它会自动调节学习率来帮助网络模型学习时更好更快的收敛。
[0061]
u

net生成的视差图通过l1损失函数计算与真实值之间的误差;l1传统损失函数如下:
[0062][0063]
其中,e
x,y
是指x符合训练数据分布和y符合真实值分布的期望,x为生成器g中的输入也是与判别器d共享的条件,g(x)是生成样本,y是真实值;
[0064]
判别器d对真实值y或生成样本g(x)的判断结果用来计算cgans的损失函数;cgans的损失函数如下:
[0065][0066]
其中,e
x
是指x符合训练数据分布的期望。而这两种损失函数一起通过优化方法进行梯度更新从而引导整个网络模型的训练;在训练网络的过程中,生成器g需要最小化损失函数而判别器d则需要最大化损失函数;为了平衡cgan损失项和l1损失项加入超参数λ:因此算法中使用的cgans最终的损失函数g
*
表示如下:
[0067][0068]
其中g
*
为损失函数,λ是为了平衡cgan损失项和l1损失项加入的超参数。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献

  • 日榜
  • 周榜
  • 月榜