智健blog

深度学习-卷积神经网络-算法比较

AlexNet网络

①因为把数据序列化后可以组成矩阵,用矩阵乘法形式进行处理并学习

AlexNet网络的前几层主要是做了加深通道,和池化层。并且每一次加深,feature map的尺寸都会减小,其padding也不是固定的

后两层卷积feature map的尺寸以及通道数并没有改变

image-20230316172915677

LRN(局部归一化) 是将 通道上该点的像素值走一个归一化处理

img

GoogleNet网络

  • 网络亮点
    • 引入了Inception结构(融合不同尺度的特征信息)

    • 使用1×1的卷积核进行降维以及映射
      • 降低维度,减少参数。总参数是VGG的1/20,但搭建不如VGG方便
    • 添加两个辅助分类器辅助训练(就是有三个输出层,AlexNet、VGG都是一个输出层)
      • 辅助分类器相当于对模型做了融合,同时给网络增加了反向传播的梯度信号,在一定程度上提供了正则化的作用。
      • 只是在训练的时候有用,在测试的时候丢弃
    • 丢弃全连接层,使用平均池化层(大幅减少模型参数)

image-20230308182224557

池化输出的feature尺寸计算方法:其中F是池化的大小,P是padding,S是stride

\[out_{size}=\left(in_{size}-F_{size}+2P\right)/S+1 \]

ResNet网络

主要解决两个问题:

  • 梯度消失或者梯度爆炸

    解决:

    • 对数据标准化处理batchnormlization

      把每个feature map调整为均值为0,方差为1的分布规律

      是指一批数据的同一个通道

    • 对权重初始化

  • 退化问题

    解决:

    • 利用残差结构

对于浅层网络,不需要对数据进行降维再卷积,深层网络或者通道数较高的网络需要先用1×1的卷积核进行降维,然后再进行卷积操作升维

image-20230308193008348

每个阶段第一个block的shortcut是虚线的原因?

​ 因为每个阶段输入输出feature map的尺寸以及通道数不同,因此在每个阶段的第一层需要先改变feature map的尺寸(通过stride=2进行缩小尺寸)以及通道数

​ 每个阶段的feature map均被每个阶段的第一个block进行缩小

image-20230308194115009image-20230308194203198

MobileNet网络结构

  • MobileNetV1:我们找到了一个叫深度可分离卷积的东西,发现很好用

    • 深度可分离卷积: DW 和 PW 组合替换常规卷积来达到减少参数数量的目的
    • 超参数: 改变输入输出通道数α和特征尺寸

    劣势:部分卷积核训练出的参数值为0

    请添加图片描述

  • MobileNetV2:发现MobileNetV1的缺陷,然后发明了inverted residual with linear bottleneck 的block替代,效果和性能都更好

    • 比v1网络参数量更小,准确率更高

    • 线性瓶颈结构

    • 逆向残差结构bottleneckD

      常规残差,两头大,中间小(先用1×1的卷积核降维处理,再用3×3的卷积核学习,最后用1×1的卷积核去升维

      逆向残差,两头小,中间大(先用1×1的卷积核升维处理,再用3×3的卷积核学习,最后用1×1的卷积核去降维

      升维后再进行卷积操作会不会导致计算量过大?不会,因为一个深度卷积核只对特征层一个通道进行,所以计算量不会过高。此外升维后还能提取更多的特征。

      image-20230306132707159

      t c n stride
      扩展因子 bottleneck输出矩阵的通道数 bottleneck重复的次数 每个block第一层的bottleneck的步距长度
      倒残差结构中扩展的倍率 一个block可能会由多个bottleneck组成
      image-20230306141502979
  • MobileNetV3:用NAS搜到一个网络结构,在此基础上稍作修改

    • 更新block结构(命名为bneck)

      • h-swish 激活函数

        由于非线性激活函数swish x=x*sigmoid(x)计算较为复杂,尤其求导过程更为困难

        提出h-swish激活函数用x×hard-sigmoid激活函数

      • SENet 结构(注意力机制)

    • 使用NAS搜索参数(neutal Architecture Search)

    • 重新设计耗时层结构

    网络结构

    image-20230307212145704

其中每个block(bneck)详细结构为

image-20230307212707617

激活函数

  • swish激活函数

  • img

  • 新的激活函数(hard-swish): h-swish 是基于 swish 激活函数的改进,所以先了解一下 swish, swish 具备无上届有下界、平滑、非单调的特性。并且 swish 在深层模型上的效果优于 ReLU

image-20230305152822789

在这里插入图片描述

采用RELU6主要是为了在移动端float16的低精度的时候,也能有很好的数值分辨率,如果对ReLu的输出值不加限制,那么输出范围就是0到正无穷,而低精度的float16无法精确描述其数值,带来精度损失。

通道注意力

引入SENet 引入轻量级注意力机制网络,通过压缩、激励、给不同层权重

image-20230305152907178 img

SE代表的是Squeeze-and-Excitation这两个阶段

  1. Squeeze阶段

    ①:对输入进行一个全局平均池化,即对每个通道均计算均值

image-20230305153656640

\[z\in\mathbb{R}^{C}z_{i}=F_{s q u e e x e}\big(u_{i}\big)=\frac{1}{H_{i}W_{i}}\sum_{x}\sum_{y}u_{i}\big(x,y\big)\quad \]

​ ②:两个全连接层进行训练,利用倒置残差(Inverted Residuals)

2.Excitation阶段

​ ①:经过第一个全连接层squeeze降维后,经激活函数再进行第二全连接层excitation升维

改进

将通道注意力改为通道与空间结合的混合注意力算法(CBAM),此外对每个通道还乘以每个通道的熵值


ShuffleNet网络

shuffleNet这篇论文除了提出ShuffleChannel思想外,更像是一种模型推理效率的证明。不用的groupconv,以及不同的串并联结构,对flops以及mac的影响

ShuffleChannel思想(通道重排操作):

把分组卷积的每个组的对应通道进行重组合,联系各个通道之间的关系

image-20230315224759781

计算量比较

image-20230315230815851

先通过1×1的分组卷积,然后进行channel shuffle再进行深度可分离卷积再用1×1的分组卷积回复通道数

下图分别是ShuffleNetv1的stride为1、2的版本和ShuffleNetv2 stride为1、2的版本

当不用分组卷积的时候就没有用channel shuffle的必要了

image-20230316121615326

提出的四点推理效率证明:

  • 要使用平衡的convolutions,使输出channal与输入channel尽可能相等

  • \[ 设hw为特征图的空间大小,则1×1的 conv 的计算量FLOPs为hwc_1c_2。\\存储访问成本为 MAC=hw(c_1+c_2)+c_1c_2\\ 从均值不等式,可以得到 \text{MAC}\geq2\sqrt{hwB}+\frac{B}{hw}.所以当输入c_1c_2相等时,能达到下限 \]

  • 大量的分组卷积数量会增加存储访问 (Group 计算成本,虽然增大group数,能降低flops,甚至提高acc,但是会降低推理速度)

  • 网络分支过多会降低其并行化程度,尤其是GPU上的并行速度 (并行结构与串行结构比较)

image-20230316120328016
  • element-wise(对每个元素操作的)操作带来的影响是不可忽视的

    比如①因为把数据序列化后可以组成矩阵,用矩阵乘法形式进行处理并学习

image-20230329220815073

- Relu
- addtensor
- addbias

对flops影响很小,但对MAC有一定影响

轻量化网络总结

ShuffleNet与MobileNet

  • ShuffleNet

    • 适用于对模型大小和计算量有较高要求的场景
      • 分组卷积可以减少计算量和参数量。
      • 均值池化代替全连接层可以减少模型参数的数量。
    • 通道重排操作可以增加特征的多样性,提高模型的表达能力。
  • 而MobileNet则更适用于对模型速度和准确性有较高要求的场景

    • 有SE模块
    • 相比shufflenet网络复杂一些,稍慢,但准确率高
    • 有倒残差结构
posted @ 2020-07-18 17:53  智健  阅读(1525)  评论(0编辑  收藏  举报