EfficientDet 算法解讀
Google Brain 團(tuán)隊(duì)的三位 Auto ML 大佬 Mingxing Tan, Ruoming Pang, Quoc V. Le 在 CVPR 2020 發(fā)表一篇文章 EfficientDet: Scalable and Efficient Object Detection,代碼已經(jīng)開(kāi)源到了 Github。
這篇工作可以看做是中了 ICML 2019 Oral 的 EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks 擴(kuò)展,從分類(lèi)任務(wù)擴(kuò)展到檢測(cè)任務(wù)(Object Detection)。
眾所周知,神經(jīng)網(wǎng)絡(luò)的速度和精度之間存在權(quán)衡,而 EfficientDet 是一個(gè)總稱,可以分為 EfficientDet D1 ~ EfficientDet D7,速度逐漸變慢,但是精度也逐漸提高。
從下圖中可以看出,EfficientDet-D7 的性能非常的驚人:在 326B FLOPS,參數(shù)量 52 M的情況下,COCO 2017 validation 數(shù)據(jù)集上取得了 51.0 的 mAP,state-of-the-art 的結(jié)果。和 AmoebaNet + NAS-FPN 相比,F(xiàn)LOPS 僅為其十分之一的情況下取得了更好的結(jié)果。

這篇文章的主要貢獻(xiàn)點(diǎn)是 BiFPN,Compound Scaling 兩部分,會(huì)在下面一一介紹。
BiFPN

CVPR 2017 的 FPN 指出了不同層之間特征融合的重要性,并且以一種比較簡(jiǎn)單,Heuristic 的方法把底層的特征乘兩倍和淺層相加來(lái)融合。之后人們也試了各種別的融合方法,比如 PANet 先從底向上連,再自頂向下連回去;M2Det 在連的時(shí)候加入 skip-connection; Libra-RCNN 先把所有feature 都匯聚到中間層,然后再 refine。
總之上述都是一些人工連連看的設(shè)計(jì),包含 Conv,Sum,Concatenate,Resize,Skip Connection 等候選操作。很明顯使用哪些操作、操作之間的順序是可以用 NAS 搜的。進(jìn)入 Auto ML 時(shí)代之后,NAS-FPN 珠玉在前,搜到了一個(gè)更好的 neck 部分的結(jié)構(gòu)。
本文的作者基于下面的觀察結(jié)果/假設(shè),進(jìn)一步進(jìn)行了優(yōu)化:
作者觀察到 PANet 的效果比 FPN ,NAS-FPN 要好,就是計(jì)算量更大;
作者從 PANet 出發(fā),移除掉了只有一個(gè)輸入的節(jié)點(diǎn)。這樣做是假設(shè)只有一個(gè)輸入的節(jié)點(diǎn)相對(duì)不太重要。這樣把 PANet 簡(jiǎn)化,得到了上圖 (e) Simplified PANet 的結(jié)果;
作者在相同 level 的輸入和輸出節(jié)點(diǎn)之間連了一條邊,假設(shè)是能融合更多特征,有點(diǎn) skip-connection 的意味,得到了上圖 (f) 的結(jié)果;
PANet 只有從底向上連,自頂向下兩條路徑,作者認(rèn)為這種連法可以作為一個(gè)基礎(chǔ)層,重復(fù)多次。這樣就得到了下圖的結(jié)果(看中間的 BiFPN Layer 部分)。如何確定重復(fù)幾次呢,這是一個(gè)速度和精度之間的權(quán)衡,會(huì)在下面的Compound Scaling 部分介紹。

BiFPN 相對(duì) FPN 能漲 4 個(gè)點(diǎn),而且參數(shù)量反而是下降的,如下表所示。

Cross-Scale Connections
此外,作者還提出,之前從FPN 開(kāi)始普遍采用的,一個(gè)特征先 Resize ,再和另一層的特征相加的方式不合理。因?yàn)檫@樣假設(shè)這兩層的特征有了相同的權(quán)重。從更復(fù)雜的建模角度出發(fā),應(yīng)該每一個(gè) feature 在相加的時(shí)候都要乘一個(gè)自己的權(quán)重。這樣 weighted 的方式能漲 0.4,如下表所示:

weigjted 的時(shí)候,權(quán)重理論上要用 softmax 歸一化到和為1,但由于 softmax 的指數(shù)運(yùn)算開(kāi)銷(xiāo)比較大,作者簡(jiǎn)化為一個(gè)快速的方式 (Fast normalized fusion),其實(shí)就是去掉了 softmax 的指數(shù)運(yùn)算,在 GPU 上能快 30%,性能微微掉一點(diǎn),如下表所示:

總結(jié)一下 BiFPN 部分,是在 PANet 的基礎(chǔ)上,根據(jù)一些主觀的假設(shè),做了針對(duì)性的化簡(jiǎn),得到了參數(shù)量更少,效果更好的連接方式。
Compound Scaling
下面介紹的 Compound Scaling 部分,可以說(shuō)是 Mingxing Tan 大佬的拿手好戲。Model Scaling 指的是人們經(jīng)常根據(jù)資源的限制,對(duì)模型進(jìn)行調(diào)整。比如說(shuō)為了把 backbone 部分 scale up,得到更大的模型,就會(huì)考慮把層數(shù)加深, Res50 -> Res101這種,或者說(shuō)比如把輸入圖的分辨率拉大。
EfficientNet 在 Model Scaling 的時(shí)候考慮了網(wǎng)絡(luò)的 width, depth, and resolution 三要素。而 EfficientDet 進(jìn)一步擴(kuò)展,把 EfficientNet 拿來(lái)做 backbone,這樣從 EfficientNet B0 ~ B6,就可以控制 Backbone 的規(guī)模;neck 部分,BiFPN 的 channel 數(shù)量、重復(fù)的 layer 數(shù)量也可以控制;此外還有 head 部分的層數(shù),以及 輸入圖片的分辨率,這些組成了 EfficientDet 的 scaling config 。
從 EfficientDet D0 到 D7 的 “丹方” 如下表所示:

按照這個(gè) “丹方” 可以復(fù)現(xiàn)這篇工作,但是這個(gè)“丹方”怎么來(lái)的作者沒(méi)有詳細(xì)說(shuō)。這里面有非常非常多的超參數(shù),比如 BiFPN 的 channel 數(shù)量的增長(zhǎng)的公式為

從 EfficientDet D0 到 D7 在 COCO 上的 mAP 結(jié)果如下表所示,可以說(shuō)是吊打其他方法的存在:

結(jié)論
這篇 paper 的介紹就告一段落了,個(gè)人感覺(jué)這篇 paper 雖然性能很好,但是設(shè)計(jì)的時(shí)候基于經(jīng)驗(yàn)法則、難以解釋的參數(shù)有很多。
