文章目录

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

前言

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

基本概念

感受野

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

分辨率

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

深度

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

宽度

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

下采样

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

  • 采用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(浮点运算数)。计算量也是指的前向推理过程中乘加运算的次数。

卷积计算类型

标准卷积

如下图所示:

深度卷积

分组卷积

空洞卷积

转置卷积

可变性卷积

其他算子

池化

  • 最大池化和平均池化

全连接计算

Addition / Concatenate

Channel shuffle

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

  1. 深度学习~卷积神经网络(CNN)概述

    目录​​​​​​​ 1. 卷积神经网络的形成和演变 1.1 卷积神经网络结构 1.2 卷积神经网络的应用和影响 1.3 卷积神经网络的缺陷和视图 1.3.1 缺陷:可能错分 1.3.2 解决方法:视图 ...

  2. 深度学习之卷积神经网络(11)卷积层变种

    深度学习之卷积神经网络(11)卷积层变种 1. 空洞卷积 2. 转置卷积 矩阵角度 转置卷积实现 3. 分离卷积 卷积神经网络的研究产生了各种各样优秀的网络模型,还提出了各种卷积层的变种,本节将重点介 ...

  3. 深度学习之卷积神经网络(10)CIFAR10与VGG13实战

    深度学习之卷积神经网络(10)CIFAR10与VGG13实战 MNIST是机器学习最常用的数据集之一,但由于手写数字图片非常简单,并且MNIST数据集只保存了图片灰度信息,并不适合输入设计为RGB三通 ...

  4. 深度学习之卷积神经网络(8)BatchNorm层

    深度学习之卷积神经网络(8)BatchNorm层 BatchNorm层概念 BatchNorm层实现 1. 向前传播 2. 反向更新 3. BN层实现 4. 完整代码 卷积神经网络的出现,网络参数量大 ...

  5. 深度学习之卷积神经网络(6)梯度传播

    深度学习之卷积神经网络(6)梯度传播  在完成手写数字图片识别实战后,我们对卷积神经网络的使用有了初步的了解.现在我们来解决一个关键问题,卷积层通过移动感受野的方式实现离散卷积操作,那么它的梯度传播是 ...

  6. 深度学习之卷积神经网络(3)卷积层实现

    深度学习之卷积神经网络(3)卷积层实现 1. 自定义权值 2. 卷积层类  在TensorFlow中,既可以通过自定义权值的底层实现方式搭建神经网络,也可以直接调用现成的卷积层类的高层方式快速搭建复杂 ...

  7. 深度学习之卷积神经网络(2)卷积神经网络结构

    深度学习之卷积神经网络(2)卷积神经网络结构 1. 单通道输入和单卷积核 2. 多通道输入和单卷积核 3. 多通道输入.多卷积核 4. 步长 5. 填充  卷积神经网络通过充分利用局部相关性和权值共享 ...

  8. 深度学习之卷积神经网络(1)什么是卷积

    深度学习之卷积神经网络(1)什么是卷积 1. 全连接网络的问题 2. 局部相关性 3. 权值共享 4. 卷积运算 1. 全连接网络的问题  首先我们来分析全连接网络存在的问题.考虑一个简单的4层全连接 ...

  9. 【深度学习】卷积神经网络-图片分类案例(pytorch实现)

    前言 前文已经介绍过卷积神经网络的基本概念[深度学习]卷积神经网络-CNN简单理论介绍.下面开始动手实践吧.本文任务描述如下: 从公开数据集CIFAR10中创建训练集.测试集数据,使用Pytorch构 ...

  10. Kaggle深度学习与卷积神经网络项目实战-猫狗分类检测数据集

    Kaggle深度学习与卷积神经网络项目实战-猫狗分类检测数据集 一.相关介绍 二.下载数据集 三.代码示例 1.导入keras库,并显示版本号 2.构建网络 3.数据预处理 4.使用数据增强 四.使用 ...

最新文章

  1. 无线渗透--wifiphisher之wifi钓鱼获取wifi密码
  2. Spark UDF用户自定义函数
  3. 使用android ProgressBar和Toast生成一个界面
  4. SparkStreaming Exception in thread main java.lang.IllegalArgumentException xxx is not a valid
  5. 一位跟我一样疑惑的同学~
  6. 什么是可变变量以及如何使用
  7. 算法导论第八章__实现计数排序
  8. 宣传思想社工计算机考试内容,社工考试主要考什么?
  9. 折线图_R语言画折线图?
  10. 一个令周润发感动流泪的故事《树》
  11. hangup_after_bridge
  12. Linux目录结构和常用指令
  13. mysql导入本地文件_Mysql透过txt文件导入本地数据_mysql
  14. matlab eval函数用法
  15. 【操作系统】死锁相关知识点
  16. python进制间的转换
  17. Pycharm 找不到对应字体
  18. 求伯君—金山电脑公司总裁
  19. 英文SEO采集伪原创软件Kontent Machine注册使用实战教程!
  20. 【音乐】AddictiveDrums2鼓音源安装(非kontakt)

热门文章

  1. 32/64位Win7_2017.09通用多合一安装版/Ghost版
  2. 关于备考软考过程中历年真题的说明
  3. debug error/runtime error的原因之一
  4. 长岭县机器人项目_长岭县专业编制项目立项申请报告
  5. C语言的32个关键字怎么背,C语言32个关键字,精心整理带中文翻译
  6. 【九天教您南方cass 9.1】 11 方格网土方计算
  7. utf-8 编码 转换 汉字 字符集
  8. CEC2018:动态多目标测试函数DF1~DF5的PS及PF
  9. java web导出excel表格,java 网页导出excel表格数据-java 将页面内容写入excel文件中并可以将其下载到......
  10. fpgrowth算法实战 mlib_sparkmllib关联规则算法(FPGrowth,Apriori)