DetNet解读
簡介
在目標檢測最常見的二階段和單階段范式下,一般將目標檢測模型分為backbone、neck和head三個部分,其中backbone指的是骨干網絡,它用于提取圖像的特征。目前最流行的backbone選擇是ResNet系列及其變種,這主要歸功于ResNet的流行,有著大量的結構優化和預訓練模型。
不過,其實在2018年,曠世就提出了一種名為DetNet的backbone,旨在更好地適應目標檢測這個任務。DetNet的設計初衷是什么呢,其實是因為目標檢測通常都按照遷移學習的思路直接采用ImageNet上預訓練的圖像分類模型來作為backbone(如ResNet50),然而,圖像分類和目標檢測其實還是有不少不同之處的。不少目標檢測新方法都采用不同于圖像分類任務的額外stage來處理不同尺度的目標,這是因為,目標檢測不僅僅需要識別出目標實例的類別,還要在空間上進行定位,較大的下采樣倍率獲得更大的感受野有利于全圖級別的圖像分類,但不利于網絡對于目標的定位能力。
針對這些目標檢測和圖像分類的gap,論文設計了一種全新的backbone—DetNet,通過對ResNet進行修改,它能夠在較深層保持較高的空間分辨率,實驗表明,DetNet無論在目標檢測還是實例分割任務上都能獲得SOTA結果。
-
論文標題
DetNet: A Backbone network for Object Detection
-
論文地址
http://arxiv.org/abs/1804.06215
-
論文源碼
https://github.com/guoruoqian/DetNet_pytorch
介紹
如上一節所述,目標檢測任務和圖像分類任務是有區別的,這是由它們任務本身決定的,目標檢測不僅僅需要識別對象的類別,還需要空間上定位出對象的邊界框。
具體而言,用分類模型作為檢測的backbone存在兩個問題:第一,FPN等結構會在原來的backbone結構基礎上添加額外的stage來完成不同尺度目標的檢測,這個額外添加的stage是無法在ImageNet上預訓練的。第二,由于這些backbone是來自于分類任務,因此它們一般會采取較大的下采樣倍率來獲取較大的感受野,更大的感受野保證了更多的語義信息,這是有利于分類任務的,然而這種較小的特征圖空間分辨率太小是不利于大目標和小目標的定位的。
一個好的backbone應該能解決上述的問題,因此作者提出了DetNet。由于目標的尺度變化,因此DetNet也類似FPN那樣使用了額外的stage,不過即使在額外的stage中,空間分辨率不會進行下采樣從而保持不變。但是,高分辨率特征圖的代價就是會帶來比較多的計算量,因此作者設計了一個膨脹bottleneck來保證DetNet的高效。
DetNet
動機
分類網絡不適用于目標檢測,因此誕生了一些新的方法如Feature Pyramid Network(FPN),如下圖的A所示。使用FPN以及膨脹卷積是后來目標檢測器的常用配置,不過這些檢測方法仍然存在一些問題。
為了解決這些問題,DetNet其實有幾個初衷。一方面,DetNet所有層都是可以在ImageNet上預訓練的,另一方面希望得到兼具高分辨率和高語義的特征。
結構設計
DetNet以最常用的ResNet50為baseline,并保證1-4的stage和ResNet50一致。要設計一個適用于目標檢測的backbone其實主要有兩個難點,一方面,保證網絡輸出的高分辨率是非常消耗算力的;另一方面,減少下采樣倍率會導致語義信息不充分,從而有害于分類等任務。DetNet就是精心設計來處理這兩個難點的,它的前4個stage和ResNet50一樣,區別從第5個stage開始。需要說明的是,這個網絡當然也要適用于分類任務,因為需要在ImageNet上預訓練。
首先,DetNet從stage4開始,下采樣倍率維持16不變,并且引入了新的stage即P6來用于后續的目標檢測任務,這和FPN是類似的。
接著,為了保證stage4之后的特征圖尺寸不變,每個stage會首先經過一個以1x1卷積(這個1x1卷積其實擔負了跨通道的信息融合的作用,非常有效)為核心的膨脹bottleneck中,它的結構如下圖B所示,它使用了膨脹卷積來擴大感受野。膨脹卷積也是很消耗算力的,所以stage5和stage6的通道數不會像ResNet那樣加倍,而是保持不變,以此減少計算開銷。整個網絡和FPN類似,最后的幾個stage如下圖的D和E,在整個數據流動過程中和ResNet是類似的,只是重復B模塊和A模塊,但是,在自底向上進行特征圖融合的時候,經過一個1x1卷積來進行跨stage的信息融合。
實驗
按照一般的設置預訓練backbone并用于檢測,和其他方法的對比如下,實驗表明,DetNet59其實是在精度上對標ResNet101的,但是算力消耗上其實只比ResNet50多一些。
同時,作為一個設計用于目標檢測的backbone,它不在ImageNet上預訓練的表現如何呢,如下表所示,效果也是比ResNet50好不少的。
作者也在準確率和召回率方面做了實驗,可以看到,DetNet在大物體的準確率上提升其實挺大的,且IOU閾值越大越顯著,這也說明其最終特征圖還保留不少分辨率信息,對定位很有效。此外,IOU閾值要求不高的時候,小目標召回率很高,這說明它也能很好處理小目標漏檢問題。
當然,作者也做了實驗證明了我之前所說的那個1x1卷積的巨大效果,還有膨脹卷積的實驗我這里就不貼了。
最后附上一張在檢測賽道上和SOTA的對比,提升還是蠻顯著的,這篇文章的實驗也非常豐富。
總結
總的來說,DetNet針對圖像分類模型不適用于目標檢測任務進行了改進,在backbone上做文章還取得了很不錯的效果,實現簡單,計算量小,也不需要太多的trick,還是很值得了解的。
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
- 上一篇: MMDetection-配置文件
- 下一篇: 目标检测常用数据集格式