前言
这是卷积神经网络的学习路线的第四篇文章,这篇文章主要为大家介绍一下如何减少卷积层的计算量,使用宽卷积的好处以及转置卷积中的棋盘效应。
如何减少卷积层计算量?
从本系列的前面几篇文章看,减少卷积层的计算量主要有以下几种方法:
- 使用池化操作。在卷积层前使用池化操作降低特征图分辨率。
- 使用堆叠的小卷积核代替大卷积核。VGG16中使用个卷积代替一个卷积。
- 使用深度可分离卷积。将原始的的卷积核分成和两部分操作。
- 应用卷积。将卷积(假设通道数为)直接应用在某个卷积层(假设维度为)之前,当满足$C_2
使用宽卷积的好处?
所谓宽卷积就是指在卷积操作时填充方式为same
方式。而与之对应的窄卷积就是指在卷积操作时填充方式为valid
方式。same
方式的填充通常使用0填充的方式对卷积核不满足整除条件的输入特征图进行补全,使得卷积层的输出维度和输入维度一致。valid
方式的填充就是不进行任何填充,在输入特征边缘位置若不足以进行卷积操作,则对边缘信息进行舍弃,因此在步长为1的情况下该填充方式的卷积层输出特征维度可能会略小于输入特征的维度。我们可以发现宽卷积(same
填充方式卷积)的好处就是通过补0操作可以有效的保留原始输入特征图的边界特征信息。
转置卷积和棋盘效应?
当我们在用反卷积(转置卷积)做图像生成或者上采样的时候或许我们会观察到我们生成的图片会出现一些奇怪的棋盘图案或者说你感觉到你生成的图片有颗粒感。如下图所示(图的原始来源附在附录里了):
这种现象之所以会发生是因为在上采样使用反卷积的时候,卷积核的大小不能被步长整除导致的。先看一下没有棋盘效应的情况:
再看一下出现棋盘效应的情况:
并且在二维图片上棋盘效应会更加严重。因此为了避免棋盘效应的发生,一般有一下几种解决方案:
- 方法1:现在,神经网络在创建图像时通常使用多层反卷积,从一系列较低分辨率的描述中迭代地构建较大的图像。虽然这些堆叠的反卷积可能会消除棋盘效应,但它们通常会复合,从而在各种尺度上产生棋盘效应。
- 方法2:在反卷积后面,再接一个步长为1的卷积,效果有限。
- 方法3:调整卷积核的权重,适当加大重叠部分少的权重,虽然理论有效,但在实际操作中,不仅有困难也会减弱模型的表达力。
- 方法4:使得卷积核大小不能被步长整除,但卷积核权重的学习不均匀也会导致棋盘效应现象(下图为步长为2,核大小为4所产生的棋盘效应现象)
在这里插入图片描述
- 方法5:调整图像大小(使用最近邻插值或双线性插值),然后执行卷积操作。这似乎是一种自然的方法,大致相似的方法在图像超分辨率方面表现良好。
在这里插入图片描述
- 总结:从原始英文博客上的实验结论来看,使用上采样 卷积层的图像放大方法有效的改善了棋盘效应,所以要是图像生成的时候遇到了棋盘效应你知道怎么做了吗?Upsamping Convolution来帮你。
附录
转置卷积中的棋盘效应参考文章:https://distill.pub/2016/deconv-checkerboard/
总结
今天为大家介绍了减少卷积层计算量的方法,使用宽卷积的优点,以及反卷积中的棋盘效应,以及最后给出解决棋盘效应的解决方案,希望这篇文章可以帮助到大家。