本人碩士,入坑圖像語義分割大半年,論文讀了一籮筐。

多尺度信息在傳統的計算機視覺演算法中有重要的意義,比如DPM ,但具體有什麼意義我就不談了,因為我對傳統計算機視覺演算法並不瞭解。

首先來說說空間金字塔池化。何凱明大神為瞭解決圖像分類中存在的全連接層只能接受固定輸入的問題,而提出了SPPnet,通過不同的下採樣步長,得到固定大小的特徵圖,並且將特徵圖拉伸成向量並且進行拼接,這樣做不僅可以使網路適應任意尺度的輸入,而且因為不同的下採樣步長,使網路獲得了不同的感受野, 能夠在不同尺度上捕捉信息,對於分類任務有明顯的提升。但是全局平均池化,可以解決在圖像分類中不能接受任意大小的輸入的問題。說完SPPnet, 談一下PSPnet ,它是SPPnet 在圖像語義分割中的應用,只不過PSPnet 在使用不同下採樣步長後,為了適應圖像語義分割需要——保持特徵的空間信息,沒有將特徵拉伸成向量,而是將不同尺度的特徵圖上採樣至同樣大小,進行concatenate 操作,PSPnet在語義分割中的perfomance還不錯。在語義分割中另一個融合多尺度特徵的網路是aspp(通過在卷積核內插入不同的空洞,以擴大感受野,而避免下採樣操作丟失過多的空間信息),由谷歌deeplab實驗室提出。這個實驗室提出的一系列語義分割技術,將語義分割精度推向89+。從最開始的將圖像金字塔與attention model 結合,largeFOV ,然後加上全連接crf,再到aspp+crf,然後又提出aspp+skip結構,將aspp 輸出的不同scale feature map上樣至同樣大小,然後在加入skip(有點類似unet,unet 實際上是encoder-decoder+skip),在到現在pascal voc 語義分割榜首,89+,估計這個精度一段時間內,沒有其他的操作可以相媲美了,因為deeplab 在JFT-300M上預訓練模型,這個數據集是image net的300倍,好像有幾億張圖片。deeplab 的論文建議 多讀,反覆讀,而且感覺deeplab 對圖像金子塔,或是多尺度輸入很鍾愛,每篇論文都會探討到多尺度問題。而且deeplab 的論文提出的一些訓練策略也很值得學習。語義分割中還有一些unet, segnet ,deconv-net,refine-net,link-net等等太多了,但是可學習的東西並不多,論文裏探討的東西也不多,基本都是丟出個網路,給出個結果。不同網路之間的性能相差一兩個百分點不能說明什麼實際問題,因為深度學習的調參技巧很重要。

以上說了2大類,一是spp,二是aspp,下面要說的是FPNnet ,這個結構在目標檢測中很重要,可以增加檢測小目標的正確率。實際上和unet 沒什麼太大區別,可能Unet 採用concatenate, FPNnet 採用sum,而且FPNnet 在每一層都有預測,最後將不同層的預測做個融合。

圖像金字塔很重要,將不同scale 的圖像送入網路提取出不同scale 的特徵做融合,對於整個網路性能的提升很大,但是由於圖像金字塔的多尺度輸入,造成計算且保存 了大量的梯度在內存,從而導致對硬體的要求很高,而且測試時,增加了計算時間。多數論文並沒有真的採用圖像金字塔作,無論是分割還是檢測,通常做法都是將網路進行多尺度訓練,然後在測試階段進行多尺融合,就算這樣, faster rcnn 等也沒有將圖像金子塔作為默認的設置。順便說一下,我特別鍾愛多尺度技術,目前做的論文在優化圖像金字塔。

做個總結,多尺度信息很重要,當你網路到達瓶頸時,可不可以嘗試一下多尺度技術,無論是多尺度訓練還是多尺度融合,做完這個操作你會發現你的網路到達了一個新的高度,網路性能得到飛躍。

推薦閱讀:

相關文章