关于“卷”积
1.卷积的本质
在数学中的泛函分析中,卷积也叫做旋积或者褶积,是一种通过两个函数x(t)和h(t)生成的数学算子。其计算公式如下:
\[连续形式:x(t)*h(t)=\int_{-\infty}^{\infty}x(\tau)h(t-\tau)dt\]
\[离散形式:x(t)*h(t)=\sum_{t=-\infty}^{\infty}x(\tau)h(t-\tau)\quad\]
从公式来看,卷积就是先将函数进行一个翻转(Reverse),然后再做一个平移(Shift),这便是卷的含义。而积就是将平移后的两个函数对应元素相乘求和。所以卷积本质上就是 \[Reverse-Shift-Weighted\quad Summation\]
我们可以用图像来描述卷积的过程:
2. 单通道卷积与多通道卷积
卷积之后的通道数周四只是取决于卷积核的数目,核卷积核的channel无关,卷积核的channel是和输入的channel保持一致的
2.1 单通道卷积
顾名思义,单通道卷积即输入为单通道,卷积核也为单通道,单通道卷积的理解是图像卷积的基础
2.2 多通道卷积
多通道卷积可以分为常规卷积和深度可分离卷积,两者的区别在于参数数量,我们知道在深度卷积网络训练的过程中过多的参数会增大网络计算量,不利于网络模型泛化等缺点,而深度可分离卷积在实现常规卷积的基础上减少了网络参数。
常规卷积
常规的多通道卷积和单通道卷积类似,区别在于在多通道卷积中,卷积核和输入的图像同样都是多通道的,结果的通道数等同于卷积核的数量。
如图所示,多通道常规卷积的基本步骤可以分为以下三点:
- 每个卷积核对应结果的一层通道
- 卷积核的每一层与输入图像的每一层进行卷积,最后将结果相加,作为卷积核结果层的数据
- 得到一层结果数据后,换下一个卷积核进行运算
这里要区分卷积核数目和通道数目以及最后生成的feature map**的通道数量
\(1\times1\)卷积
\(1\times1\)卷积是大小为\(1\times1\)的滤波器做卷积操作,多用于d多通道卷积,主要作用为改变通道数目。这里附上吴恩达老师的课件截图:
个人感觉\(1\times1\)的本质相当于做了一次亚全连接,改变了通道数,缩小了计算量。
深度可分离卷积
深度可分离卷积的方法与常规卷积的方法有所不同,正常的卷积核是对多个通道同时做卷积。也就是说,多个通道在一次卷积后输出一个数。
而深度可分离卷积则不同,深度可分离卷积分为两步:
- 第一步用卷积核的n层分别与对应通道做卷积,在这样一次卷积后,输出n层。
- 这样输出的n层,再通过一个\(1\times1\times n\)的卷积核(pointwise核)卷积,得到一个数。
用图片来表示深度可分离卷积的过程:
第一步,对n个层分别做卷积,输出n个通道的数据
第二步,用卷积核对\(1\times1\times n\)对多个通道数据再次做卷积运算,这个时候的输出就和正常卷积一样,是单通道的数据
如果要提取更多属性,则只需设计更多的\(1\times1\times n\)的卷积核就行,不同参数的卷积核可以提取不同的特征。
这里简单分析一下深度可分离卷积与标准卷积在计算量上的差别。假定输入的特征图大小是\(D_{f}\times D_{F}\times M\),而输出特征图的大小是\(D_{F}\times D_{F}\times N\)。
参数如下:
- 输入图像尺寸:\(D_{F}\times D_{F}\times M\)
- 输出图像尺寸:\(D_{F}\times D_{F}\times N\)
- 逐层卷积核尺寸:\(D_{K}\times D_{K}\times M\)
- \(1\times1\)卷积核个数:\(N\) (个数等于输出图像通道数)
对于标准的卷积\(D_{K}\times D{K}\),其计算量将是:
\[D_{K}\times D_{K}\times M\times N\times D_{F}\times D_{F}\]
而对于深度可分离卷积,可以将计算量分为两个部分:
- 逐层卷积:\(D_{F}\times D_{F}\times D_{K}\times D_{K}\times M\)——(输入大小乘卷积核大小乘通道数)。
- \(1\times1\)的逐点卷积:\(D_{F}\times D_{F}\times M\times N\)——(输出大小乘输入通道数乘\(1\times1\)卷积核个数)
综上所述,深度可分离卷积的计算量为:
\[D_{F}\times D_{F}\times D_{K}\times D_{K}\times M+D_{F}\times D_{F}\times M\times N\]
可以比较深度可分离卷积核和标准卷积的计算量如下:
\[\frac{O_{DSC}}{O_{SC}}=\frac{D_{F}\times D_{F}\times D_{K}\times D_{K}\times M+D_{F}\times D_{F}\times M\times N}{D_{K}\times D_{K}\times M\times N\times D_{F}\times D_{F}}\]
\(DSC: Depth Separable Convolution\quad\) \(SC: Standered Convolution\)
3. 1D,2D和3D卷积
3.1 1D卷积——多用于频谱——1维
一维卷积通常用于实践序列的数据分析(因为这种情况下的输入为1D)。
一维数据的输入可以具有多个通道,但是滤波器智能沿一个方向运动,因此输出为1D
3.2 2D卷积——多用于图像——2维
2D卷积有分为单通道卷积和多通道卷积,二者在本质上并无太大的差异。
3.3 3D卷积——多用于视频——3维
将2D卷积增加一个深度维便扩展为3D卷积,输入的图像是3维的,滤波器也是3维的,对应的卷积输出同样是3维的。3D的卷积操作同样分为单通道和多通道,且只使用一个filter,输出一个channel。
- 其中,针对单通道,与2D卷积的不同之处在于输入图像多了一个depth维度,故输入大小为(1,depth,height,width),卷积核也多了一个k_d维度,因此卷积核在输入图像的空间维度(height和width)和深度维度depth维度上均进行滑窗操作,每次滑窗得到输出3D图像的一个value。
- 针对多通道,则就是在输出value时将值相加即可
相比于2D卷积,3D卷积可以提取连续帧之间的运动信息。
4.Deconvolution
大多数将Deconvolution翻译为转置卷积,那是从Deconvolution的数学原理出发,我更愿意称之为反卷积,也就是卷积的逆过程。反卷积是一种上采样(up-sampling)的常见方法。
本质上来说,反卷积跟常规卷积并无区别。不同之处在于在反卷积时,卷积核将会根据一定比例的padding来扩大输入尺寸,然后把常规卷积中的卷积核进行转置。
假设输入的图像矩阵为X,卷积核矩阵为C,常规卷积的输出为Y,则有:
\[Y=CX\]
两边同时乘以卷积核的转置\(C^{T}\),这个公式便是反卷积的输入输出计算:
\[X=C^{T}Y\]
图示过程如下:
参考资料:
[2] 各种卷积方式