CNN 中每个卷积层后生成的特征图数量

Posted

技术标签:

【中文标题】CNN 中每个卷积层后生成的特征图数量【英文标题】:Number of feature maps produced after each convolution layer in CNN's 【发布时间】:2018-10-26 08:17:15 【问题描述】:

我的问题是关于每个卷积层之后的特征图数量。根据我的研究,在每个卷积层中,基于我们想要的过滤器,我们得到特征图的确切数量。但在一些教程中,我遇到了一些不遵循这一点的架构。例如在这个例子中:

池化后第一个卷积层的输出是6个特征图(红线)。在下一个卷积层中使用该特征图,产生了 16 个新的特征图(绿线),但是如何?前一层的特征图应该创建 1,2,3... 新的特征图,我们不应该在下一层得到 16 个新的特征图。这是怎么发生的?我的假设不对?

【问题讨论】:

【参考方案1】:

我也有过这样的困惑,经过一番挖掘,雾气才散去。

1通道卷积和多通道卷积的区别 这就是我的理解出错的地方。我将尝试解释这种差异。我不是专家,所以请多多包涵

单通道卷积运算

当我们想到一个简单的灰度 32X32 图像和卷积运算时,我们在第一层应用了一个或多个卷积矩阵。

根据您的示例,这些尺寸为 5X5 的卷积矩阵中的每一个都会生成一个 28x28 矩阵作为输出。 为什么是 28X28? 因为,假设 stride=1 和 padding=0,您可以在 32-5+1=28 个位置滑动一个 5 像素正方形的窗口。

在这种情况下,每个卷积矩阵都有 5X5=25 个可训练权重 + 1 个可训练偏差。您可以拥有任意数量的卷积核。但是,每个内核都是二维的,每个内核都会产生一个 28X28 维度的输出矩阵,然后将其馈送到 MAXPOOL 层。

多通道卷积运算

如果图像是 RGB 32X32 图片怎么办?根据流行文献,图像应被视为由 3 个通道组成,并且应在每个通道上执行卷积操作。 我必须承认我仓促得出了一些误导性的结论。我的印象是我们应该使用三个独立的 5X5 卷积矩阵——每个通道 1 个。 我错了

当您有 3 个通道 时,您的每个卷积矩阵的维度都应为 3X5X5 - 将其视为由堆叠 3 次的 5X5 矩阵组成的单个单元。因此,您有 5x5x3=75 个可训练权重 + 1 个可训练偏差

第二个卷积层会发生什么?

在您的示例中,我发现将第一个 CONV1+MAXPOOL1 层生成的 6 个特征图可视化为 6 个通道更容易。然后像以前一样应用相同的 RGB 逻辑,我们在第二个 CONV2 层中应用的任何卷积核都应该具有 6X5X5 的维度。 为什么是 6 个?因为我们 CONV1+MAXPOOL1 已经生成了 6 个特征图。 为什么是 5x5? 在您的示例中,您选择了 5x5 的窗口尺寸。从理论上讲,我可以选择 3x3,在这种情况下,内核维度将是 6X3X3。

因此,在当前示例中,如果您在 CONV2 层中有 N2 个卷积矩​​阵,那么这些 N2 个内核中的每一个都将是一个大小为 6X5X5 的矩阵。在当前示例中,N2=16 并且尺寸为 6X5X5 的内核对具有 6 个通道 X 14X14 的输入图像的卷积运算将产生 N2 个矩阵,每个矩阵的尺寸为 10X10。 为什么是 10? 10=14-5+1 (stride=1,padding=0)。

您现在为 MAXPOOL2 层排列了 N2=16 个矩阵。

参考:LeNet 架构

http://deeplearning.net/tutorial/lenet.html

注意被包围的区域。您可以看到,在第二个卷积层中,操作显示为跨越第一层生成的 4 个特征映射中的每一个。

参考:吴恩达讲座

https://youtu.be/bXJx7y51cl0

参考:多通道卷积算法是怎样的?

我发现另一个 SFO 问题很好地描述了这一点。 How a Convolutional Neural Net handles channels

请注意,在参考示例中,3 个通道中的信息被压缩成二维矩阵。这就是为什么来自 CONV1+MAXPOOL1 层的 6 个特征图似乎不再对第一个全连接层的维度有贡献。

【讨论】:

【参考方案2】:

第二个卷积的工作原理如下:

输入矩阵形状:6@14x14(6 个通道 - 在前一个(第一个)卷积步骤中应用 6 个滤波器的结果) 6@14x14 输入矩阵将使用 16 个过滤器进行卷积(每个过滤器应该有 6 个通道,以匹配输入矩阵中的通道数 这将产生 16@5x5 输出矩阵

注意:输入矩阵的通道数和每个过滤器中的通道数必须匹配,才能执行逐元素乘法。

所以第一次和第二次卷积之间的主要区别在于,第一次卷积中输入矩阵中的通道数是1,所以我们将使用6过滤器,其中每个过滤器都有只有一个通道(矩阵深度)。

对于第二个卷积,输入矩阵有 6 个通道 (feature maps),因此该卷积的每个滤波器也必须有 6 个通道。例如:16 个过滤器中的每个都将具有6@3x3 形状。

6@3x3 形状的单个过滤器的卷积步骤的结果将是WxH(宽度,高度)形状的单个通道。在应用所有 16 个过滤器(其中每个过滤器具有形状:6@3x3)后,我们将获得 16 个通道,其中每个通道是 单个 过滤器的卷积结果。

【讨论】:

感谢您的回答 :) 但是您说“每个过滤器应该有 6 个通道以匹配输入矩阵中的通道数”是什么意思? 16个过滤器,每个有6个通道?我无法理解。 @Fcoder,你了解第一个卷积步骤是如何工作的吗? 是的,我想。我们有一个输入矩阵并对其应用 6 个过滤器,然后我们得到 6 个特征图。我的问题是,对于 6 个新的输入矩阵,我们如何获得 16 个特征图。它应该是 6 或 12 或 18...而不是 16。我很困惑! @Fcoder,不,它可以是任意数量的过滤器(具有相同的通道数),从而产生一个输出矩阵,其中通道数(你称之为feature maps)将等于# 过滤器【参考方案3】:

让我通过一个简单的例子来告诉你卷积是如何工作的基本概念:

如果我们有一个大小为 32x32 且有 3 个通道的输入图像,并且如果我们选择使用 5x5 过滤器,则过滤器的尺寸将为 5x5x3(隐式)。

1234563 因此,每当我们说深度时,我们指的是我们希望添加的过滤器的数量。如果我们想要 6 的深度,这意味着我们使用 6 个大小为 5x5x3 的过滤器,只产生 6 层输出。

为了回答您的问题,在给定的架构中,他们对输入图像使用 6 个过滤器,然后使用 16 个大小为 (yxyx 6) 的过滤器,其中 y 应该是所选过滤器的高度和宽度。

【讨论】:

以上是关于CNN 中每个卷积层后生成的特征图数量的主要内容,如果未能解决你的问题,请参考以下文章

CNN卷积神经网络

如何利用CNN实现图像识别的任务?

CNN——卷积层

cnn卷积理解

CNN卷积神经网络学习

LeNet-5——CNN经典网络模型详解(pytorch实现)