赞
踩
多通道卷积
计算量
上图计算量为:28 x 28 x 192 x 5 x 5 x 32 = 120,422,400次
引入1x1卷积后的计算量为:28 x 28 x 192 x 1 x 1 x 16 + 28 x 28 x 16 x 5 x 5 x 32 = 12,443,648次
权重个数与输出特征图大小
假如 previous layer 的大小为 28x28x192,那么上面网络的权重个数为:1 x 1 x 192 x 64 + 3 x 3 x 192 x 128 + 5 x 5 x 192 x 32 = 387072个,其输出的特征图大小为:28 x 28 x 64 + 28 x 28 x 128 + 28 x 28 x 32 + 28 x 28 x 192 = 28 x 28 x 416
如果previous layer的大小为28x28x192,那么上面网络的权重个数为:1 x 1 x 192 x 64 + (1 x 1 x 192 x 96 + 3 x 3 x 96 x 128) + (1 x 1 x 192 x16 + 5 x 5 x 16 x 32) + 1 x 1 x 192 x 32 = 163328个,其输出的特征图大小为:28 x 28 x 64 + 28 x 28 x 128 + 28 x 28 x 32 + 28 x 28 x 32 = 28 x 28 x 256
卷积后加偏置
(即上面的多通道卷积):1X1X100X20的卷积核,输出20个通道,此时是100个相同的数同时操作所有通道。
Depthwise Convolution:不同于常规卷积操作,Depthwise Convolution 的一个卷积核负责一个通道,一个通道只被一个卷积核卷积。上面所提到的常规卷积每个卷积核是同时操作输入图片的每个通道。Depthwise Convolution 完成后的 Feature map 数量与输入层的通道数相同,无法扩展 Feature map。而且这种运算对输入层的每个通道独立进行卷积运算,没有有效的利用不同通道在相同空间位置上的 feature 信息。因此需要 Pointwise Convolution 来将这些 Feature map 进行组合生成新的 Feature map。
Depthwise Convolution 的参数个数为:N_depthwise = 3 × 3 × 3 = 27。
- Depthwise Convolution 实现,groups = in_channels 即可:
- self.depth_conv = nn.Conv2d(
- in_channels=in_ch,
- out_channels=in_ch,
- kernel_size=3,
- stride=1,
- padding=1,
- groups=in_ch
- )
Pointwise Convolution:Pointwise Convolution 的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M(即1*1卷积),M 为上一层的通道数。所以这里的卷积运算会将上一步的 map 在深度方向上进行加权组合,生成新的 Feature map。有几个卷积核就有几个输出 Feature map。
Pointwise Convolution 的参数个数为:N_pointwise = 1 × 1 × 3 × 4 = 12。
Depthwise Separable Convolution(深度可分离卷积): 在 MobileNet 中提出,是将一个完整的卷积运算分解为两步进行,即 Depthwise Convolution 与 Pointwise Convolution。这样做可以让参数量和计算量都大幅下降。Depthwise 层,只改变 feature map 的大小,不改变通道数。而 Pointwise 层则相反,只改变通道数,不改变大小。这样将常规卷积的做法(改变大小和通道数)拆分成两步走。
在不增加参数量的情况下,增大感受野,但在实际中不好优化,速度会大大折扣。参考:理解 Deformable Convolutional Networks - 知乎
分组卷积
在 Inception 中提出,如下图。将输入特征的通道数和卷积核个数分为 g 组,每组的卷积核负责各自输入特征的通道数,可将参数降低至原来的 1/g。当 g 等于1时退化为常规卷积,当 g 等于通道数时为 Depthwise Convolution。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。