Pithy:帮助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
为矩阵乘法调整数组大小的一般方法是什么?
答案 0 :(得分:0)