吳恩達深度學習筆記(74)-Padding(填充)原理講解

Padding

為了構建深度神經網絡,你需要學會使用的一個基本的卷積操作就是padding,讓我們來看看它是如何工作的。

吳恩達深度學習筆記(74)-Padding(填充)原理講解

我們在之前筆記中看到,如果你用一個3×3的過濾器卷積一個6×6的圖像,你最後會得到一個4×4的輸出,也就是一個4×4矩陣。那是因為你的3×3過濾器在6×6矩陣中,只可能有4×4種可能的位置。這背後的數學解釋是,如果我們有一個n×n的圖像,用f×f的過濾器做卷積,那麼輸出的維度就是(n-f+1)×(n-f+1)。在這個例子裡是6-3+1=4,因此得到了一個4×4的輸出。

這樣的話會有兩個缺點,第一個缺點是每次做卷積操作,你的圖像就會縮小,從6×6縮小到4×4,你可能做了幾次之後,你的圖像就會變得很小了,可能會縮小到只有1×1的大小。你可不想讓你的圖像在每次識別邊緣或其他特徵時都縮小,這就是第一個缺點

吳恩達深度學習筆記(74)-Padding(填充)原理講解

第二個缺點時,如果你注意角落邊緣的像素,這個像素點(綠色陰影標記)只被一個輸出所觸碰或者使用,因為它位於這個3×3的區域的一角。但如果是在中間的像素點,比如這個(紅色方框標記),就會有許多3×3的區域與之重疊。所以那些在角落或者邊緣區域的像素點在輸出中採用較少,意味著你丟掉了圖像邊緣位置的許多信息(第二個缺點)

為了解決這兩個問題,一是輸出縮小。當我們建立深度神經網絡時,你就會知道你為什麼不希望每進行一步操作圖像都會縮小。比如當你有100層深層的網絡,如果圖像每經過一層都縮小的話,經過100層網絡後,你就會得到一個很小的圖像,所以這是個問題。另一個問題是圖像邊緣的大部分信息都丟失了

吳恩達深度學習筆記(74)-Padding(填充)原理講解

為了解決這些問題,你可以在卷積操作之前填充這幅圖像。

在這個案例中,你可以沿著圖像邊緣再填充一層像素。如果你這樣操作了,那麼6×6的圖像就被你填充成了一個8×8的圖像。如果你用3×3的圖像對這個8×8的圖像卷積,你得到的輸出就不是4×4的,而是6×6的圖像,你就得到了一個尺寸和原始圖像6×6的圖像。習慣上,你可以用0去填充,如果p是填充的數量,在這個案例中,p=1,因為我們在周圍都填充了一個像素點,輸出也就變成了(n+2p-f+1)×(n+2p-f+1),所以就變成了(6+2×1-3+1)×(6+2×1-3+1)=6×6,和輸入的圖像一樣大。

這個塗綠的像素點(左邊矩陣)影響了輸出中的這些格子(右邊矩陣)。這樣一來,丟失信息或者更準確來說角落或圖像邊緣的信息發揮的作用較小的這一缺點就被削弱了。

剛才我已經展示過用一個像素點來填充邊緣,如果你想的話,也可以填充兩個像素點,也就是說在這裡填充一層。實際上你還可以填充更多像素。我這裡畫的這種情況,填充後p=2。

吳恩達深度學習筆記(74)-Padding(填充)原理講解

至於選擇填充多少像素,通常有兩個選擇,分別叫做Valid卷積和Same卷積

Valid卷積

Valid卷積意味著不填充,這樣的話,如果你有一個n×n的圖像,用一個f×f的過濾器卷積,它將會給你一個(n-f+1)×(n-f+1)維的輸出。這類似於我們在前面的筆記頻中展示的例子,有一個6×6的圖像,通過一個3×3的過濾器,得到一個4×4的輸出。

吳恩達深度學習筆記(74)-Padding(填充)原理講解

Same卷積

另一個經常被用到的填充方法叫做Same卷積,那意味你填充後,你的輸出大小和輸入大小是一樣的。

根據這個公式n-f+1,當你填充p個像素點,n就變成了n+2p,最後公式變為n+2p-f+1。因此如果你有一個n×n的圖像,用p個像素填充邊緣,輸出的大小就是這樣的(n+2p-f+1)×(n+2p-f+1)。如果你想讓n+2p-f+1=n的話,使得輸出和輸入大小相等,如果你用這個等式求解p,那麼p=(f-1)/2

所以當f是一個奇數的時候,只要選擇相應的填充尺寸,你就能確保得到和輸入相同尺寸的輸出。這也是為什麼前面的例子,當過濾器是3×3時,和上一張幻燈片的例子一樣,使得輸出尺寸等於輸入尺寸,所需要的填充是(3-1)/2,也就是1個像素。另一個例子,當你的過濾器是5×5,如果f=5,然後代入那個式子,你就會發現需要2層填充使得輸出和輸入一樣大,這是過濾器5×5的情況。

吳恩達深度學習筆記(74)-Padding(填充)原理講解

習慣上,計算機視覺中,f通常是奇數,甚至可能都是這樣。你很少看到一個偶數的過濾器在計算機視覺裡使用,我認為有兩個原因。

其中一個可能是,如果f是一個偶數,那麼你只能使用一些不對稱填充。只有f是奇數的情況下,Same卷積才會有自然的填充,我們可以以同樣的數量填充四周,而不是左邊填充多一點,右邊填充少一點,這樣不對稱的填充。

第二個原因是當你有一個奇數維過濾器,比如3×3或者5×5的,它就有一箇中心點。有時在計算機視覺裡,如果有一箇中心像素點會更方便,便於指出過濾器的位置

也許這些都不是為什麼f通常是奇數的充分原因,但如果你看了卷積的文獻,你經常會看到3×3的過濾器,你也可能會看到一些5×5,7×7的過濾器。後面我們也會談到1×1的過濾器,以及什麼時候它是有意義的。

但是習慣上,推薦你只使用奇數的過濾器。我想如果你使用偶數f也可能會得到不錯的表現,如果遵循計算機視覺的慣例,我通常使用奇數值的f。

你已經看到如何使用padding卷積,為了指定卷積操作中的padding,你可以指定p的值。也可以使用Valid卷積,也就是p=0。也可使用Same卷積填充像素,使你的輸出和輸入大小相同。以上就是padding,在接下來的筆記中我們討論如何在卷積中設置步長。


分享到:


相關文章: