【发布时间】:2021-02-06 21:38:22
【问题描述】:
我一直试图了解(但不幸失败)图像上的卷积(具有高度、宽度、通道)是如何在软件中实现的。
我听说人们说他们的卷积实现是使用 GEMM 完成的,或者是使用“直接卷积”完成的,或者是使用 1x1 内核完成的。
我发现它非常令人困惑,无法理解它随处描述的这么多不同的方式 - 我认为我理解像 pytorch conv2d 这样的典型卷积作为对图像的数学运算,但是当有人说他们使用以下方式之一进行 conv2d 时,它们是什么意思?
- 1x1 内核或 1x1 卷积(这里的内核是什么意思)
- 创业板
- “直接卷积”
对于使用 GEMM 进行卷积,我基于this paper 的理解是,每个输入图像和过滤器都使用im2col 和im2row 操作转换为二维矩阵,然后这两个只是矩阵相乘.
3d 输入图像(高度、宽度、输入通道)转换为 2d 矩阵,4-d 内核(输出通道、输入通道、内核高度、内核宽度)转换为 2d矩阵。或者“基于 GEMM 的卷积实现”是否意味着别的?如果这就是它的意思,那么它与“使用 1x1 内核的卷积”有何不同?
【问题讨论】:
标签: tensorflow conv-neural-network matrix-multiplication convolution tiling