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×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
會是什麼來調整你的矩陣乘法陣列的一般方法是什麼?
謝謝您的回答!我仍然不知道如何能夠將cols與濾鏡相乘。 cols的尺寸變爲9,並且過濾器的尺寸是3. –
@ V.Vocor:過濾器的尺寸是3x3。您必須將其重新解釋爲大小爲9的列向量,然後您可以簡單地獲取此過濾器向量和圖像列的點積。 – cfh
我的不好。再次感謝你! –