sigmoid函数求导过程 bce(sigmoid函数计算公式)

sigmoid函数求导过程 bce(sigmoid函数计算公式)img src http img xjishu com img zl 2013 01 01 194847172319 gif alt 一种利用条件生成对抗网络计算视差的方法与流程 br

大家好,我是讯享网,很高兴认识大家。




讯享网

 <img src="http://img.xjishu.com/img/zl/2013/01/01/94.gif" alt="一种利用条件生成对抗网络计算视差的方法与流程" /><br/><p>本发明涉及一种利用条件生成对抗网络(cgan(conditionalgenerativeadversarialnets))计算视差的方法。</p><p><br/><br/><b>背景技术:</b><br/></p><p>一、立体匹配技术背景:</p><p>1、概念</p><p>立体匹配算法主要是通过建立一个能量代价函数,通过此能量代价函数最小化来估计像素点视差值。立体匹配算法的实质就是一个最优化求解问题,通过建立合理的能量函数,增加一些约束,采用最优化理论的方法进行方程求解,这也是所有的病态问题求解方法。</p><p>2、立体匹配基原</p><p>目前匹配算法中所采用的匹配基元可以分成两大类:</p><p>1)在所有图象像素点上抽取量测描述子</p><p>a、像素灰度值,是最简单、直接,但必须在同一光照条件下获得。</p><p>b、局部区域灰度函数,主要是利用求得在各种大小不同窗口中灰度分布的导数信息,描述像素点周围的结构矢量。</p><p>c、卷积图象符号,利用各种大小算子与图象进行卷积,用灰度梯度局部极大值或极小值作为特征信息,描述整个图像</p><p>2)图像特征</p><p>a、过零点</p><p>b、边缘,由于边缘是图像特征位置的标志,对灰度值的变化不敏感,边缘是图像匹配的重要特征和描述子。</p><p>c、角点,虽然其没有明确的数学定义,但普遍认为的角点,即二维图像亮度变化剧烈的点或边缘曲线上曲率极值点。</p><p>3、主要立体匹配算法分类</p><p>1)根据采用图像表示的基元不同,立体匹配算法分为:</p><p>a、区域立体匹配算法,可获取稠密视差图。基本原理是给定在一幅图像上的某一点,选取该像素点邻域内的一个子窗口,在另一幅图像中的一个区域内,根据某种相似性判断依据,寻找与子窗口图像最为相似的子图,而其匹配的子图中对应的像素点就为该像素的匹配点。</p><p>一般单纯的区域匹配都遇到如下限制:</p><p>1)针对弱纹理或存在重复纹理的区域,匹配结果不好</p><p>2)该算法不适应于深度变化剧烈的场景</p><p>3)对光照、对比度和噪声比较敏感</p><p>4)子窗体的大小很难选择</p><p>缺点:受图像的仿射畸变和辐射畸变影响较大;像素点约束窗口的大小与形状选择比较困难,选择过大,在深度不连续处,视差图中会出现过度平滑现象;选择过小,对像素点的约束比较少,图像信息没有得到充分利用,容易产生误匹配。</p><p>b、基于特征的立体匹配算法,可获得稀疏的视差图,经差值估计可获得稠密视差图。可提取点、线、面等局部特征,也可提取多边形和图像结构等全局特征。</p><p>特征的匹配算法,主要是基于几何特征信息(边缘、线、轮廓、兴趣点、角点和几何基元等),针对几何特征点进行视差估计,所以先要提取图像的特征点,尽而利用这些特征点的视差值信息来重建三维空间场景。</p><p>匹配所需要的主要步骤:图像预处理、提取特征、特征点的匹配获取稀疏视差图,如果想得到稠密的视差图,需要采用插值的方法。</p><p>缺点:特征提取易受遮挡、光线、重复纹理等影响较大;差值估计计算量大</p><p>c、基于相位立体匹配算法,假定在图像对应点中,其频率范围内,其局部相位是相等的,在频率范围内进行视差估计。</p><p>2)依据采用最优化理论方法的不同,立体匹配算法可以分为:</p><p>a、局部的立体匹配算法</p><p>主要是采用局部优化方法进行视差值估计,局部立体匹配算法有sad,ssd等算法,与全局立体匹配算法一样,也是通过能量最小化方法进行视差估计,但是,在能量函数中,只有数据项,而没有平滑项。</p><p>主要分为三类:自适应窗体立体匹配算法、自适应权值的立体匹配算法和多窗体立体匹配算法。</p><p>b、全局的立体匹配算法</p><p>全局立体匹配算法主要是采用了全局的优化理论方法估计视差,建立全局能量函数,通过最小化全局能量函数得到最优视差值。</p><p>全局匹配算法得到的结果比较准确,但是其运行时间比较长,不适合实时运行。主要的算法有图割(graphcuts)、信念传播(beliefpropagation)、动态规划等算法。</p><p>4、评价参数</p><p>立体匹配算法是一个病态问题,一般通过建立能量函数,利用最小化能量函数,和一些约束条件,采用最优化理论方法进行求解方程。</p><p>公认的定量评价参数有:均方根误差(root-mean-squared)和误匹配率(percentageofbadmatchingpixels)</p><p>二、神经网络技术背景</p><p>一个经典的神经网络。图1是一个包含三个层次的神经网络。包括输入层、输出层、中间层(也叫隐藏层)。输入层有3个输入单元,隐藏层有4个单元,输出层有2个单元。</p><p>设计一个神经网络时,输入层与输出层的节点数往往是固定的,中间层则可以自由指定;</p><p>神经网络结构图中的拓扑与箭头代表着预测过程时数据的流向,跟训练时的数据流有一定的区别;</p><p>结构图里的关键不是圆圈(代表“神经元”),而是连接线(代表“神经元”之间的连接)。每个连接线对应一个不同的权重(其值称为权值),这是需要训练得到的。</p><p>1、神经元</p><p>对于神经元的研究由来已久,1904年生物学家就已经知晓了神经元的组成结构。一个神经元通常具有多个树突,主要用来接受传入信息;而轴突只有一条,轴突尾端有许多轴突末梢可以给其他多个神经元传递信息。轴突末梢跟其他神经元的树突产生连接,从而传递信号。这个连接的位置在生物学上叫做“突触”。</p><p>神经元模型是一个包含输入,输出与计算功能的模型。输入可以类比为神经元的树突,而输出可以类比为神经元的轴突,计算则可以类比为细胞核。</p><p>图2是一个典型的神经元模型:包含有3个输入,1个输出,以及2个计算功能。</p><p>中间的箭头线,这些线称为“连接”。</p><p>连接是神经元中最重要的东西。每一个连接上都有一个权重。</p><p>一个神经网络的训练算法就是让权重的值调整到**,以使得整个网络的预测效果最好,权值就是整个神经网络的参数。</p><p>用a来表示输入,用w来表示权值。一个表示连接的有向箭头可以这样理解:在初端,传递的信号大小仍然是a,端中间有加权参数w,经过这个加权后的信号会变成a*w,因此在连接的末端,信号的大小就变成了a*w。</p><p>在其他绘图模型里,有向箭头可能表示的是值的不变传递。而在神经元模型里,每个有向箭头表示的是值的加权传递。</p><p>如果将神经元图中的所有变量用符号表示,并且写出输出的计算公式的话,就是图3:神经元计算示意图。</p><p>可见z是在输入和权值的线性加权和叠加了一个函数g的值。sgn函数,也就是取符号函数。这个函数当输入大于0时,输出1,否则输出0。</p><p>神经元可以看作一个计算与存储单元。计算是神经元对其的输入进行计算功能。存储是神经元会暂存计算结果,并传递到下一层。</p><p>用“神经元”组成网络以后,描述网络中的某个“神经元”时,更多地会用“单元”(unit)来指代。同时由于神经网络的表现形式是一个有向图,有时也会用“节点”(node)来表达同样的意思。</p><p>2、激活函数</p><p>激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。</p><p>1)sigmoid(sgn)</p><p>也称为s形函数,取值范围为(0,1)。sigmoid将一个实数映射到(0,1)的区间,可以用来做二分类。sigmoid在特征相差比较复杂或是相差不是特别大时效果比较好。sigmoid函数定义为:</p><p><imgfile="bda00000051.gif"wi="275"he="119"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/></p><p>sigmoid函数的缺点:</p><p>激活函数计算量大(指数运算),反向传播求误差梯度时,求导涉及除法</p><p>对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练</p><p>2)tanh</p><p>tanh激活函数也称为双切正切函数,取值范围为[-1,1]。tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。tanh函数定义为:</p><p><imgfile="bda00000052.gif"wi="308"he="119"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/></p><p>3)relu</p><p>relu函数定义为:</p><p><imgfile="bda00000053.gif"wi="358"he="151"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/></p><p>relu函数的优点:</p><p>sigmoid等激活函数(指数运算)计算量大,并且在深层网络上容易出现梯度消失问题</p><p>relu计算量小(不涉及除法),一部分神经元的输出为0造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟问题的发生</p><p>对于偏置值,如果用relu的话,最好的办法就是把它们都初始化成小的正值,这样神经元一开始就会工作在relu的非零区域内。</p><p>relu缺点:强制的稀疏处理会减少模型的有效容量(即特征屏蔽太多,导致模型无法学习到有效特征)。</p><p>3、前向传播计算</p><p>图4为前向传播解析图。</p><p>举个例子,假设上一层结点i,j,k,…等一些结点与本层的结点w有连接,那么结点w的值怎么算呢?就是通过上一层的i,j,k等结点以及对应的连接权值进行加权和运算,最终结果再加上一个偏置项(图中为了简单省略了),最后在通过一个非线性函数(即激活函数),如relu,sigmoid等函数,最后得到的结果就是本层结点w的输出。最终不断的通过这种方法一层层的运算,得到输出层结果。</p><p>4、反向传播计算</p><p>反向传播算法简称即bp(backpropagation)神经网络,是监督算法(数据给出标签)。其目标是:通过更新网络中的每一个权重,使得最终的输出接近于真值,这样就得到整个网络的误差作为一个整体进行了最小化。其中反向传播的链式法则的示意图如图5。</p><p>因为反向传播是对非线性可微分函数进行权值训练的多层网络。此算法可以使网络权值收敛到一个解,但并不能保证所求为误差超平面的,由此可能是一个局部最小解。</p><p>由于前向传播最终得到的结果总是有误差的,为减少误差,当前应用广泛的一个算法就是梯度下降算法。</p><p>设最终总误差为e,e对于输出结点yl的偏导数是yl-tl,其中tl是真实值,<imgfile="bda00000061.gif"wi="75"he="126"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/>是上文前向传播中提及的激活函数,zl是上文前向传播提及的权值加权和,那么这一层的e对zl的偏导数为<imgfile="bda00000062.gif"wi="303"he="127"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/>同理,下一层也是这么计算,一直反向传播到输入层,最后有<imgfile="bda00000063.gif"wi="526"he="142"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/>然后调整这些过程中的权值,再不断进行前向传播和反向传播的过程,最终得到一个比较好的结果。</p><p>5、损失函数(lossfunction)</p><p>损失函数,是用来计算一次前向计算或反向计算的误差,不同的损失函数有不同的效果。</p><p>1)softamxcrossentropylossfunction(softmax交叉熵损失函数)</p><p>softmax交叉熵损失函数是我们常用的一种利用条件生成对抗网络计算视差的方法损失函数,其公式如下:</p><p><imgfile="bda00000071.gif"wi="428"he="113"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/></p><p>其中,t和y分别表示神经网络的目标标签和输出,yj表示softmax损失函数:</p><p><imgfile="bda00000072.gif"wi="541"he="150"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/></p><p>需要注意的一点就是使用本目标损失函数的时候不要在网络的最后一层使用softmax层或者激活函数,会导致结果不正确。</p><p>2)categoricalcrossentropy(交叉熵损失函数)</p><p>交叉熵损失函数是也是常用的一种利用条件生成对抗网络计算视差的方法损失函数,它表示预测值y与目标值t之间的距离。主要应用在互相排斥的分类任务中,公式为:</p><p><imgfile="bda00000073.gif"wi="590"he="103"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/></p><p>3)binarycrossentropy(二值交叉熵损失函数)</p><p>这个损失函数主要是用来计算预测值y与目标值t之间的sigmoid交叉熵,主要用来多分类任务中,但是这个分类任务不是互斥的,和上面的损失函数不同,这个对同一个输入可以输出多个标签。公式为:</p><p>y-y*t+log(1+e<sup>-y</sup>)</p><p>为了防止溢出,进行如下变换:</p><p>max(y,0)-y*t+log(1+e<sup>-|y|</sup>)</p><p>4)weightedcrossentropy(加权交叉熵损失函数)</p><p>主要用来计算神经元之间的权值的交叉熵损失函数,t表示目标标签,y表示输入的预测值。该损失函数和上一个损失函数很像,唯一一点不同的就是:</p><p>该损失函数允许对负误差或者正误差加权来调整精确度。</p><p>一般的交叉损失函数为:</p><p>t*-log(sigmoid(y))+(1-t)*-log(1-sigmoid(y))</p><p>当乘上权值pos_weight之后的公式就变成:</p><p>t*-log(sigmoid(y))*pos_weight+(1-t)*-log(1-sigmoid(y))</p><p>为了避免溢出,我们将公式变为:</p><p>(1-t)*y+l*(log(1+e<sup>-|y|</sup>))+max(-y,0)</p><p>其中,l表示:</p><p>l=(1+(pos_weight-1)*t)</p><p>5)meansquareloss</p><p>这个损失函数就很常见,t表示目标值,y表示预测值输出。公式为:</p><p><imgfile="bda00000081.gif"wi="414"he="127"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/></p><p>6)hingeloss</p><p>这个也是很常见的一个损失函数(loss函数),t表示目标值,y表示预测值输出。公式为:</p><p>l(y)=max(0,1-t*y)</p><p>三、cgan网络技术背景</p><p>机器学习方法可以分为生成方法(generativeapproach)和判别方法(discriminativeapproach),所学到的模型分别称为生成式模型(generativemodel)和判别式模型(discriminativemodel)。</p><p>1、生成式模型(generativemodel)</p><p>生成式模型(generativemodel)会对样本x和标签y的联合概率分布p(x,y)进行建模,然后通过贝叶斯公式来求得条件概率p(y|x)的模型,即在样本为x的情况下,标签为y的概率,最后选取使得p(y|x)最大的yi,即在样本为x的情况下,预测为标签yi的概率最大。即:</p><p><imgfile="bda00000082.gif"wi="700"he="56"img-content="drawing"img-format="gif"orientation="portrait"inline="no"/></p><p>生成式模型的优点:</p><p>1)一般来说,生成式模型都会对数据的分布做一定的假设,比如朴素贝叶斯会假设在给定y的情况下各个特征之间是条件独立的,当数据满足这些假设时,生成式模型通常需要较少的数据就能取得不错的效果。</p><p>2)生成式模型需要更少的训练样本就可以使错误率收敛</p><p>3)生成式模型更容易拟合,比如在朴素贝叶斯中只需要计下数就可以。</p><p>4)当添加新的类别时,生成式模型不需要全部重新训练,只需要计算新的类别y和x的联合分布p(y,x)即可。</p><p>5)生成式模型可以更好地利用无标签数据(比如dbn)。</p><p>2、判别式模型</p><p>判别式模型(discriminativemodel)是对x和y的条件概率p(y|x)进行建模。由生成式模型可以得到判别式模型,反之则不可以。</p><p>判别式模型的优点:</p><p>1)分类边界更灵活,比使用纯概率方法或产生式模型更高级;</p><p>2)能清晰的分辨出多类或某一类与其他类之间的差异特征;</p><p>3)适用于较多类别的识别;</p><p>4)判别模型的性能比产生式模型要简单,比较容易学习。</p><p>现有技术的缺点是:</p><p>1)随机初始化两张图片的视差图,导致匹配错误率高;</p><p>2)匹配速度慢。</p><p><br/><br/><b>技术实现要素:</b><br/></p><p>为解决上述技术问题,本发明提出一种利用条件生成对抗网络计算视差的方法,提升立体匹配的正确率和匹配速率。</p><p>为达到上述目的,本发明采用以下技术方案:</p><p>一种利用条件生成对抗网络计算视差的方法,先训练一个神经网络计算左右眼图像的视差,训练完成后,该神经网络作为条件生成对抗网络的生成器;然后训练另一个神经网络判断视差图的正确性,训练完成后,该神经网络作为条件生成对抗网络的判别器;在训练本发明的条件生成对抗网络时,生成器生成左右眼图像的视差图,判别器判别该视差图的正确率;判别器就相当于生成器的损失函数,根据判别器的判别结果,调节生成器网络的权值;训练完成后,生成器的网络权值调整到**,将生成器分离出来,此时的生成器就是能生成左右眼图像视差图的**神经网络。</p><p>本发明与现有技术相比的有益效果在于:通过上述操作,得到的**神经网络结构较简单,再使用gpu加速计算,可以提高现有的匹配速度。</p><p>附图说明</p><p>图1是现有技术中一个包含三个层次的神经网络示意图。</p><p>图2是现有技术中一个典型的神经元模型。</p><p>图3是现有技术中神经元计算示意图。</p><p>图4是现有技术中前向传播解析图。</p><p>图5是现有技术中反向传播的链式法则的示意图。</p><p>图6是本发明实施例网络结构示意图。</p><p>图7是本发明实施例生成器结构示意图。</p><p>图8、9、10分别是本发明实施例判别器三种结构示意图。</p><p>具体实施方式</p><p>下面对照附图并结合优选的实施方式对本发明作进一步说明。</p><p>下述实施例中,训练数据采用的是训练数据库采用kitti_2015stereodataset。</p><p>kitti2015stereodataset数据集由800对立体图像组成,包括400对训练图像和400对测试图像(相对应的左右眼图像,称为一对图像)。在400对训练图像中,每一对图像都有对应的真值视差图。</p><p>1、条件生成对抗网络结构的设计与训练</p><p>下图6就是本发明的条件生成对抗网络结构,按照此网络结构进行训练。</p><p>训练该条件生成对抗网络计算视差图,首先通过一个提前训练好的生成器(图7所示),生成左眼和右眼图像的初始视差图,然后,将左右眼图像和生成器生成的初始视差图,通过一个提前训练好的判别器,判别器有三种结构(图8、图9、图10所示)计算该视差图的正确率,最终的正确率是这三种结构输出的正确率的加权和。</p><p>训练该条件生成对抗网络时,原生成器的损失函数,由提前训练好的判别器替代,即,根据判别器判别的正确率,调整生成器的网络权值。条件对抗网络训练完成后,单独取出调节好参数的生成器,此时的生成器参数,就是计算左右眼视差图的**网络参数,此时的生成器网络,就是计算左右眼视差图的**网络。</p><p>2、生成器网络结构的设计和训练</p><p>生成器的网络结构如下图7所示。生成器需要在训练条件生成对抗网络之前提前训练。生成器训练前后,网络结构不会改变,训练调整的是网络参数值,即,神经元之间连接的权值。</p><p>训练生成器时,输入是左右眼图像,输出是视差图,将生成的视差图与真值视差图的误差,调整生成器网络的权值。训练完成后,该生成器网络就能根据输入的左右眼图像,输出一张较好的视差图。提前训练生成器是为了在训练生成对抗网络时得到更好的初始视差图。</p><p>生成器的作用是得到左右眼图像的视差图,生成器网络采用的是四层卷积的孪生网络(siamesenetwork),生成器需要提前单独训练。</p><p>首先,取左右图像大小相同的图像块,训练数据中,左右图像对应的真值视差图,也去相同大小的图像块。本发明取3*3或者5*5大小,取图像块进行训练的目的这样可以大幅度的提高训练数据量,训练的效果会提高;</p><p>每个卷积层,采用32或者64种卷积核。经过四层卷积后,将两个图像块的卷积结果相乘,得到两个图像块的匹配概率。</p><p>3、判别器网络结构的设计和训练</p><p>判别器网络三种结构如下图8、图9、图10所示。判别器也需要提前训练,训练判别器时,输入的是左右眼图像和它们的视差真值,输出的是该视差真值的正确率。判别器训练前后网络结构不变,训练调整的是网络参数值,即,神经元之间连接的权值。提前训练判别器是为了让判别器学习,尽量得到与视差真值相同的视差图。</p><p>判别器训练时,是将真值视差图分别分成70*70、1*1、16*16、256*256四种大小的块,与对应的左右眼图像块进行训练,相应的得到四种正确率,加权和得到最终的正确率,权值分别是四种图像块占整个图像的比例。四种大小的图像块对应3种判别器网络结构,其中70*70的图像块对应图8的判别器网络结构,16*16和1*1大小的图像块对应图9的判别器网络结构,256*256大小的图像块对应图10的判别器网络结构。其中卷积(convolution)用c表示,例如,c1代表第一层卷积,c1-64代表第一层卷积有64种卷积核。</p><p>本发明上述实施例的优点和效果是:</p><p>1)首次应用生成对抗网络计算左右眼图像的视差图,判别器替代了传统神经网络的人工定义的损失函数,本网络的损失函数通过训练得到,自适应程度大大提升,提高了视差图的准确率。</p><p>2)训练完成后,生成器就成为了计算视差图的**网络,采用gpu加速,计算速度得以提升。</p><p>以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的技术人员来说,在不脱离本发明构思的前提下,还可以做出若干等同替代或明显变型,而且性能或用途相同,都应当视为属于本发明的保护范围。</p> <br><b>技术特征:</b><br/><br/><b>技术总结</b><br>本发明公开了一种利用条件生成对抗网络计算视差的方法,先训练一个神经网络计算左右两张图片的视差,训练完成后,该神经网络作为条件生成对抗网络的生成器;然后训练另一个神经网络判断视差图的正确性,训练完成后,该神经网络作为条件生成对抗网络的判别器;在训练本发明的条件生成对抗网络时,生成器生成左右眼图像的视差图,判别器判别该视差图的正确率;根据判别器的判别结果,调节生成器网络的权值;训练完成后,生成器的网络权值调整到**,将生成器分离出来,此时的生成器就是能生成左右眼图像视差图的**神经网络。通过上述操作,得到的**神经网络结构较简单,再使用GPU加速计算,可以提高现有的匹配速度。<br/><br/><b>技术研发人员:</b>唐婷;卢宗庆;郑伟亮;廖庆敏;吴凌綦<br/><b>受保护的技术使用者:</b>清华大学深圳研究生院<br/><b>技术研发日:</b>2017.07.17<br/><b>技术公布日:</b>2017.11.17 

讯享网
小讯
上一篇 2025-05-10 11:01
下一篇 2025-04-30 18:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/198563.html