目標檢測算法 CNN主幹網絡

目標檢測算法 CNN主幹網絡
SSD

在深度學習目標檢測算法中很重要的一個部分就是特徵提取,用來提取特徵的就是CNN中的backbone,Backbone的複雜度很大程度上決定了目標檢測算法的耗時。

例如我們常說的SSD算法就是Backbone爲VGG16的SSD,後來由於工程化場景限制,衍生出一系列兼顧適應場景精度和速度的網絡。例如MobileNet-SSD,Resnet-SSD,RefineDet-SSD

例如我們常說的YOLO,其Backbone是darkNet,後來也有同學做出了MobileNet-YOLO

R-CNN的文章表明,將大規模的多尺度的分類問題中訓練的模型作爲目標檢測的預訓練模型,可以爲訓練檢測器提供更豐富的語義信息,且可以提高檢測性能。 在後來的幾年中,這種方法已成爲大多數對象檢測器的默認策略。

在此,總結一下在目標檢測算法中常用的一些CNN Backbone.

開始VGG16是在AlexNet基礎上發展來的,其結構是直筒型,由五組卷積層和三個全連接層組成,在每一個組中使用最大值池化去降低空間維度,VGG16提出一個觀點:通過堆加捲積層增加網絡的深度,可以提高模型的表達能力。這個觀點在當時一度很流行,但是後來人們才發現,如果使用SGD去訓練網絡,當網絡深度到達一定數量之後(20層),模型訓練和優化會遇到問題,“梯度彌散”導致深層的網絡反而會比淺層的網絡表現更差,這就被稱爲“網絡退化”。所以直筒型的網絡結構,也不可能無限制的堆積下去。

所以在2016年,Resnet被提出,主要是在網絡中增加shortcut連接,降低訓練優化難度。在resnet中有一個層可以直接跳過非線性層直接將數據傳遞到下一層。所以特徵圖可以被看做成淺層的激活和殘差函數的求和,這樣深層網絡向淺層網絡反傳梯度的時候就像有了一條高速公路,所以再深的網絡都不怕梯度彌散了,常見的resnet有16層到152層。

後來,何愷明又提出一個resnet的預激活變體(pre-activation variant of resnet),被稱爲resnetV2,其實我們現在常說的resnet就是這個V2版本。作者的實驗顯示,合適的BN層的順序可以提高原始Resnet的表現,這樣一個非常簡單且有效的改進直接使得resnet的層數可以達到1000層,增加深度的同時還有精度提升。

resnetV2

再後來,又有個人覺得resnet還可以改進,他認爲resnet沒有全部利用好淺層的特徵,導致參數量有些浪費,所以他提出了DenseNet,在2017年的CVPR直接被評爲best paper。作者在這篇文章依然保持着ShortCut,同時做了一個瘋狂的舉動,把所有層都連接起來了,如下圖所示。主要優點就是:增強特徵傳播,鼓勵特徵複用,更少的參數量。

再後來,何愷明大神離開了MSRA,加入了FaceBook,和RBG大神混到了一起,又搞出了一個ResNeXt,其主要思想是將分組卷積(Group Convolution)引進到了resnet中。101層的ResNeXt精度可以和ResNet相當,但是計算量只有後者的一半。從這個時間節點可以看出來,網絡的精度再往上提升,如果按照現有的套路走確實很困難了,得另闢蹊徑。所以很多學者的目標就轉爲研究保證精度不掉,降低計算量。

再後來,谷歌提出MobilNet系列,截止到目前,MobileNetV1,V2,V3都已經問世。MobileNetV1的文章據說成文很早,但是發表出來的時間較晚。從MobileNetV1的結構中就可以看到依然是直筒型的,只是採用了DepthWise代替了傳統的卷積,就已經將參數量優化了許多,並且精度也相當。將CNN部署到移動設備的進程又推進了一步。V2採用了"倒瓶頸層“的網絡結構,不再是直筒型。V3是採用NAS技術搜索出來的最優結構。

上面所列舉出來的網絡都是常見的用作目標檢測算法的BackBone,但是別忘了它們設計之初都是用來做分類任務的,所有的表現性能都是在分類測試集上得到的分數,用它們來搭建目標檢測算法之後的預訓練模型也是在ImageNet這種分類數據集上訓練的。直接將分類模型的權重遷移到目標檢測上來,其實不是最優的,因爲目標檢測和圖片分類有一個潛在的衝突:

  • 分類算法要求有很大的感受野,更多地關注空間不變性(spatial invariance),所以有很多的下采樣操作被用來降低特徵圖的分辨率,所以最後生成的的特徵圖具有三個特徵,低分辨率,空間不變性,大的感受野。但是在目標檢測中,高分辨率的空間信息對於準確的定位目標具有很重要的作用。
  • 分類只需要在單一的特徵圖上做預測就可以了,但是檢測需要在不同表達能力的特徵圖上檢測多尺度目標

後來DetNet被提出來,用來平衡目標檢測和分類網絡的之間的衝突。使用了膨脹卷積(dilated convolutions)去增大感受野,DetNet也是在分類數據集上預訓練,用來目標檢測的BackBone。

總結一下:目標檢測中爲了提升精度而改進主幹網絡的方法最近變得越來越少了,很多文章都轉向去研究怎麼減少計算量不降低精度,從而更加適應工程部署。所以我推薦,剛開始做目標檢測的同學們,去學習一下經典的網絡結構和原理就好了,把重點放在研究LightWeight CNN上,不是花時間去研究怎麼刷榜,刷榜對於現在來說意義不大了。

獲取上面出現的所有文章,公衆號回覆“07”
在這裏插入圖片描述

發佈了62 篇原創文章 · 獲贊 61 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章