🌈个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光
目录
1. 前言
本篇文章是猫猫在看卷积基础知识的时候突然想写的。我相信大家和我都有一样的困惑,所以写出来希望能帮助到大家 。我们在网上看到的卷积流程图都是如下:
这个图很好,它很详细生动地解释了单通道卷积的过程。但是它存在的不足是并没有涉及多通道卷积,以及并没有说清楚输出大小与卷积核、步长、填充值之间的联系。因此,猫猫写了这篇文章🥰🥰~~’
本文重点如下:
- 多通道卷积。
- 输出图片大小与输入图片大小、卷积核大小、步长、填充值的关系(卷积计算公式)。
2. 卷积基础知识
2.1 卷积
我们以灰度图像为例进行讲解:从一个小小的权重矩阵,也就是卷积核(kernel)开始,让它逐步在二维输入数据上“扫描”。卷积核“滑动”的同时,计算权重矩阵和扫描所得的数据矩阵的乘积,然后把结果汇总成一个输出像素。
深度学习里面所谓的卷积运算,其实它被称为互相关(cross-correlation)运算:将图像矩阵中,从左到右,由上到下,取与滤波器同等大小的一部分,每一部分中的值与滤波器中的值对应相乘后求和,最后的结果组成一个矩阵,其中没有对核进行翻转。
数学中的卷积需要对卷积核进行翻转,深度学习中的卷积本质上数学中的相关运算。
2.2 填充
通过前面可以发现,输入图像与卷积核进行卷积后的结果中损失了部分值(输出图像比输入图像要小),输入图像的边缘被“修剪”掉了(边缘处只检测了部分像素点,丢失了图片边界处的众多信息)。这是因为边缘上的像素永远不会位于卷积核中心,而卷积核也没法扩展到边缘区域以外。
有时我们希望输入和输出的大小应该保持一致。为解决这个问题,可以在进行卷积操作前,对原矩阵进行边界填充(Padding),也就是在矩阵的边界上填充一些值,以增加矩阵的大小,通常都用“0”来进行填充的。具体图片如下:
通过填充的方法,当卷积核扫描输入数据时,它能延伸到边缘以外的伪像素,从而使输出和输入size相同。常用的两种padding:
(1)valid padding:不填充,只使用原始图像,不允许卷积核超出原始图像边界
(2)same padding:进行填充,允许卷积核超出原始图像边界,并使得卷积后结果的大小与原来的一致
2.3 步长 (Stride)
滑动卷积核时,我们会先从输入的左上角开始,每次往左滑动一列或者往下滑动一行逐一计算输出,我们将每次滑动的行数和列数称为Stride,在上面的图片中,Stride=1;在下图中,Stride=2。
Stride的作用:是成倍缩小特征图的尺寸,而这个参数的值就是缩小的具体倍数,比如步幅为2,输出就是输入的1/2;步幅为3,输出就是输入的1/3。以此类推。
2.4 为什么卷积核一般是奇数
(1)更容易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就不是整数了。
(2)更容易找到卷积锚点
在CNN中,进行卷积操作时一般会以卷积核模块的一个位置为基准进行滑动,这个基准通常就是卷积核模块的中心。若卷积核为奇数,卷积锚点很好找,自然就是卷积模块中心,但如果卷积核是偶数,这时候就没有办法确定了,让谁是锚点似乎都不怎么好。
当然,也是存在偶数卷积核的,但是这种用起来就不是很友好
3. 多通道卷积
假如卷积引入通道,则可以将卷积区分为单通道卷积 和 多通道卷积。
单通道卷积我们非常熟练,但是多通道卷积的通道数如何设置我们就有点陌生了。不要着急,猫猫带你细细道来😇😇~~
3.1 单通道卷积
对于单通道而言:
输入图像大小:5x5, 卷积核大小:3x3,步长为1,填充为0。则输出为3x3(5-3+1=3)
3.2 多通道卷积
通道数设置:
- CNN的卷积核通道数 = 卷积输入层的通道数
- CNN的卷积输出层通道数(深度)= 卷积核的个数
在卷积层的计算中,假设输入是H x W x C, C是输入的深度(即通道数),那么卷积核(滤波器)的通道数需要和输入的通道数相同,所以也为C,假设卷积核的大小为K x K,一个卷积核就为K x K x C,计算时卷积核的对应通道应用于输入的对应通道,这样一个卷积核应用于输入就得到输出的一个通道。假设有P个K x K x C的卷积核,这样每个卷积核应用于输入都会得到一个通道,所以输出有P个通道,因为CNN卷积输出层通道数就等于卷积核个数。
总结:
多通道卷积的计算过程:将矩阵与滤波器对应的每一个通道进行卷积运算,最后相加,形成一个单通道输出,加上偏置项后,我们得到了一个最终的单通道输出。如果存在多个filter,这时我们可以把这些最终的单通道输出组合成一个总输出。
4. 常用的卷积计算公式
- 输入图片的尺寸:一般用n×n表示输入的image大小。
- 卷积核的大小:一般用f×f表示卷积核的大小。
- 填充(Padding):一般用p来表示填充大小。
- 步长(Stride):一般用s来表示步长大小。
- 输出图片的尺寸:一般用0来表示。
1、如果已知n、f、p、s则,输出图片尺寸公式如下:
2、如果想要保持图片卷积前后尺寸不变,padding大小如下:
5. 总结
如果想要学习更多深度学习知识,大家可以点个关注并订阅,持续学习、天天进步
你的点赞就是我更新的动力,如果觉得对你有帮助,辛苦友友点个赞,收个藏呀~~~