2016-07-21 29 views
0

我想討論一下卷積應用於CNN和圖像過濾......如果您有一個RGB圖像(尺寸爲3xIxI)和K過濾器,每個尺寸爲3xFxF,那麼假設你的步幅是1,並且你只考慮完全重疊的區域(沒有填充),那麼你最終會得到一個Kx(I - F + 1)x(I - F + 1)輸出。scipy.signal的convolve不是它應該的方式

從我在卷積上讀到的所有材料中,基本上都是將每個濾鏡滑過圖像,然後在每個階段計算大量點積,然後將它們相加得到單個值。

例如:

I -> 3x5x5 matrix 
F -> 3x2x2 matrix 
I * F -> 1x4x4 matrix 

(假設*是卷積運算。)

現在,因爲兩個內核和圖像有相同數量的渠道,你會最終分開的將3D卷積成多個並行的2D卷積,然後進行矩陣求和。

因此,上面的例子應該爲所有的意圖和目的(假設沒有填充,我們只考慮完全重疊區)是相同的,因爲這:

I -> 3x5x5 matrix 
F -> 3x2x2 matrix 
(I[0] * F[0]) + (I[1] * F[1]) + (I[2] * F[2]) -> 1x4x4 matrix 

我剛分離每個信道和將它們獨立捲入。請仔細看看,如果我錯了,請糾正我。

現在,假設這是有道理的,我已經在python中進行了以下實驗。

import scipy.signal 
import numpy as np 
import test 

x = np.random.randint(0, 10, (3, 5, 5)).astype(np.float32) 
w = np.random.randint(0, 10, (3, 2, 2)).astype(np.float32) 

r1 = np.sum([scipy.signal.convolve(x[i], w[i], 'valid') for i in range(3)], axis=0).reshape(1, 4, 4) 

r2 = scipy.signal.convolve(x, w, 'valid') 

print r1.shape 
print r1 

print r2.shape 
print r2 

這給了我以下結果:

(1, 4, 4) 
[[[ 268. 229. 297. 305.] 
    [ 256. 292. 322. 190.] 
    [ 173. 240. 283. 243.] 
    [ 291. 271. 302. 346.]]] 
(1, 4, 4) 
[[[ 247. 229. 291. 263.] 
    [ 198. 297. 342. 233.] 
    [ 208. 268. 268. 185.] 
    [ 276. 272. 280. 372.]]] 

我只是想知道這是否是由於:

  • 在SciPy的(不太可能)的bug
  • 我的程序出錯(更可能)
  • 我誤解重疊卷積(很有可能)

或上述的任意組合。謝謝閱讀!

回答

3

您寫道:

......與此相同:

I -> 3x5x5 matrix 
F -> 3x2x2 matrix 
(I[0] * F[0]) + (I[1] * F[1]) + (I[2] * F[2]) -> 1x4x4 matrix 

您忘記了卷積反轉的爭論之一。所以以上是不正確的。相反,最後一行應該是:

(I[0] * F[2]) + (I[1] * F[1]) + (I[2] * F[0]) -> 1x4x4 matrix 

例如,

In [28]: r1 = np.sum([scipy.signal.convolve(x[i], w[2-i], 'valid') for i in range(3)], axis=0).reshape(1, 4, 4) 

In [29]: r2 = scipy.signal.convolve(x, w, 'valid') 

In [30]: r1 
Out[30]: 
array([[[ 169., 223., 277., 199.], 
     [ 226., 213., 206., 247.], 
     [ 192., 252., 332., 369.], 
     [ 167., 266., 321., 323.]]], dtype=float32) 

In [31]: r2 
Out[31]: 
array([[[ 169., 223., 277., 199.], 
     [ 226., 213., 206., 247.], 
     [ 192., 252., 332., 369.], 
     [ 167., 266., 321., 323.]]], dtype=float32) 
+0

經典衛生署!時刻。非常感謝。 –

相關問題