SPP空間金字塔池化的重要思想
空間金字塔池化(Spatial Pyramid Pooling layer) 呵曹,使用這種方式,可以讓網(wǎng)絡(luò)輸入任意的圖片钮科,而且還會生成固定大小的輸出唤衫。這樣,整體的結(jié)構(gòu)和之前R-CNN有所不同跺嗽。
實際上战授,卷積層是不需要輸入固定大小的圖片的,并且還可以生成任意大小的特征圖桨嫁,只是全連接層需要固定大小的輸入植兰。因此,固定長度的約束僅限于全連接層璃吧。
分析如下:
CNN大體包含3部分楣导,卷積、池化畜挨、全連接筒繁。
卷積:卷積操作對圖片輸入的大小會有要求嗎?比如一個5*5的卷積核巴元,輸入的圖片是30*81的大小毡咏,可以得到(26,77)大小的圖片,并不會影響卷積操作逮刨。輸入600*500呕缭,它還是照樣可以進行卷積,也就是卷積對圖片輸入大小沒有要求修己。任意大小的圖片進入恢总,都可以進行卷積。
池化:池化對圖片大小會有要求嗎睬愤?比如我池化大小為(2片仿,2)我輸入一張30*40的,那么經(jīng)過池化后可以得到15*20的圖片尤辱。輸入一張53*22大小的圖片砂豌,經(jīng)過池化后厢岂,我可以得到26*11大小的圖片。因此池化這一步也沒對圖片大小有要求奸鸯。輸入任意大小的圖片咪笑,都可以進行池化可帽。
全連接層:既然池化和卷積都對輸入圖片大小沒有要求娄涩,那么就只有全連接層對圖片結(jié)果有要求了。因為全連接層連接權(quán)值矩陣的大小W映跟,經(jīng)過網(wǎng)絡(luò)訓練后蓄拣,大小就固定了。比如我們從卷積到全連層努隙,輸入和輸出的大小球恤,分別是50、30荸镊,那么權(quán)值矩陣50×30大小的矩陣了咽斧。因此空間金字塔池化,要解決的就是從卷積層到全連接層之間的一個過度躬存。
也就是說张惹,在最后一個卷積層與第一個全連接層(fc)之間需要訓練一個大小固定的二維數(shù)組,這樣可以得到的特征更完整一些岭洲,提高了定位與識別的準確率宛逗。如下圖所求:
SPP的具體實現(xiàn)過程
SPP為的就是解決上述的問題,做到的效果為:不管輸入的圖片是什么尺度盾剩,都能夠正確的傳入網(wǎng)絡(luò)
具體方案如下圖所示:
不管最后一個卷積層得到的特征圖(feature maps)的大小雷激,都可將其轉(zhuǎn)化為了(4*4+2*2+1*1)*256的全連接層,也就是這些特征圖的大小不同告私,但通道是相同的屎暇,那么如何將不同大小的特征圖進行spp 呢?
假設(shè)輸入的大小為a*a*c驻粟,然后呢根悼,這些特征圖分別被分成了[1*1,2*2,4*4]大小的塊,期望的輸出為1*1*c,2*2*c,4*4*c,變形為(1*1+2*2+4*4)*c的二維數(shù)組格嗅,這全部是通過池化操作實現(xiàn)的番挺,不過池化層的size和stride是不同的,具體有如下:
輸入為[a,a]屯掖,輸出為[n,n]玄柏,那么pool_size= n/a ,stride= n/a 贴铜,這樣我們就將其轉(zhuǎn)化為了n*n*c的矩陣粪摘,例如13*13瀑晒、10*10要轉(zhuǎn)化為4*4的大小,那么采用[p_s=4,,s=3],[p_s=3,s=2]的池化操作后便可以得到徘意。
如果原圖輸入是227x227苔悦,對于conv5出來后的輸出,是13x13x256的椎咧,可以理解成有256個這樣的filter玖详,每個filter對應一張13x13的激活圖。
如果像上圖那樣將激活圖池化成4x4 2x2 1x1三張子圖勤讽,做max pooling后蟋座,出來的特征就是固定長度的(16+4+1)x256那么多的維度了.如果原圖的輸入不是227x227,出來的特征依然是(16+4+1)x256脚牍;直覺地說向臀,可以理解成將原來固定大小為(3x3)窗口的pool5改成了自適應窗口大小,窗口的大小和激活成比例诸狭,保證了經(jīng)過pooling后出來的feature的長度是一致的.
如果要金字塔的某一層輸出n x n個特征券膀,只需要用窗口大小為:(w/n,h/n)進行池化即可。
當我們有很多層網(wǎng)絡(luò)的時候驯遇,網(wǎng)絡(luò)輸入的是一張任意大小的圖片芹彬,這個時候我們可以一直進行卷積、池化妹懒,直到即將與全連接層連接的時候雀监,就要使用金字塔池化,使得任意大小的特征圖都能夠轉(zhuǎn)換成固定大小的特征向量眨唬,這就是空間金字塔池化的奧妙之處会前!
轉(zhuǎn)載?https://baijiahao.baidu.com/s?id=1615888235953033111&wfr=spider&for=pc