二维卷积作为矩阵 - 矩阵乘法

no_*_*ame 30 convolution matrix-multiplication neural-network deep-learning conv-neural-network

我知道在1-d情况下,两个矢量之间的卷积a可以被计算为 b,也可作为在之间的乘积conv(a, b)T_a,其中b是用于相应的托普利兹矩阵T_a.

是否有可能将这个想法扩展到2-D?

给定aa = [5 1 3; 1 1 2; 2 1 3]是否有可能b=[4 3; 1 2]在Toeplitz矩阵中进行转换aT_a在1-D情况下计算矩阵矩阵乘积?

Sal*_*ali 36

是的,这是可能的,您还应该使用双块循环矩阵(这是Toeplitz矩阵的特例).我将给你一个小内核和输入的例子,但是可以为任何内核构造Toeplitz矩阵.所以你有一个2d输入x和2d内核k,你想要计算卷积x * k.我们也假设k已经翻了.让我们也假设x是大小n×nkm×m.

因此,您将展开k为大小的稀疏矩阵(n-m+1)^2 × n^2,并展开x为长向量n^2 × 1.您计算此稀疏矩阵与向量的乘法,并将得到的向量(将具有大小(n-m+1)^2 × 1)转换为n-m+1方阵.

我很确定这只是从阅读中难以理解.所以这是一个2×2内核和3×3输入的例子.

在此输入图像描述*在此输入图像描述

这是一个带向量的构造矩阵:

在此输入图像描述

等于 在此输入图像描述.

这是你做的滑动窗口已经得到了相同的结果kx.

  • 在您的示例中,这不是Toeplitz矩阵.所以你回答的只是部分正确,是吗? (3认同)
  • 最后必须进行某种重塑吗?最后一个向量是4 x 1,但是卷积的结果将是2 x 2 (2认同)
  • @jvans是的,最后你应该重塑你的向量。这里写的是:**将结果向量(其大小为 (n-m+1)^2 X 1)转换为 n-m+1 方阵** (2认同)

Ali*_*ehi 12

1-定义输入和过滤器

成为输入信号,F是滤波器或内核.

2d输入信号和滤波器

2-计算最终输出大小

如果I是m1 x n1而F是m2 x n2,则输出的大小为:

在此输入图像描述

3-对填充矩阵进行零填充

零填充滤波器使其与输出的大小相同.

在此输入图像描述

4-为零填充滤波器的每一行创建Toeplitz矩阵

在此输入图像描述

5-创建一个双重阻塞的Toeplitz矩阵

现在所有这些小的Toeplitz矩阵都应该安排在一个大的双重阻塞的Toeplitz矩阵中. 在此输入图像描述

在此输入图像描述

6-将输入矩阵转换为列向量

在此输入图像描述

7-用矢量化输入信号乘以双重阻塞的toeplitz矩阵

该乘法给出了卷积结果.

8-最后一步:将结果重新整形为矩阵形式

在此输入图像描述

有关更多详细信息和python代码,请查看我的github存储库:

使用python中的toeplitz矩阵逐步解释2D卷积实现为矩阵乘法