2016-03-07 326 views
1

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 

會是什麼來調整你的矩陣乘法陣列的一般方法是什麼?

回答

0

您正在使用im2col錯誤的第二個參數,請參閱the documentation

你應該給它的過濾器窗口,您正試圖在圖像上滑動的大小,即:

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

謝謝您的回答!我仍然不知道如何能夠將cols與濾鏡相乘。 cols的尺寸變爲9,並且過濾器的尺寸是3. –

+0

@ V.Vocor:過濾器的尺寸是3x3。您必須將其重新解釋爲大小爲9的列向量,然後您可以簡單地獲取此過濾器向量和圖像列的點積。 – cfh

+0

我的不好。再次感謝你! –