How GEMM works for Convolutions

这似乎是一项非常专业的操作。 最后,它涉及很多乘法和求和,例如全连接层,但尚不清楚如何或为什么我们应该将其转换为GEMM的矩阵乘法。 我将在最后讨论动机,但是这里是如何通过矩阵乘法来表示运算的。

第一步是将来自图像的输入(实际上是3D数组)转换为2D数组,我们可以将其视为矩阵。 应用每个内核的地方是图像中的一个三维三维立方体,因此我们将这些输入值的每个立方体都作为一个单列复制到矩阵中。 我相信这是im2col,用于图像到列,我相信是从原始的Matlab函数得出的,这是我如何将其可视化:
在这里插入图片描述
现在,如果您是像我这样的图像处理极客,那么,如果步幅小于内核大小,则在执行此转换时发生的内存大小扩展可能会让您感到震惊。 这意味着包含在重叠内核位置中的像素将在矩阵中复制,这似乎效率很低。 您必须相信我,但是浪费的好处远远超过了浪费。

现在您已经有了矩阵形式的输入图像,您可以对每个内核的权重执行相同的操作,将3D多维数据集序列化为行,作为乘法的第二个矩阵。 最终的GEMM如下所示:
在这里插入图片描述
“ k”是每个补丁和内核中值的数量,因此是内核宽度内核高度深度。 结果矩阵的高度为“补丁数量”列,宽为“内核数量”行。 通过将内核数维数作为深度,然后根据补丁在输入图像中的原始位置,将补丁分成行和列,随后的操作实际上将此矩阵视为3D阵列。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值