首页 > 解决方案 > 1x1 卷积如何保留学习到的特征?

问题描述

下面,我交替使用通道和特征图。

我试图更好地理解 1x1 卷积如何与多个输入通道一起工作,但还没有找到一个很好的解释。在进入 1x1 之前,我想确保我对 2D 与 3D 卷积的理解。让我们看一个简单的 Keras API 中的 2D 卷积示例:

i = Input(shape=(64,64,3))
x = Conv2D(filters=32,kernel_size=(3,3),padding='same',activation='relu') (i)

在上面的例子中,输入图像有 3 个通道,卷积层会产生 32 个特征图。2D 卷积层是否会对 3 个输入通道中的每一个应用 3 个不同的内核来生成每个特征图?如果是这样,这意味着每个 2D 卷积操作中使用的内核数 = #input channels * #feature maps。在这种情况下,将使用 96 个不同的内核来生成 32 个特征图。

现在让我们看看 3D 卷积:

i = Input(shape=(1,64,64,3))
x = Conv3D(filters=32,kernel_size=(3,3,3),padding='same',activation='relu') (i)

在上面的例子中,根据我目前的理解,每个内核同时与所有输入通道进行卷积。因此,每个 3D 卷积操作中使用的内核数 = #input channels。在这种情况下,将使用 32 个不同的内核来生成 32 个特征图。

我了解在使用更大的内核(3x3、5x5、7x7)进行计算之前对通道进行下采样的目的。我问是因为我对 1x1 卷积如何保留学习的特征感到困惑。让我们看一个 1x1 卷积:

i = Input(shape=(64,64,3))
x = Conv2D(filters=32,kernel_size=(3,3),padding='same',activation='relu') (i)
x = Conv2D(filters=8,kernel_size=(1,1),padding='same',activation='relu') (x)

如果我上面对 2D 卷积的理解是正确的,那么 1x1 卷积层将使用 32 个不同的内核来生成每个特征图。该操作将使用总共 256 个内核 (32*8) 来生成 8 个特征图。每个特征图计算本质上将 32 个像素合并为一个。这一个像素如何以某种方式保留前 32 个像素的所有特征?

标签: pythontensorflowkerasdeep-learningconv-neural-network

解决方案


1x1 卷积是“内核大小”为 1 的 2D 卷积。由于没有空间邻域感,就像在 3x3 内核中一样,它们如何学习空间特征取决于架构。

顺便说一下,2D 卷积和 3D 卷积的区别在于卷积的运动。2D 卷积将滤波器沿“x 和 y”关联起来,并且正在学习每个输出通道的(内核 x 内核 x 输入通道)参数。3D 卷积沿“x、y 和 z”相关,并且正在学习每个输出通道的(内核 x 内核 x 内核 x 输入通道)参数。您可以对带有通道的图像进行 3D 卷积,但这并没有真正意义,因为我们已经知道“深度”是相关的。3D 卷积通常用于几何体积,例如来自 CT 扫描的数据。

也许这个链接会有所帮助 https://medium.com/analytics-vidhya/talented-mr-1x1-comprehensive-look-at-1x1-convolution-in-deep-learning-f6b355825578


推荐阅读