python - 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 个像素的所有特征?
解决方案
1x1 卷积是“内核大小”为 1 的 2D 卷积。由于没有空间邻域感,就像在 3x3 内核中一样,它们如何学习空间特征取决于架构。
顺便说一下,2D 卷积和 3D 卷积的区别在于卷积的运动。2D 卷积将滤波器沿“x 和 y”关联起来,并且正在学习每个输出通道的(内核 x 内核 x 输入通道)参数。3D 卷积沿“x、y 和 z”相关,并且正在学习每个输出通道的(内核 x 内核 x 内核 x 输入通道)参数。您可以对带有通道的图像进行 3D 卷积,但这并没有真正意义,因为我们已经知道“深度”是相关的。3D 卷积通常用于几何体积,例如来自 CT 扫描的数据。
推荐阅读
- r - 与用于组过滤的 data.frame 相比,data.table 速度较慢
- windows - EXE从控制台启动时Visual Studio C++控制台输出,没有控制台启动时没有控制台
- git - 如何撤销 git "git checkout -m filename" 的命令
- python - 如何使用 Paramiko 传递命令行 ssh 参数?
- fortran - 带有 __FILE__ 和 Gfortran 的固定格式 Fortran
- java - 在 JMeter 中从 double 值定义一个随机值
- python-3.x - 你如何用列中的第一个值填充不均匀的熊猫数据框列
- ios - 为什么 IONIC/ Cordova SMS 插件第一次加载需要时间?
- r - R闪亮:如果req不满足则运行代码(相当于“req else”?)
- sql - SQL:ttfb 在线指南中使用的查询在 BigQuery 中不返回任何结果