Matlab 将卷积实现为矩阵乘法
简要说明:帮助使用Matlab脚本,该脚本从Caffe获取ImageData数组和卷积权重,并返回卷积。求你了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生成的卷积 让我们做以下定义
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的列向量,然后你可以简单地取这个过滤向量和图像列的点积。我的错。再次感谢你!