本文主要用于介紹何愷明大神于2015年提出的空間金字塔池化網(wǎng)絡(luò)(SPPNet網(wǎng)絡(luò))忆嗜,該網(wǎng)絡(luò)架構(gòu)也可以當作是R-CNN加速改進版。本筆記主要為方便初學者快速入門,以及自我回顧听想。
論文鏈接:https://arxiv.org/pdf/1406.4729.pdf
源碼地址:http://research.microsoft.com/en-us/um/people/kahe/
基本目錄如下:
- 摘要
- 核心思想
- 總結(jié)
------------------第一菇 - 摘要------------------
1.1 論文摘要
現(xiàn)有的深度卷積神經(jīng)網(wǎng)絡(luò)都要求圖像的輸入是固定大小的(比如:224*224)邦马,然而這種“要求”其實都是“人為”的贱鼻,且有可能會造成下游圖像識別任務(wù)準確率的下降。本文提出的新的網(wǎng)絡(luò)架構(gòu)滋将,我們采用了一種新的池化策略邻悬,“空間金字塔池化”(SPP-net)。該架構(gòu)能對任意輸入的圖像尺度都生成固定長度的(fixed-length)的特征表達随闽。金字塔池化對目標變形這種情況也具有很好的魯棒性父丰。在ImageNet 2012數(shù)據(jù)集上,我們的SPP-net相比于其他風格迥異的CNN網(wǎng)絡(luò)架構(gòu)掘宪,在準確率上有了一定的提升蛾扇。
SPP-net同樣能適用于目標檢測領(lǐng)域。利用該網(wǎng)絡(luò)架構(gòu)后魏滚,我們只需對整張圖片提取一次特征镀首,然后在不同的候選區(qū)域上池化特征,來生成固定緯度的輸出特征栏赴,用于后續(xù)的檢測器訓練蘑斧。這種方法能夠避免R-CNN中因重復計算圖片特征而造成的資源浪費。實驗表明须眷,該方法在測試階段竖瘾,比R-CNN快了整整24-102倍,并且還同時在效果上有提升花颗。
------------------第二菇 - 核心思想------------------
2.1 深度卷積神經(jīng)網(wǎng)絡(luò)的限制
毫無疑問捕传,深度卷積神經(jīng)網(wǎng)絡(luò)的運用正在計算機視覺領(lǐng)域掀起一場新的變革。多項實驗表明其效果碾壓了過去多種傳統(tǒng)圖像算法扩劝,但是在訓練和測試CNN網(wǎng)絡(luò)階段庸论,有一個致命的問題始終存在,即:所有的CNN網(wǎng)絡(luò)都會要求輸入的圖像大小是固定的(比如:224*224)棒呛,這在很大程度上限制了輸入的圖片的大小尺度聂示。若是一張任意大小的輸入圖像,想要進入到訓練好的CNN中簇秒,其必要經(jīng)過裁剪或縮放鱼喉。而裁剪經(jīng)常會錯失一些圖像的關(guān)鍵信息,縮放經(jīng)常會造成圖像的幾何形狀變化(如下圖所示),最終造成整體準確率的下降扛禽。
那么問題來了锋边,為什么現(xiàn)在流行的CNN網(wǎng)絡(luò)架構(gòu)會要求圖像的輸入大小是一個定值呢?其實非常容易理解编曼,熟悉卷積操作的同學肯定能夠想到豆巨,卷積的滑動窗口其實對輸入圖像是沒有任何限制的,因此經(jīng)過多輪卷積操作得到的特征圖(feature map)其大小是可以隨輸入圖像大小任意變化的掐场,那么問題只能是出在全連接層(FC)往扔,因為全連接層的大小我們是不能任意改變的,一旦全連接層的大小已經(jīng)設(shè)定了刻肄,那倒著往前推瓤球,就讓整個網(wǎng)絡(luò)架構(gòu)的輸入的圖像大小固定了。
了解到這一層面后敏弃,其實大家應(yīng)該可以猜到本文要做的事情了卦羡,即,為了讓輸入的圖像大小是可以任意變化的麦到,只有在整個CNN網(wǎng)絡(luò)架構(gòu)的最后一層做一點文章了绿饵,而這也就是本文的提出的,取代FC層的SPP層(如上圖下面的流程所示)瓶颠。
2.2 SPPNet網(wǎng)絡(luò)架構(gòu)詳解
跟著論文的節(jié)奏拟赊,我們先來看一下,圖像經(jīng)過一系列卷積操作以后粹淋,生成的特征圖(feature map)是怎么樣吸祟,
很明顯,而且上面也討論了桃移,卷積操作對輸入圖像大小無要求屋匕,而最核心重要的特征圖的處理,就是SPPNet網(wǎng)絡(luò)的關(guān)鍵借杰。
我們先明確一點过吻,SPPNet中緊跟在卷積層后的空間金字塔池化層(spatial pyramid pooling)的輸入是不固定的,但是輸出是固定的蔗衡。之所以輸出是固定的纤虽,是因為,其后面仍然是需要接FC層去做下游任務(wù)的绞惦,因此逼纸,空間金字塔池化層就是一個對特征圖中的特征進一步整合處理的過程。
接下來济蝉,我們重點理解一下空間金字塔池化層的概念杰刽,直接上一張原文中的示意圖呻纹,
理解這張圖,就需要深刻理解原文中的一句話专缠,
“These spatial bins have sizes proportional to the image size, so the number of bins is fixed regardless of the image size.”
這里真的是好繞,一會兒spatial bins跟圖片大小輸入有關(guān)淑仆,一會兒number of bins又跟圖片大小無關(guān)涝婉。。蔗怠。第一次看的時候我也很蒙蔽墩弯,但是結(jié)合對BoW(詞袋模型)和示意圖的理解,我這里說明一下我對這句話的理解寞射。
首先理解一個簡單一點的渔工,即number of bins是與圖像無關(guān)的。這里的bins其實指的是最終整個池化層產(chǎn)生的結(jié)果是固定的桥温,再直白一點就是引矩,不管你那些bins是怎么得來的,但是最終輸出加在一起的只要那么多侵浸。結(jié)合上圖旺韭,就是,16 + 4 + 1 = 21掏觉。數(shù)字21就是bins的大小区端。
接著,我們再去理解spatial bins是與圖片大小輸入有關(guān)的澳腹。
先申明一件事情织盼,上面的16,4酱塔,1其實就是池化得到的特征數(shù)沥邻,只不過,經(jīng)過了第一層池化后得到了的特征輸出延旧,第二層池化后得到了
的特征輸出谋国,第三層池化后得到了1個特征輸出,所有的緯度都是256迁沫,這樣他們才能拼接成一個固定大小的芦瘾。
而空間金字塔池化的命名也由此而來,層層得加集畅,每一層融合的空間信息是不一樣的近弟,自上而下,逐漸增加挺智。試想祷愉,對于所有的池化層(并行,非串行)來說,輸入的特征圖大小是一樣的二鳄,第三層只提煉了1個特征赴涵,是不是就可以簡單理解為是全局池化了,融合的是全圖的空間信息订讼, 第二層提煉出了4個特征髓窜,自然每一次只融合了1/4的空間信息。
然后我們再來理解為什么spatial bins與圖像大小輸入有關(guān)欺殿。因為圖像大小不一致寄纵,最終得到的特征圖大小就不一致,但是經(jīng)過池化后的特征數(shù)量又是一致的脖苏,那只能是池化層的大谐淌谩(即spatial bin)是在動態(tài)變化的。比如棍潘,
當最終的特征圖是的時候恃鞋,要得到
的輸出,池化層的大小為7亦歉,步幅為6山宾;但是當特征圖是
的時候,要得到
的輸出鳍徽,池化層的大小為5资锰,步幅為5。所以阶祭,針對不同的特征圖绷杜,我們要想得到固定數(shù)量的特征,所設(shè)計的池化核的大小就是不一樣的濒募,而池化核就是作者這里指的spatial bins鞭盟。
至此,理解該架構(gòu)中最難的一句話瑰剃,已經(jīng)解釋清楚了齿诉。簡單總結(jié)一下,所謂的空間金字塔池化層晌姚,就是利用多個不同大小的池化核提取出固定大小的特征數(shù)粤剧。
2.3 SPPNet網(wǎng)絡(luò)的訓練過程
當然,細心的讀者也已經(jīng)發(fā)現(xiàn)了挥唠,如果真的要在訓練時候滿足任意尺度抵恋,那池化核的參數(shù)也要成千上萬了,這顯然是不可能的宝磨,本文作者也說了弧关,其實真正訓練的時候只考慮2種緯度的盅安,分別為,
的世囊。其訓練也分為2個過程别瞭,
1)首先進行單一尺寸的訓練(Single-size training):僅僅針對來設(shè)計的3個池化核的大小,如下圖所示株憾,
文中給出的解釋是畜隶,先單獨訓練單一尺寸的能提升模型的效果~
2)然后再進行多尺寸的訓練(Multi-size training):這里作者多考慮了一種的,有一個細節(jié)就是号胚,訓練的圖片不是重新裁剪的,而是直接將之前
縮放過來的浸遗,目的是為了保證圖片的內(nèi)容是一致的猫胁,因此其后的FC層等的參數(shù)都是共享的,唯一變化的就是池化核的參數(shù)~而在訓練的時候跛锌,也是一個輪次訓練一種池化核參數(shù)弃秆。
值得一提的是,上面定義的尺寸也只是在訓練的時候固定了圖像的大小髓帽,在真正測試的時候菠赚,是可以接受任意尺寸的圖像大小的(當然,也不是真的任意的郑藏,這取決于設(shè)計的池化核的區(qū)間范圍)衡查。
2.4 SPPNet網(wǎng)絡(luò)架構(gòu)的運用
SPPNet在圖像分類上,取得了一定的提升必盖,具體的展示過程拌牲,比較簡單,有興趣的同學自己看論文即可歌粥,這邊重點講一下塌忽,其在目標檢測上的運用。
在那個年代(2015)失驶,R-CNN是最好的目標檢測算法之一土居,但是其最大的弊端在于,對于其提取出的每一個候選區(qū)域框(約2000個)嬉探,都需要經(jīng)過一次CNN網(wǎng)絡(luò)來提取特征擦耀,造成了大量的時間浪費,而運用SPPNet能將特征提取的操作只進行一次涩堤,從而大大提高了時效性埂奈。
我們來直接看一下論文中給出的示意架構(gòu)圖,
一張圖片只經(jīng)過一次CNN網(wǎng)絡(luò)提取特征定躏,拿到了特征圖以后账磺,我們再根據(jù)一種映射關(guān)系(論文的附錄中有介紹)芹敌,從原圖生成的候選框中,找到特征圖上的位置垮抗,然后將特征圖經(jīng)過空間金字塔池化層(可接受任意大小哦~)氏捞,輸出的維度還是固定的,再用于后續(xù)的訓練冒版。因此液茎,將R-CNN中的重復提取特征的操作大大簡化了,自然整個效率就上去了~
具體的實驗效果這邊就不展開了辞嗡,同樣有興趣的同學可以翻看原始論文~上面有很詳細的實驗過程和結(jié)論捆等。
------------------第三菇 - 總結(jié)------------------
3.1 總結(jié)
到這里,整篇論文的核心思想已經(jīng)說清楚了续室。本論文主要是提出了一種新的網(wǎng)絡(luò)架構(gòu)SSPNet栋烤,主要用以解決CNN網(wǎng)絡(luò)需要固定輸入圖像大小的頑疾,并附以詳細的實驗論證過程挺狰,證明其可行性明郭,為后續(xù)發(fā)展奠定了基礎(chǔ)。
簡單總結(jié)一下本文就是先羅列了一下該論文的摘要丰泊,再具體介紹了一下本文作者的思路薯定,也簡單表述了一下自己對SPPNet網(wǎng)絡(luò)的理解。希望大家讀完本文后能進一步加深對該論文的理解瞳购。有說的不對的地方也請大家指出话侄,多多交流,大家一起進步~??