点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

文章导读

卷积是深度学习中的重要组成部分,在日常搭建神经网络的过程中我们会遇到各种类型的卷积操作,有2D卷积,3D卷积,分组卷积等等形式。本文针对各种卷积的工作原理、特性和应用进行详细的介绍。

目录

  • 普通卷积

  • 3D卷积

  • 扩张卷积

  • 分组卷积

  • 转置卷积

  • 可分离卷积

  • 可变形卷积

普通卷积

在信号处理领域,卷积是两个变量(其中一个变量经过翻转、位移)在某范围内相乘后求和的结果。

深度学习中卷积的概念与之相似(只是深度学习的卷积在运算过程中的滤波器不经过翻转),卷积核以一定的步长在输入图片上滑动,每一步都将对应元素相乘后求和的过程,如下图所示:

(1)卷积核大小:卷积核大小定义了卷积的视图。根据卷积核的大小,常见的卷积尺寸有1×1卷积、3×3 卷积、5×5卷积、7×7卷积等。

1×1卷积:通常用于输出维度的升维或降维。若特征图是尺寸是H x W x D,卷积核尺寸是1 x 1x D,输出通道尺寸是H x W x 1。当我们将N次1x1卷积结果连接在一起时,可以得到H x W x N的输出,从而实现升维或降维的功能;

3×3卷积:由于大尺寸的卷积核的参数量较大,研究人员发现两个3×3卷积的堆叠,感受野等同于一个5×5卷积,但是参数量却减少了。所以从VGG的时代开始,基本后面的网络都离不开它的身影。

5×5卷积:卷积核越大,感受野越大,看到的图片信息越多,所获得的全局特征越好。但是这样参数很多,会导致计算量暴增,层次少不利于模型深度的增加,表达能力弱。所以我们会看到在早期的网络会出现大卷积核的堆叠,或者当下研究人员一般将大尺寸卷积放在对输入图片的初始操作处(7×7同理)。

(2)步长:卷积核的步长定义了卷积核在图像中移动的每一步的大小,代表提取的精度,通常为 1。也可以用大于等于2的步长,对图像进行下采样,替代池化操作。

(3)填充:卷积核与输入图像的尺寸不匹配,这时就需要填充图像。例如输入图片尺寸为5*5,卷积核的大小为3*3,如果不进行填充,步长为1的话,当卷积核沿着图片滑动后只能滑动出一个3*3的图片出来,卷积后的图片越变越小,且输入图片边缘像素只被计算过一次,而中间像素会被卷积计算多次,意味着丢失图像角落信息。所以为了避免这种情况,需要先对原始图片做边界填充处理。

3D卷积

3D卷积的卷积核可以在输入图像的3个方向,即图像的高度,宽度,深度上移动。并与二维卷积类似,在每个位置各元素先相乘再相加,最后输出一个3D数据,如下图所示:

卷积特性:相比于普通的二维卷积,多了一个维度(深度),可以把这个深度当作视频中的连续帧,或者是立体图像中的不同的切片。但是其参数量较大,会延缓网络的推理速度。

应用场景:3D卷积常应用在视频分类、医学影像、点云处理等领域。比如经典的VoxelNet网络就采用3D CNN提取点云的体素特征做目标检测任务。

扩张卷积

扩张卷积通常用于图像分割、语音识别、文本分析等领域。它是将标准的卷积核进行扩张,来增加模型的感受野。扩张卷积比一般卷积操作,多了一个参数扩张率(卷积核的点的间隔数量)。如下图所示:

(a)是3*3的普通卷积核,也可以看成扩张率d=1的扩张卷积,感受野为3*3;

(b)是扩张率d=2的扩张卷积,感受野为7*7;

(c)是扩张率d=4的扩张卷积,感受野为15*15;

扩张的好处:使得在相同的计算成本下,避免因池化损失信息而增大了感受野。

存在的问题:因为卷积核存在间隔,所以不是所有的输入都参与计算,特别是当叠加的卷积层所用的扩张率相同的时候,特征图上会表现出一种卷积中心点的不连续性。如下图所示:

三个扩张率都为2的扩张卷积层连续卷积后得到的结果,蓝色的标识是参与计算的卷积中心,而颜色的深浅表示次数的多少。因为3次卷积的扩张率是相同的,所以卷积的计算中心会呈现出一种网格状向外扩展,即会出现不连续的情况。

解决的方法:可以采用混合扩张卷积的方法,即不连续使用相同扩张率的扩展卷积,而且扩张率也不能成倍数增加。所以最好将连续的扩张卷积的扩张率设置为“锯齿状”,比如分别是[1,2,3],那么卷积中心的分布就不会再有不连续的情况。

分组卷积

分组卷积就是要对输入特征图进行分组,将输入特征图深度Din分成g组(图中g=2),则每组输入特征图的尺寸为 Hin × Win × (Din / g) 。对应的卷积核为(Dout / g)个大小为h × w × (Din / g),所以每组输出特征图尺寸为Hout × Wout × (Dout / g)。对g组的结果进行拼接,得到最终的输出特征图尺寸Hout × Wout × Dout。如下图所示:

卷积的特性:分组卷积最早是为了解决显存不够的问题,将网络分布在两张显卡上训练,能够减少训练参数,不容易出现过拟合。

后来出现在shuffleNet等轻量化的网络中用于减少网络参数,提高在ARM等嵌入式部署神经网络时的运算速度。

转置卷积

在神经网络中,我们经常需要上采样来提高低分辨率图片的分辨率。而转置卷积就可以作为一种通过卷积学习参数,从而获得最优上采样的方法。

下图是一个4x4的输入矩阵,用3x3的卷积核进行没有填充,步长为1的卷积操作, 结果是一个2x2的矩阵。

我们将3x3的卷积核重排为4x16的形式(下图第一项),同时将4x4的输入矩阵展开为16x1的列向量的形式(下图第二项)。通过矩阵乘法得到一个4x1的列向量,可以看出这个列向量正是由上图的2x2卷积输出矩阵展开得到的。也就是说,我们可以将卷积操作写成矩阵乘法运算。

通过这样的操作,可以把16(4x4的矩阵)个值映射为4(2x2的矩阵)个值. 那么将这个操作反过来,我们就可以把4(2x2的矩阵)个值映射为16(4x4的矩阵)。

最后将输出矩阵可以重排为 4x4的形式。

卷积特征:虽然转置卷积能够通过学习参数进行最优的上采样,但是实际应用中,研究人员往往更加倾向于使用线性插值的方式做上采样,效率更高。

可分离卷积

1. 空间可分离卷积

空间可分离卷积主要处理图像和卷积核的空间维度:宽度和高度。它将一个卷积核划分为两个较小的卷积核。如将3x3的卷积核分为3x1和1x3的卷积核,再依次进行卷积。如此,则可以将一次卷积的9次乘法减少为两次卷积共6次乘法,减少计算量,从而加快网络运行速度。

2. 深度可分离卷积

深度可分离卷积不仅涉及空间维度,还对深度维度进行处理。它主要分为两个过程,分别为逐通道卷积和逐点卷积。

●逐通道卷积

逐通道卷积的卷积核与通道是一一对应的,所以输出的特征图片的深度和输入的深度完全一样。

●逐点卷积

逐点卷积的运算与常规卷积运算相似,它的卷积核的尺寸为1×1×M,M为上一层的深度。它是将上一步的特征图在深度方向上进行加权相加,生成新的特征图。有几个卷积核就有几层新的特征图输出。

卷积特性:深度可分离卷积的优势在于需要提取的属性越多,就能够节省越多的参数,减少计算量。最早出现在mobilenet中,也是用于轻量化网络的特征提取部分,使嵌入式部署的神经网络推理更快速。

可变形卷积

可变形卷积是一种卷积核内部点按不规则的方式组合,如下图所示:

(a) 普通卷积采样 的9 个点(绿点);

(b)(c)(d)都为可变形卷积,在普通卷积采样坐标上加上一个位移量(蓝色箭头),得到变形的采样位置(深蓝点)。

普通卷积输出特征图中每一个位置 P0:

可变形卷积增加一个偏移量进行扩张,同样的位置P0变为:

卷积特性:对于输入的一张特征图,把普通卷积的过程分成两路,先通过上面一路学习得到offset;下面的可变形卷积是基于上面生成的offset,我们的卷积窗口将由规整的绿色窗口变成蓝色部分,然后再执行普通的卷积。

如下图所示,左边普通卷积方法没有提取到完整绵羊的特征,而右边的可变形卷积方法提取到了完整的绵羊的特征:

好消息!

小白学视觉知识星球

开始面向外开放啦

一文详解各种卷积操作相关推荐

  1. 【卷积神经网络结构专题】一文详解AlexNet(附代码实现)

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]本文是卷积神经网络结构系列专题第二篇文章,前面我们已经介绍了第一个真正意义 ...

  2. 一文详解 YOLO 2 与 YOLO 9000 目标检测系统

    一文详解 YOLO 2 与 YOLO 9000 目标检测系统 from 雷锋网 雷锋网 AI 科技评论按:YOLO 是 Joseph Redmon 和 Ali Farhadi 等人于 2015 年提出 ...

  3. 一文详解决策树算法模型

    AI有道 一个有情怀的公众号 上文我们主要介绍了Adaptive Boosting.AdaBoost演算法通过调整每笔资料的权重,得到不同的hypotheses,然后将不同的hypothesis乘以不 ...

  4. Python-Matplotlib可视化(10)——一文详解3D统计图的绘制

    Python-Matplotlib可视化(10)--一文详解3D统计图的绘制 前言 3D散点图 3D曲线图 3D标量场 绘制3D曲面 在3D坐标轴中绘制2D图形 3D柱形图 系列链接 前言 Matpl ...

  5. Python-Matplotlib可视化(1)——一文详解常见统计图的绘制

    Python-Matplotlib可视化(1)--一文详解常见统计图的绘制 matplotlib库 曲线图 曲线图的绘制 结合Numpy库,绘制曲线图 绘制多曲线图 读取数据文件绘制曲线图 散点图 条 ...

  6. 一文详解宏基因组组装工具Megahit安装及应用

    要点 Megahit简介 Megahit的基本组装原理 Megahit的安装和使用 Megahit实战 hello,大家好,今天为大家带来关于宏基因组组装工具Megahit的超详细安装及应用教程. 我 ...

  7. 一文详解Pandas

    一文详解Pandas 一.Pandas概述 二.Pandas数据结构 2.1 Series 2.2 DataFrame数据结构 二.数学与统计计算 三.DataFrame的文件操作 3.1 读取文件 ...

  8. 时空之轮Android手柄,时空之轮图文完整攻略(超时空之轮(ChronoTrigger)最详细攻略图文详解)...

    时空之轮图文完整攻略(超时空之轮(ChronoTrigger)最详细攻略图文详解),哪吒游戏网给大家带来详细的时空之轮图文完整攻略(超时空之轮(ChronoTrigger)最详细攻略图文详解)介绍,大 ...

  9. 从基础到进阶,一文详解RocketMQ事务消息,看完不会跪键盘

    本文转载自:从基础到进阶,一文详解RocketMQ事务消息,看完不会跪键盘 事务消息是RocketMQ提供的非常重要的一个特性,在4.x版本之后开源,可以利用事务消息轻松地实现分布式事务.本文对Roc ...

最新文章

  1. 山西计算机软考知识点,计算机软考考试必备知识点:数据标准化
  2. 牛津大学名誉教授Colin Blakemore:大脑是如何计算的?
  3. signature=3ba70fa0be2ca50c615373e5495718b1,翻译文化观与翻译改写
  4. Win32 API 打开另一个进程
  5. (有图片)汇编工具dosbox下自动mount及切换虚拟目录使用步骤。
  6. Java学习lesson 02
  7. 视频光端机常见故障问题及处理方法大全
  8. esx4克隆后的处理工作
  9. PHP文件可限速下载代码
  10. ubuntu怎么设置linux的ip地址,linux,ubuntu设置ip
  11. 结巴分词代码java_java版结巴分词工具
  12. python制作网页挂机_Python实现自动挂机脚本(GUI 打包)
  13. 齐聚一堂:共话网络安全人才培养新模式
  14. tensorflow中gpu和cpu切换
  15. Python实操:正态分布检验
  16. 如何一键重装Win10系统图文教程
  17. lisp 练习取得对象属性
  18. 网易云音乐登录报错 status: 400, body: { code: -460, message: ‘网络太拥挤,请稍候再试!‘ } 解决
  19. Windows常用快捷键总结【日常总结】
  20. 【饭谈】为什么别人都劝你别做外包?

热门文章

  1. 均线颜色怎么区分_5日均线,20日均线怎么分辨呀?颜色还是什 – 手机爱问
  2. 历史上最全的中文博客搜索网站介绍
  3. 软件架构设计箴言理解 (转自博客园)
  4. 一个女中医写的女人保养秘笈
  5. 综合评价指标的筛选办法
  6. 委托与事件-观察者设计模式_老鹰捉小鸡
  7. 华为平板运行linux,LG G Pad 5新平板电脑曝光 华为MateBook 13 Linux版上架
  8. 曹政:产品经理如何培养细节意识
  9. 飞桨实战营-图像分割学习笔记和心得体会
  10. etc/network/interfaces