詳解目標(biāo)檢測之Neck選擇
點擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達(dá)
作者丨曲終人不散丶@知乎(已授權(quán)) 來源丨h(huán)ttps://zhuanlan.zhihu.com/p/342011052
導(dǎo)讀
?Neck是目標(biāo)檢測框架中承上啟下的關(guān)鍵環(huán)節(jié)。它對Backbone提取到的重要特征,進(jìn)行再加工及合理利用,有利于下一步head的具體任務(wù)學(xué)習(xí)。本文按照Neck的六種分類順序?qū)χ髁鱊eck進(jìn)行階段性總結(jié)。
Neck是目標(biāo)檢測框架中承上啟下的關(guān)鍵環(huán)節(jié)。它對Backbone提取到的重要特征,進(jìn)行再加工及合理利用,有利于下一步head的具體任務(wù)學(xué)習(xí),如分類、回歸、keypoint、instance mask等常見的任務(wù)。本文將對主流Neck進(jìn)行階段性總結(jié)。
總體概要:
根據(jù)它們各自的論文創(chuàng)新點,大體上分為六種,這些方法當(dāng)然可以同時屬于多個類別。
上下采樣:SSD?(https://arxiv.org/abs/1512.02325) (ECCV 2016) STDN(https://openaccess.thecvf.com/content_cvpr_2018/html/Zhou_Scale-Transferrable_Object_Detection_CVPR_2018_paper.html) (CVPR 2018) 路徑聚合:DSSD(https://arxiv.org/abs/1701.06659) (Arxiv 2017), FPN(https://openaccess.thecvf.com/content_cvpr_2017/html/Lin_Feature_Pyramid_Networks_CVPR_2017_paper.html) (CVPR 2017), PANet(https://openaccess.thecvf.com/content_cvpr_2018/html/Liu_Path_Aggregation_Network_CVPR_2018_paper.html) (CVPR 2018), Bi-FPN(https://openaccess.thecvf.com/content_CVPR_2020/html/Tan_EfficientDet_Scalable_and_Efficient_Object_Detection_CVPR_2020_paper.html) (CVPR 2020), NETNet(https://openaccess.thecvf.com/content_CVPR_2020/html/Li_NETNet_Neighbor_Erasing_and_Transferring_Network_for_Better_Single_Shot_CVPR_2020_paper.html) (CVPR 2020) NAS搜索:NAS-FPN(https://openaccess.thecvf.com/content_CVPR_2019/html/Ghiasi_NAS-FPN_Learning_Scalable_Feature_Pyramid_Architecture_for_Object_Detection_CVPR_2019_paper.html) (CVPR 2019) 加權(quán)聚合:ASFF(https://arxiv.org/abs/1911.09516) (Arxiv 2019), Bi-FPN 非線性聚合:Feature Reconfiguration(https://openaccess.thecvf.com/content_ECCV_2018/html/Tao_Kong_Deep_Feature_Pyramid_ECCV_2018_paper.html) (ECCV2018, TIP 2019) 無限堆疊:i-FPN(https://arxiv.org/abs/2012.13563) (Arxiv 2020)
上下采樣 ?
該方法的特點是不具有特征層聚合性的操作,如SSD,直接在多級特征圖后接head。

STDN是基于SSD的模型,其思想是構(gòu)造法。由于STDN使用了DenseNet作為主干,因此后面的特征圖在尺寸上是相同的,所以需要構(gòu)造出各種大小的特征圖來檢測不同大小的物體。中間尺寸特征圖直接使用,大尺寸特征圖以尺寸變換層上采樣獲得,小尺寸特征圖以池化獲得。


?
該方法基于一個最基本的觀察:深層特征圖尺寸小,經(jīng)過層層卷積下采樣使得小物體的信息嚴(yán)重丟失,所以深層不利于小物體檢測,就將小物體檢測交給淺層來做。這也是為什么SSD需要多級head的原因。
然而光是這樣還不夠,由于深層特征圖具有非常豐富的語義信息,那么最好把深層特征再往淺層傳,以增加淺層語義信息。于是乎就誕生了最為人所熟知的FPN。在如何上采樣方面,F(xiàn)PN使用最鄰近上采樣,當(dāng)然還有使用反卷積的DSSD。


這類方法的共性就是反復(fù)利用各種上下采樣、拼接、點和或點積,來設(shè)計聚合策略。可改進(jìn)的點還包括加上Deformable Conv、Attention、門控機(jī)制、跨FPN level的label assignment等,都已有文章。
比較特殊的還有一種名為NETNet?(CVPR 2020)的方法,其認(rèn)為上述路徑聚合方案無論怎么設(shè)計,對于預(yù)測小物體而言,大物體的特征一直存在,因為高層語義信息被傳了下來,再加上其本身淺層自帶的大物體特征,這對小物體來說會是一種干擾,如下圖所示。

因此需要人為地進(jìn)行干預(yù),為淺層消除大物體特征。
思路也很簡單,隨著下采樣的進(jìn)行,小物體特征會丟失,那么深層必然已經(jīng)都是大物體的特征。此時對深層上采樣,得到的還是大物體特征,再把原來的淺層減去經(jīng)過上采樣的深層,于是淺層就不再有了大物體的特征。那么小物體的特征將被突出化。

同樣的,被消除的大物體特征也可以進(jìn)一步被傳輸?shù)胶线m的層,以增強(qiáng)大物體的檢測。

對小物體確實改進(jìn)比較顯著,值得一試。
NAS搜索

即利用神經(jīng)網(wǎng)絡(luò)搜索方法來搜索合適的聚合路徑,但是搜索的時間成本極高,且數(shù)學(xué)可解釋性低。最新的研究已表明,人工設(shè)計的路徑聚合在精度上亦可超過NAS搜索出來的結(jié)構(gòu) (大力出奇跡)。
加權(quán)聚合 ?
顧名思義,簡單的聚合對所有參與的特征層都是一視同仁的,而實際上,這些來自不同層級的特征圖對于單個物體而言,必然只有某一個是最適合檢測它的。因此對聚合進(jìn)行加權(quán)就顯得尤為重要。
ASFF引入了可參與訓(xùn)練的加權(quán)因子來體現(xiàn)不同層級特征圖的重要性。

加權(quán)公式為??,其中加權(quán)因子?求和為1,即對所參與的特征圖先調(diào)整到同樣尺寸,然后對每個像素點進(jìn)行加權(quán)。
Bi-FPN也有類似的操作,區(qū)別在于其簡單地使用標(biāo)量進(jìn)行加權(quán),??,并且在限制加權(quán)因子求和為1方面,使用快速歸一化,而非費時的Softmax操作。
非線性聚合
以上這些方法,都可以視為線性聚合操作。首先,讓我們用一些簡單符號來描述一下聚合過程。
給定特征金字塔的不同層特征圖??,SSD會從某個層開始,選擇??層后接head.
接下來以FPN為例,最高層??聚合后仍然是它本身,所以??. 接下來是第二高層??,它等于原來的??與新的??按照一定的方式進(jìn)行聚合。最后完整的聚合可以表達(dá)為如下的過程:
這里的??以及??都是特定的線性操作,比如不帶有激活函數(shù)的卷積,??卷積,雙線性插值上采樣,最鄰近上采樣,反卷積等。
因此FPN以及其他的路徑聚合法,都可視為是線性聚合。于是在《Deep Feature Pyramid Reconfiguration for Object Detection》一文中,作者建立了一種非線性聚合法。

先把所有的層級特征圖放在一起,然后學(xué)習(xí)多個非線性映射??.

非線性映射的學(xué)習(xí)模仿SENet的方法,帶有注意力的味道。?
?EfficientDet通過重復(fù)堆疊多個Bi-FPN block來獲得性能的提升。

顯然這樣的操作會造成大量的計算開銷與顯存占用。
那么有沒有更好的方法呢?當(dāng)然有,比如權(quán)重共享,即只使用一個FPN block,backbone提取到的特征圖會反復(fù)經(jīng)過這個block,由于權(quán)重共享,顯存占用很少,參數(shù)量也少,但是計算量仍然隨著重復(fù)的次數(shù)而增加,因為每迭代一次,對該block的更新最終都需要增加一次反向傳播。
但是上述過程有一個有趣的現(xiàn)象,就是當(dāng)重復(fù)計算的次數(shù)趨于無窮多次時,這個FPN block的參數(shù)會收斂到一個固定點,即特征平衡態(tài)。那么如何利用有限次前向傳播即可求解這樣的網(wǎng)絡(luò)參數(shù)固定點呢?就是《Deep Equilibrium Models》(曲終人不散丶)(NeurIPS 2019) 的厲害之處了。只要我們求得了該固定點,我們就直接得到了單個block重復(fù)前后向傳播無數(shù)次的結(jié)果。
下面把最精華的部分提取出來描述:
給定一個FPN block的網(wǎng)絡(luò)??,??是它的網(wǎng)絡(luò)參數(shù)點,backbone提取到的多級特征??, 以及一系列初始化的特征金字塔??,上標(biāo)為0表示還沒開始迭代。

這個??的選擇有多種,如FPN,PANet,Bi-FPN,Dense-FPN等,最終輸出的也是多級特征金字塔,每一級后面接head. 由于權(quán)重共享,上述過程重復(fù)多次,那么第??次的輸出就是
于是當(dāng)重復(fù)無窮多次時,多級特征圖收斂到固定值?

假如你選擇迭代10次,就會得到10次多級特征圖,依據(jù)鏈?zhǔn)角髮?dǎo)法則,你就得更新10次這個block的網(wǎng)絡(luò)參數(shù)??,這是極為耗時的,且增加了內(nèi)存開銷,因為你需要存儲中間的每一次輸出。
現(xiàn)在事后諸葛亮一波,假如我已經(jīng)迭代了1000次,可以認(rèn)為此時的多級特征圖已經(jīng)是收斂到固定點了,誤差很小。DEQ提出反向傳播一次就夠,即直接使用有關(guān)于這個固定點的雅克比的逆來反向傳播。即利用它可以直接對一個還沒開始迭代的block進(jìn)行更新。
現(xiàn)在改寫一下,把優(yōu)化??改為優(yōu)化??,顯然這個固定點就是這個方程的根,即?.
那么如何求這個固定點???你可以采用擬牛頓法,或者任何其他的求根法,通過多次迭代,得到滿足給定誤差以內(nèi)的近似的??.
然后再使用??來反向傳播,一次解決所有梯度回傳。
i-FPN的思想就源于此,《Implicit Feature Pyramid Network for Object Detection》一文將其應(yīng)用至目標(biāo)檢測的Neck中。作者以Dense-FPN為基礎(chǔ)。

可以看到i-FPN相比較于迭代4次權(quán)重共享的block的方法來說,可以獲得更好的性能。
就總結(jié)到這,如有錯誤,歡迎指正。
交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~
