# 深度网络演进

最早的深度网络,仅包含各个普通的层的CNN,卷积层,激活函数,池化层,全连接层

# AlexNet

Alexnet是2012的ISLVRC冠军,准确率由70%提高到80%左右,使用GPU训练

# 主要亮点

  • 使用GPU训练
  • 使用了Relu函数
  • 使用了LRN局部响应归一化
  • 在全连阶层使用dropout随机失活神经元,以减少过拟合

# VGG

2014年推出,ImageNet获奖

网络中的亮点,通过堆叠多个3x3的卷积核来代替大尺度卷积核(减少所需的参数),从而使网络层次更深

可以使用堆叠2个3x3的卷积核来替代5x5的卷积核,堆叠3个3x3的卷积核来替代7x7的卷积核。(具有相同的感受野)

感受野计算公式:

RFi+1=RFi+(ksize1)strideRF_{i+1} = RF_{i}+(ksize-1)*stride

第一层 1

第二层 (F(1)-1)*stride + ksize

第三层 (F(2)-1)*stride + ksize

第n层 (F(n-1)-1)*stride + ksize

感受野的概念

# GoogLeNet

  • 引入了Inception结构
  • 使用1x1卷积核进行降维以及映射处理
  • 添加两个辅助分类器进行训练
  • 丢弃全连接层,使用平均池化层(大大减少模型参数)

# Inception结构

初始的Inception结构

不同分支得到不同尺度的特征矩阵,每个分支得到的特征矩阵的高和宽必须相同(在深度上进行拼接)

添加了降维模块的Inception结构



使用1x1的卷积核进行降维,降维可以抽取特征点和主要特征

# 辅助分类器

在中间输出层接一个分类器,作为辅助分类,因此在训练的时候有3个loss

# ResNet

Resnet2015年提出,ImageNet第一名

网络亮点

  • 超深的网络结构(突破1000层)
  • 提出残差模块
  • 使用batchnormal加速训练(丢弃dropout)

过深的网络

  • 存在梯度消失和梯度爆炸(梯度剪切/正则、激活函数、BN、预训练微调,残差网络,LSTM)
  • 退化问题

# 残差模块

主分支与shortcut输出特征矩阵的shape必须相同,因此如果是虚线的话,就是先做一个变维操作,再进行结合。

残差一半比较小,学习残差难度小一点

这个操作可以使得低维的信息为高维的信息做一个补充,并且防止梯度消失

# BatchNorm

在图像输入时,一般会对图像进行标准化处理,这样能加速网络的收敛,对于第一个conv层,输入是满足某个分布的特征矩阵,但其输出就变了,作为下一个conv的输入时,不满足某个分布规律了(这里指的是整个训练样本集对应的feature map的数据要满足的分布规律)。而batchnorm就是使feature map满足均值为0,方差为1的分布律。

对于一批数据,计算均值和方差,然后将数据进行归一化,归一化后再用两个参数进行线性调节,因为均值为0,方差为1的数据的效果不一定是最好的,这两个参数是通过反向传播进行学习得到的。

# BN需要注意的问题

  • 训练时将traing设置为True,验证时设置为False
  • batchsize设置的尽可能大,在小的时候表现不好,设置大的求的的均值和方差接近整个训练集的均值和方差
  • 论文中建议将BN层放在Conv和激活函数之间,且卷积层不要使用bias,因为没有用(调整后的值和调整前的值一样)

因为输出如果有bias,则归一化的时候减去均值时,也会有bias,两者抵消,而方差相同,因此输出相同。

# MobileNet

mobilenet是2017年提出的,专注于移动端或者嵌入式设备中的轻量CNN网络,准确率小幅度降低的情况下大大减少了模型参数的运算量

网络亮点

  • Depthwise Convolution(大大减少运算量和参数数量)DW卷积
  • 增加超参数 控制卷积核的个数的参数alpha,控制输入图像大小的beta

# DW卷积(Depthwise Conv)

卷积核channel = 1(每个卷积核负责1个channel )

输入特征矩阵channel = 卷积核个数 = 输出特征矩阵channel

# 深度可分的卷积(Depthwise Separable Conv)

由DW卷积(DepthWise)和PW卷积(PointsWise)组成

PW卷积就是普通卷积,只不过尺寸是1x1

# MobileNet v1

v1版本集成了DW卷积和PW卷积,引入两个参数α\alpha控制卷积核的个数,β\beta控制输入图片的size,虽然在精度上有一点下降,但是大大降低了模型参数和计算量,但在实际训练的时候,发现depthwise部分卷积核会被废掉,即卷积核参数大部分为0,这个在v2版本进行了改善

# MobileNet v2

相比v1准确率更高,模型更小。

亮点主要有两个:

  • Inverted Residual block(倒残差结构)
  • Linear Bottlenecks

回顾:残差结构将输入通过1x1的卷积核,降低输入特征的channel,然后正常卷积,最后再通过一个1x1的卷积核扩充channnl,即步骤包括1x1降维、卷积、1x1升维。

A. 倒残差结构

先通过一个1x1的卷积核实现channel升维,再通过3x3的DW卷积,最后通过1x1的卷积核channel降维,正好跟残差结构是相反的,因此叫倒残差结构。需要注意的是,在普通残差网络中,激活函数为RELU,而在倒残差结构中,使用的激活函数为RELU6

Relu6=min(max(x,0),6)Relu6 = min(max(x, 0), 6)

B. linear Bottlenecks

对于倒残差结构中最后一个1x1的卷积层,采用了线性激活函数,而非RELU,原论文中,RELU对低维特征信息造成较大损失。

作者在论文中做了一个实验,用一个单通道的图片作为输入,然后用多层矩阵TT作卷积进行特征提取,提取高维特征后,用RELU输出,然后再用T1T^{-1}进行反变换,企图得到最初的输入。当提取2、3层时,发现做反变换后,得到的输出图像相对于输入图像有很大的缺失,而提取到10层以上的时候,才可以相对完整的还原出原始图像,因此觉得RELU对低维的信息会产生损失。而由于倒残差结构两边细,中间粗的结构,输出的是一个低维的信息,因此不使用RELU激活函数,而使用线性激活函数。



注意:在倒残差结构中,只有输入stride为1,而且输入特征矩阵和输出特征矩阵shape相等的时候才有shortcut连接

# 迁移学习