我正在寻找一个很好的解释,说明深度学习中的卷积在应用于多通道图像时是如何工作的。例如,假设我有一个具有三个通道 RGB 的 100 x 100 像素图像。输入张量的尺寸将是 100 x 100 x 3。
如果我应用具有 N 个过滤器且步幅为 1 的卷积,输出维度将是:
100 x 100 x 3 x N?
或者
100 x 100 x N ?
换句话说,应用的卷积是“压平”图像,还是逐个通道应用卷积?
我正在寻找一个很好的解释,说明深度学习中的卷积在应用于多通道图像时是如何工作的。例如,假设我有一个具有三个通道 RGB 的 100 x 100 像素图像。输入张量的尺寸将是 100 x 100 x 3。
如果我应用具有 N 个过滤器且步幅为 1 的卷积,输出维度将是:
100 x 100 x 3 x N?
或者
100 x 100 x N ?
换句话说,应用的卷积是“压平”图像,还是逐个通道应用卷积?
在我见过的所有处理图像的 CNN 实现中,任何层的输出都是
Width x Height x Channels
或某种排列。这与输入的维数相同,卷积层没有添加额外的维数。CNN 层输出中的每个特征图通道都是通过添加多个 2D 内核(输入层中的每个通道一个)的结果创建的“扁平化”2D 数组。
通常,即使是灰度输入图像也应该被表示为,Width x Height x 1
以便它们适合相同的模式并且可以使用相同的层模型。
构建将标准 2D+channels 输入层转换为 3D+channels 层的层设计是完全可行的。这不是我以前见过的事情,但你永远不能排除它在特定问题中可能有用。
您可能还会在 CNN 中看到 3D+channels 卷积应用于视频,但在这种情况下,结构将是一些变化
Width x Height x Frames x Channels
这取决于您选择的过滤器数量。假设您选择了 64 个过滤器。
您的权重张量的形状将是 [3, 3, 3, 64] (第 3 个 3 是输入层中的通道数,64 是输出层中的通道数)和偏置张量形状 [64]
对于 224 * 224 * 3 = 224 * 224 * 64 的输入图像,输出将是如果 Pad = "SAME" 和步幅 1
对于 224 * 224 * 3 = 221 * 221 * 64 的输入图像,如果 Pad = "Valid" 和步幅为 1,则输出将是
现在输入 221 * 221 * 64 如果你想在下一层创建 128 个过滤器,你的 - 权重向量形状将是 [3, 3, 64, 128] 并且 - 偏置向量形状将是 [128]
和输出形状 - 如果 Pad = "SAME" [ 221 , 221 , 128 ] - 如果 Pad = "VALID" [ 198 , 198 , 128 ] 考虑 stride = [1,1,1,1]
您可以在使用 layername.get_shape() 构建图形时检查这些结果。
深度学习中卷积的输出维度取决于多个因素
最简单的依赖关系是过滤器的数量N
。它为您提供输出具有的特征图的数量。对于可能是 RGB 通道的输入,即 3,对于输出,这个数字可以自由选择。
下一个因素是零填充。如果您使用 (3,3) 的过滤器大小和“有效”填充,即在图像周围添加 NO 零,您最终会得到一个维度的输出。
(100, 100, 3) -> (98, 98, N)
因为您使用的步幅为 1。如果您在图片末尾的图像上沿每个方向移动滤镜,滤镜将在 98 步后到达边界。
但是,如果您使用“SAME”填充,您将补偿过滤器大小 - 如果过滤器大小为 (3,3),这将对应于图像周围的一行零 - 您最终将得到:
(100, 100, 3) -> (100, 100, N)
例如,步幅为 2 时,您将过滤器的位置移动两个像素。因此,你得到
(100, 100, 3) -> (50, 50, N)
三个通道 RGB 由不同的内核卷积并添加到每个特征图中。因此,您将有 100 x 100 x N 作为输出第一层。