1x1的卷积及其作用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/diyoosjtu/article/details/89289747

本文将解决如下问题:

  1. 1x1的卷积有什么作用?
  2. 为什么要用1x1的卷积?

图1:左::3x3卷积;右:1x1卷积

1x1卷积可以扩增或减少数据

1x1的卷积核,也被称作网中网(Network in Network)。图1中右图显示的数据的channel是1,此时1x1卷积只是把原始数据乘以一个倍数(卷积核的数值)。1x1卷积一般只改变输出通道数(channels),而不改变输出的宽度和高度。

设输入数据的维度为width × \times height × \times channels,卷积核的维度是 1 × 1 1\times 1 × \times channels × \times #filters,则卷积过后,输出数据的维度是width × \times height × \times #filters。

通过调整#filters的数值大小,可以对数据进行扩增数据和减少数据的操作:

  1. #filters > > channels时,扩增数据;
  2. #filters < < channels时,减少数据

在扩增或减少数据的过程中,feature map的尺度不变(即不损失分辨率)。

扩增或减少channels的过程中,其实就是inputs的不同channels之间信息的线性组合变换。

1x1卷积可以增加非线性

原因是可以额外增加激活函数。

1x1卷积在增加非线性的同时,不影响卷积层的感受野(分辨率不变)。

实例:1x1卷积用于降低参数的数量

如图2所示,以GoogLeNet的3a模块为例,输入的数据大小是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。
在这里插入图片描述

图2:GoogLeNet中的1x1卷积

ResNet中同样使用1x1卷积来降低参数的数量,如图3所示。第一个1x1的卷积把256维channel降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,而不使用bottleneck的话就是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,差了16.94倍。

常规深度的网络(如34层)可以不适用bottleneck design,但对于较深的网络(如101层),通常要是用bottleneck design来减少计算量和参数量。
在这里插入图片描述

图3:ResNet bottleneck design

猜你喜欢

转载自blog.csdn.net/diyoosjtu/article/details/89289747