参考:https://zhuanlan.zhihu.com/p/22038289?refer=intelligentunit
https://iamaaditya.github.io/2016/03/one-by-one-convolution/
http://blog.csdn.net/yiliang_/article/details/60468655
http://blog.csdn.net/chaipp0607/article/details/60868689
http://blog.csdn.net/a1154761720/article/details/53411365

卷积

以下简要的概述一下卷积之后的输出数据的尺寸的求法,至于卷积的具体概念这里不再涉及。

滤波器的超参数

我们约定以下参数:
1. 滤波器(即filter)的数量为 K
2. 滤波器的空间尺寸为 F
3. 步长为 S
4. 零填充数量为 P

卷积之后

假设输入数据体的尺寸W1*H1*D1,输出数据体的尺寸是W2*H2*D2,那我们如何求得输出数据体的尺寸呢?在这里基于先前的约定,我们使用公式W2 = (W1-F+2P)/S+1;H2=(H2-F+2P)/S+1 ,D2 = K。我们会发现卷积之后的图像的深度其实是由filter的个数来决定的,而并不取决于原始数据的通道数。

一点注意

在上面求H2、W2的过程中,我们有时得到的W2、H2不是整数。如(W1-F+2P)/S+1 = (10-3+0)/2+1=4.5的结果不是整数,这就是说神经元不能整齐对称地滑过输入数据体。因此,这些超参数的设定就被认为是无效的。
解决的办法有:或者修改零填充(padding)值来让设置合理,或者修改输入数据体尺寸来让设置合理,或者用其他什么措施。

贴出一张卷积过程的动态图帮助理解

1*1的卷积

1*1的卷积并不会改变图像的分辨率,而会改变图像的深度。

过滤器的深度

首先我们应当明确的是局部连接的深度(即filter的第3个维度)总是与输入数据一致。具体来说,在CNN中,一般我们处理的数据都是M*N*D这样形式的图像。其中M、N代表图像的长和宽,而D代表图像的深度。当我们给定输入数据的时候,例如输入是28*28*192,此时我们指定filter的大小F =3,P=0,S = 1,K=96。那么根据先前的叙述可以求得卷积之后的W2=(28-3)/1+1 =26;H2=(28-3)/1+1=26,D2 = 96 最终得到的输出数据为26*26*96。仔细追究一下,那到底filter是怎样形式的?这个一开始我是比较疑惑的,但是现在明白了。我们把上面的例子更具体的展开,其实这个卷积核具体的形式是3*3*192,而不是单单的3*3,虽然在描述卷积核时从不提卷积核的深度192。而这个192就是输入数据的深度,也就是印证了上面一开始说的【局部连接的深度总是与输入数据一致】。因为这句约定俗成的话,所以在说卷积核的时候都不提卷积核的深度。

1*1卷积的作用

为什么需要1*1的卷积呢?

单通道输入

简单地看,如果我们的输入是一个单通道的图像,而卷积核就是1*1*1的(最后那个1一般不给出),那么1*1卷积的过程就如下图所示。在数学意义上讲就是对输入进行了比例缩放。因为1*1卷积核只有一个参数,这个核在输入上滑动,就相当于给输入数据乘以一个系数。

多通道输入

当输入是多通道的时候,可以实现跨通道的交互和信息整合。具有线性修正特性,实现多个feature map的线性组合,这个线性组合的权重由1*1 的卷积核内的元素决定,也可以实现feature map在通道个数上的变化,也就是实现经过1*1卷积之后的输出数据的通道数的变化。我们都知道【卷积之后的输出数据的通道数是由卷积核的个数决定的】,例如有16个卷积核,那么不用管输入数据如何,经过卷积之后的输出数据就是16通道的。正是由于可以控制输出数据的通道数的变化,使得1*1的卷积具有降维或者升维功能。
形象地用下面的图片来形象化上面的叙述,我们假设有1个6通道的输入,为了简单其间,每一个通道都是W*H大小的图像,我并没有画出一个立方体(应该是W*H*6),但这并不影响理解。

我们可以想象在立方体的深度方向的某一个具体位置(x,y)穿插而过得到的就是一个1*1*6大小的纤维。将该纤维同1*1卷积核卷积,就会得到一个数。用数学式表示就是
sum = 权重1*通道1的(x,y)+权重2*通道2的(x,y)+……+权重6*通道6的(x,y)。点积求和使得全部6个通道的对应位置的信息(像素值)被整合在一起。注意该卷积核的结果只有一个通道。这就是1*1卷积在多通道输入中所作的事情。倘若我们有多个1*1的卷积核,那么我们的输出的通道数也就是1*1卷积核的数目一致。

举个例子

举个例子,比如某次卷积之后的结果是W*H*6的特征,现在需要用1*1的卷积核将其降维成W*H*5,即6个通道变成5个通道。
那么我们应该怎样做?无需多言,自然能根据输出是5通道来决定使用5个1*1的卷积核即可。通过一次卷积操作,W*H*6将被1*1的卷积核变为W*H*1,这样的话,使用5个1*1的卷积核,显然可以卷积出5个W*H*1,再做通道的串接操作,就实现了W*H*5。

实际应用

我们可以通过一个例子来直观地感受使用1*1卷积的好处。以googlenet[3]中的inception模块为例,来说明1x1的卷积如何来减少模型参数。

左图是没有应用1*1卷积的情况,而右图是应用了1*1卷积的情况。
输入都是28x28x192大小;
对于左图的参数,卷积核大小以及卷积通道数分别为:包括三种卷积核,分别是1x1x64,3x3x128,5x5x32;
对于右图的参数,我们在3x3,5x5 convolution前新加入的1x1的卷积核分别为96和16通道的,在max pooling后加入的1x1卷积为32通道。
那么左图的参数为:(1x1x192x64)+(3x3x192x128)+(5x5x192x32) =387072
右图的参数个数为:(1x1x192x64)+(1x1x192x96)+(1x1x192x16)+(3x3x96x128)+(5x5x16x32)+(1x1x192x32)=163328

1*1的卷积核的作用相关推荐

  1. 卷积神经网络理解及1*1卷积核的作用

    一. 单通道图像的卷积计算过程 下面各图中所有数学符号的说明如下: n:图片的宽度和高度 n_c:表示图片的通道数 f: 过滤器的尺寸大小 m: 过滤器的数量 Q: 卷积运算后的输出图像的尺寸大小 p ...

  2. 1*1卷积核的作用(bottleneck的作用)

    上来先说 1 ∗ 1 1*1 1∗1卷积核的作用: 特征降维,节省计算量 增加模型非线性表达能力 举例:因为bottleneck( 1 ∗ 1 1*1 1∗1卷积核)是在2014年的GoogLeNet ...

  3. 深度学习基础学习-1x1卷积核的作用(CNN中)

    前言 这里就不赘述卷积神经网络相关内容了,直接通过博主看的一些资料,自己进行了一些整合,大佬绕道. 对于1x1卷积核的作用主要可以归纳为以下几点 增加网络深度(增加非线性映射次数) 升维/降维 跨通道 ...

  4. CNN 中1X1卷积核的作用

    转载自: http://blog.csdn.net/u014696921/article/details/52950247 http://www.caffecn.cn/?/question/136 从 ...

  5. 【深度学习】CNN 中 1x1 卷积核的作用

    最近研究 GoogLeNet 和 VGG 神经网络结构的时候,都看见了它们在某些层有采取 1x1 作为卷积核,起初的时候,对这个做法很是迷惑,这是因为之前接触过的教材的例子中最小的卷积核是 3x3 , ...

  6. Lesson 16.5 在Pytorch中实现卷积网络(上):卷积核、输入通道与特征图在PyTorch中实现卷积网络(中):步长与填充

    卷积神经网络是使用卷积层的一组神经网络.在一个成熟的CNN中,往往会涉及到卷积层.池化层.线性层(全连接层)以及各类激活函数.因此,在构筑卷积网络时,需从整体全部层的需求来进行考虑. 1 二维卷积层n ...

  7. 为什么使用1 * 1 的卷积核

    为什么使用 1* 1卷积核? 作用: 1.实现跨通道的交互和信息整合 2. 进行卷积核通道数的降维和升维 3. 在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性 跨通 ...

  8. 图像卷积详细解释 常用卷积核解释说明

    神经网络中的卷积层,它的原理就来源于图像卷积 概述 卷积在信号处理领域有极其广泛的应用, 也有严格的物理和数学定义. 本文只讨论卷积在数字图像处理中的应用. 在数字图像处理中, 有一种基本的处理方法: ...

  9. 关于卷积核大小的论文与思路

    随着近些年深度学习的发展,人们在选用卷积神经网络时通常都会默认卷积核为3×3 或者5×5的,感觉像已经是一个默认的公式一样了.正常来说大的卷积核不是可以获得更大的感受野对模型性能更好吗?怎么大家都不用 ...

  10. pytorch深度学习基础(九)——深入浅析卷积核

    深入浅析卷积核 引言 单通道卷积 简单图像 边缘检测 锐化 高斯滤波 引言 提到卷积,应该多数人都会想到类似上图的这种示例,可以简单的理解成卷积核与图像中和卷积核相同大小的一块区域与卷积核相乘再求和, ...

最新文章

  1. 138.ssm 框架下 导出Excel
  2. hadoop 023.0与hadoop 1.0 io.serializable分析
  3. 第十六周项目3:max带来的冲突
  4. Altium Designer隐藏电气连接线
  5. POJ2118基础矩阵快速幂
  6. 使用RHEL5做NTP服务器出错解决
  7. VTK:小部件之CaptionWidget
  8. 数据类型不匹配_笔记 | 自学Python 06:数据类型之列表
  9. ASP.NET Core MVC 控制器创建与依赖注入
  10. 退出命令_利好消息!上级命令:乡村医生满60岁要办退出手续
  11. Windows绘图中的GDI映射模式
  12. 咬文嚼字:刹车错当油门酿车祸?!
  13. 团队开发如何评估工作量
  14. JLINK的SN更改
  15. 通过QQ号获取QQ头像、昵称以及空间头像
  16. 有道云笔记常用快捷键
  17. Java基于JSP的高校教材管理系统
  18. 阿里二面,面试官:说说 Java CAS 原理?
  19. 6大常用数据分析模型详解
  20. 2021-05-26 吾日三省吾身

热门文章

  1. mysql tomcat 自动重连_Tomcat JDBC数据库连接池断开重连
  2. throw new exception后程序不停止_Java之Exception剖析
  3. 面向对象(Python):学习笔记之模块和包
  4. Google的Guava开发库快速快速入门
  5. 那年,三支玫瑰的花语是我们每人一支
  6. 四元素与欧拉角之间的转换
  7. 微信公号“架构师之路”学习笔记(七)-互联网搜索架构设计
  8. LIO-SAM探秘第三章之代码解析(三) --- mapOptmization.cpp (1)
  9. YOLOv4一作提出Transformer新架构:DPT!替代卷积网络做密集预测
  10. 使用docker私有化部署nuget server-proget