空間金字塔池化 ssp-net


《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》,這篇paper提出了空間金字塔池化。

  之前學習的RCNN,雖然使用了建議候選區域使得速度大大降低,但是對於超大容量的數據,計算速度還有待提高。對RCNN來說,計算冗余很大一部分來自於:對每一個proposal region提取一次特征,而不同region之間有很多的交集,這就導致很大的計算冗余。因此fast-rcnn提出了,先對圖片進行一次總體的特征提取,然后再提取每個proposal region的特征。

  說跑題了,回歸正題。先說說ssp-net的優點,在ssp-net之前,使用卷積神經網絡需要統一圖片的輸入大小,那我們自己思考一下為什么需要固定輸入大小呢?

  cnn包括三個部分:卷積池化和全連接。那到底哪一個部分需要固定輸入呢?

  先說卷積,卷積操作對圖片的輸入大小要求嗎?貌似固定卷積核大小,給定輸入圖片,卷積核都能進行計算,然后輸入特征值,任意大小的圖片都可以進行卷積。

  再說池化,池化是更加不需要要求輸入大小的,池化只需要根據池化大小,進行平均或者最大池化就可以了。

  那最后就是全連接嘍,分析一下為什么全連接需要固定輸入大小。又要拿出之前隨筆中的那張圖了:

看看全連接是怎么進行計算的,x是輸入,根據矩陣運算的規則,不同的輸入x對應這不同的w,因此要進行全連接,首先要固定下來輸入x。因此罪魁禍首找到了,傳統cnn之所以要固定輸入,是因為全連接層的存在。原博客地址:http://www.cnblogs.com/smartwhite/p/8601477.html。因此空間金字塔池化層要做的就是卷積層到全連接層的過度,把卷積層不固定的輸出,通過空間金字塔池化層,固定下來,作為全連接層的輸入。

算法過程:

輸入層:一張任意大小的圖片

輸出層:21維向量

如上圖所示,當我們輸入一張圖片的時候,我們利用不同大小的刻度,對一張圖片進行了划分。上面示意圖中,利用了三種不同大小的刻度,對一張輸入的圖片進行了划分,最后總共可以得到16+4+1=21個塊,我們即將從這21個塊中,每個塊提取出一個特征,這樣剛好就是我們要提取的21維特征向量。

第一張圖片,我們把一張完整的圖片,分成了16個塊,也就是每個塊的大小就是(w/4,h/4);

第二張圖片,划分了4個塊,每個塊的大小就是(w/2,h/2);

第三張圖片,把一整張圖片作為了一個塊,也就是塊的大小為(w,h)

空間金字塔最大池化的過程,其實就是從這21個圖片塊中,分別計算每個塊的最大值,從而得到一個輸出神經元。最后把一張任意大小的圖片轉換成了一個固定大小的21維特征(當然你可以設計其它維數的輸出,增加金字塔的層數,或者改變划分網格的大小)。上面的三種不同刻度的划分,每一種刻度我們稱之為:金字塔的一層,每一個圖片塊大小我們稱之為:windows size了。如果你希望,金字塔的某一層輸出n*n個特征,那么你就要用windows size大小為:(w/n,h/n)進行池化了。

當我們有很多層網絡的時候,當網絡輸入的是一張任意大小的圖片,這個時候我們可以一直進行卷積、池化,直到網絡的倒數幾層的時候,也就是我們即將與全連接層連接的時候,就要使用金字塔池化,使得任意大小的特征圖都能夠轉換成固定大小的特征向量,這就是空間金字塔池化的奧義(多尺度特征提取出固定大小的特征向量)。具體的流程圖如下:

 

此處直接復制粘貼原作者,因為是在講得太清晰了,算法概述的原博客地址:https://blog.csdn.net/hjimce/article/details/50187655

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM