EfficientDet: Scalable and Efficient Object Detection 論文學習

Abstract

模型效率在計算機視覺領域愈發重要。本文中,作者系統地研究了神經網絡結構設計,提出了多項關鍵優化以提升模型效率。首先,作者提出了一個加權的雙向特徵金字塔網絡(BiFPN),使得多尺度特徵融合更加簡單而快速;其次,作者提出了一個混合縮放的方法,同時對主幹網絡、特徵網絡和邊框/類別預測網絡的深度、分辨率和寬度進行縮放。基於這些改進,作者設計了多個目標檢測器,叫做EfficientDet,在資源有限的條件下,它們可以持續地取得性能提升。特別地,EfficientDet-D6 在單個模型與單個尺度的情況下,在COCO數據集上實現了SOTA的50.9%50.9\%的mAP,參數量爲5200萬個,FLOPs數量爲2290億次,這要比目前最佳的模型參數量少4x4x倍,FLOPs 要少13x13x倍,但是mAP要高出+0.2%+0.2\%。代碼位於:https://github.com/google/automl/tree/master/efficientdet

1. Introduction

近些年,目標檢測領域取得了顯著的突破;同時,SOTA目標檢測器對算力的消耗也越來越高。例如,最新的基於 AmoebaNet 的 NAS-FPN 檢測器實現了SOTA的準確率,但是它需要1.67億個參數和30450億次FLOPs(要比RetinaNet高出30倍)。這麼大的模型與昂貴的算力成本使它們在實際部署時非常困難,比如機器人和自動駕駛領域對模型大小和延遲有非常高的限制。因爲這些資源限制,目標檢測模型的效率就變得非常關鍵。
在這裏插入圖片描述

之前已經有許多工作在朝高效率檢測模型努力,如單階段和anchor-free檢測器,或壓縮現有的模型。儘管這些方法都朝着更高效率的方向努力,但是可能會犧牲一定的準確率。而且大多數的工作對資源的要求非常特定,而實際應用中(從移動設備到數據中心)所需要的資源都不太一樣。

一個自然的問題就是:我們是否可以去構建一個可擴展的檢測框架,在給定資源要求範圍(如從30億FLOPs到3000億次FLOPs)的前提下,它的準確率和效率更高?本文爲的就是解決這個問題,系統研究檢測器架構的設計。基於單階段檢測方式,作者研究了主幹網絡、特徵融合、類/邊框網絡的設計選項,找出兩個主要的挑戰:

挑戰1:高效率的多尺度特徵融合—自從[20]提出,FPN被廣泛用在多尺度特徵融合上。最近 PANet,NAS-FPN 等方法針對跨尺度特徵融合,設計了多個網絡結構。對於不同的輸入特徵融合,大多數的工作都只簡單地將它們加起,而沒有加以區分。但是由於不同的輸入特徵有着不同的分辨率,作者觀測到它們對融合後的輸出特徵所做的貢獻是不一樣。爲了解決這個問題,作者提出了一個簡單而高效率的加權雙向特徵金字塔網絡(BiFPN),加入了可訓練的權重來學習不同輸入特徵的重要度,重複地進行自上而下和自下而上的多尺度特徵融合。

挑戰2:模型縮放—之前的工作爲了實現更高的準確率,主要依賴於更大的主幹網絡或者更大的輸入圖像,作者發現當我們既要考慮準確性,也要考慮效率時,對特徵網絡和類別/邊框預測網絡進行縮放也很重要。受[36]啓發, 作者提出了一個目標檢測器的混合縮放方法,對所有的主幹網絡、特徵網絡和邊框/類別預測網絡協同地縮放分辨率/深度/寬度。

最後作者發現 EfficientNets 實現的準確率要比之前常用的主幹網絡(ResNets, ResNeXt, AmoebaNet)更高。將 EfficientNet 與本文提出的 BiFPN 和混合縮放方法結合起來,就提出了一個新的目標檢測方法,稱作EfficientDet,在較少參數量和FLOPs的情況下,它可以取得更高的準確率。圖1和圖4爲COCO數據集上模型的性能比較。在相似的準確率要求下,EfficientDet 使用的 FLOPs要比 YOLOv3 少 28倍,比 RetinaNet 少30倍,比最近基於 ResNet 的 NAS-FPN 少 19倍。在單模型和單測試尺度下,EfficientDet-D6 實現了50.950.9 mAP,參數量爲5200萬個,FLOPs 是2290億次,要比之前最好的模型小4倍,FLOPs少13倍。在CPU和GPU上,EfficientDet 同樣要比之前的檢測器快3倍和8倍。

做了簡單的調整,在 Pascal VOC 2012 語義分割任務上,本文的單模型單尺度的 EfficientDet 取得的 mIOU 是81.74%81.74\%,FLOPs爲 180億次,超越了 DeepLab V3+ 1.7%1.7\%,FLOPs要少9.8倍。

2. Related Work

單階段檢測器:現有的檢測器分類多是看它是否包含興趣區域候選步驟(有就是雙階段,沒有就是單階段)。雙階段檢測器通常更加靈活、準確,單階段檢測器更加簡單、高效。由於單階段檢測器的效率高而且非常簡潔,最近獲得了大量的關注。本文中,作者主要遵循了單階段檢測器的設計,證明我們通過優化網絡結構,既可以實現更高的準確率,也可以實現更高的效率。

多尺度特徵表示:目標檢測的一個主要難題就是,有效地表示和處理多尺度特徵。早期的檢測器通常在主幹網絡的金字塔特徵層級上直接進行預測。FPN 提出了一個自上而下的 pathway,結合多尺度特徵。PANet 延續了這個想法,在FPN之上增加了一個自下而上的 path 聚合網絡;STDL 提出了一個尺度轉換模塊,研究跨尺度特徵;M2det 提出了一個 U形模塊,融合多尺度特徵,G-FRNet 引入了門單元,控制不同特徵間的信息流。最近 NAS-FPN 利用神經結構搜索,自動地設計特徵網絡拓撲結構。儘管它的效果不錯,NAS-FPN在搜索時需要幾千小時的GPU計算,最終的特徵網絡非常不規則,不易理解。本文的目的在於以更直觀、規則的方式去優化多尺度特徵融合。

模型縮放:爲了實現更高的準確率,利用更大的主幹網絡,或增大輸入圖像分辨率是常用的增強 baseline 模型的方法。近來的一些工作證明了增加通道大小,堆疊特徵網絡可以實現更高的準確率。這些縮放方法主要關注在單一或有限的縮放維度中。最近[36]通過協同地增大網絡的寬度、深度和分辨率,在圖像分類中實現了顯著的性能提升。

3. BiFPN

這部分,作者先是梳理了多尺度特徵融合問題,然後介紹了BiFPN的核心思想:高效的雙向跨尺度連接與加權的特徵融合。

3.1 Problem Formulation

在這裏插入圖片描述

多尺度特徵融合的目的就是在不同的分辨率上聚合特徵。給定一組多尺度特徵Pin=(Pl1in,Pl2in,...)\vec P^{in} = (P^{in}_{l_1}, P^{in}_{l_2},...),其中PliinP^{in}_{l_i} 表示第lil_i個層級,我們目的是找到一個數學變換ff,可以高效率地聚合不同的特徵,輸出一組新的特徵:Pout=f(Pin)\vec P^{out} = f(\vec P^{in})。圖2(a) 爲傳統的自上而下的 FPN。它將層級3到7作爲輸入特徵,Pin=(P3in,...,P7in)\vec P^{in} = (P_3^{in},...,P_7^{in}),其中PiinP_i^{in}代表一個特徵層級,分辨率是原圖的1/2i1/2^i。如果原始輸入分辨率是640×640640\times 640,則P3inP_3^{in}代表的第三個特徵層級分辨率就是(640/23)×(640/23)=80×80(640/2^3)\times (640/2^3)=80\times 80,而P7inP_7^{in}代表的第七個層級就是5×55\times 5。傳統的FPN通過自上而下的方式聚合多尺度特徵:

P7out=Conv(P7in)P_7^{out}=Conv(P^{in}_7)

P6out=Conv(P6in+Resize(P7out))P_6^{out}=Conv(P^{in}_6 + Resize(P_7^{out}))

......

P3out=Conv(P3in+Resize(P4out))P_3^{out}=Conv(P^{in}_3 + Resize(P_4^{out}))

其中,ResizeResize通常是上採樣或下采樣,將分辨率匹配起來,而ConvConv是特徵處理的一個卷積操作。

3.2 Cross-Scale Connections

傳統自上而下的FPN只有一條信息流。爲了解決這個問題,PANet 增加了一條自下而上的 path 聚合網絡,如圖2(b)所示。最近 NAS-FPN 利用神經結構搜索來搜尋更優的跨尺度特徵網絡結構,但是它需要數千小時的GPU搜索,而且找到的模型也是不規則的,很難去理解或改造,如圖2©所示。

通過研究這三個網絡的性能和效率(表5),作者發現 PANet 的準確率要比 FPN 和 NAS-FPN 高,但是它的參數量和計算量要更高。爲了提升模型效率,本文提出了幾個針對跨尺度連接優化的地方:首先,去除只有單個輸入 edge 的節點。這個想法很簡單:如果一個節點只有一個輸入 edge,沒有特徵融合,那麼它對特徵網絡的貢獻就比較少。這就產生了一個簡化版的雙向網絡。其次,從原始輸入到輸出節點,增加了一條 edge,如果它們位於同一個層級上,目的是融合更多的特徵,而不帶來額外的成本;第三,與PANet只有自上而下和自下而上的path不同,作者將每個雙向path(top-down, bottom-up)看作爲一個特徵網絡層,多次重複該層,使我們擁有更加高層級的特徵融合。4.2 節會討論在不同資源的條件下,使用一個混合縮放的方法來選擇該層的數量。有了上述改進,作者將這個新的特徵網絡稱作雙向特徵金字塔網絡(BiFPN),如圖2和圖3所示。

3.3 Weighted Feature Fusion

融合不同分辨率的多個輸入特徵時,常用方式是首先將它們縮放到相同大小,然後再加起來。特徵注意力網絡[19]引入了全局自注意力上採樣,恢復像素點的位置信息,在[8]中進一步得到研究。

之前的特徵融合方法將所有的輸入特徵同等對待,不加區分。但是,作者發現因爲不同分辨率的輸入特徵不一樣,它們對輸出特徵的貢獻也不相等。爲了解決這個問題,本文在特徵融合時爲每個輸入加上了一個權重,使得網絡可以學習每個輸入特徵的重要程度。基於此想法,作者想出了三個加權融合方法:

Unbounded Fusion: O=iωiIiO=\sum_{i} \omega_i \cdot I_i,其中ωi\omega_i是一個可以學習的權重,可以是標量(逐特徵),也可以是向量(逐通道)或多維矩陣(逐像素)。作者發現標量就可以取得不錯的準確率,而且計算成本最小。但是由於標量權重無界,它可能會引起訓練不穩定。因而作者爲了讓每個權重大小有界,使用了權重歸一化。

Softmax-based FusionO=ieωijeωjIiO=\sum_i \frac{e^{\omega_i}}{\sum_j e^{\omega_j}}\cdot I_i。可以對每個權重使用 softmax,這樣所有的權重都被歸一化爲[0,1][0,1]區間的概率值,表示每個輸入的重要度。但是如6.3節所說的,softmax會造成GPU硬件明顯的降速。爲了儘可能地降低延遲,作者進一步提出了一個快速融合的方法。

Fast Normalization FusionO=iωiϵ+jωjIiO=\sum_i \frac{\omega_i}{\epsilon + \sum_j \omega_j} \cdot I_i,對每個ωi\omega_i使用 ReLU,保證ωi0\omega_i \geq 0,其中ϵ=0.0001\epsilon=0.0001,避免數值不穩定。相似地,每個歸一化後的權重位於0和1之間,但是因爲沒有使用softmax,這種實現就更加高效。實驗表明這種方法與基於softmax的方法有着類似的學習行爲和準確率,但是在GPU上要快30%30\%(表6)。

最終的BiFPN整合了雙向跨尺度連接和快速歸一化融合。舉個例子,圖2(d)中所展示的BiFPN的第六個層級如下:

P6td=Conv(ω1P6in+ω2Resize(P7in)ω1+ω2+ϵ)P_6^{td} = Conv(\frac{\omega_1 \cdot P_6^{in} + \omega_2 \cdot Resize(P_7^{in})}{\omega_1 + \omega_2 + \epsilon})

P6out=Conv(ω1P6in+ω2P6td+ω3Resize(P5out)ω1+ω2+ω3+ϵ)P_6^{out} = Conv(\frac{\omega_1' \cdot P_6^{in} + \omega_2' \cdot P_6^{td} + \omega_3' \cdot Resize(P_5^{out})}{\omega_1' + \omega_2' + \omega_3' + \epsilon})

其中P6tdP_6^{td}是top-down pathway中第六層級的中間特徵,P6outP_6^{out}是bottom-up pathway中第六層級的輸出特徵。其它特徵的構建方式都差不多。爲了進一步提升效率,作者在特徵融合時使用了深度可分離卷積,在每個後面使用了batch normalization和激活函數。

4. EfficientDet

基於BiFPN,作者設計了多個檢測模型,叫做EfficientDet。這一部分,作者介紹了網絡的結構和一個新的混合縮放方法。

4.1 EfficientDet Architecture

在這裏插入圖片描述

圖3展示了EfficientDet的整體結構,大致遵循了單階段檢測器的模式。作者使用了 ImageNet 預訓練的 EfficientNets 作爲主幹網絡。BiFPN 作爲特徵網絡,將主幹網絡中的第3到第7層級{P3,P4,P5,P6,P7}\{P_3, P_4, P_5, P_6,P_7\}的特徵作爲輸入,然後重複地使用top-down和bottom-up雙向特徵融合。融合後的特徵輸入進類別與邊框網絡,輸出目標類別和邊框預測。與[21]相似,類別與邊框網絡的權重在所有的特徵層級共享。

4.2 Compound Scaling

爲了優化準確率和效率,作者設計了多個模型來符合各項資源要求,核心就是如何增強 baseline EfficientDet 模型。

之前的工作都是通過更大的主幹網絡(ResNeXt或AmoebaNet)、更大的輸入圖像,或堆疊更多的FPN層來增強基線檢測器。這些方法通常都沒什麼效果,因爲它們只關注在單個或有限的縮放維度上。最近的工作證明在圖像分類任務上,協同地擴大網絡的所有維度(寬度、深度、分辨率)能夠取得顯著的性能提升。受這些工作啓發,作者提出了一個新的針對目標檢測任務的混合縮放方法,使用一個簡單的混合係數ϕ\phi來協同地增大主幹網絡、BiFPN 網絡、類別/邊框網絡和分辨率。目標檢測器的縮放維度要多於圖像分類模型,這樣網格搜索法的計算成本就太高了。因而,作者使用了一個基於啓發式學習的縮放方法,但仍然遵循協同縮放所有維度的思想。

主幹網絡:作者複用了EfficientNet-B0到B6的寬度/深度縮放係數,這樣就可以複用ImageNet預訓練checkpoints了。

BiFPN:作者線性增加BiFPN 的深度DbifpnD_{bifpn}(層數),因爲深度需要被四捨五入爲較小的整數。對於BiFPN的寬度WbifpnW_{bifpn}(通道數),指數地增長BiFPN寬度WbifpnW_{bifpn}(通道數)。作者對一組值{1.2,1.25,1.3,1.35,1.4,1.45}\{1.2,1.25,1.3,1.35,1.4,1.45\}使用網格搜索,選擇最佳值1.35作爲BiFPN的寬度縮放因子。BiFPN的寬度和深度通過下面等式來縮放:

Wbifpn=64(1.35ϕ),Dbifpn=3+ϕW_{bifpn}=64\cdot (1.35^\phi),\quad \quad D_{bifpn}=3+\phi

邊框/類別預測網絡:將它們的寬度與BiFPN設爲一樣大,即Wpred=WbifpnW_{pred}=W_{bifpn},但是通過下面的等式線性地增加其深度(層個數):

Dbox=Dclass=3+ϕ/3D_{box}=D_{class}=3+\lfloor \phi/3 \rfloor

輸入圖像分辨率:因爲我們在BiFPN中使用了第三特徵層級到第七個特徵層級,輸入分辨率必須可以被27=1282^7=128整除,所以我們使用下面的等式線性地增大分辨率:

Rinput=512+ϕ128R_{input}=512+\phi \cdot 128

對上面三個等式輸入不同的ϕ\phi,作者構建了表1中的EfficientDet-D0(ϕ=0)(\phi=0)到D6(ϕ=6)(\phi=6)。注意這些縮放因子都是基於啓發式學習的,可能不是最優的,但是作者證明相較於其它的單一維度縮放方法,該縮放方法可以顯著地提升效率,如圖6所示。

在這裏插入圖片描述

在這裏插入圖片描述

5. Experiments

5.1 EfficientDet for Object Detection

作者在COCO 2017檢測數據集上評估了EfficientDet性能。每個模型都是通過SGD來訓練,momentum是0.9, weight decay是4e54e-5。學習率在第一個epoch中線性地從0增大到0.16,然後通過cosine decay rule 進行退火。每個卷積後都加上一個同步 Batch Normalization,BN decay 是0.997, ϵ\epsilon1e41e-4。作者使用了Swish激活函數與指數滑動平均數,decay是0.9998。作者也使用了focal loss,α=0.25,γ=1.5\alpha=0.25,\gamma=1.5,aspect ratio是{1/2,1,2}\{1/2,1,2\}。每個模型訓練的batch size是128,在32個TPUv3核上訓練,每個核的batch size是4。作者使用RetinaNet預處理,訓練時多分辨率裁剪/縮放與翻轉增強。注意,作者對本文模型沒有使用自動增強。

表2比較了EfficientDet與其它目標檢測模型,在相同的單模型單尺度設定下進行,沒用測試時增強。在不同的準確率和資源要求下,EfficientDet 取得的準確率和效率都要高於其它檢測器。當準確率要求相對較低時,EfficientDet-D0 取得的準確率與YOLOv3接近,但是FLOPs要少28倍。與RetinaNet和Mask R-CNN相比,EfficientDet-D1 的準確率相似,但是參數少8倍,FLOPs少25倍。在高準確率要求下,EfficientDet 也超過了 NAS-FPN 和它的增強版本,參數和FLOPs都少許多。EfficientDet-D6 在單模型單尺度下,實現了50.950.9的mAP,而模型要比之前最優的模型小4倍,FLOPs要少13倍。與AmoebaNet+NAS-FPN+AutoAugment模型不同,它需要特別的設定(比如將anchors從3×33\times 3改爲9×99\times 9,並行訓練模型),所有的EfficientDet 模型使用的都是3×33\times 3 anchors,沒有用並行訓練。

除了參數量和FLOPs,作者在Titan-V 顯卡和單線程Xeon CPU上也比較了速度。每個模型跑10遍,batch size爲1, 然後計算均值和標準方差。圖4展示了模型大小、GPU延遲和單線程CPU延遲的比較。爲了公平比較,這些結果都是在同一臺設備上得到的。與之前的檢測器相比,EfficientDet 的模型在GPU上要快3.2倍,CPU上要快8.1倍。

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