轻量级网络:Bottleneck结构(沙漏型结构)

Bottleneck 结构为之后的深度可分离卷积打下了坚实的基础。

Bottleneck 结构

在Inception网络中为了减少参数量,我们想了很多的办法,例如:用多个小尺寸卷积代替一个大尺寸卷积; 做下面的变换:3x3 = 3x1 + 1x3,这个效果在深度较深的情况下比规整的卷积核更好 等等操作,当然也包括经典的Bottleneck结构。

Bottleneck结构就是为了降低参数量,Bottleneck 三步走是先 PW 对数据进行降维,再进行常规卷积核的卷积,最后 PW 对数据进行升维(类似于沙漏型)。我们举个例子,方便我们了解:

根据上图,我们来做个对比计算,假设输入 feature map 的维度为 256 维,要求输出维度也是 256 维。有以下两种操作:

直接使用 3x3 的卷积核。256 维的输入直接经过一个 3×3×256 的卷积层,输出一个256维的 feature map,那么参数量为:256×3×3×256 = 589824 。

先经过 1x1 的卷积核,再经过 3x3 卷积核,最后经过一个 1x1 卷积核。 256 维的输入先经过一个 1×1×64 的卷积层,再经过一个 3x3x64 的卷积层,最后经过 1x1x256 的卷积层,则总参数量为:

256×1×1×64 + 64×3×3×64 + 64×1×1×256 = 69632

经过两种方式的对比,我们可以很明显的看到后者的参数量远小于前者的。Bottleneck 的核心思想还是利用多个小卷积核替代一个大卷积核,利用 1x1 卷积核替代大的卷积核的一部分工作。

参考:https://www.jianshu.com/p/4708a09c4352
经验分享 程序员 微信小程序 职场和发展