卷积,是CNN中最基础的组成部分,“卷积的本质是用卷积核的参数来提取数据的特征,通过矩阵的点乘运算与求和来得到结果。”(《深度学习之Pytorch物体检测实战》)

二维卷积

动图演示具体操作

代码:

conv = nn.Conv2d(in_channels=1,out_channles=1,kernel_size =3,stride=1,padding=1,dilation=1,groups=1,bias=True)

参数:

in_channels:输入特征图的通道数

out_channles:输出特征图的通道数

kernel_size:卷积核的尺寸,通常有1、3、5、7

stride:卷积核在特征图上滑动的步长,一般为1

padding:填充,分为0填充和边缘填充,Pytorch默认0填充

dilation:空洞卷积,默认为1

groups:可实现组卷积,默认为1

bias:是否需要偏置,默认为True

计算量:in_channels * out_channels * kernel_size*kernel_size * w_out *h_out

一维卷积(nn.Conv1d)

三维卷积(nn.Conv3d)

与二维卷积的不同之处在于,三维卷积的每个特征图有一定的深度。比如特征图为(16×16×7),即高度×宽度×深度,卷积核(3×5×5×3),即通道数×高度×宽度×深度。

空洞卷积(Dilated Convolution)

为解决图像分割的问题而提出的,该操作能够在增加感受野的同时保持特征图的尺寸不变,从而可以替代池化与上采样操作。

上图为扩张率为1和2的空洞卷积

优点:不引入额外参数的前提下可以任意扩大感受野,保持特征图的分辨率不变

缺点:网格效应:当多个空洞卷积叠加时,有些像素根本没有被利用到,会损失信息的连续性与相关性,进而影响分割、检测等要求较高的任务;远距离信息没有相关性:稀疏的采样方式,导致远距离卷积得到的结果之间缺乏相关性;对于大物体分割与检测有利,但是对于小物体则有弊无利;

改进方式:dilation rate设置为【1,2,5,1,2,5】这种锯齿类结构。或dilation rate 不能有大于1的公约数

深度可分离卷积(Depthwise Separable Convoltion)

标准卷积在卷积时,同时考虑了图像的区域与通道信息,为什么不能分开考虑区域与通道呢?基于此想法,诞生了深度可分离卷积。

过程:逐通道卷积,再逐点卷积。总体计算量约等于标准卷积的1/9。MobileNet 采用它作为基础单元。示意图如下。

特点:深度可分离卷积得到的特征对应于低维空间,特征较少,后续接线性映射则能保留大部分特征,如果接非线性映射ReLu,则会破坏特征,造成特征损耗,从而使得模型效果变差。

分组卷积

左图为常规卷积,右图为分组卷积

优点:计算量减少

缺点:阻碍信息流通

通道混洗:将每个组的特征分散到不同的组之后,再进行下一个组卷积,这样输出的特征就能够包含每一个组的特征。

通道混洗的具体实现过程示意图

转置卷积(反卷积)

用于实现上采样。

过程:先按照一定的比例在特征图上补0,然后旋转卷积核,再进行正向的卷积。

示意图如下