EfficientDet解读
簡介
這篇發表于 CVPR2020 的檢測論文不同于大火的 anchor-free,還是基于 one-stage 的范式做的設計,是 ICML2019 的 EfficientNet 的拓展,將分類模型引入到了目標檢測任務中。近些年目標檢測發展迅猛,精度提升的同時也使得模型越來越大、算力需求越來越高,這制約了算法的落地。近些年出現了很多高效的目標檢測思路,如 one-stage、anchor-free 以及模型壓縮策略,它們基本上都是以犧牲精度為代價獲得效率的。EfficientDet 直指當前目標檢測的痛點:有沒有可能在大量的資源約束前提下,實現高效且高精度的目標檢測框架?這就是 EfficientDet 的由來。
-
論文標題
EfficientDet: Scalable and Efficient Object Detection
-
論文地址
http://arxiv.org/abs/1911.09070
-
論文源碼
https://github.com/google/automl/tree/master/efficientdet
介紹
之前提到,EfficientDet 是 EfficientNet 的拓展,我們首先來簡單聊一聊 EfficientNet,感興趣的請閱讀原文。在 EfficientNet 中提到了一個很重要的概念 Compound Scaling(符合縮放),這是基于一個公認的事實:調整模型的深度、寬度以及輸入的分辨率在一定范圍內會對模型性能有影響,但是過大的深度、寬度和分辨率對性能改善不大還會嚴重影響模型前向效率,所以 EfficientNet 提出復合系數?\phi?統一縮放網絡的寬度、深度和分辨率,具體如下。
這里的α,β,γ\alpha, \beta, \gammaα,β,γ都是由一個很小范圍的網絡搜索得到的常量,直觀上來講,?\phi?是一個特定的系數,可以用來控制資源的使用量,α,β,γ\alpha, \beta, \gammaα,β,γ決定了具體是如何分配資源的。值得注意的是,常規卷積操作的計算量是和d,w2,r2d, w^{2}, r^{2}d,w2,r2成正比的,加倍深度會使得 FLOPS 加倍,但是加倍寬度和分辨率會使得 FLOPS 加 4 倍。由于卷積 ops 經常在 CNN 中占據了大部分計算量,使用等式上式縮放卷積網絡將會使得整體計算量近似增加(α?β2?γ2)?\left(\alpha \cdot \beta^{2} \cdot \gamma^{2}\right)^{\phi}(α?β2?γ2)?倍。由于 EfficientNet 對任意?\phi?增加了約束α?β2?γ2≈2\alpha \cdot \beta^{2} \cdot \gamma^{2} \approx 2α?β2?γ2≈2,整體的計算量近似增加了2?2^{\phi}2?倍。
對比 EfficientNet 從 B0 到 B7 的提升,不難知道,這種復合縮放可以較大的提升模型性能,所以 EfficientDet 也將其引入了進來。
論文首先分析了目前 OD(object detection,目標檢測)的兩個挑戰:高效多尺度特征融合和模型縮放。
多尺度特征融合:FPN 如今被廣泛用于多尺度特征融合,最近 PANet、NAS-FPN 等方法研究了更多跨尺度特征融合的結構。不過,這些方法融合不同尺度特征的方式都是簡單加和,這默認了不同尺度特征的貢獻是同等的,然而往往不是這樣的。為了解決這個問題,論文提出了一種簡單但是高效的加權雙向特征金字塔網絡(BiFPN),它對不同的輸入特征學習權重。
模型縮放:之前的方法依賴于更大的 backbone 或者更大分辨率的輸入,論文發現放大特征網絡和預測網絡對精度和速度的考量是很重要的。基于 EfficientNet 的基礎,論文為目標檢測設計了一種復合縮放(Compound Scaling)方法,聯合調整 backbone、特征網絡、預測網絡的深度、寬度和分辨率。
和 EfficientNet 一樣,EfficientDet 指的是一系列網絡,如下圖包含 D1 到 D7,速度逐漸變慢,精度逐漸提升。在理解 EfficientDet 兩個核心工作(BiFPN和Compound Scaling)之前,可以先看看下圖的 SOTA 方法比較,可以看到 EfficientDet-D7 的效果非常驚人,在 FLOPs 僅為 AmoebaNet+NAS-FPN+AA 的十分之一的前提下,COCO2017 驗證集上的 AP 到達了 55.1,超越了 SOTA5 個點。而且單尺度訓練的 EfficientD7 現在依然霸榜 PaperWithCode 上。
此外,查看官方倉庫提供的模型,其參數量其實是不大的(當然,這不絕對意味著計算量小)。
BiFPN
CVPR2017 的 FPN 指出了不同層之間特征融合的重要性如下圖 a,不過它采用的是自上而下的特征圖融合,融合方式也是很簡單的高層特征加倍后和低層特征相加的方式。此后,下圖 b 所示的 PANet 在 FPN 的基礎上又添加了自下而上的信息流。再后來出現了不少其他的融合方式,直到 NAS-FPN 采用了 NAS 策略搜索最佳 FPN 結構,得到的是下圖 c 的版本,不過 NAS-FPN 雖然簡單高效,但是精度和 PANet 還是有所差距的,并且 NAS-FPN 這種結構是很怪異的,難以理解的。所以,EfficientDet 在 PANet 的基礎上進行了優化如下圖的 d:移除只有一個輸入的節點;同一個 level 的輸入和輸出節點進行連接,類似 skip connection;PANet 這種一次自上而下再自下而上的特征融合可以作為一個單元重復多次從而獲得更加豐富的特征,不過重復多少次是速度和精度的權衡選擇,這在后面的復合 22 縮放部分講到。
上述是 FPN 特征流動的結構,如何數學上組合這些特征也是一個重要的方面。此前的方法都是上一層特征 resize 之后和當前層特征相加。這種方式存在諸多不合理之處,因為這樣其實默認融合的兩層特征是同權重的,事實上不同尺度的特征對輸出特征的貢獻是不平等的,應當對每個輸入特征加權,這個權重需要網絡自己學習。當然,學習到的權重需要歸一化到和為 1,采用 softmax 是一個選擇,但是 softmax 指數運算開銷大,所以作者這里簡化為快速標準化融合的方式(Fast normalized fusion),它的計算方法如下,其實就是去掉了 softmax 的指數運算,這種方式在 GPU 上快了很多,精度略微下降,可以接受。
O=∑iwi?+∑jwj?IiO=\sum_{i} \frac{w_{i}}{\epsilon+\sum_{j} w_{j}} \cdot I_{i} O=i∑??+∑j?wj?wi???Ii?
Compound Scaling
在看復合縮放之前,我們先要知道,有了 BiFPN 又有了 EfficientNet 再加上 head 部分,其實網絡框架已經確定了,如下圖所示,左邊是 backbone(EfficientDet),中間是多層 BiFPN,右邊是 prediction head 部分。
結合 EfficientNet 的聯合調整策略,論文提出目標檢測的聯合調整策略,用復合系數?\phi?統一調整.調整的內容包括 backbone(EfficientNet 版本,B0 到 B6)、neck 部分的 BiFPN(通道數、layer 數)以及 head 部分(包括層數)還要輸入圖像分辨率。不過,和 EfficientNet 不同,由于參數太多采用網格搜索計算量很大,論文采用啟發式的調整策略。其中 backbone 的選擇系數控制,BiFPN 的配置用下面第一個式子計算,head 的層數和輸入分辨率是下面 2、3 式的計算方式。
Wbifpn=64?(1.35?),Dbifpn=3+?W_{b i f p n}=64 \cdot\left(1.35^{\phi}\right), \quad D_{b i f p n}=3+\phi Wbifpn?=64?(1.35?),Dbifpn?=3+?
Dbox=Dclass=3+??/3?D_{b o x}=D_{c l a s s}=3+\lfloor\phi / 3\rfloor Dbox?=Dclass?=3+??/3?
Rinput=512+??128R_{\text {input}}=512+\phi \cdot 128 Rinput?=512+??128
最后得到的 8 種結構的配置表如下圖。
實驗結果
在簡介里我已經提到很多這個檢測框架的過人之處了,這里就簡單看一下在 COCO 驗證集的效果,可以說無論是速度還是精度都是吊打其他 SOTA 方法的,至今依然在 COCO 驗證集榜首的位置。
此外作者也將其拓展到語義分割,潛力也是比較大的。還做了不少消融實驗,感興趣的可以自行查看論文原文。
總結
本文最大的亮點在于提出了目標檢測網絡聯合調整復雜度的策略,從而刷新了 SOTA 結果。這個思路來自 EfficientDet,同樣 backbone 的高效也源自該網絡。文中另一個突出的成果在于設計了 BiFPN 以及堆疊它,可以看到效果還是很顯著的。此外,除了官方的 TF 實現外,這里也推薦一個目前公認最好的 PyTorch 實現(由國內大佬完成),Github 地址給出,這也是唯一一個達到論文效果的 PyTorch 復現(作者復現時官方還沒有開源)。
總結
以上是生活随笔為你收集整理的EfficientDet解读的全部內容,希望文章能夠幫你解決所遇到的問題。