1.4 Padding-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
| 1.3 更多邊緣檢測內容 | 回到目錄 | 1.5 卷積步長 |
Padding
為了構建深度神經網絡,你需要學會使用的一個基本的卷積操作就是padding,讓我們來看看它是如何工作的。
我們在之前視頻中看到,如果你用一個3×3的過濾器卷積一個6×6的圖像,你最后會得到一個4×4的輸出,也就是一個4×4矩陣。那是因為你的3×3過濾器在6×6矩陣中,只可能有4×4種可能的位置。這背后的數學解釋是,如果我們有一個 n?nn*nn?n 的圖像,用 f?ff*ff?f 的過濾器做卷積,那么輸出的維度就是 (n?f+1)?(n?f+1)(n-f+1)*(n-f+1)(n?f+1)?(n?f+1) 。在這個例子里是 6?3+1=46-3+1=46?3+1=4 ,因此得到了一個4×4的輸出。
這樣的話會有兩個缺點,第一個缺點是每次做卷積操作,你的圖像就會縮小,從6×6縮小到4×4,你可能做了幾次之后,你的圖像就會變得很小了,可能會縮小到只有1×1的大小。你可不想讓你的圖像在每次識別邊緣或其他特征時都縮小,這就是第一個缺點。
第二個缺點時,如果你注意角落邊緣的像素,這個像素點(綠色陰影標記)只被一個輸出所觸碰或者使用,因為它位于這個3×3的區域的一角。但如果是在中間的像素點,比如這個(紅色方框標記),就會有許多3×3的區域與之重疊。所以那些在角落或者邊緣區域的像素點在輸出中采用較少,意味著你丟掉了圖像邊緣位置的許多信息。
為了解決這兩個問題,一是輸出縮小。當我們建立深度神經網絡時,你就會知道你為什么不希望每進行一步操作圖像都會縮小。比如當你有100層深層的網絡,如果圖像每經過一層都縮小的話,經過100層網絡后,你就會得到一個很小的圖像,所以這是個問題。另一個問題是圖像邊緣的大部分信息都丟失了。
為了解決這些問題,你可以在卷積操作之前填充這幅圖像。在這個案例中,你可以沿著圖像邊緣再填充一層像素。如果你這樣操作了,那么6×6的圖像就被你填充成了一個8×8的圖像。如果你用3×3的圖像對這個8×8的圖像卷積,你得到的輸出就不是4×4的,而是6×6的圖像,你就得到了一個尺寸和原始圖像6×6的圖像。習慣上,你可以用0去填充,如果是填充的數量,在這個案例中, p=1p=1p=1 ,因為我們在周圍都填充了一個像素點,輸出也就變成了 (n+2p?f+1)?(n+2p?f+1)(n+2p-f+1)*(n+2p-f+1)(n+2p?f+1)?(n+2p?f+1) ,所以就變成了 (6+2?1?3+1)?(6+2?1?3+1)=6?6(6+2*1-3+1)*(6+2*1-3+1)=6*6(6+2?1?3+1)?(6+2?1?3+1)=6?6 ,和輸入的圖像一樣大。這個涂綠的像素點(左邊矩陣)影響了輸出中的這些格子(右邊矩陣)。這樣一來,丟失信息或者更準確來說角落或圖像邊緣的信息發揮的作用較小的這一缺點就被削弱了。
剛才我已經展示過用一個像素點來填充邊緣,如果你想的話,也可以填充兩個像素點,也就是說在這里填充一層。實際上你還可以填充更多像素。我這里畫的這種情況,填充后 p=2p=2p=2 。
至于選擇填充多少像素,通常有兩個選擇,分別叫做Valid卷積和Same卷積。
Valid卷積意味著不填充,這樣的話,如果你有一個 n?nn*nn?n 的圖像,用一個 f?ff*ff?f 的過濾器卷積,它將會給你一個 (n?f+1)?(n?f+1)(n-f+1)*(n-f+1)(n?f+1)?(n?f+1) 維的輸出。這類似于我們在前面的視頻中展示的例子,有一個6×6的圖像,通過一個3×3的過濾器,得到一個4×4的輸出。
另一個經常被用到的填充方法叫做Same卷積,那意味你填充后,你的輸出大小和輸入大小是一樣的。根據這個公式 n?f+1n-f+1n?f+1 ,當你填充 ppp 個像素點, nnn 就變成了 n+2pn+2pn+2p ,最后公式變為 n+2p?f+1n+2p-f+1n+2p?f+1 。因此如果你有一個 n?nn*nn?n 的圖像,用 ppp 個像素填充邊緣,輸出的大小就是這樣的 (n+2p?f+1)?(n+2p?f+1)(n+2p-f+1)*(n+2p-f+1)(n+2p?f+1)?(n+2p?f+1) 。如果你想讓 n+2p?f+1=nn+2p-f+1=nn+2p?f+1=n 的話,使得輸出和輸入大小相等,如果你用這個等式求解 ppp ,那么 p=(f?1)/2p=(f-1)/2p=(f?1)/2 。所以當 fff 是一個奇數的時候,只要選擇相應的填充尺寸,你就能確保得到和輸入相同尺寸的輸出。這也是為什么前面的例子,當過濾器是3×3時,和上一張幻燈片的例子一樣,使得輸出尺寸等于輸入尺寸,所需要的填充是(3-1)/2,也就是1個像素。另一個例子,當你的過濾器是5×5,如果 f=5f=5f=5 ,然后代入那個式子,你就會發現需要2層填充使得輸出和輸入一樣大,這是過濾器5×5的情況。
習慣上,計算機視覺中, fff 通常是奇數,甚至可能都是這樣。你很少看到一個偶數的過濾器在計算機視覺里使用,我認為有兩個原因。
其中一個可能是,如果 fff 是一個偶數,那么你只能使用一些不對稱填充。只有 fff 是奇數的情況下,Same卷積才會有自然的填充,我們可以以同樣的數量填充四周,而不是左邊填充多一點,右邊填充少一點,這樣不對稱的填充。
第二個原因是當你有一個奇數維過濾器,比如3×3或者5×5的,它就有一個中心點。有時在計算機視覺里,如果有一個中心像素點會更方便,便于指出過濾器的位置。
也許這些都不是為什么通常 fff 是奇數的充分原因,但如果你看了卷積的文獻,你經常會看到3×3的過濾器,你也可能會看到一些5×5,7×7的過濾器。后面我們也會談到1×1的過濾器,以及什么時候它是有意義的。但是習慣上,我推薦你只使用奇數的過濾器。我想如果你使用偶數f也可能會得到不錯的表現,如果遵循計算機視覺的慣例,我通常使用奇數值的 fff 。
你已經看到如何使用padding卷積,為了指定卷積操作中的padding,你可以指定 ppp 的值。也可以使用Valid卷積,也就是 p=0p=0p=0 。也可使用Same卷積填充像素,使你的輸出和輸入大小相同。以上就是padding,在接下來的視頻中我們討論如何在卷積中設置步長。
課程板書
| 1.3 更多邊緣檢測內容 | 回到目錄 | 1.5 卷積步長 |
總結
以上是生活随笔為你收集整理的1.4 Padding-深度学习第四课《卷积神经网络》-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.3 更多边缘检测内容-深度学习第四课
- 下一篇: 1.5 卷积步长-深度学习第四课《卷积神