欢迎来到KB体育公司
基于PyTorch的卷积神经网络经典BackBone(骨干网KB体育官网app下载络)复现
栏目:行业动态 发布时间:2023-09-17 09:21:40

  卷积神经网络的发展,从上个世纪就已经开始了,让时间回到1998年,在当时,Yann LeCun 教授提出了一种较为成熟的卷积神经网络架构,现在被誉为卷积神经网络的“HelloWorld”,但由于当时计算机算力的局限性以及支持向量机(核学习方法)的兴起,CNN方法并不是当时学术界认可的主流方法。时间推移到14年后,随着以高出第二名约10%的accuracy rate成为了2012年ImageNet图像识别竞赛的第一名,深度学习以及卷积神经网络的研究热潮被彻底引爆,从此CNN进入了飞速发展的阶段,从无人问津到一度成为计算机视觉的主流框架,在此之后,各种基于CNN的图像识别网络开始大放异彩。各种CNN网络层出不穷。

  本次博客将介绍如今图像识别领域十分经典的一些CNN网络,虽然现在卷积网络框架也随着研究的深入变得越来越复杂,但我们仍然可以在一些最新的网络结构中发现它们的身影,这些经典CNN网络有时候是整个算法提取特征的骨架(特征的质量往往直接影响到分类结果的准确度,表达能力更强的特征也能给模型带来更强的分类能力),因此又称为“Backbone”(骨干网络)。

  本次博客基于代码实战复现经典的Backbone结构,并基于PyTorch分享一些网络搭建技巧。

  引入了Inception模块作为网络的基础模块,整体的网络基于基础模块的堆叠;在模块中使用了通道拼接(Concat)的方法对不同卷积核提取的特征进行拼接

  Inception基础的模块如图所示,使用3个不同尺寸的卷积核进行卷积运算,同时还包括一个最大池化,最后将这四个部分输出的结果进行通道拼接,传给下一层:

  上图这个结构有一个弊端,即模块中一个分支的输入通道数就是前一个模块所有分支输出通道数之和(通道合并),在多个模块堆叠后计算的参数量将会变得十分巨大,为了解决这个问题,作者在每一个分支的卷积层之前单独加了一个1x1卷积,来进行通道数的降维

  我们或许会有一个疑问,为什么不在3x3或5x5卷积输出上直接降维特征,而非得使用1x1卷积呢,(作者认为这样做能够增加网络的非线性能力,因为卷积和卷积之间有激活函数)

  作者发现网络中间层的特征和较深层的特征有很大的不同,因此在训练时额外在中间层增加了两个辅助分类器。辅助分类器的结果同输出结果一并计算损失,并且辅助分类器的损失为网络总损失的0.3。作者认为这样的结构有利于增强网络在较浅层特征的分类能力,**相当于给网络加了一个额外的约束(正则化)**,并且在推理时这些辅助网络的结构将被舍弃。

  Inception v2较Inception v1将5x5的大卷积分解成两个3x3的小卷积(效仿VGG网络的处理方式,减少了参数量同时增加网络的非线性能力),并加入了BN层:

  在构建比较复杂的网络时,将网络重叠使用的一些基础模块封装为一个基础的类(层次分明)。

  在以往的经验上,人们普遍认为通过加深网络的层数能够使得网络具有更强的学习能力,即使网络容易产生过拟合/梯度消失的问题,在现有方法下也可以通过增加数据集,Dropout或者正则化/加入BN层解决。但是通过实验数据发现,即使加入有效的措施抑制网络产生过拟合或者梯度消失,网络的精度也会随着深度的增加而下降,并且还不是由于过拟合引起的(实验数据表明越深的网络training loss反而越高)

  事实上,阻碍网络向深度发展的一个主要因素就是梯度不能得到有效的传播,越深的网络反传过程中的梯度相关性会越来越差,接近于白噪声,导致梯度的更新也相当于随机扰动。

  打个形象的比喻,就如我们小时候玩过的口传悄悄话游戏,随着参与人数的增多,最后一个人口中说出的信息往往早已和原先纸条上的信息大相径庭。

  以往的瓶颈:深度网络不可控的梯度消失,深层网络与浅层网络的梯度相关性下降,网络难以训练。

  假设输入的特征为x,期望输出的特征为H(x)。我们知道,对于一般的神经网络而言,每一层的目的无非就是对输入x进行非线性变换,将特征x映射到尽量趋近H(x),即,网络需要直接拟合输出H(x).

  而对于残差映射,模块中通过引入一个shortcut分支(恒等映射),将网络需要拟合的映射变为残差F(x):F(x) = H(x) - x.

  作者在论文中假设:相较于直接优化H(x),优化残差映射F(x)能有效缓解反向传播过程中的梯度消失问题,解决了深度网络不可训练的困难:[Resnet-50网络结构详解]

  论文中将Resnet-50分成了4个大的卷积组,每一个大的卷积组叫做一个Bottleneck(瓶颈)模块(输入和输出的特征图通道较多,中间的卷积层特征深度较浅,类似瓶颈的中间小两头大的结构)。卷积组与卷积组之间会通过一个shortcut相连。

  值得注意的是,ResNet使用Bottleneck结构主要是是为了减小网络的参数量(特征降维),在实际中作者注意到,瓶颈结构的使用同样出现了普通网络的退化问题:

  KB体育官网

  对于F(x)+x,ResNet采取的是逐通道相加的形式,因此在相加时需要考虑两者的通道数是否相同,相同的情况直接相加即可(图实线处),若两者通道不同,需要用1x1卷积对特征进行升维,将通道数变为相同(图虚线 实现一个Bottleneck模块:

  我们知道,越是深层的网络,特征的下采样率也就越高,即深层的特征图一个像素就对应浅层特征的一片区域,这对于大目标的检测不会造成太大的影响。但对于图像上的小目标,在深层特征上的有效信息较少,导致网络对于小物体的检测性能急剧下降,这种现象也被称作

  基于多尺度问题,一个直接的解决办法便是利用图像金字塔,将原始的输入变换为多张不同尺寸的多尺度图像,将这些图像分别进行特征提取,生成多尺度的特征后再进行后续的处理,这样一来,在小尺度的特征上检测到小目标的几率就大大增加。这种方法简单有效,曾大量在COCO目标检测竞赛上使用。但这种方法的缺点就在于计算量大,需要消耗大量的时间。