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 任務上也有很不錯的表現。