深度学习卷积操作

group convolution(群卷积或分组卷积)
假设上一层的feature map总共有N个,即通道数channel=N,也就是说上一层有N个卷积核。假设群卷积的群数目M。那么该群卷积层的操作就是,先将channel分成M份。每一个group对应N/M个channel,与之独立连接。然后各个group卷积完成后将输出叠在一起concatenate,作为这一层的输出channel。(把feature maps分给多个GPU分别进行处理,最后把多个GPU的结果进行融合。)如下图所示:
深度学习卷积操作_第1张图片
深度学习卷积操作_第2张图片

point-wise convolution (点卷积)
point-wise convolution是一种卷积操作,而且是一种特殊的卷积运算,代表着卷积核的大小是 11。
1
1 卷积核的作用:

实现跨通道信息的融合:加入当前层的特征矩阵为224x224x100,而下一层想要得到224x224x50,可以通过1x1的卷积核进行跨通道信息融合,当然这时也可以通过3x3或5x5的卷积核构建出符合下一层224x224x50的特征矩阵,但是使用1x1卷积核,起到了减少参数的目的。
实现通道数的升维与降维:本来的通道数为100,而下一层的通道数为50,这时就起到了降维的作用。同理假如下一层的通道数为200,这时就是升维。
增加网络的非线性:假如网络本来的通道数为100,而下一层的通道数也是100,这时加入1x1的卷积核并非没有作用,通过1x1卷积核可以增强网络的非线性能力,也可以简单的理解为网络变深了
separable convolution(可分离卷积)
任意指定一个channel,作为卷积核的大小,这样并不影响输入输出的特征图的长宽尺寸,仅仅改变了channel这一维度。举个例子,对于经典的卷积运算,如果说所需的参数量为256x3x3x256=589824。而对于可分离卷积,假设我们指定的卷积核是3x3x4,那首先是256x3x3x4=9216,接下来我们得到了4x256=1024个通道数,下一个过程将channel重新压缩回256,接着有1024x1x1x256=262144,整个过程就是9216+262144=271360。

depth-wise convolution (深度卷积)
深度卷积是拓展Separable convolution而来,可以让卷积核的channel维度等于1,这样就是深度卷积,意为在每一个channel上做卷积。值得注意的是,往往Separable convolution和depth-wise convolution是统称为depth-wise convolution。假设卷积核的shape是[filter_height, filter_width, in_channels, channel_multiplier],区别仅在于channel_multiplier。
depth-wise separable convolution = depth-wise convolution + point-wise convolution。

dilated convolution (空洞卷积)
空洞卷积是解决pixel-wise输出模型的一种常用的卷积方式。一种普遍的认识是,pooling下采样操作导致的信息丢失是不可逆的,通常的分类识别模型,只需要预测每一类的概率,所以我们不需要考虑pooling会导致损失图像细节信息的问题,但是做像素级的预测时(譬如语义分割),就要考虑到这个问题了。
深度学习卷积操作_第3张图片
(a)图对应3x3的1-dilated convolution,就是典型的卷积
(b)图对应3x3的2-dilated convolution,实际的卷积kernel size还是3x3,但是空洞为1,相当于kernel的size为7x7,图中只有红色点的权重不为0,其余都为0,把3*3的感受野增大到了7x7。
(c)图是4-dilated convolution,能达到15x15的感受野。
transposed convolution(转置卷积)
转置的卷积在某种程度上来说是相似的,因为它和一个假设的反卷积层所产生的空间分辨率是相同的。但是,正在执行的实际数学运算在值上是不同的。转置卷积层执行的是常规卷积,但它会恢复其空间变换。

关于这一点你可能会感到困惑,所以让我们来看一个具体的示例。将一个5x5的图像馈送到卷积层。其步幅设置为2,padding禁用,内核为3x3。结果是产生一个2x2的图像。

如果我们想反转这个过程,我们需要反数学运算,以便从我们输入的每个像素中生成9个值。之后,我们以2步幅的设置来遍历输出图像。这将是一个反卷积。

而转置卷积将不会进行此类操作。唯一的共同之处在于它保证输出也将是一个5x5的图像,同时仍然执行正常的卷积运算。为了实现这一点,我们需要在输入上执行一些漂亮的padding。

正如你现在可以想象的,这一步并不会从上面扭转这个过程。 至少不包括数值。

它只是在以往的基础上重建空间分辨率并执行卷积操作。这可能不是数学的反演,但是对于Encoder-Decoder架构来说,它仍然非常有用。这样,我们可以将图像的缩放与卷积相结合,而不是将两个过程单独分开进行。

ref
https://www.zhihu.com/question/280728799/answer/1694135803
https://blog.csdn.net/zhangjunhit/article/details/90763234?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.control
https://blog.yani.ai/filter-group-tutorial/
https://blog.csdn.net/DreamHome_S/article/details/85233173

你可能感兴趣的:(深度学习)