Matlab 将卷积实现为矩阵乘法

Matlab 将卷积实现为矩阵乘法,matlab,computer-vision,deep-learning,convolution,caffe,Matlab,Computer Vision,Deep Learning,Convolution,Caffe,简要说明:帮助使用Matlab脚本,该脚本从Caffe获取ImageData数组和卷积权重,并返回卷积。求你了 我试图在Matlab中重建由Caffe生成的卷积 让我们做以下定义 W**2 = Size of input F**2 = Size of filter P = Size of padding S = Stride K = Number of filters 以下文字描述了如何将卷积推广为矩阵乘法: 在通常称为im2col的操作中,输入图像中的局部区域被拉伸成列。例如,如果输入为[

简要说明:帮助使用Matlab脚本,该脚本从Caffe获取ImageData数组和卷积权重,并返回卷积。求你了


我试图在Matlab中重建由Caffe生成的卷积

让我们做以下定义

W**2 = Size of input
F**2 = Size of filter
P = Size of padding
S = Stride
K = Number of filters
以下文字描述了如何将卷积推广为矩阵乘法:

在通常称为im2col的操作中,输入图像中的局部区域被拉伸成列。例如,如果输入为[227x227x3],并在第4步使用11x11x3过滤器进行卷积,则我们将在输入中获取[11x11x3]个像素块,并将每个块拉伸为大小为11*11*3=363的列向量。以4的步幅在输入中迭代该过程,得到(227-11)/4+1=55个沿宽度和高度的位置,从而得到一个大小为[363 X 3025]的im2col输出矩阵X_col,其中每列都是一个伸展的感受野,总共有55*55=3025个。请注意,由于感受野重叠,输入卷中的每个数字可能在多个不同的列中重复

由此可以得出结论,im2col函数调用将如下所示:

input = im2col( input, [3*F*F, ((W-F)/S+1)**2)])
但是,如果我使用以下参数值

W = 5
F = 3
P = 1
S = 2
K = 2
我得到以下维度

>> size(input)

ans =

     1     3     5     5

>> size(output)

ans =

     1     2     3     3

>> size(filter)

ans =

     2     3     3     3
如果我使用上面的im2col函数调用,我会得到一个空矩阵

如果在上面的示例中将步幅更改为1,则输入、输出和过滤器的大小保持不变。如果使用Matlab的“convn”命令,则大小与Caffe的实际输出不同

>> size(convn(input,filter))                                  

ans =

     2     5     7     7

调整矩阵乘法数组大小的一般方法是什么?

您使用的第二个参数
im2col
错误,请参阅

您应该为其提供您试图在图像上滑动的过滤器窗口的大小,即:

cols = im2col( input, [F, F])

您将第二个参数用于
im2col
错误,请参阅

您应该为其提供您试图在图像上滑动的过滤器窗口的大小,即:

cols = im2col( input, [F, F])

谢谢你的回答!我仍然不知道怎样才能用过滤器乘以cols。cols的尺寸变为9,过滤器的尺寸为3。。@V.Vocor:过滤器的尺寸为3x3。你必须把它重新解释为一个大小为9的列向量,然后你可以简单地取这个过滤向量和图像列的点积。我的错。再次感谢你!谢谢你的回答!我仍然不知道怎样才能用过滤器乘以cols。cols的尺寸变为9,过滤器的尺寸为3。。@V.Vocor:过滤器的尺寸为3x3。你必须把它重新解释为一个大小为9的列向量,然后你可以简单地取这个过滤向量和图像列的点积。我的错。再次感谢你!