目录
一、卷积运算
1、卷积(Convolution)
2、填充(Padding)
(1)Valid Padding
(2)Same Padding
3、步长
4、卷积核大小为什么一般为奇数×奇数?
5、卷积核kernel和滤波器fliter的区别
二、卷积运算公式
1、经过卷积层输出的图片尺寸
2、卷积层中计算输入通道高度
3、经过池化层的特征图尺寸
4、经过全连接层的输出向量尺寸
5、特别说明
为了方便查看,搬运一个比较直观的CNN卷积过程动图:https://zhuanlan.zhihu.com/p/77471866
在线latex公式编辑器:在线LaTeX公式编辑器-编辑器
一、卷积运算
1、卷积(Convolution)
左侧的image是输入数据,右侧的权重矩阵(也就是卷积核kernel)逐步在二维输入数据上进行“扫描”,卷积核按照“步长”进行滑动的同时,计算权重矩阵和扫描得到的数据矩阵的乘积,然后结果相加得到一个输出像素的值。输出的像素值最后组成一个输出矩阵。
2、填充(Padding)
上述运算过程中,输入图像和卷积核进行卷积后得到的二维矩阵比原有规模较小,此时输入图像的边缘处只检测了部分像素点,丢失了图片边缘的部分信息。
为了保证输入和输出的大小保持一致,可以在进行卷积操作之前,对输入矩阵进行边界填充(Padding),也就是在矩阵的边缘填充“0”。
这样填充后,当卷积核扫描输入数据时,能延伸到边缘以外的伪像素,从而使输入和输出的大小相同。
常用的两种padding方法如下。
(1)Valid Padding
- 定义:Valid padding,也称为“无填充”(No Padding),在这种情况下,卷积核只在输入特征图的边界内进行滑动,不进行任何边缘填充。
- 特点:由于没有添加额外的像素,输出特征图的尺寸会小于输入特征图的尺寸。具体来说,如果输入特征图的大小为 𝑊×𝐻,卷积核(或滤波器)的大小为 𝐾𝑤×𝐾ℎ,并且步长(Stride)为1,那么输出特征图的大小将是 (𝑊−𝐾𝑤+1)×(𝐻−𝐾ℎ+1)。
- 应用:Valid padding通常用于当需要减小特征图尺寸,或者在网络的中间层中,不需要保持特征图的原始尺寸。
(2)Same Padding
- 定义:Same padding,也称为“全填充”(Full Padding),在这种情况下,会在输入特征图的边缘添加一定数量的零值(即填充),使得卷积核可以覆盖到边缘,并且输出特征图的尺寸与输入特征图的尺寸相同。
- 特点:为了实现这一点,通常会在输入特征图的每一边添加 ⌊(𝐾𝑤−1)/2⌋个填充(对于宽度)和 ⌊(𝐾ℎ−1)/2⌋个填充(对于高度),其中 ⌊𝑥⌋表示不大于 𝑥的最大整数。如果卷积核大小是奇数,则填充的数量会略有不同。
- 应用:Same padding通常用于网络的第一层,或者任何需要保持特征图尺寸不变的层,例如在某些风格迁移或图像分割任务中。
3、步长
滑动卷积核时,会先从输入的左上角开始,每次向左滑动一列或者向下滑动一行计算输出,将每次滑动的行数和列数称为Stride,在之前的图片中,Stride=1;在下图中,Stride=2。
卷积过程中,有时需要通过padding来避免信息损失,有时也要在卷积时通过设置的步长(Stride)来压缩一部分信息,或者使输出的尺寸小于输入的尺寸。
Stride的作用:是成倍缩小尺寸,而这个参数的值就是缩小的具体倍数,比如步幅为2,输出就是输入的1/2;步幅为3,输出就是输入的1/3。以此类推。
4、卷积核大小为什么一般为奇数×奇数?
-
中心对称性:奇数尺寸的卷积核具有中心对称性,即卷积核的中心位于其几何中心。这使得卷积核在应用到输入特征图上时,可以围绕一个中心点进行操作,这在某些情况下有助于增强特征提取的对称性。
-
更容易padding:在卷积时,有时候需要卷积前后的尺寸不变。这时候就需要用到padding。假设图像的大小,也就是被卷积对象的大小为n*n,卷积核大小为k*k,padding的幅度设为(k-1)/2时,卷积后的输出就为(n-k+2*((k-1)/2))/1+1=n,即卷积输出为n*n,保证了卷积前后尺寸不变。但是如果k是偶数的话,(k-1)/2就不是整数了。
-
减少参数数量:相比于偶数尺寸的卷积核,奇数尺寸的卷积核(如3x3)可以减少参数数量。例如,一个3x3的卷积核有9个参数,而一个4x4的卷积核有16个参数。使用更小的卷积核可以在保持有效性的同时减少模型的复杂度。
-
计算效率:奇数尺寸的卷积核在处理边界像素时可以更高效。当卷积核是奇数尺寸时,其在输入特征图的边缘位置不需要额外的填充,因为卷积核的中心可以正好对齐到边缘像素上。这可以减少边界处的填充量,从而减少计算量。
-
特征提取:奇数尺寸的卷积核可以更好地捕捉局部特征。由于卷积核的中心位于中心位置,它可以更直接地响应输入特征图中的局部变化,这对于提取图像中的边缘、纹理等特征是有益的。
5、卷积核kernel和滤波器fliter的区别
当只有一个通道的时候,卷积核就相当于fliter,两者的概念可以互换。
如果有多个通道,每个fliter实际上是卷积核的一个集合。在当前层,每个通道都对应一个卷积核,且卷积核时唯一的。
多通道卷积的计算过程:将矩阵和滤波器对应的每个通道进行卷积运算,最后将通道的对应结果进行相加,形成一个单通道输出,加上偏置项后,就得到一个最终的单通道输出。然后根据滤波器的个数,确定输出通道数。
其中需要注意:
某一层滤波器的通道数 = 上一层特征图的通道数。
某一层输出特征图的通道数 = 当前层滤波器的个数。
二、卷积运算公式
输入 x:[batch, height, width, in_channel] 四个维度
权重 w:[height, width, in_channel, out_channel]
输出 y:[batch, height, width, out_channel]
1、经过卷积层输出的图片尺寸
输入图片的尺寸:一般用 n×n 表示输入的image大小。
卷积核的大小:一般用 k×k 表示卷积核的大小。
填充(Padding):一般用 p 来表示填充大小。
步长(Stride):一般用 s 来表示步长大小。输出图片的尺寸:一般用 o 来表示。可以求得 o ,计算公式如下:
其中"⌊ ⌋"是向下取整符号,用于结果不是整数时进行向下取整。
其中输出规模的大小可以区分为高度和宽度,都可以用上述公式进行计算。
2、卷积层中计算输入通道高度
3、经过池化层的特征图尺寸
当计算出来不是整数的时候,就要向上取整。
4、经过全连接层的输出向量尺寸
全连接层的输出向量长度等于该层神经元的个数。
5、特别说明
当卷积层和池化层的输出特征图尺寸计算时,可能出现结果不是整数的情况,此时卷积层向下取整,池化层向上取整。