在CNN(1)中,我們用到下圖來說明卷積之后feature maps尺寸和深度的變化。這一節中,我們討論feature map size, padding and stride。
首先,在Layer1中,輸入是32x32的圖片,而卷積之后為28x28,試問filter的size(no padding)? (答案是5x5)。 如果沒答上來,請看下圖:
I是一張7x7的圖片,filter是3x3的,I*K生成的feature map是5x5的。所以我們推出feature map size公式為:
其中n(l)表示在l層中圖片的大小,f(l)是filter的大小所以在最初的問題中filtersize=32-28+1=5。
而在convolution操作中,有一個padding參數可以在原圖外圍加上空白格,從而使feature map的size不發生變化。通常不使用padding的Convolution稱為Valid Convolution,而使用padding輸出相同size的feature map,則稱為Same Convolution。Feature map和Padding的Size計算公式為:
其中,p(l)是padding的大小。使用Padding的原因主要有二:
第一,因為architecture的原因,不希望圖片尺寸發生變化;
其二,如果不使用padding,在圖片邊緣的pixel只被計算了一次,其數據被低估了。
Stride是表示filter工作間隔的參數,默認是1,根據需要可以設置為其他值,在設置了Stride之后,feature map的計算公式為:
其中,s(l)是stride步幅的大小。當然,圖片並不都是正方的,我們可以分別計算feature map的width和height