基础网络学习

基础网络学习

  1. 这些net的结构是怎么样的
  2. 为什么要这么设计
  3. 这个net的优点是什么
  4. 还存在那些问题

AlexNet

Imagenet Classification With Deep Convolutional Neural Networks.

  • paper: http://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
  • 作者:Alex Krizhevsky

网络结构

基础网络学习_第1张图片

  • 共有8层,其中有5个卷积层,3个全连接层
  • 最后一层全连接层的输出通过一个1000维的softmax层
  • 卷积核从11到5再到3不断减小,特征图也通过Pooling 在第1、2、5层折半式减少,到第5层卷积的时候,特征已经提取的比较充足,使用两个全连接层和一个softmax层输出最终的分类概率。
    基础网络学习_第2张图片

conv1 阶段
输入数据:227×227×3
卷积核:11×11×3;步长:4;数量(也就是输出个数):96 (向下取整)
卷积后数据:55×55×96 (原图N×N,卷积核大小n×n,卷积步长大于1为k,输出维度是(N-n+2p)/k+1)
relu1后的数据:55×55×96
Max pool1的核:3×3,步长:2 ((N-k) / s + 1 )
pool1后的数据:27×27×96
norm1:local_size=5 (LRN(Local Response Normalization) 局部响应归一化)
最后的输出:27×27×96

conv2 阶段
输入数据:27×27×96卷积核:5×5;步长:1;数量:256
卷积后数据:27×27×256 (做了Same padding(相同补白),使得卷积后图像大小不变。)
relu2后的数据:27×27×256
Max pool2的核:3×3,步长:2
Max pool2后的数据:13×13×256 ((27-3)/2+1=13 )
norm2:local_size=5 (LRN(Local Response Normalization) 局部响应归一化)
最后的输出:13×13×256

conv2中使用了same padding,保持了卷积后图像的宽高不缩小。

conv3 阶段
输入数据:13×13×256卷积核:3×3;步长:1;数量(也就是输出个数):384
卷积后数据:13×13×384 (做了Same padding(相同补白),使得卷积后图像大小不变。)
relu3后的数据:13×13×384
最后的输出:13×13×384

conv3层没有Max pool层和norm层

conv4 阶段
输入数据:13×13×384
卷积核:3×3;步长:1;数量(也就是输出个数):384
卷积后数据:13×13×384 (做了Same padding(相同补白),使得卷积后图像大小不变。)
relu4后的数据:13×13×384
最后的输出:13×13×384

conv4层也没有Max pool层和norm层

conv5 阶段
输入数据:13×13×384
卷积核:3×3;步长:1;数量(也就是输出个数):256
卷积后数据:13×13×256 (做了Same padding(相同补白),使得卷积后图像大小不变。)
relu5后的数据:13×13×256
Max pool5的核:3×3,步长:2
Max pool2后的数据:6×6×256 ((13-3)/2+1=6 )
最后的输出:6×6×256

conv5层有Max pool,没有norm层

fc6 阶段
输入数据:6×6×256
全连接输出:4096×1
relu6后的数据:4096×1
drop out6后数据:4096×1
最后的输出:4096×1

fc7 阶段
输入数据:4096×1
全连接输出:4096×1
relu7后的数据:4096×1
drop out7后数据:4096×1
最后的输出:4096×1

fc8阶段
输入数据:4096×1
全连接输出:1000
fc8输出一千种分类的概率。

创新点如下:

  • 采用了ReLU作为激活函数:ReLU(x) = max(x, 0)
  • LRN: 局部相应归一化。只对数据相邻区域做归一化处理,不改变数据的大小和维度。
  • Overlappng(重叠池化):在做池化的时候,池化核的大小为n*n时,步长为k,如果K==n的时候是正常池化,k
  • Dropout: 在FC6,FC7引入Dropout,以一定的概率(50%)丢弃某个神经元,不进行前向和反向的传播(保留权值)。
  • 数据增强

VGG

Very Deep Convolutional Networks for Large-Scale Image Recognition.

  • pdf: https://arxiv.org/abs/1409.1556
  • 作者:Karen Simonyan

网络结构

基础网络学习_第3张图片

  • 核心思想:在保证相同的感受野下,利用多个小卷积核替代大卷积核,不但减小了参数量,而且加深了网络结构。
  • 为什么减少了参数量:例如3个步长为1的3 * 3卷积可以看成一个7*7的卷积。前者的参数量为 3 ∗ ( 3 ∗ 3 ∗ C i n ∗ C o u t ) 3*(3*3*C_{in}*C_{out}) 3(33CinCout),后者的参数量为 1 ∗ ( 7 ∗ 7 ∗ C i n ∗ C o u t ) 1*(7*7*C_{in}*C_{out}) 1(77CinCout).
  • 为什么感受野相同:感受野指得是,与输出有关的输入图片的局部大小。5 * 5的卷积表示在输入图5 * 5的区域内滑动。先用1个3 * 3的卷积在输入图上滑动,然后再用1个3 * 3的卷积在上一张特征图上滑动,此时映射到输入图中的区域大小是5*5的,如下图:
    基础网络学习_第4张图片- 使用1 * 1的卷积来使维度保证

优缺点

  • 结构简洁,整个网络中都使用了同样大小的卷积核尺寸(3 * 3),s=1和最大池化尺寸(2 * 2), s=2
  • 小的卷积叠加起来要比一个大卷积核要好
  • 验证了通过不断加深网络结构可以提升性能
  • 消耗资源大,主要原因是来自最后的3个全连接层,而且全连接层容易过拟合。

实现细节

训练过程

  • 前两个FC层有Dropout
  • we initialised the first four convolutional layers and the last three fully-connected layers with the layers of net A (the intermediate layers were initialised randomly).
  • 随机初始化:从均值为0,方差为0.01的正态分布中采样,bias置为0
  • 数据增强:裁剪+水平翻转+RGB增强

训练集图片的尺寸

  • 固定训练集输入图片尺寸的大小:S=256。S=384,此时为了加速训练,初始化权重利用256时候的。
  • 多尺度训练,随机采样到[256, 512]. 加快训练速度在S=384上进行fine-tuning

测试过程

  • 注意卷积的参数个数中其实是包括 C o u t C_{out} Cout个偏置项的

GoogleNet(Inception v1)

Going Deeper with Convolutions

  • pdf: https://arxiv.org/abs/1409.4842

网络结构

  • 用多个Inception模块串联起来。主要的作用有两个:一个是使用1 * 1的卷积来进行升降维;二是在多个尺寸上同时进行卷积再聚合。
    基础网络学习_第5张图片

1*1卷积

  1. 在尺寸相同的感受野中叠加更多的卷积,能够提取出更丰富的特征。对于某个像素点来说1x1卷积等效于该像素点在所有特征上进行一次全连接的计算,能够提取出更强的非线性。
  2. 1 * 1卷积可以进行降维,降低计算的复杂度。例如下图,对于输入一组有192个特征,32 * 32大小的输入图,输出是256个32 * 32个特征图的。如果用3 * 3的卷积进行计算,需要 ( 192 ∗ 256 ∗ 3 ∗ 3 ) ∗ 32 ∗ 32 (192 * 256 * 3 * 3) * 32 * 32 (19225633)3232次运算。第二种方法先利用1 * 1卷积降维到96组特征,然后再通过3 * 3卷积恢复出256组特征,共进行 ( 192 ∗ 96 ∗ 1 ∗ 1 ) ∗ 32 ∗ 32 + ( 96 ∗ 256 ∗ 3 ∗ 3 ) ∗ 32 ∗ 32 (192 * 96 * 1 * 1) * 32 * 32 + (96 * 256 * 3 * 3) * 32 * 32 (1929611)3232+(9625633)3232次计算,减少了一般的计算量。同时降维不会影响最终的结果,类似压缩的效果。
    基础网络学习_第6张图片

多个尺寸上进行卷积再聚合

对于同一个输入图,有四个分支,分别用不用尺寸的卷积进行卷积和池化,最后在特征维度上拼接到一起。

  1. 在多个尺度上同时进行卷积,能够提取到不同尺度的特征。
  2. 利用稀疏矩阵分解成密集矩阵计算的原理来加快收敛速度。
  3. 用多个尺寸进行特征特区,然后将相关性强的特征聚集到一起,这样效果会更好。

Inception

Rethinking the Inception Architecture for Computer Vision

  • pdf: https://arxiv.org/abs/1512.00567

ResNet

Deep Residual Learning for Image Recognition

  • pdf: https://arxiv.org/abs/1512.03385

网络加深后会有什么问题:

  1. 梯度消失和梯度爆炸(利用BN可以解决)
  2. 准确率下降问题(degradation problem):层级大到一定的程度,准确率就会饱和,然后迅速下降,这是由于网络过于复杂,并且训练方式难以达到收敛导致的。更深的网络一定比浅的网络效果好,因为多余的层可以看成是恒等变换。

网络结构

基础网络学习_第7张图片

  • 利用残差结构实现上述恒等映射:除了正常的卷积输出之外,另外有一个分支把输入直连到输出上。
  • 残差结构人为制造了恒等映射,就能让整个结构朝着恒等映射的方向去收敛,确保最终的错误率不会因为深度的变大而越来越差。
  • 注意是直接对生成的特征图进行相加

基础网络学习_第8张图片

网络的基础在VGG-19上进行加深,并保持几个原则:

  1. 特征图大小相同的层, 卷积核的个数应该相同
  2. 特征图的大小如果减半,卷积核的个数应该双倍,保证复杂性
  3. 使用s=2的卷积进行下采样

基础网络学习_第9张图片

残差模块: 当输入输出的有相同的维度的时候,可以直接进行相加。
上图虚线中,输入和输出的不一样时,采用两种方法升维:

  1. 少的通道用0补齐(不添加新的参数)
  2. 用1 * 1的卷积升维

Deeper Bottleneck Architectures

  • 先使用一个1 * 1 卷积进行卷积,
  • 然后使用一个3 * 3的卷积在一个小的通道数进行卷积,
  • 然后再经过1 * 1 卷积进行升维。

DenseNet

Densely Connected Convolutional Networks

  • pdf: https://arxiv.org/abs/1608.06993

基础网络学习_第10张图片

  • ResNet当中卷积的输出和输入相加组合在一起,会阻碍信息流在网络中的传播
  • 每一层输入的特征图都连接到后面的输入中,对于一个L层的网络共有 L ∗ ( L + 1 ) / 2 L*(L+1)/2 L(L+1)/2条连线
  • DenseNet中某层的多个输入源不是直接算术相加,而是在特征维度上进行拼接(concatenate)
  • 层与层间的直连只限于有相同尺寸的特征映射的层间,特征图尺度不同的部分不进行连接,通过卷积和Pooling改变尺寸。
    基础网络学习_第11张图片
  • 如果在DenseNet模块中每一层的输入前都用1X1卷积降维,来减少计算量,这种结构作者取名叫DenseNet-B
  • DenseNet模块中每一个卷积层前(包括1X1卷积)都会有BN,形成BN-Relu-1X1卷积-BN-Relu-3X3卷积的结构
  • 基础网络学习_第12张图片
  • 不同的DenseNet模块间如果也用1X1 卷积来降维,这种结构作者取名叫DenseNet-C;

优缺点

  • 需要的参数少:DenseNet中某层的输出直连到之后的每一层,这些特征需要的时候不需要重新做卷积。
  • 梯度能通过直连直接传到靠前的层级,减少了梯度消失的可能。

SENet

Squeeze-and-Excitation Networks

  • pdf: https://arxiv.org/abs/1709.01507

核心想法:关注通道之间的关系,通过额外一个小网络,学习到不同通道特征之间的重要程度。

网络结构

基础网络学习_第13张图片

  • 先对卷积后的特征图进行Squeeze操作,得到通道级的全局特征。
  • 对通道的全局特征进行Excitation操作,学习通道间的关系,得到不同的权重
  • 权重向量乘以特征图得到最终的特征
  • 这种注意力机制让模型可以更加关注信息量最大的channel特征,而抑制那些不重要的channel特征。
  • 另外一点是SE模块是通用的,这意味着其可以嵌入到现有的网络架构中。

普通卷积

F t r F_{tr} Ftr, 普通卷积,输入一个通道上的特征(大小为卷积核的大小),学习特征的空间关系,但是由于对各个通道的卷积结果做了sum,所以channel特征关系与卷积核学习到的空间关系混合在一起
SE模块就是为了抽离这种混杂在一起的关系,使模型直接学习到Channel间的关系。

Squeeze操作

  • 直接通过卷积得到的U很难获得足够的信息来提取Channel之间的关系,尤其是对于前面的卷积层,感受野很小,信息更少。
  • Squeeze操作,将一个Channel上整个空间特征编码为一个全局特征,例如global average pooling,即在Channel上求一个均值。

在这里插入图片描述

Excitation操作

  • Sequeeze操作得到了全局描述特征,我们接下来需要另外一种运算来抓取channel之间的关系。
  • 这个操作需要满足两个准则:首先要灵活,它要可以学习到各个channel之间的非线性关系;第二点是学习的关系不是互斥的,因为这里允许多channel特征,而不是one-hot形式。
    在这里插入图片描述
    在这里插入图片描述
  • 为了降低模型复杂度,提升泛化能力,采用两个全连接层的bottleneck结构。
  • 第一个FC层是降维的作用,降维系数r是一个超参数,采用ReLU激活
  • 第二个FC层恢复原始的维度,由一个sigmoid激活(0-1)
  • 最后将各个channel的激活值,乘以U上的原始特征图:即学习了各个channel的权重系数,对不同的channel的重要程度进行了预测,类似attention机制
    在这里插入图片描述

ShuffleNet

ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices

  • pdf: https://arxiv.org/abs/1707.01083

设计理念

Convolution VS Group Convolution

分组卷积对于输入的feature map进行分组,每组分别卷积。

对于常规卷积(Convolution):

  • 假如输入的feature map 尺寸为 C ∗ H ∗ W C * H * W CHW, feature map的个数为 N N N
  • 卷积核的尺寸为 C ∗ K ∗ K C*K*K CKK,假设卷积输出的维度也是 N N N的话,此时参数量为 N ∗ ( C ∗ K ∗ K ) N * (C*K*K) N(CKK)

对于分组卷积(Group Convolution):

  • 假如输入的feature map 尺寸为 C ∗ H ∗ W C * H * W CHW,输出feature map的个数为 N N N
  • 设定要分成 G G G个group,则每组输入的feature map的数量为 C G \frac{C}{G} GC,每组输出feature map数量为 N G \frac{N}{G} GN
  • 每个卷积核的尺寸为 C G ∗ K ∗ K \frac{C}{G} * K * K GCKK,卷积核的总数仍为 N N N个,每组的卷积核的数量为 N G \frac{N}{G} GN,卷积核只与同组的输入map进行卷积,卷积核的总参数量为 N ∗ C G ∗ K ∗ K N * \frac{C}{G} * K * K NGCKK。总参数量减少为原来的 1 G \frac{1}{G} G1

分组卷积(Group Convolution)的作用:

  1. 减少参数量:分成G组,该层的参数量比普通卷积减少为原来的 1 G \frac{1}{G} G1
  2. Group Convolution可以看成是Structured Sparse:每个卷积核的尺寸由 C ∗ K ∗ K C*K*K CKK变为了 C G ∗ K ∗ K \frac{C}{G} * K * K GCKK,省去的部分可以视为参数为0,在减少参数量的同时可以获得更好的效果(相当于正则化)
  3. 当分组数G等于输入feature map的数量的时候,输出map数量也等于出入map数量时,即 G = N = C G=N=C G=N=C时,N个卷积核每个尺寸变为 1 ∗ K ∗ K 1*K*K 1KK,相当于变成了Depthwise Convolution,参数量进一步减少。

基础网络学习_第14张图片4. 更进一步,如果 G = N = C G=N=C G=N=C时,同时卷积核的尺寸与输入map的尺寸相同,即 K = H = W K=H=W K=H=W,则输出的map为 C ∗ 1 ∗ 1 C*1*1 C11的向量,此时称之为 Global Depthwise Convolution(GDC)。可以看成是全局加权池化,与 Global Average Pooling(GAP) 的不同之处在于,GDC 给每个位置赋予了可学习的权重(对于已对齐的图像这很有效,比如人脸,中心位置和边界位置的权重自然应该不同),而GAP每个位置的权重相同,全局取个平均,如下图所示:
基础网络学习_第15张图片

ShuffleNet 对于Group Convolution的改进

  • 核心思想:对于不同的channels进行shuffle,解决group convolution带来的channel间特征图不通信的弊端。
  • 一个解决的办法就是对于group convolution之后的特征图进行“重组”,保证接下来GConv2的输入来自不用的组,实现信息的交换,例如下图b
  • ShuffleNet采用均匀的打乱的方式:假定输入层分为g组,总通道数为 g ∗ n g*n gn,首先将通道的维度拆分为 ( g , n ) (g,n) (g,n)两个维度,然后将这两个维度转置变为(n,g),最后重新reshape成一个维度。这样就实现了均匀的shuffle.

基础网络学习_第16张图片

网络结构

基础网络学习_第17张图片

  • 基本单元在残差单元上改进:例如图a中3层的残差单元,首先是1 * 1卷积,然后是3 * 3的Depthwise Convolution(DWConv,每组只有一个特征图,降低计算量),再进行一个1 * 1卷积(Bottleneck结构),最后是一个短路链接,将输入直接接入输出中。
  • 改进:将1 * 1的卷积改为Group Convolution,只在第一个GConv后跟一个channel shuffle。
  • 当s=2的时候,生成的特征图形状不匹配,此时用一个avg pool,使得和输出大小一样的特征图,然后再concat到一起(降低计算量与参数大小)

整体的结构如下:
基础网络学习_第18张图片

EfficientNet

EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks

  • pdf: https://arxiv.org/pdf/1905.11946.pdf​arxiv.org

你可能感兴趣的:(计算机视觉)