EfficientDet 論文閱讀

李謦伊
謦伊的閱讀筆記
7 min readFeb 3, 2021

EfficientDet 是 Google 基於 EfficientNet 擴展出的目標檢測模型發表於 CVPR 2020,主要改進點為提出新的特徵融合方法 BiFPN、對於檢測模型的複合縮放 Compound Scaling,在當時拿下了 SOTA。在閱讀本文前,強烈建議先閱讀過 EfficientNet,可參考我之前寫的文章: EfficientNet 論文閱讀

題外話: 現在的 Object Detection SOTA 是 Cascade Eff-B7 NAS-FPN,主要方法是使用隨機的 copy-paste data augmentation

📝 Paper: https://arxiv.org/pdf/2012.07177v1.pdf

🔍 可參考: 谷歌簡單粗暴“複製-粘貼”數據增廣,刷新COCO目標檢測與實例分割新高度

EfficientDet

📝 Paper: https://arxiv.org/abs/1911.09070

🔍 Google/ Automl/ EfficientDet github: https://github.com/google/automl/tree/master/efficientdet

🔍 Tensorflow EfficientDet github: https://github.com/xuannianz/EfficientDet

🔍 Pytorch EfficientDet github: https://github.com/zylo117/Yet-Another-EfficientDet-Pytorch

本文會分為四部分:Model Architecture、BiFPN、Compound Scaling、Experiment Results

先來看一下 EfficientDet 的表現結果,由圖可以得知 EfficientDet 在比其他模型少了將近 10 倍計算量的情況下,能夠實現更高的準確率。

Model Architecture

Backbone 使用 EfficientNet,neck 為 BiFPN,然後再接上 class 跟 box network

BiFPN

BiFPN 全名為 bi-directional feature pyramid network (加權雙向特徵金字塔網路),主要思想是跨尺度融合 (Cross-Scale Connections) 以及加權特徵融合 (Weighted Feature Fusion)

  • Cross-Scale Connections

由下圖可以看到各個 FPN 採用融合 P3~P7 的多尺度特徵,(b) PANet 加入了自下而上的路徑;(c) NAS-FPN 是使用 NAS 搜索的網路結構;(d) 為全連接 FPN。

在實驗結果中 PANet 可以獲得更高的準確率,但需要更多的計算量,因此提出了 Cross-Scale Connections 的優化方法,將 PANet 進行簡化 (圖e),簡化方式是將只有一個輸入的節點 (第二層 P3、P7) 刪除,因為此點對特徵網路融合的貢獻較少,接著在輸入與輸出節點中間加入 connection,得到了 (f) BiFPN 的結構。

由下表4 可以看到採用 BiFPN 可以增加 4 mAP

  • Weighted Feature Fusion

作者認為不同解析度的 feature map 對於模型有不一樣的貢獻,應該要採用不同的權重,下表 5 是比較有無使用權重的結果。

接著比較三種加權融合方法,在每一次特徵融合時使用不同的加權值,而該權值是由模型訓練學習得到的。

🔷 Unbounded fusion

此加權方式不對 weight 做限制,但容易導致訓練不穩定。公式如下,其中 wi 是由模型訓練學習得到的權重。

🔷 Softmax-based fusion

對每個 weight 使用 softmax,將所有權重規範到0~1範圍,但 softmax 在 GPU 運算上較慢。

🔷 Fast normalized fusion

為了提升效率,最後論文採用一種快速融合的方法,做法與上述的方法類似,差別是不使用 softmax,在 GPU 運算上可以快30%。其中 wi 會採用 ReLU 保證其大於 0,ε 為一個很小的值,避免數值不穩定。

Compound Scaling

在 EfficientNet 中使用複合係數 (compound coefficient) 均勻地縮放網路深度、寬度、圖像解析度,EfficientDet 也採用相同的思路分別在 Backbone、BiFPN、head (class 跟 box network)、Input image resolution 進行縮放

  • Backbone 直接採用 EfficientNet-B0 to B6
  • BiFPN

對於 BiFPN 的深度進行線性增加,而寬度比例因子則是在 {1.2, 1.25, 1.3, 1.35, 1.4, 1.45} 中進行網格搜索,最後選擇最佳值 1.35。以下是寬度與深度的縮放公式

  • Head (Box/class prediction network)

Head 寬度設置與 BiFPN 相同,深度也使用線性增加,但增加方式不一樣。

  • Input image resolution

由於 BiFPN 是採用 3~7 level 的多尺度,因此輸入解析度必須可以被 2⁷ 整除,公式如下,一樣使用線性增加。

ϕ 分别取0,1,2,3,4,5,6,可得到 EfficientDet D0-D6

Experiment Results

EfficientDet 在 Object Detection 上獲得了相當好的成績,與其他模型相比有更高的 AP,並且模型參數、計算量、GPU Latency、CPU Latency更少。此外,在 Semantic Segmentation 任務上也有很不錯的表現。

--

--