第一问:1×1卷积层的作用?

  1. 1×1卷积层在实现全卷积神经网络中经常用到,即使用1*1的卷积层替换到全连接层,这样可以不限制输入图片大小的尺寸,使网络更灵活。
  2. 实现跨通道的交互和信息整合。 1×1 的卷积层(可能)引起人们的重视是在 NIN 的结构中,论文中林敏师兄的想法是利用 MLP 代替传统的线性卷积核,从而提高网络的表达能力。文中同时利用了跨通道 pooling的角度解释,认为文中提出的 MLP 其实等价于在传统卷积核后面接 cccp 层,从而实现多个feature map 的线性组合,实现跨通道的信息整合。而 cccp 层是等价于 1×1 卷积的,因此细看NIN 的 caffe 实现,就是在每个传统卷积层后面接了两个 cccp 层(其实就是接了两个 1×1 的卷积层)。
  3. 进行卷积核通道数的降维和升维。 进行降维和升维引起人们重视的(可能)是在 GoogLeNet 里。对于每一个 Inception 模块(如下图),原始模块是左图,右图中是加入了 1×1 卷积进行降维的。虽然左图的卷积核都比较小,但是当输入和输出的通道数很大时,乘起来也会使得卷积核参数变的很大,而右图加入 1×1 卷积后可以降低输入的通道数,卷积核参数、运算复杂度也就跟着降下来了。以GoogLeNet 的 3a 模块为例,输入的 feature map 是 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),参数大约减少到原来的三分之一。同时在并行 pooling 层后面加入 1×1 卷积层后也可以降低输出的 feature map 数量,左图 pooling 后 feature map 是不变的,再加卷积层得到的 feature map,会使输出的 feature map 扩大到 416,如果每个模块都这样,网络的输出会越来越大。而右图在 pooling 后面加了通道为 32 的 1×1 卷积,使得输出的 feature map数降到了 256。GoogLeNet 利用 1×1 的卷积降维后,得到了更为紧凑的网络结构,虽然总共有22 层,但是参数数量却只是 8 层的 AlexNet 的十二分之一(当然也有很大一部分原因是去掉了全连接层)。
    在这里插入图片描述
    最近大热的 MSRA 的 ResNet 同样也利用了 1×1 卷积,并且是在 3×3 卷积层的前后都使用了,不仅进行了降维,还进行了升维,使得卷积层的输入和输出的通道数都减小,参数数量进一步减少,如下图的结构。(不然真不敢想象 152 层的网络要怎么跑起来 TAT)

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_36653505/article/details/83752803