正常卷积
Pytorch中卷积的API的常用参数:
- in_channels:Ci,输入通道数,即输入层的feature map的个数
- out_channels:Co,输出通道数,即输出层feature map的个数
对feature map概念不清晰的可参考这篇博客,或观看吴恩达深度学习网课 - kernel_size:K,卷积核(也称滤波器)大小,如果只有一个值表明卷积核为方形,两个不同的值则为矩形
- stride:步长,即每卷积一次之后卷积核移动多少步
- padding:输入层边界补0的个数
- bias:偏置,即wx+b中的b,一般设置为ture,即需要偏置
- groups:分组卷积的组数,默认为1表示不分组
- dilation:空洞卷积的参数(下面会讲解)
W,H,padding,K,stride与Ho,Wo的关系:
Ho=(H+2 * padding+1-K) / stride
Wo=(W+2 * padding+1-K) / stride
Pointwise Convolution 1 * 1卷积
特点:
1)kernel_size为1
2)参数量小,共Ci * Co+bias个参数 相当于特征的一个线性加权,上图右侧每根线代表一个权重,共Ci * Co条线
3) 由于窗口大小为1*1,所以无法得到空间信息
用途:一般用于降维,压缩存储量;或者和下面要介绍的特殊卷积联合使用
分组卷积
图中对应的groups=2
优点:参数量少了一半
缺点:通道之间的信息没有完全打通,两组特征图相互独立
Channel-wise/Depthwise Convolution
可视为组数为Ci的分组卷积
参数进一步减少,但通道之间的信息完全没有打通,因此通常接一个Pointwise Convolution 即1 * 1卷积,进行通道上的全连接从而打通通道信息
空洞卷积(Dilated Convolution)
在3*3的卷积核中加一些空洞(如图b,dilation=2,表示水平或竖直方向上每两个格子有一个参数,空洞处一般为0)空洞卷积的参数量没有增加,但是感受域扩大,通常在分割任务中使用
转置卷积/反卷积(Dilated Convolution)
out_padding :是否在输出部分补0
一般用于上采样,进一步了解可参考一文搞懂反卷积,转置卷积