深度特征融合理解add和concat之多层特征融合_第1页
深度特征融合理解add和concat之多层特征融合_第2页
深度特征融合理解add和concat之多层特征融合_第3页
深度特征融合理解add和concat之多层特征融合_第4页
深度特征融合理解add和concat之多层特征融合_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深度特征融合---理解add和concat之多层特征融合一、如何理解concat和add的方式融合特征在各个网络模型中,ResNet,FPN等采用的element-wiseadd来融合特征,而DenseNet等则采用concat来融合特征。那add与concat形式有什么不同呢?事实上两者都可以理解为整合特征图信息。只不过concat比拟直观,而add理解起来比拟生涩。从图中可以发现,concat是通道数的增加;add是特征图相加,通道数不变你可以这么理解,add是描述图像的特征下的信息量增多了,但是描述图像的维度本身并没有增加,只是每一维下的信息量在增加,这显然是对最终的图像的分类是有益的。而concatenate是通道数的合并,也就是说描述图像本身的特征数〔通道数〕增加了,而每一特征下的信息是没有增加。concat每个通道对应着对应的卷积核。而add形式则将对应的特征图相加,再进行下一步卷积操作,相当于加了一个先验:对应通道的特征图语义类似,从而对应的特征图共享一个卷积核〔对于两路输入来说,如果是通道数相同且后面带卷积的话,add等价于concat之后对应通道共享同一个卷积核〕。因此add可以认为是特殊的concat形式。但是add的计算量要比concat的计算量小得多。另解释:对于两路输入来说,如果是通道数相同且后面带卷积的话,add等价于concat之后对应通道共享同一个卷积核。下面具体用式子解释一下。由于每个输出通道的卷积核是独立的,我们可以只看单个通道的输出。假设两路输入的通道分别为X1,X2,…,Xc和Y1,Y2,…,Yc。那么concat的单个输出通道为〔*表示卷积〕:而add的单个输出通道为:因此add相当于加了一种prior,当两路输入可以具有“对应通道的特征图语义类似〞〔可能不太严谨〕的性质的时候,可以用add来替代concat,这样更节省参数和计算量〔concat是add的2倍〕。FPN[1]里的金字塔,是希望把分辨率最小但语义最强的特征图增加分辨率,从性质上是可以用add的。如果用concat,因为分辨率小的特征通道数更多,计算量是一笔不少的开销Resnet是做值的叠加,通道数是不变的,DenseNet是做通道的合并。你可以这么理解,add是描述图像的特征下的信息量增多了,但是描述图像的维度本身并没有增加,只是每一维下的信息量在增加,这显然是对最终的图像的分类是有益的。而concatenate是通道数的合并,也就是说描述图像本身的特征增加了,而每一特征下的信息是没有增加。通过keras代码,观察了add对参数的影响,以及concat操作数组的结果。二、concat实操Concat层解析在channel维度上进行拼接,在channel维度上的拼接分成无BN层和有BN层。〔1〕无BN层:直接将deconvolutionlayer和convolutionlayerconcat。实验结果说明,该方式取得的结果精度较低,低于原有的VGG模型,分析主要的原因是漏检非常严重,原因应该是concat连接的两层参数不在同一个层级,类似BN层用在eltwise层上。〔2〕有BN层:在deconvolutionlayer和convolutionlayer后面加batchnorm和scale层〔BN〕后再concat。实验结果说明,该方式取得了比原有VGG模型更好的检测效果〔表中的迭代次数还没有完哦〕,增加了2%的精度,但是速度上慢了一些。总结:concat层多用于利用不同尺度特征图的语义信息,将其以增加channel的方式实现较好的性能,但往往应该在BN之后再concat才会发挥它的作用,而在num维度的拼接较多使用在多任务问题上,将在后续的博客中介绍,总之concat层被广泛运用在工程研究中。三、concat与add实例3.1Densenet与inception的加宽网络结构以及ResNet的加深网络结构不同,DenseNet着重于对每一层featuremaps的重复利用。在一个Denseblock中,每一个卷积层的输入都是前几个卷积层输出的concatenation(拼接),这样即每一次都结合了前面所得到的特征,来得到后续的特征。但是,其显存占用率高的缺点也比拟明显〔因为concatenation,不过好在后续有了解决方法:〔论文〕Memory-EfficientImplementationofDenseNets〕。DenseNet优势:〔1〕解决了深层网络的梯度消失问题〔2〕加强了特征的传播〔3〕鼓励特征重用〔4〕减少了模型参数〔5〕能够减少小样本的过拟合问题DensNet缺点:〔1〕非常消耗显存Densnet根本结构DenseNet的网络根本结构如上图所示,主要包含DenseBlock和transitionlayer两个组成模块。其中DenseBlock为稠密连接的highway的模块,transitionlayer为相邻2个DenseBlock中的那局部。DenseBlock结构上图是一个详细的DenseBlock模块,其中层数为5,即具有5个BN+Relu+Conv(3*3)这样的layer,网络增长率为4,简单的说就是每一个layer输出的featuremap的维度为4。由于DenseNet的每一个DenseBlock模块都利用到了该模块中前面所有层的信息,即每一个layer都和前面的layer有highway的稠密连接。假设一个具有L层的网络,那么highway稠密连接数目为L*(L+1)/2。和Resnet不同的是,这里的连接方式得到的featuremap做的是concat操作,而resnet中做的是elementwise操作。DenseNet降维highway的稠密连接方式具有诸多的优势,增加了梯度的传递,特征得到了重用,甚至减少了在小样本数据上的过拟合。但是随之产生2个缺点:〔1〕DenseBlock靠后面的层的输入channel过大—每层开始的时候引入Bottleneck:这里假设第L层输出K个featuremap,即网络增长率为K,那么第L层的输入为K0+K*(L-1),其中K0为输入层的维度。也就是说,对于DenseBlock模块中每一层layer的输入featuremap时随着层数递增的,每次递增为K,即网络增长率。那么这样随着DenseBlock模块深度的加深,后面的层的输入featuremap的维度是很大的。为了解决这个问题,在DenseNet-B网络中,在DenseBlock每一层开始的时候参加了Bottleneck单元,即1x1卷积进行降维,被降到4K维(K为增长率)。〔2〕DenseBlock模块的输出维度很大—transitionlayer模块中参加1*1卷积降维每一个DenseBlock模块的输出维度是很大的,假设一个L层的DenseBlock模块,假设其中已经参加了Bottleneck单元,那么输出的维度为,第1层的维度+第2层的维度+第3层的维度+****第L层的维度,加了Bottleneck单元后每层的输出维度为4K,那么最终DenseBlock模块的输出维度为4KL。随着层数L的增加,最终输出的featuremap的维度也是一个很大的数。为了解决这个问题,在transitionlayer模块中参加了11卷积做降维。其中,DenseNet-B在原始DenseNet的根底上,在DenseBlock模块的每一层都参加了1*1卷积,使得将每一个layer输入的featuremap都降为到4k的维度,大大的减少了计算量。DenseNet-BC在DenseNet-B的根底上,在transitionlayer模块中参加了压缩率θ参数,论文中将θ设置为0.5,这样通过1*1卷积,将上一个DenseBlock模块的输出featuremap维度减少一半。附:tensorflow下实现DenseNet对数据集cifar-10的图像分类3.2Feature-FusedSSD:FastDetectionforSmallObjects这里我们尝试了两种融合策略:conca

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论