Efficientdet學習筆記 --- EfficientDet: Scalable and Efficient Object Detection

論文:https://arxiv.org/abs/1911.09070
代碼1(官方):https://github.com/google/automl/tree/master/efficientdet
代碼2(最強復現):https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch

上週Efficientdet的最強復現Pytorch版出來後,用它訓練了自己的數據,感覺很不錯,所以覺得有必要好好學習一下Efficientdet,先實踐後理論~~~~~~~~

附上我訓練自己數據的Efficientdet-D0的一張圖片測試結果(圖片過於簡單,不要噴我):
在這裏插入圖片描述

重點是這張圖片的infer速度:

test1: model inferring and postprocessing
inferring image for 1 times...
0.003389120101928711 seconds, 295.06183608863876 FPS, @batch_size 1

接近300FPS!!!美滋滋。。。。。。。。

言歸正傳,先直接看Efficientdet的效果:
在這裏插入圖片描述
由圖可以看出,Efficientdet系列的入門版Efficientdet-D0都比YoloV3具有0.8提升,並且減少28倍的FLOPS!Efficientdet-D6達到了51.7的map!的state-of-the-art 結果,相對於AmoebaNet + NAS-FPN 相比,FLOPS 僅爲其十三分之一。

爲何EfficientDet有如此驚人效果?主要依靠一下三個點:

1.優秀的主幹網絡。同樣出自谷歌家族的 。

2.雙向FPN(BiFPN,特徵金字塔網絡)。可以方便且更好的進行特徵融合。

3.模型縮放技術。設計好模型的主幹網絡、特徵網絡、預測網絡後,按照一定的優化規則,在網絡的深度、寬度、輸入圖像的分辨率上進行模型縮放,故EfficientDet其實是一系列網絡,可在統一架構下得到適合移動端和追求高精度的多個模型。

主幹網絡

Backbone採用谷歌去年出的Efficientnet系列,Efficientnet系列不用多說,是谷歌利用NAS方法,基於深度(depth),寬度(width),輸入圖片分辨率(resolution)的共同調節統一縮放模型的所有維度,達到精度最高效率最高。
在這裏插入圖片描述

BiFPN

BiFPN的主要思想:有效的雙向交叉尺度連接和加權特徵融合。
在這裏插入圖片描述

有效的雙向交叉尺度連接

傳統的top-down FPN只有自頂向下單向信息流,PANet增加了自底向上的信息流,NAS-FPN通過大量計算和搜索有更復雜的信息流。
傳統的top-down FPN的定義方式如下:
在這裏插入圖片描述
第7層輸出特徵圖是由第7層輸入特徵圖經過一個卷積後得到的。對第7層輸出特徵圖進行上採樣後與第6層輸入特徵圖相加所得的融合特徵圖做卷積,就可以得到第6層輸出特徵圖。依此類推,對第4層輸出特徵圖進行上採樣後與第3層輸入特徵圖相加所得的融合特徵圖做卷積,就可以得到第3層輸出特徵圖。

可是傳統的自上而下的FPN固有地受到單向信息流的限制。爲了解決這個問題,PANet 添加了一個額外的自下而上的路徑聚合網絡,如圖2(b)所示。

NAS-FPN 使用神經架構搜索(NAS)來搜索更好的跨尺度特徵網絡拓撲,但是在搜索過程中需要數千個GPU小時,並且發現的網絡不規則且難以解釋或修改,如圖2(c)所示。

作者觀察到,PANet的精度比FPN和NAS-FPN更好,但是需要更多參數和計算。爲了提高模型效率,本文針對跨尺度連接提出了幾種優化方法:

  • 首先,刪除那些只有一個輸入邊的節點。 作者的直覺很簡單:如果一個節點只有一個輸入邊且沒有特徵融合,那麼它將對旨在融合不同特徵的特徵網絡貢獻較小。這會形成一個簡化的雙向網絡。
  • 其次,如果原始輸入與輸出節點處於同一級別,則在原始輸入和輸出節點之間增加一條額外的邊,以便在不增加成本的情況下融合更多功能。
  • 第三,與PANet僅具有一個自上而下和一個自下而上的路徑不同,我們將每個雙向(自上而下和自下而上)路徑一個模塊,並拼接相同的模塊多次以啓用更多高級功能融合。

後面有提到利用複合縮放方法來確定不同資源約束的層數。 通過這些優化,作者將新特徵網絡網絡命名爲雙向特徵金字塔網絡(BiFPN)。

加權融合

對不同尺度的特徵進行融合時,通常的做法是先將尺度統一,然後對應特徵相加。這種做法默認不同的特徵對於最終融合特徵的貢獻/權重是一樣的。而實際上,不同的輸入特徵由於其分辨率不同,對最終的融合特徵的貢獻也應該不同。因此研究者提出在特徵融合過程中爲每一個輸入添加額外的權重,再讓網絡學習每個輸入特徵的重要性。因此作者提出了三種加權的特徵融合方法。

  • 一般加權融合特徵:
    在這裏插入圖片描述

  • 基於softmax的融合特徵
    在這裏插入圖片描述

  • 快速歸一化融合特徵
    在這裏插入圖片描述
    這種快速融合方法的學習行爲和準確性與基於softmax的融合非常相似,但在GPU上的運行速度最高可提高30%,本文采用的就是快速歸一化融合特徵。

最終的BiFPN集成了雙向跨尺度連接和快速歸一化融合。 一個具體示例,作者描述了圖2(d)所示的BiFPN在6級的兩個融合特徵:
在這裏插入圖片描述

Compound Scaling(模型聯合縮放)

Efficientnet通過共同擴大網絡寬度,深度和輸入分辨率的所有維度,顯示了在圖像分類方面的卓越性能。受此啓發,作者提出了一種新的用於對象檢測的複合縮放方法,該方法使用簡單的複合係數Φ來聯合放大骨幹網,BiFPN網絡,分類/檢測框網絡和分辨率的所有維度。與Efficientnet不同,對象檢測器的縮放比例要比圖像分類模型高得多,因此對所有尺寸進行網格搜索的代價是昂貴的。因此,作者使用基於啓發式的縮放方法,但仍然遵循共同擴大所有維度的主要思想。

  • Backbone network

採用EfficientNet-B0 ~ B6, 其寬度w和深度d和它們7個網絡也一樣。

  • BiFPN network

雙向金字塔網絡的寬度指數式增長,寬度線性增加:
在這裏插入圖片描述

  • Box/class prediction network

將其寬度固定爲與BiFPN相同,
在這裏插入圖片描述
深度遵循以下公式:
在這裏插入圖片描述

  • Input image resolution

由於BiFPN的輸入是採用的骨幹網絡的P3~P7層,因此輸入的圖像的分辨率應該能被2^{7} = 128 整除,所以圖像的分辨率應該滿足如下公式:
在這裏插入圖片描述
至此,不同的Φ就得到了不同EfficientDet,如下圖:
在這裏插入圖片描述
再次強調,只需一個參數控制input size, backbone, BiFPN layers和channels。

網絡結構

綜上,Efficientdet網絡結構如下:
在這裏插入圖片描述
該結構由三部分組成,第一部分是由在ImageNet上預訓練好的EfficientNet作爲骨幹網絡;第二部分是BiFPN,作爲特徵提取網絡,它將EfficientNet中的level 3~7的輸出特徵多次做top-down和bottom-up的特徵融合;第三部分就是分類和檢測框預測網絡。第二部分和第三部的模塊可以多次重複,依賴於硬件條件。

實驗結果

在這裏插入圖片描述
牛逼!!

感想:很強,但是又怪怪的,backbone、模型縮放主要靠NAS搜索出來,但是這種採取NAS只有大廠纔有資本去完成。

說到類FPN,其實都做爛了,後面也有用NAS搜索出來的更強的FPN結構~~~~~~

此外,backbone結構也陸續有大廠藉助類NAS方法探索出了比Efficientnet更強的backbone結構,
比如最近Fackbook & 伯克利分校提出的FBNetV2:更輕、更快、更強。

顫抖吧~~~

參考:
https://zhuanlan.zhihu.com/p/93241232
https://zhuanlan.zhihu.com/p/93346058
https://blog.csdn.net/qwertyu_1234567/article/details/103885353

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章