深度学习 轻量级卷积神经网络设计综述

文章目录

  • 前言
  • 基本概念
    • 感受野
    • 分辨率
    • 深度
    • 宽度
    • 下采样
    • 上采样
    • 参数量
    • 计算量
  • 卷积计算类型
    • 标准卷积
    • 深度卷积
    • 分组卷积
    • 空洞卷积
    • 转置卷积
    • 可变性卷积
  • 其他算子
    • 池化
    • 全连接计算
    • Addition / Concatenate
    • Channel shuffle

前言

卷积神经网络架构设计,又指backbone设计,主要是根据具体任务的数据集特点以及相关的评价指标来确定一个网络结构的输入图像分辨率,深度,每一层宽度,拓扑结构等细节。目前人工智能技术应用的一个趋势是在端侧平台上部署高性能的神经网络模型并能在真实场景中实时(大于30帧)运行,如移动端/嵌入式端设备。这些平台的特点是内存资源少,处理器性能不高,功耗受限,这使得目前精度最高的模型由于对内存和计算资源的超额要求使得根本无法在上面部署且达到实时性的要求。虽然可以通过知识蒸馏,通道剪枝,低比特量化等一系列手段来降低模型参数量和计算量,但仍然远远不够,且在精度和帧率之间各种trade-off也非常繁琐。所以直接设计轻量级的架构,然后结合剪枝量化是最有效的解决办法。本文参考自:综述:轻量级CNN架构设计。

基本概念

感受野

感受野指的是卷积神经网络每一层输出的特征图(feature map)上每个像素点映射回输入图像上的区域大小,神经元感受野的范围越大表示其能接触到的原始图像范围就越大,也意味着它能学习更为全局,语义层次更高的特征信息,相反,范围越小则表示其所包含的特征越趋向局部和细节。因此感受野的范围可以用来大致判断每一层的抽象层次,并且我们可以很明显地知道网络越深,神经元的感受野越大。
深度学习 轻量级卷积神经网络设计综述_第1张图片

分辨率

分辨率指的是输入模型的图像尺寸,即长宽大小。通常情况会根据模型下采样次数n和最后一次下采样后feature map的分辨率 k × k k\times k k×k来决定输入分辨率的大小,即:
r = k × 2 k r = k \times 2^k r=k×2k
从输入 r × r r \times r r×r到最后一个卷积特征feature map的 k × k k\times k k×k,整个过程是一个信息逐渐抽象化的过程,即网络学习到的信息逐渐由低级的几何信息转变为高级的语义信息,这个feature map的大小可以是 3 × 3 3 \times 3 3×3 5 × 5 5\times 5 5×5 7 × 7 7\times 7 7×7 9 × 9 9\times 9 9×9等等,k太大会增加后续的计算量且信息抽象层次不够高,影响网络性能,k太小会造成非常严重的信息丢失,如原始分辨率映射到最后一层的feature map有效区域可能不到一个像素点,使得训练无法收敛。

深度

神经网络的深度决定了网络的表达能力,它有两种计算方法,早期的backbone设计都是直接使用卷积层堆叠的方式,它的深度即神经网络的层数,后来的backbone设计采用了更高效的module(或block)堆叠的方式,每个module是由多个卷积层组成,它的深度也可以指module的个数,这种说法在神经架构搜索(NAS)中出现的更为频繁。通常而言网络越深表达能力越强,但深度大于某个值可能会带来相反的效果,所以它的具体设定需要不断调参得到。

宽度

宽度决定了网络在某一层学到的信息量,但网络的宽度时指的是卷积神经网络中最大的通道数,由卷积核数量最多的层决定。通常的结构设计中卷积核的数量随着层数越来越多的,直到最后一层feature map达到最大,这是因为越到深层,feature map的分辨率越小,所包含的信息越高级,所以需要更多的卷积核来进行学习。通道越多效果越好,但带来的计算量也会大大增加,所以具体设定也是一个调参的过程,并且各层通道数会按照8×的倍数来确定,这样有利于GPU的并行计算。

深度学习 轻量级卷积神经网络设计综述_第2张图片

下采样

下采样层有两个作用,一是减少计算量,防止过拟合,二是增大感受野,使得后面的卷积核能够学到更加全局的信息。下采样的设计有两种:

  • 采用stride为2的池化层,如Max-pooling或Average-pooling,目前通常使用Max-pooling,因为它计算简单且最大响应能更好保留纹理特征;
  • 采用stride为2的卷积层,下采样的过程是一个信息损失的过程,而池化层是不可学习的,用stride为2的可学习卷积层来代替pooling可以得到更好的效果,当然同时也增加了一定的计算量。

上采样

上采样的操作一般在语义分割中比较常见,因为需要将图像恢复到原来的尺寸上进行进一步计算。上采样一般有三种方式:

  • 插值,一般使用的是双线性插值,因为效果最好,虽然计算上比其他插值方式复杂,但是相对于卷积计算可以说不值一提;
  • 转置卷积又或是说反卷积,通过对输入feature map间隔填充0,再进行标准的卷积计算,可以使得输出feature map的尺寸比输入更大;
  • Max Unpooling,在对称的max pooling位置记录最大值的索引位置,然后在unpooling阶段时将对应的值放置到原先最大值位置,其余位置补0;

参数量

参数量指的网络中可学习变量的数量,包括卷积核的权重weight,批归一化(BN)的缩放系数γ,偏移系数β,有些没有BN的层可能有偏置bias,这些都是可学习的参数 ,即在模型训练开始前被赋予初值,在训练过程根据链式法则中不断迭代更新,整个模型的参数量主要由卷积核的权重weight的数量决定,参数量越大,则该结构对运行平台的内存要求越高,参数量的大小是轻量化网络设计的一个重要评价指标。

计算量

FLOPs即floating point operations(浮点运算数)。计算量也是指的前向推理过程中乘加运算的次数。

卷积计算类型

标准卷积

如下图所示:
深度学习 轻量级卷积神经网络设计综述_第3张图片

深度卷积

深度学习 轻量级卷积神经网络设计综述_第4张图片

分组卷积

深度学习 轻量级卷积神经网络设计综述_第5张图片

空洞卷积

深度学习 轻量级卷积神经网络设计综述_第6张图片

转置卷积

深度学习 轻量级卷积神经网络设计综述_第7张图片

可变性卷积

深度学习 轻量级卷积神经网络设计综述_第8张图片

其他算子

池化

  • 最大池化和平均池化
    深度学习 轻量级卷积神经网络设计综述_第9张图片

全连接计算

深度学习 轻量级卷积神经网络设计综述_第10张图片

Addition / Concatenate

深度学习 轻量级卷积神经网络设计综述_第11张图片

Channel shuffle

深度学习 轻量级卷积神经网络设计综述_第12张图片

你可能感兴趣的:(人工智能,深度学习,cnn,人工智能)