卷积计算过程
单通道图像
输入层大小为5x5, 卷积核为3x3,输出的计算过程如下:
Stride和Padding
如果将输入层想像成黑板,局部感受野就像是黑板擦,他会从左往右,从上至下的滑动,每次滑动 1 个步长(Stride)并且每次滑动都重复上述的计算过程,我们就可以得到输出的特征图(feature map),有时候,按照规定步数滑动到黑板边缘时,黑板擦一部分会露出在黑板外,这个时候就 不能够顺利执行卷积过程, 有两种处理方法:
1、Valid方法
Valid 是丢弃的方法,比如上述的 input_width = 7,kernel_width = 5,stride = 3,只允许滑动 1 次,多余的元素则丢掉。
2、Same方法
Same就是再边缘补0,对于上面的情况,在左右分别补两个0,这样就可以扫描3次,所有数据都被扫描到。这种方式不会丢弃边缘信息。
多通道图像
卷积层尺寸计算原理
- 输入矩阵格式,四个维度,依次是,图片数,图片高,图片宽,通道数
- 卷积核格式,四个维度, 依次是, 图片高,图片宽,输入通道数,输出通道数(卷积核个数)
- 输出矩阵格式,四个维度,依次是, 图片数, 高度,宽度,通道数(卷积核个数)
计算流程:
每个Feature map的具体计算过程如下:
特征图尺寸计算公式:
卷基层计算举例:
以 AlexNet 模型的第一个卷积层为例,
- 输入图片的尺寸统一为 227 x 227 x 3 (高度 x 宽度 x 颜色通道数),
- 本层一共具有96个卷积核,
- 每个卷积核的尺寸都是 11 x 11 x 3。
- 已知 stride = 4, padding = 0,
- 假设 batch_size = 256,
- 则输出矩阵的高度/宽度为 (227 - 11) / 4 + 1 = 5
1 x 1 卷积计算举例
后期 GoogLeNet、ResNet 等经典模型中普遍使用一个像素大小的卷积核作为降低参数复杂度的手段。
从下面的运算可以看到,其实 1 x 1 卷积没有什么神秘的,其作用就是将输入矩阵的通道数量缩减后输出(512 降为 32),并保持它在宽度和高度维度上的尺寸(227 x 227)。
全连接层计算举例
实际上,全连接层也可以被视为是一种极端情况的卷积层,其卷积核尺寸就是输入矩阵尺寸,因此输出矩阵的高度和宽度尺寸都是1。
参考链接: