1 . 前言
1*1 卷积在很多模型结构中都使用过, 例如最出名的Inception网络
其主要目的就是 进行一次1 × 1 的卷积来减少特征映射的深度.
在实际操作中, 对于1*1的卷积操作, 我们可以通过改变输出的out channel 来使得输出维度的变化,也就是降维和升维, 例如 112 * 112 * 3 经过一个一维卷积 当我们的out channel 设置为32时候, 输出为112 * 112 * 32。
2. 二维卷积过程概述
因为1*1的卷积也是一个二维卷积, 所以我们可以先了解一下二维卷积是如何操作的
还是以112 * 112 * 3 的图片为例:
在图中, 高度 宽度 都是 112, 深度为3 , 我们经过一个3 * 3 的卷积,步长为1, padding 为1, out channel 为 3, 输出的图像还是 112 * 112 * 3, 具体计算的话可以自己画个55的图 过 33 的卷积来操作, 一般公式为 :
新维度 = (图片长 - 卷积核长 + 2 * padding )/ 步长
我们的卷积核的维度为 3 * 3 * 3(深度), 最后一维和图片本身的深度相同
一次卷积的过程如下:
-
每一层的112*112 和 对应的 卷积核的 3 * 3 进行卷积
-
每一个 channel卷积的结果进行求和
-
最后加上偏置,
-
就得到 一个新的输出 我们前面计算过, 长和宽 维度 依然不变 112 * 112 也就是图中的yp,
每一个卷积核只得到一个yp, out channel 数 表示着 用多少不同的卷积核 做相同工作,每一个yp 就代表着一个channel(通道)
然后 out channel 则是对应 一共有多少个卷积核, 每一个卷积核操作都是和前面相同, 所以最终的output 是
112 * 112 * out channel
3. 1×1卷积 作用
在理解了二维卷积后, 我们就想一下, 1维卷积 因为是1*1 ,那么它的感受野就是 一个像素, 所以它没法感受到它旁边的像素,但是由于 我们前面讲过的 , 二维卷积有一个求和的过程,也就是将不同channel的卷积结果进行求和
1*1的卷积也不例外, 所以1x1卷积实际上是对每个像素点,在不同的channels上进行线性组合(信息整合),且保留了图片的原有平面结构,调控depth,从而完成升维或降维的功能。
我们可以脑海中走一遍 1 * 1 卷积的过程
实际上就是同一像素点, 不同 channel 的值进行 加权求和 加偏置
然后 重复out channel 次
虽然我们知道可以用1*1 来进行特征的升维和降维, 但是我们更加应该取深入的思考这样一些问题,才能对卷积更加的理解:
- 先降维本质上是具体代表什么意义?
- 1*1 的卷积, 也就是单个像素不同channel 进行加权的意义?
- 应用于其他的特征降维的实际作用?
4. 参考资料
《神经网络与深度学习》 https://nndl.github.io/
卷积神经网络中用1*1 卷积有什么作用或者好处呢?
来源:oschina
链接:https://my.oschina.net/u/4339497/blog/4863350