深入解析CNN pooling 池化层原理及其作用
原文地址:https://blog.csdn.net/CVSvsvsvsvs/article/details/90477062
池化層作用機(jī)理
我們以最簡(jiǎn)單的最常用的max pooling最大池化層為例,對(duì)池化層作用機(jī)理進(jìn)行探究。其他池化層的作用機(jī)理也大致適用這一機(jī)理,在這里就不加入討論。
圖片和以下部分內(nèi)容來(lái)自 CS231n
從上面左圖可以看到,使用了pool操作其實(shí)就是降低圖片的空間尺寸。右圖使用一個(gè) 2 × 2的 池化核(filter),以2為步長(zhǎng)(stride),對(duì)圖片進(jìn)行max pooling,那么會(huì)圖片就會(huì)尺寸就會(huì)減小一半。需要注意,這里是因?yàn)?stride = 2,所以圖片尺寸才會(huì)減少一半的。
CS231n又對(duì)池化進(jìn)行了量化的闡述:
上圖表示的意思就是:
給定一個(gè)圖片的三個(gè)維度的尺寸, 即【Channel, Height, Width】,以及給定兩個(gè)超參數(shù)池化核尺寸 【F × F】,池化步長(zhǎng)【S】,就可以計(jì)算池化后的圖片尺寸,見(jiàn)上圖公式。
池化核這個(gè)filter是不需要保留參數(shù)的,不同于conv filter, 每一個(gè)pooling filter就是一個(gè)固定的函數(shù),比如max pooling,就是取這個(gè)filter覆蓋區(qū)域像素的最大值而已。所以我們?cè)谟?jì)算卷積層數(shù)的時(shí)候,不計(jì)入池化層。
對(duì)于pooling 層,我們通常不需要使用 padding。這是由于采用pooling通常是為了減少一半的圖片尺寸,我們使用 kernel size = 2 * 2,以及stride = 2的池化核。就可以在不padding 的情況下,將尺寸變?yōu)橐话搿?br />
CS231n還介紹了另外一種常見(jiàn)的池化核, 其步長(zhǎng)為 2,kernel size = 3 * 3, 叫做覆蓋池化層,其含義也就是在前后兩次的濾波窗口之間有一個(gè)像素的重疊。該池化核在AlexNet中得到了應(yīng)用,見(jiàn)ImageNet Classification with Deep Convolutional
Neural Networks
It is worth noting that there are only two commonly seen variations of the max pooling layer found in practice:A pooling layer with F=3,S=2 (also called overlapping pooling), and more commonly F=2,S=2.
Pooling sizes with larger receptive fields are too destructive.
CS231n 同時(shí)也告誡我們,使用大尺寸的池化核去增大感受野是destructive(破壞性的)。這很容易理解,增大池化核,將損失更多的圖片像素信息。
看到這里,你可能會(huì)有兩個(gè)疑問(wèn):
為什么可以降低圖片空間尺寸呢?
為什么要降低圖片的空間尺寸呢?
這兩個(gè)問(wèn)題,其實(shí)是觸及了池化技術(shù)的本質(zhì):在盡可能保留圖片空間信息的前提下,降低圖片的尺寸,增大卷積核感受野,提取高層特征,同時(shí)減少網(wǎng)絡(luò)參數(shù)量,預(yù)防過(guò)擬合。
先來(lái)探討第一個(gè)問(wèn)題。
為什么可以降低圖片空間尺寸?
這個(gè)問(wèn)題很簡(jiǎn)單,等比例縮小圖片,圖片的主體內(nèi)容丟失不多,具有平移,旋轉(zhuǎn),尺度的不變性,簡(jiǎn)單來(lái)說(shuō)就是圖片的主體內(nèi)容依舊保存著原來(lái)大部分的空間信息。
為什么要降低圖片的尺寸?
我們知道在卷積神經(jīng)網(wǎng)絡(luò)中,如果特征抽取后最終輸出特征圖尺寸太大,將會(huì)導(dǎo)致輸出結(jié)果的特征太多,計(jì)算量劇增的同時(shí),將其輸入到一個(gè)分類器(通常是全連接層Full Connected layer),很容易就會(huì)導(dǎo)致過(guò)擬合。就像機(jī)器學(xué)習(xí)一樣,特征過(guò)多的話,我們可能會(huì)考慮降維(如PCA)來(lái)減少特征,增強(qiáng)擬合能力。
簡(jiǎn)單來(lái)說(shuō):降低尺寸,有助于減少計(jì)算量以及特征數(shù)量,保留主要特征,增大卷積核感受野,防止過(guò)擬合。
但我們?cè)谧鼍矸e的時(shí)候,讓conv 層的步長(zhǎng)stride = 2同樣也可以起到降低尺寸的目的啊,為什么需要pooling 層來(lái)降低尺寸,這就回到了上文的:池化層不需要保留參數(shù)。它采用一個(gè)固定的函數(shù)進(jìn)行像素運(yùn)算,如max pooling filter中采用了max函數(shù),是不需要保留參數(shù)的,所以減少了網(wǎng)絡(luò)的參數(shù)量。
增大感受野是怎么回事,我們知道在實(shí)際訓(xùn)練中,我們的卷積核一般就是比較小的,如3 * 3,這些卷積核本質(zhì)就是在特征圖上進(jìn)行濾波窗口計(jì)算并滑動(dòng)。如果要保持卷積核大小不變,同時(shí)增大卷積核覆蓋區(qū)域(感受野增大,便于提取高層語(yǔ)義),那么就可以對(duì)圖片尺寸進(jìn)行下采樣。
當(dāng)然增大感受野也有其他方式,如膨脹卷積運(yùn)算,在保證特征圖尺寸不變的情況下,可以增大卷積核的感受野。
不過(guò)值得一提的是:在像素信息較為敏感的一些視覺(jué)任務(wù)中(如分割,檢測(cè)),一般是較少使用pooling操作來(lái)下采樣的,通常使用插值(如雙線性插值等)或者stride=2的卷積層來(lái)進(jìn)行下采樣,盡可能的保留像素信息,這也是pooling操作的缺點(diǎn),不過(guò)使用pooling也有其優(yōu)點(diǎn),就有無(wú)參數(shù)的好處。
如果你追求更加理論和硬核的pooling解釋的話,我推薦你去看一下LeCun在10年ICML的論文:A Theoretical Analysis of Feature Pooling in Visual Recognition。
————————————————
版權(quán)聲明:本文為CSDN博主「qyhyzard」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/CVSvsvsvsvs/article/details/90477062
總結(jié)
以上是生活随笔為你收集整理的深入解析CNN pooling 池化层原理及其作用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Effective Java(1)-创建
- 下一篇: Docker运行GUI软件的方法