神经网络模型(Backbone)

  自己搭建神经网络时,一般都采用已有的网络模型,在其基础上进行修改。从2012年的AlexNet出现,如今已经出现许多优秀的网络模型,如下图所示。 主要有三个发展方向:

    Deeper:网络层数更深,代表网络VggNet

    Module: 采用模块化的网络结构(Inception),代表网络GoogleNet

    Faster: 轻量级网络模型,适合于移动端设备,代表网络MobileNet和ShuffleNet

    Functional: 功能型网络,针对特定使用场景而发展出来。如检测模型YOLO,Faster RCNN;分割模型FCN, UNet

 

 

   其发展历史可以分为三个阶段:

   这些模型在ImageNet上的表现效果对比如下:

  

1. LeNet-5

  LeNet-5是LeCun在1998年的论文中Gradient-Based Learning Applied to Document Recognition 提出的网络模型,其结构如下:(其中卷积为5*5的kernel,下采样为2*2的MaxPooling),其结构比较简单,关于LeNet-5结构设计的详细分析,参见:参考一参考二

 

 2. AlexNet

  AlexNet是Alex Krizhevsky在2012的文章ImageNet Classification with Deep Convolutional Neural Networks中提出,其结构模型如下:(分上下两部分卷积,计算力不足,放在两块GPU上)

 

   AlexNet的特色:参考1参考2

    (1) Training on Multiple Gpus:  受于当时的算力限制,Alexnet创新地将图像分为上下两块分别训练,然后在全连接层合并在一起

    (2) ReLU Nonlinearity: 采用ReLU激活函数代替Sigmoid或tanh, 解决了梯度饱和的问题

    (3)Local Response Normalization: 局部响应归一化,

    (4) Data Augmentation: 扩增数据,减小过拟合:第一种是 抠图(从256x256抠出224x224)加上水平反转。第二种是 改变RGB颜色通道强度。

    (5) Dropout: 以一定概率舍弃神经元输出,减小过拟合。

3.ZFNet

   ZFNet是2013年的论文Visualizing and Understanding Convolutional Networks中提出,是2013年ILSVRC的冠军。这篇文章使用反卷积(Deconvnet),可视化特征图(feature map),通过可视化Alex-net指出了Alex-net的一些不足,最后修改网络结构,使得分类结果提升;是CNN领域可视化理解的开山之作,作者通过可视化解释了为什么CNN有非常好的性能、如何提高CNN性能,然后进行调整网络,提高了精度(参考文章

   ZFNet通过修改结构中的超参数来实现对AlexNet的改良,具体说来就是增加了中间卷积层的尺寸,让第一层的步长和滤波器尺寸更小。其网络结构的两种表示图如下:

     相比于AlexNet其改进如下:(ImageNet top5 error:16.4%提升到11.7%)

      (1) Conv1: 第一个卷积层由(11*11, stride=4)变为(7*7,stride=2)

      (2) Conv3, 4, 5: 第三,四,五个卷积核的通道数由384,384,256变为512,1024,512

 3. VGGNet

  VGGNet是2014年论文Very Deep Convolutional Networks for Large-scale Image Recognition 中提出,2014年的ImageNet比赛中,分别在定位和分类跟踪任务中取得第一名和第二名,其主要的贡献是展示出网络的深度(depth)是算法优良性能的关键部分,其结构如下:

 

 

   VGGNet的特色:(参考1参考2)

    (1) 结构简洁:5层卷积层、3层全连接层、softmax输出层构成,层与层之间使用max-pooling(最大化池)分开,所有隐层激活单元都采用ReLU函数。

     (2)小卷积核和多卷积核:VGG使用多个较小卷积核(3x3)的卷积层代替一个卷积核较大的卷积层,一方面可以减少参数,另一方面相当于进行了更多的非线性映射,可以增加网络的拟合/表达能力。

     VGG的作者认为两个3x3的卷积堆叠获得的感受野大小,相当一个5x5的卷积;而3个3x3卷积的堆叠获取到的感受野相当于一个7x7的卷积。这样可以增加非线性映射,也能很好地减少参数(例如7x7的参数为49个,而3个3x3的参数为27),如下图所示:

 

   VGGNet提出的结论:

    (1) LRN层无性能增益(A-LRN):AlexNet曾经用到的LRN层(local response normalization,局部响应归一化)并没有带来性能的提升
    (2) 随着深度增加,分类性能逐渐提高(从11层到19层)
    (3) 多个小卷积核比单个大卷积核性能好

4. GoogLeNet

  4.1 GoogLeNet V1

    GoogLetNet V1是在2014年论文Going deeper with convolutions中提出的,ILSVRC 2014的胜利者。相比于VGG,其并不是单纯的将网络加深,还引入了Inception模块的概念,最终性能和VGG差不多,但参数量更少。

    Inception提出原因:传统网络为了减少参数量,减小过拟合,将全连接和一般卷积转化为随机稀疏连接,但是计算机硬件对非均匀稀疏数据的计算效率差,为了既保持网络结构的稀疏性,又能利用密集矩阵的高计算你性能,Inception网络结构的主要思想是寻找用密集成分来近似最优局部稀疏连接,通过构造一种“基础神经元”结构,来搭建一个稀疏性、高计算性能的网络结构

    Inception的结构如下图所示:

 

 

     Inception架构特点:

      (1)加深的基础上进行加宽,稀疏的网络结构,但能产生稠密的数据,既能增加神经网络表现,又能保证计算资源的使用效率

      (2) 采用不同大小的卷积核意味着不同的感受野,最后在channel上拼接,意味着不同尺度的特征融合

      (3)采用1*1卷积,一是减少维度来减少计算量和参数,二是修正线性激活,增加非线性拟合能力(每个1*1后都有ReLU激活函数)

    以Inception为基础模块,GoogLeNet V1的整体网络架构如下(共22层):

 

 

 

     GoogLeNet V1网络特色:参考1参考2

      (1) 采用Inception模块化结构,方便添加修改

      (2) 采用Average Pool 来代替全连接层(借鉴Network in Network),实际在最后一层还是添加了一个全连接层,方便做finetune。

      (3) 另外增加了两个辅助的softmax分支(incetion 4b和4e后面),作用有两点,一是为了避免梯度消失,用于向前传导梯度。反向传播时如果有一层求       导为0,链式求导结果则为0。二是将中间某一层输出用作分类,起到模型融合作用。最后的loss=loss_2 + 0.3 * loss_1 + 0.3 * loss_0。实际测        试时,这两个辅助softmax分支会被去掉。

  4.2 GoogLeNet V2, V3

     GoogLeNet V2, V3是在2015年论文 Rethinking the Inception Architecture for Computer Vision  中提出,主要是对V1的改进。

     GoogLeNet v2的Inception结构和整体的架构如下:

 

      GoogLeNet V2网络特点:

        (1) 借鉴VGG,用两个3*3卷积代替一个5*5卷积,降低参数量,提高计算速度(如上图Figure5中Inception)

        (2)它们将滤波器大小nxn的卷积分解为1xn和nx1卷积的组合(7x7卷积相当于首先执行1x7卷积,然后在其输出上执行7x1卷积,如上图Figure6中Inception),但在网络的前期使用这种分解效果并不好,在中度大小的特征图(feature map)上使用效果才会更好(特征图大小建议在12到20之间)

        (3) 为了同时保持特征表示并降低计算量,将池化和卷积并行执行再合并,如下图所示:

     GoogLeNet V3: V3包含了为V2规定的所有上述改进,另外还使用了以下内容:

      (1)采用RMSProp优化器

         (2) 学习Factorization into small convolutions的思想,将7x7分解成两个一维的卷积(1x7,7x1),3x3也是一样(1x3,3x1),这样的好处,既可以加        速计算(多余的计算能力可以用来加深网络),又可以将1个conv拆成2个conv,使得网络深度进一步增加,增加了网络的非线性,还有值得注           意的地方是网络输入从224x224变为了299x299,更加精细设计了35x35/17x17/8x8的模块。

      (3) 在辅助分类器中的使用BatchNorm。

      (4) 采用标签平滑(添加到损失公式中的一种正规化组件,可防止网络对类过于自信。防止过度拟合)

  4.3 GoogLeNet V4

    GoogLeNet V4(Inception V4)是在2016年的论文 Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning 中提出,主要是利用残差网络(ResNet)来改进V3,得到Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4网络。

5. ResNet

   ResNet是何凯明在2015年的论文Deep Residual Learning for Image Recognition 中提出,ResNet网络提出了残差网络结构,解决了以前深层网络难训练的问题,将网络深度有GoogLeNet的22层提高到了152层。残差网络(bottleneck)的结构如下:(参考1

 

   相比传统网络:y=f(x),ResNet Block公式为:y=f(x) + x,可以称之为skip connect。有两个点需要思考下:一是其导数总比原导数加1,这样即使原导数很小时,也能传递下去,能解决梯度消失的问题; 二是y=f(x) + x式子中引入了恒等映射(当f(x)=0时,y=x),解决了深度增加时神经网络的退化问题。

  ResNet由多个Residual Block叠加成的,其结构如下:

 

     其中Resnet-18/34采用的residual block和Resnet-50/101/152不太一样,分别如下所示:

   除了残差结构,ResNet还有两个细节需要关注下

    (1)第一个卷积层采用了7*7的大卷积核,更大的感受野,获取图片更多的初始特征(primary feature) (图片channel=3,第一层使用大kernel,增加的参     数量不是很大)

·    (2)短路连接中,输入和输出维度不一致时,不能直接相加(Element-wise add),采用步长为2的卷积来减小维度尺寸?

6. DenseNet

     DenseNet网络是在2017的论文 Densely Connected Convolutional Networks 中提出,与ResNet一致,也采用shortcut连接,但是其将前面所有层与后面层密集连接(dense connection), 另外其采用channel concatenate来实现特征重用(代替ResNet的Element-wise addition)。其整体网络结构如下图所示:

     DenseNet网络包括Dense Block和Transition layer两个基础模块,Dense Block类似于ResNet中的residual block,其区别对比如下:

 

       由上图可以发现两个主要区别:(参考1

         (1) DenseNet是密集连接,前面层和后面层间都有连接;ResNet只有相邻层有连接

         (2) DenseNet是channel-wise concatenation; Resnet 是Element-wise addition

    DenseNet的Transition layer主要是用来降低feature map的尺寸,将来自不同层的feature map变化为同等尺寸后进行concatenate,其结构如下:

      BN + ReLU+1*1 Conv + 2*2 Average Pool

  

     DenseNet的特点:

      (1) 由于密集连接方式,DenseNet提升了梯度的反向传播,使得网络更容易训练 (每层可以直达最后的误差信号)

       (2) 参数更小且计算更高效 (concatenate来实现特征复用,计算量很小)

       (3) 由于特征复用,分类器使用到了低级特征

       (4) 需要较大的显存才能运行(所有层都需存储?)

 参考:https://zhuanlan.zhihu.com/p/66215918

   https://zhuanlan.zhihu.com/p/22038289

 

    上述都是些大型的经典网络,运行较慢,需要的较大的算力,而轻量级网络则采用不同的设计和模型架构,来应对移动端设备上的使用,目前主要的轻量级网络包括 SqueezzeNet, MobileNet和ShuffleNet,其发展历史如下:

  这些网络实现轻量级的主要方法如下:

    (1) 优化网络结构: shuffle Net

    (2) 减少网络的参数: Squeeze Net

    (3) 优化卷积计算: MobileNet(改变卷积的顺序); Winograd(改变卷积计算方式)

    (4) 删除全连接层: Squeeze Net; LightCNN

 7. SqueezeNet

   SqueezeNet是在2017年的论文 SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size 中提出, squeezeNet的模型压缩策略主要有三个:(Idea from GoogLeNet)   (参考1

     (1) 多使用1*1的卷积,少使用3*3的卷积,减少参数量

     (2) 3*3卷积采用更少的channel数

     (3) 将降采样后置,即推迟使用Pooling,从而增加感受野,尽可能多的获得feature

  SqueezeNet的网络基础单元是Fire Module,多个fire module堆叠,结合pooling组成SqueezeNet,如下图所示:(右边两张加入了shortcut)

 

    Fire Module又包括两部分:squeeze layer 和 Expand layer,如下图所示:

 

        squeeze layer:主要是1*1的卷积,对网络channel进行压缩,卷积核的个数为S1

      expand layer:1*1的卷积个数为E1,3*3的卷积个数为E3(上图中E2应该为E3),然后进行concate。

      论文中关于E1, E3,S1的关系描述如下:

 8. MobileNet

  8.1 MobileNet V1

    MobileNet V1是在2017年Google的论文 MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 中提出,其主要压缩策略是深度可分离卷积(Depthwise separable Convolution),其包括两步,如下图所示:

 

         (1) 深度卷积:将卷积拆分为单通道的形式,在不改变输入特征图像的深度的情况下,对每一通道进行卷积操作,得到和输入特征图通道数一致的输出特征图。如下图,输入12×12×3的特征图,经过5×5×1×3的深度卷积之后,得到了8×8×3的输出特征图。输入个输出的维度是不变的3。

 

     (2)逐点卷积:即1*1的卷积,对深度卷积得到的特征图进行升维,如下图,8×8×3的特征图,通过1*1*3*256的卷积,输出8*8*256的输出特征图。

 

     参数量和计算量对比:

      深度可分离卷积和传统卷积相比操作和参数更少,如下图所示,可以发现深度可分离卷积操作数和参数都是传统卷积的(1/N +1/Dk2), 采用3*3卷积时大约是1/9。(但模型精度大概只降低1%)

      模型结构对比:

       深度可分离卷积单元相比传统卷积多一个ReLU6激活函数和1*1卷积层,对比如下图:

     MobileNet V1网络的整体架构如下图, 多个深度卷积的堆叠(s2表示步长为2),: (参考1)

     MobileNet V1还可以引入结构超参数来进一步压缩网络,主要是在kernel的深度和尺寸两方面,如下图:

   8.2 MobileNet V2

    MobileNet V2是在2018年的论文 MobileNetV2: Inverted Residuals and Linear Bottlenecks 中提出,对V1的卷积单元进行了改进,主要引入了Linear bottleneck和Inverted residuals。

    (1) Linear bottleneck : 在原始V1训练时容易出现卷积层参数为空的现象,这是由于ReLU函数:对低维度做ReLU运算,很容易造成信息的丢失。而在高维度进行ReLU运算的话,信息的丢失则会很少参考);因此去掉卷积单元中最后一个ReLU函数。

      (Linear bottleneck: Eltwise + with no ReLU at the end of the bottleneck)

    (2) Inverted Residual: 深度卷积本身没有改变channel的能力,来的是多少通道输出就是多少通道。如果来的通道很少的话,DW深度卷积只能在低维度上工作,这样效果并不会很好,所以我们要“扩张”通道。既然我们已经知道PW逐点卷积也就是1×1卷积可以用来升维和降维,那就可以在DW深度卷积之前使用PW卷积进行升维(升维倍数为t,t=6),再在一个更高维的空间中进行卷积操作来提取特征,随后再进行降维。

      (Inverted Residual: expand - transfer - reduce)

    对比下V2和ResNet的结构,如下图:可以发现V2是先升,卷积,降维,和ResNet(降维,卷积,升维)相反,因此成为Inverted residual.

 

  Linear bottleneck和Inverted Residual解释:

     对比下V1和V2的卷积结构单元,如下图:V2将最后一层的ReLU6换成了Linear,并引入了shortcut进行升维和将维(最右边的stride=2减小尺寸,所以没有shortcut)。

 

     MobileNet V2的整体结构如下图:

     8.3 MobileNet V3

        MobileNet V3在2019年的论文Searching for MobileNetV3 中提出,还没啃完,有空来填坑。

 9 ShuffleNet

   9.1 shuffleNet V1

      shuffleNet V1 是2017年在论文ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices 中提出的,其主要压缩思路是group convolution 和 channel shuffle。(参考1参考2

      (1) group convolution(分组卷积): 分组卷积的思路是将输入特征图按通道数分为几组,然后采用不同的卷积核再对各个组进行卷积,这样会降低卷积的计算量。传统的卷积是卷积核在所有通道上进行卷积,算全通道卷积,而分组卷积算通道上的稀疏卷积,如下图所示。(mobileNet算是一种特殊的分组卷积,分组数和通道数一样)

      (2)channel shuffle(通道混洗) : 分组卷积以一个问题是不同组之间的特征图信息不通信,就好像分了几个互不相干的路,大家各走各的,会降低网络的特征提取能力。MobileNet是采用密集的1*1pointwise convolution进行通道特征融合,计算量较大。channel shuffle的思路是对分组卷积之后的特征图的排列顺序进行打乱重新排列,这样下一个分组卷积的输入就来自不同的组,信息可以在不同组之间流转。channel shuffle的实现步骤如下图所示:reshape--transpose-flatten

 

 

     shufflleNet V1网络的基本单元如下图所示,相比a图中,b图将1x1的密集卷积换成分组卷积,添加了一个channel shuffle,另外3x3的depthwise convolution之后没有使用ReLU激活函数,图c中则采用stride=2,同时将elment-wise add 换成了concat。

   shuffleNet V1特点,以及和ResNet和mobileNet的对比如下:

 

 

    ShuffleNet V1的整体架构如下,每个stage都是shuffleNet基本单元的堆叠。

   9.2 shuffleNet V2

      shuffleNet V2 是2018年在论文ShuffleNet V2: Practical Guidelines for Ecient CNN Architecture Design中提出的, 论文中针对设计快速的轻量级模型提出了四条指导方针(Guidelines):

    (1)G1: 卷积层的输入和输出特征通道数相等时MAC最小,此时模型速度最快

    (2)G2: 过多的 group操作会增大MAC,从而使模型速度变慢

 

 

 

 

    (3) G3: 模型中的分支数量越少,模型速度越快

 

    (4) G4:element-wise操作所带来的时间消耗远比在FLOPs上的体现的数值要多,因此要尽可能减少element-wise操作

 

     论文中接着分析了其他网络模型违背了相应的原则方针,如下图所示:

 

     针对上述四条guidelines,论文提出shuffleNet V2的基本单元,如下图:

 

       (1) channel split然后concat,保证输入输出channel一致,遵循准则1?

 

       (2) 去掉1*1的分组卷积(channel split相当于分组了),遵循准则2

       (3) channel split和将channel shuffle移动到后面,遵循准则3?

       (4)利用concat代替add,遵循准则4

    最后shuffleNet V2的整体架构如下:

 

 

 

 

参考:https://baijiahao.baidu.com/s?id=1589005428414488177&wfr=spider&for=pc

posted @ 2019-10-08 22:16  silence_cho  阅读(50531)  评论(4编辑  收藏  举报