卷积-conv, depthwise conv, separab
Contents:
1. Convolution
2. Depthwise Convolution
3. Separable Convolution
4. Group Convolution
1. convolution (卷积)
简单理解如下面图像所示,每个channel的图像与filter做卷积,然后将每个通道进行合并。
具体步骤分解
Reference:
CNN中卷积计算的内存和速度优化
2. Depthwise Convolution
tf.nn.depthwise_conv2d(input, filter, strides, padding, rate=None, name=None, data_format=None)
depthwise_conv2d将不同的卷积核独立地应用在in_channels的每个通道:我们一般对于三通道图像做卷积,都是先加权求和再做卷积(注意先加权求和再卷积与先卷积再加权求和结果一样),形象化描述就是我先把3通道压扁成1通道,在把它用x个卷积核提溜成x通道(或者我先把3通道用x个卷积核提溜成3x个通道,再分别压扁成得到x通道); 而depthwise_conv2d就不加权求和了,直接卷积,所以最后输出通道的总数是in_channels*channel_multiplier
Reference:
TensorFlow网络操作API_上
3.Separable Convolution
tf.nn.separable_conv2d(input, depthwise_filter, pointwise_filter, strides, padding, name=None)
Depthwise Separable Convolution 是将一个完整的卷积运算分解为两步进行,
即 Depthwise Convolution 与 Pointwise Convolution。
1). Depthwise convolution
Depthwise Convolution完成后的Feature map数量与输入层的通道数相同,无法扩展Feature map。
而且这种运算对输入层的每个通道独立进行卷积运算,
没有有效的利用不同通道在相同空间位置上的feature信息。
因此需要Pointwise Convolution来将这些 Feature map 进行组合生成新的 Feature map。
2).Pointwise Convolution
Pointwise Convolution的运算与常规卷积运算非常相似,
它的卷积核的尺寸为 1×1×M,M为上一层的通道数。
所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,
生成新的Feature map。有几个卷积核就有几个输出Feature map。
Xception architecture:
Reference:
卷积神经网络中的Separable Convolution
4. Group convolution (分组卷积)
最早见于AlexNet——2012年Imagenet的冠军方法,Group Convolution被用来切分网络,使其在2个GPU上并行运行
Reference
Convolution VS Group Convolution
A Tutorial on Filter Groups (Grouped Convolution)
Dilated convolution
Deformable convolution
Reference:
1. Depthwise卷积与Pointwise卷积