# Object Detection - EfficientDet > [name=謝朋諺(Adam Hsieh)] > [time=Mon, Mar 2, 2020 3:06 PM] ###### tags: `paper` --- ## Reference > [EfficientDet 算法解讀](https://zhuanlan.zhihu.com/p/93241232) > [令人拍案叫絕的EfficientNet和EfficientDet](https://zhuanlan.zhihu.com/p/96773680) > [论文学习笔记-EfficientDet](https://blog.csdn.net/sinat_37532065/article/details/103317753?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task) > [【目标检测】EfficientDet: Scalable and Efficient Object Detection](https://blog.csdn.net/zhw864680355/article/details/103531307?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task) --- # EfficientDet: Scalable and Efficient Object Detection [論文連結](https://arxiv.org/pdf/1911.09070.pdf) {%pdf https://arxiv.org/pdf/1911.09070.pdf %} ## Outline > [TOC] ## 摘要重點 - 提出一種加權的**雙向特徵金字塔網路**(bi-directional feature pyramid network,**BiFPN**),可以更輕鬆快速的進行多尺度特徵融合。 - 提出一種複合縮放方法,該方法可同時對所有主要網路、特徵網絡和框/類預測網路的解析度、深度和寬度進行統一縮放。 - EfficientDet-D7 在 COCO dataset 達到最先進的 51.0 mAP,且僅具有 52M 的參數量和 326B 的 FLOPS,體積縮小了 4 倍,少了 9.3 倍的 FLOPS,但反而更準了 0.3% mAP。 ## BiFPN ### Problem Formulation ![](https://i.imgur.com/v1rKEGl.png) :::info :bulb: 特徵網路設計 (a) FPN: 引入 top-down 的途徑來融合 P3-P7 級的多尺度特徵。 (b) PANet: 在 FPN 的方式上額外加了一種由 bottom-up 的路徑。 \(c\) NAS-FPN: 使用神經網路架構自動搜索找到一種不規則的特徵網路架構。 (d) Fully-connected FPN: 所有的 cell 都做全連接。 (e) Simplified PANet: 去除 PANet 中只有一個輸入的節點。 (f) BiFPN: 本文最終產生的網路架構, ::: - 給定一組輸入特徵 $\vec{P}^{in}=(P^{in}_{l_1},P^{in}_{l_2},...)$ 其中 $P^{in}_{l_i}$ 代表所有在 level $l_i$ 上的特徵,我們的目標就是找出一個轉化函式 $f$ 可以有效率整合不同的特徵: $$\vec{P}^{out}=f(\vec{P}^{in})$$ - 以上圖的 FPN 來說,在 level 3-7 的輸入特徵表示為:$\vec{P}^{in}=(P^{in}_{l_3},...,P^{in}_{l_7})$,而每個 $P^{in}_i$ 代表著一個特徵的解析度被削減多少個 $1/2^i$。 EX: 假設輸入影像大小為 $640\times 640$ 則在 $P^{in}_3$ 代表是指在 level 3 中的解析度大小為 $(640/2^3=80)$ $80\times80$ 的解析度,level 7 就只剩 $5\times5$ 了。 - 因此在 FPN 的多尺度特徵整合方式為: $$P_7^{out}=Conv(P_7^{in})$$ $$P_6^{out}=Conv(P_6^{in}+Resize(P_7^{out}))$$ $$...$$ $$P_3^{out}=Conv(P_3^{in}+Resize(P_4^{out}))$$ ### Cross-Scale Connections - 我們發現 PANet 正確率最高,但參數量過多,因此為了提高模型效率,本文針對跨尺度連接提出了幾種優化方法: 1. 首先,==我們刪除那些只有一個輸入的節點==。我們的直覺很簡單:如果一個節點只有一個輸入且沒有特徵融合,那麼它在融合不同特徵的特徵網絡貢獻較小。 <img src='https://i.imgur.com/AShZHnr.png' width='50%' height='50%'> 2. 再來==增加跳躍的連接==。如果原始輸入與輸出節點處於同一個 level,則在原始輸入和輸出節點之間再額外添加一條邊,也就是 BiFPN 的基本單位,此方法是為了在不增加成本的情況下能夠融合得更多特徵。 <img src='https://i.imgur.com/nScgWsF.png' width='50%' height='50%'> 3. 最後,與 PANet 僅有一個自上而下和一個自下而上的網路架構不同,我們將每個雙向(top-down 和 bottom-up)路徑視為一個特徵網絡層,並重複相同的層多次以至於可以融合更多 high-level 的特徵。 ![](https://i.imgur.com/KyODece.png) ### Weighted Feature Fusion 我們觀察到在不同的輸入特徵在不同的解析度上通常對輸出的貢獻是不相等的,因此為了解決這問題,我們提出三種加權融合方法: 1. **Unbounded fusion:** - $$O=\sum_i w_i \cdot I_i$$ 其中 $w_i$ 是指可學習權重,這裡對應的輸入可以是不同的 level,比如特徵級別、通道級別或是像素級別。不同的輸入級別將使得權重 w 的表示形式不同,分別可能是純量、向量或矩陣形式。 - 作者通過實驗發現,純量形式在不明顯損失精度的情況下能夠取得最小的計算成本,但此時各個 w 之間沒有約束限制,容易導致訓練的不穩定,因此作者採用了 Normalization 來限制每個權重的範圍。 2. **Softmax-based fusion:** - $$O=\sum_i \dfrac{e^{w_i}}{\sum_j e^{w_j}}\cdot I_i$$ 一個直觀的想法是將 softmax 應用於每個權重,以便將所有權重標準化在 0 到 1 之間,代表著每個輸入的重要性,但是額外的 softmax 會導致 GPU 速度顯著下降。為了最小化額外的等待時間成本,我們進一步提出了一種快速融合方法。 3. **Fast normalized fusion:** - $$O=\sum_i \dfrac{w_i}{\epsilon+\sum_j \cdot w_j}\cdot I_i$$ 在每個 $w_i$ 之後使用 ==Relu== 來確保 $w_i ≥ 0$,並且 $\epsilon = 0.0001$ 是一個很小的值,以避免數值不穩定。 - 每個 Normalization 權重的值也都介於 0 到 1 之間,但由於此處沒有 softmax,因此效率更高。 我們的研究表明,這種快速融合方法與基於 softmax 的融合方法具有非常相似的準確性,但在 GPU 上的==運行速度提高了 **30%**==。 **總結來說**最終我們以 BiFPN 雙向跨尺寸連接和快速的 Normalized 融合。 - 以 BiFPN 在 Level 6 為例子:$$P_6^{td}=Conv(\dfrac{w_1\cdot P_6^{in}+w2\cdot Resize(P_7^{in})}{w_1+w_2+\epsilon})$$ $$P_6^{out}=Conv(\dfrac{w'_1\cdot P_6^{in}+w2'\cdot P_6^{td}+w'_3\cdot Resize(P_5^{out})}{w'_1+w'_2+w'_3+\epsilon})$$ $P^{td}_6$ 是 Level 6 top-down 路徑的中間特徵,$P^{out}_6$ 則是 Level 6 bottom-up 路徑的輸出特徵。 - 為了進一步提高效率,我們使用 ==Depthwise Separable Convolution== 進行特徵融合,並在每次 Convolution Layer 後添加 ==Batch Noemalization== 和 ==Activation Function==。 ## EfficientDet ### EfficientDet Architecture ![](https://i.imgur.com/NCmrBvA.png) :::info :bulb: EfficientDet architecture 使用 EfficientNet 作為 Backbone,使用 BiFPN 作為 Feature Network,以及共享 class/box 預測網絡。 ::: - 本文採用 ImageNet 培訓的 EfficientNets 作為Backbone。 - 本文提出的 BiFPN 則作為特徵網絡,它從 Backbone 中獲取 Level 3-7 $\{P_3,P_4,P_5,P_6,P_7\}$ 的特徵,並重複應用 top-down 和 bottom-up 的雙向特徵融合。 - 這些融合的特徵被送進 **Class** 和 **BBox** 網路,也就是 Class 和 BBOX 在所有網路中的 Level 中的權重皆為共享,這部分與 RetinaNet 類似。 ### Compound Scaling - 本文提出了一種用於 Object Detection 的新的複合縮放方法,該方法使用簡單的複合係數來共同縮放 ==Backbone Network==、==BiFPN Network==、==Class/BBox Network== 和 ==Resolution== 的所有維度。 - Object Detector 的縮放比例要比影像分類模型高得多,因此對所有尺寸進行 grid search 是不太可能的,因此,我們使用 heuristic-based 的縮放方法,但仍遵循聯合縮放所有維度的主要思想。 1. **Backbone network -** 我們使用了 **EfficientNet-B0~B6** 相同的寬度/深度縮放係數,因此我們可以輕鬆地使用它們 ImageNet 預訓練結果。 2. **BiFPN network –** 我們將寬度 $W_{bifpn}$(#channels) 變為指數成長,深度 $D_{bifpn}$ (#layers) 由於需要四捨五入至整數因此為線性成長:$$W_{bifpn}=64\cdot(1.35^\phi), \ \ \ D_{bifpn}=2+\phi$$ 3. **Box/class prediction network –** 我們將其**寬度** (#channels) 固定為始終與 BiFPN 相同 (即 $W_{pred}=W_{bifpn}$) 但是**深度** (#layers) 則使用下面等式來線性增加:$$D_{box}=D_{class}=3+\lfloor\phi/3\rfloor$$ 4. **Input image resolution –** 由於在 BiFPN 中使用 Level 3-7 的特徵,輸入解析度必須為 $2^7=128$,因此我們的線性解析度增加就必須為:$$R_{input}=512+\phi\cdot128$$ ![](https://i.imgur.com/0Oh2uln.png) :::info :bulb: EfficientDet D0-D7 縮放比例的配置設定 - $\phi$ 是控制所有縮放比例尺寸的複合係數。BiFPN、BBox/Class Network 和 Input Size 分別使用不同公式進行縮放,除了 D7 的設置跟其他不同,它只改變了輸入解析度的大小。 ::: - 按照上面三個公式的方式增加各自變量,如上表所示 - 本文將 $EfficientDet-D0\ (\phi=0)$ 擴展到 $D6\ (\phi=6)$,除了在 $\phi\geq7$ 以上的模型由於記憶體無法容納,因此,我們只增大了輸入大小,而將所有其他尺寸保持相同,就可以簡單地將 D6 擴展到 D7。 ## Experiments - 我們在 COCO 2017 Detection Dataset 上評估 EfficientDet。 - 使用 SGD Optimizer 對每個模型進行訓練,Momentum 為 0.9,Weight Decay 為 4e-5。 - 在一開始的前 5% 訓練中,Learning Rate 首先從 0 線性增加到 0.08,然後使用 cosine decay rule 將其衰退。 - 在每次卷積後,使用 Batch Normalization 設定 batch norm decay 為 0.997 和 epsilon 1e-4。 我們使用衰減為 0.9998 的 Exponation Moving Average。 - 我們還使用 $\alpha=0.25$ 和 $\gamma= 1.5$ 且長寬比為 $\{1/2,1,2\}$ 常用的 focal loss。 - 我們的模型使用了 32 個 TPUv3 晶片上並將 Batch Size 設為 128 來訓練。 - 我們對 **EfficientDet-D0/D1/D3/D4** 使用 RetinaNet 進行預處理,但為了公平起見,與基於 AmoebaNet 的 NAS-FPN 檢測器的現有技術相比,我們對 **EfficientDet-D5/D6/D7** 也使用了相同的 auto-augmentation 功能。 ![](https://i.imgur.com/e1gtMdC.png) :::info :bulb: EfficientDet 在 COCO 上的結果。 - *#Params* 表示參數量。 - *#FLOPS* 表示乘加數。 - *LAT* 表示 Batch Size 為 1 時 inference 的延遲。 - *AA* 表示 Auto-Augmentation。 - 如果模型間具有相似的準確性,我們會將它們分組在一起,並比較 EfficientDet 和每組中其他檢測器之間的比例或加速。 ::: - 上表將 EfficientDet 與其他 Object Detector 在只有單一模型、單一尺寸且沒有 test-time augmentation 的情況下進行了比較。 - EfficientDet 在沒有資源限制的情況下,比以前的檢測器具有==更高==的 **Accuracy** 和 **Efficiency**。 - 在相對 **low-accuracy** 的情況下,我們的 **EfficientDet-D0** 的精度與 YOLOv3 相似,但 ==FLOPS 卻少了 28 倍==。 - 與 RetinaNet 和 Mask-RCNN 相比,我們的 **EfficientDet-D1** 達到了相似的 Accuracy,但==參數減少了 8 倍==,==FLOPS 減少了 25 倍==。 - 在 **high-accuracy** 上,我們的 EfficientDet 還始終以相較之下極少的參數和 FLOPS 勝過最近的 NAS-FPN 及其增強版本。 - 我們的 **EfficientDet-D7** 為 **single-model** **single-scale** 實現了最新的 **51.0 mAP**,但仍比以前的最佳結果小 4 倍參數量,並且 FLOPS 減少了 9.3 倍。 - 本文還提到大型基於 AmoebaNet 的 NAS-FPN 模型需要特殊設置(例如,將 anchor 從 3x3 更改為 9x9 並使用模型平行進行訓練),但在所有 EfficientDet 模型都==使用相同的 3x3 anchor==,並且無需模型平行即可進行訓練。 - 除了參數量和 FLOPS,我們還比較了 **Titan-V GPU** 和 **single-thread Xeon CPU** 的實際延遲時間。我們以 Batch Size 為 1 運行每個模型 10 次,並報告**平均值**和**標準差**,如下圖。 ![](https://i.imgur.com/1T13f4z.png) :::info :bulb: Model 大小和 Inference 延遲的比較。 - *AN* 指的是有經過 Auto-Aufmentation 的 AmoebaNet+NAS-FPN。 - 本文的 EfficientDet 模型 Size 比其他 Detector 小 4 ~ 6.6 倍。 - EfficientDet 在 GPU 上速度快上 2.3 ~ 3.2 倍,CPU 上快 5.2 ~ 8.1 倍。 ::: ## Ablation Study ### Disentangling Backbone and BiFPN ![](https://i.imgur.com/KdnFKxR.png) :::info :bulb: 分離 Backbone 和 BiFPN 的分析。 - 從標準 RetinaNet(ResNet50 + FPN)開始。 - 再用 EfficientNet-B3 替換 Backbone。 - 最後將 FPN 替換為我們建議的 BiFPN。 ::: ### BiFPN Cross-Scale Connections ![](https://i.imgur.com/yNrxOE2.png) :::info :bulb: 不同特徵網路的比較。 ::: - 雖然在原版的 FPN 和 PANet 只具一個 top-down 和 bottom-up 的流程,但為了公平起見,我們將他重複五次 (與 BiFPN 相同)。 ### Softmax vs Fast Normalized Fusion ![](https://i.imgur.com/k69VIQP.png) :::info :bulb: 不同特徵融合的比較。 - 我們的方法達到了與 Softmax 的方法幾乎相等的 Accuracy,但速度快上 28% ~ 31%。 ::: - 上表比較了三種不同 model 尺寸的 Detector,在使用了 **Softmax** 和 **Fast Fusion** 的結果比較,在 GPU 上我們可以==快到 1.26 倍 ~ 1.31 倍==。 ![](https://i.imgur.com/kXhpmZG.png) :::info :bulb: Softmax vs. Fast Normalized Feature Fusion ::: - 上圖展示了從 **EfficientDet-D3** 中的 **BiFPN** 層中隨機選擇的三個特徵融合節點的學習權重。 - Normalized 後的權重在訓練過程中會迅速變化,暗示著使用不同的特徵會導致特徵融合不均。 - 儘管權重變化很快,但在這三個節點的訓練過程中,我們的 Fast Normalization Fusion 方法始終顯示出與基於 softmax Fusion 有非常相似的學習行為。 ### Compound Scaling ![](https://i.imgur.com/GtEXoHl.png) :::info :bulb: 不同縮放方法的比較。 - 所有的縮放方法都有提高 Accuracy,但是我們的複合縮放方法可以有更好的 Accuracy 和 Efficiency 的權衡。 ::: - 本文採用**複合縮放方法**來聯合縮放 **Backbone、BiFPN、BBox/Class** 預測網絡的 **Depth/Width/Resolution** 的所有維度。 - 上圖比較了我們的複合縮放比例和其他按比例縮放 **Depth/Width/Resolution** 的替代方法,儘管從相同的基準開始,但==我們的複合縮放方法仍然比其他方法具有更高的效率==,這表明通過共同縮放可以更好地平衡不同架構的維度。
{"metaMigratedAt":"2023-06-15T04:49:18.696Z","metaMigratedFrom":"Content","title":"Object Detection - EfficientDet","breaks":true,"contributors":"[{\"id\":\"4ee4ef40-bc04-403d-bc36-ca8929ffb0c6\",\"add\":9920,\"del\":950}]"}
    650 views