FPN(Feature Pyramid Network)多尺度目标检测方案
參考論文:Feature Pyramid Networks for Object Detection
會議水平:CVPR 2017
開源代碼:https://github.com/unsky/FPN
1. 多尺度目標檢測問題
CNN網絡對于位置變化的適應性很強,但是對尺度變化的表現很差,所以檢測問題基本都要考慮尺度怎么處理。那么首先來看一幅非常具有代表性的圖,這張圖涵蓋了目前很多檢測問題在處理物體scale上的思路:
(a),在非深度的方法中非常常見,通過將圖像縮放到不同大小,構成一系列的圖像金字塔網絡,這樣一些類似于固定滑窗的方法就可以檢測到大小不同的物體了。這個在深度檢測中也不是沒有應用,比如MTCNN,但是用得都不會很深,而且使用也不廣泛,主要就是內存和時間上的巨大開銷問題,因為CNN提取特征非常耗時。
(b)(c),思路更加常見,Faster RCNN其實就是(b)圖的思路,用CNN網絡的top層來進行預測,因為top層的語義化程度是最高的;但是CNN的卷積操作考察的是局部像素之間的關聯性、池化操作則對局部信息進行統計,因此CNN網絡越top,feature map中的每個單元格的感受野就越大,相對的,就沒有淺層那樣精細,分辨率就會下降得比較厲害;這個問題在小目標上非常突出。(Comment: 卷積層越高,感受野越大,定位信息越不豐富,分辨率越差,但是語義信息越強)。也有研究人員嘗試了類似圖(c)的思路,比如SSD,在top層這種單元格感受野大的層上預測scales比較大的物體,而在淺層這種感受野小、分辨率比較高的層上預測scales比較小的物體。但是這樣會導致的一個問題就是,淺層雖然分辨率提高了,語義化程度還是不夠高,去預測小目標效果還是不好。
FPN就提出了一種解決思路,在top層得到了語義化程度比較高的特征后,再不斷升采樣,然后和CNN網絡中那些淺層特征融合,融合后的特征既有較高的語義性,也有較高的分辨率,這樣再去分別預測不同scales的物體就會有比較好的效果了。另外,在實際使用的時候,作者的特征是across scales的,換句話說,在預測某個scale目標的時候,其它scales的特征也會起到一定的作用,這個就是FPN的整體思路。
2. 作者的解決方案
作者采用的網絡框架圖如圖所示:
可以看到網絡整體上有三條線路,一個是左面的CNN網絡,作者稱之為Bottom-up pathway;另一條則是將CNN得到的高語義化不斷升采樣,作者稱之為top-down pathway;最后是將它們融合起來的側邊通道,作者稱之為lateral connections:
- bottom-up路線:作者使用了ResNet作為基礎網絡;這里面還有一個細節就是每個scales在哪個層上建立的問題。作者將大小相同的層都認為是一個stage的,而作者選用了一個stage里面最后的那一層來建立anchor。作者選取了四個尺度,分別建立在ResNet的conv2,conv3,conv4和conv5的output上,構成了C2,C3,C4,C5四個尺度的特征。而對應的融合后的特征是P2,P3,P4,P5
- top-donw路線與lateral connection:later connection是一個1x1 conv層,可以用來減少通道數(降維度)、并進行跨通道的信息融合;而top-down則是依次進行了x2的upsample(最臨近插值);C5到P5則是直接用1x1的卷積層連接起來;另外,在疊加后,還會使用一個3x3的卷積核來消除混疊效應。這樣子,就很好的將高卷積層的強語義特征與低卷積層的強分辨率結合起來,提高了目標檢測的準確度。
3.?在Faster RCNN當中的使用
作者改變了Faster RCNN,將FPN的思路糅合了進去
- RPN:作者一方面將FPN放在RPN網絡中用于生成proposal,原來的RPN網絡是以主網絡的某個卷積層輸出的feature map作為輸入,簡單講就是只用這一個尺度的feature map。但是現在要將FPN嵌在RPN網絡中,生成不同尺度特征并融合作為RPN網絡的輸入。在每一個scale層,都定義了不同大小的anchor,對于P2,P3,P4,P5,P6這些層,定義anchor的大小為32^2,64^2,128^2,256^2,512^2,另外每個scale層都有3個長寬對比度:1:2,1:1,2:1。所以整個特征金字塔有15種anchor。特別要指出的是,作者額外添加了一個P6層(由P5層進行stride 2的subsample得到),用來預測512大小的物體;ratios還是和原版一樣
- RoI pooling與RCNN:原版的RoI pooling統一到同一個大小的feature map,但是這對FPN并不合適,因為FPN在RPN階段抽取的候選框本來就含有不同的尺度,作者的方法是將不同尺度的候選框map into到不同大小的特征圖,具體的公式這里就不貼了,可以參考論文;另外作者關于RoI pooling之后的網絡結構也有一定不同,作者添加了兩個1024的fc層在最終的分類與回歸層前,作者認為這更加輕便
- 權值共享問題:每個特征層進行預測的結構是和原版Head一樣的,不過比較特殊的是,作者這里采用了權值共享的策略,我的理解是在預測某個尺度的時候,其它尺度的特征也會參與預測,而不是各個尺度完全獨立的預測
4. 網絡框架圖
5. 效果總結
5.1 加入FPN的RPN網絡的有效性
網絡這些結果都是基于ResNet-50。評價標準采用AR,AR表示Average Recall,AR右上角的100表示每張圖像有100個anchor,AR的右下角s,m,l表示COCO數據集中object的大小分別是小,中,大。feature列的大括號{}表示每層獨立預測。
(a)(b)(c)對比可以看出FRN的作用確實很明顯。另外(a)和(b)的對比可以看出高層特征并非比低一層的特征有效。
(d)表示只有橫向連接,而沒有自頂向下的過程,也就是僅僅對自底向上(bottom-up)的每一層結果做一個1*1的橫向連接和3*3的卷積得到最終的結果。從feature列可以看出預測還是分層獨立的。作者推測(d)的結果并不好的原因在于在自底向上的不同層之間的semantic gaps比較大。
(e)表示有自頂向下的過程,但是沒有橫向連接,即向下過程沒有融合原來的特征。這樣效果也不好的原因在于目標的location特征在經過多次降采樣和上采樣過程后變得更加不準確。
(f)采用finest level層做預測,即經過多次特征上采樣和融合到最后一步生成的特征用于預測,主要是證明金字塔分層獨立預測的表達能力。顯然finest level的效果不如FPN好,原因在于PRN網絡是一個窗口大小固定的滑動窗口檢測器,因此在金字塔的不同層滑動可以增加其對尺度變化的魯棒性。另外(f)有更多的anchor,說明增加anchor的數量并不能有效提高準確率。
5.2?將FPN用于Fast R-CNN的檢測
(a)(b)(c)的對比證明在基于區域的目標卷積問題中,特征金字塔比單尺度特征更有效。(c)(f)的差距很小,作者認為原因是ROI pooling對于region的尺度并不敏感。
6. 總結
作者的這篇論文主要研究的問題是:如何融合高卷積層的強語義特征,以及低卷積層的強定位/分辨特征,總結如下:
1. 卷積操作是具有感知域的,而池化作用是在統計局部信息。也就是說,隨著卷積-池化操作的進行,特征圖像具有越來越強的語義表達能力,這主要在于感知域的大大提升。然而,由于感知域的擴大,也帶來的目標定位/分辨能力差,尤其是對于小目標。
2. 作者提出的橫向連接,主要就是為了融合高卷積層的強語義信息與低卷積層的強分辨信息,基于這樣的特征金字塔方法確實提高了目標檢測子的性能,尤其是小目標的解決能力。
3. 針對融合后的hierarchy output和final output,個人認為還是值得去繼續探索的,尤其是hierarchy output,這是涉及到不同尺度特征決策后的融合問題,也就是如何為他們分配權重,這值得考慮。
總結
以上是生活随笔為你收集整理的FPN(Feature Pyramid Network)多尺度目标检测方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IBM推新编码系统 实现高清视频技术大突
- 下一篇: 中文名称:深入浅出SQL