FCOS 經(jīng)典的一階段Anchor-Free檢測(cè)算法

FCOS詳解
總述
FCOS是近年來(lái)優(yōu)秀的anchor free目標(biāo)檢測(cè)算法,本文將對(duì)論文中的創(chuàng)新點(diǎn)進(jìn)行盡量詳細(xì)的分析。
前情提要
在anchor free算法出現(xiàn)前,檢測(cè)網(wǎng)絡(luò)大多采用的是anchor based的算法思路,其主要流程為 backbone提取圖像特征 -- FPN從backbone提取到的不同分辨率的特征層中構(gòu)建特征金字塔 -- 在特征金字塔的不同層上建立多個(gè)anchor來(lái)構(gòu)建規(guī)劃正負(fù)樣本,并計(jì)算損失值回傳進(jìn)行網(wǎng)絡(luò)參數(shù)的優(yōu)化更新。而anchor base類(lèi)算法,我們也可以理解為,嘗試將anchor的設(shè)計(jì)過(guò)程中每個(gè)anchor的高、寬,特征圖上的每個(gè)像素點(diǎn)位置安排的anchor數(shù)目等經(jīng)驗(yàn)值去掉,從而進(jìn)一步減少超參數(shù)。
FCOS中聚焦的問(wèn)題
FCOS中,作者思考如何將檢測(cè)網(wǎng)絡(luò)模型的超參數(shù)進(jìn)一步的降低,作者看到FCN全卷積網(wǎng)絡(luò)在分割等任務(wù)上的成功,也看到了DenseBox、UintBox等嘗試將FCN網(wǎng)絡(luò)應(yīng)用于檢測(cè)任務(wù),其核心思想就是在每個(gè)像素點(diǎn)上直接回歸出當(dāng)前像素點(diǎn)所指向目標(biāo)的類(lèi)別和最小包圍框,從而去掉了anchor的超參數(shù)設(shè)計(jì)流程。 但是在每個(gè)像素點(diǎn)回歸,仍舊存在一個(gè)問(wèn)題:當(dāng)一個(gè)像素點(diǎn)同時(shí)位于兩個(gè)Ground Truth的最小外接矩形框內(nèi)時(shí),如何判定當(dāng)前像素點(diǎn)位置應(yīng)該回歸重疊框中的哪一個(gè)目標(biāo),因?yàn)橹挥心芘卸ó?dāng)前像素點(diǎn)的歸屬才能合理的計(jì)算損失值從而回傳優(yōu)化網(wǎng)絡(luò)參數(shù)。
FCOS中給出的解決方案
在FCOS中,作者嘗試在FPN得到的多個(gè)特征圖上逐像素點(diǎn)直接進(jìn)行回歸,然后通過(guò)在不同層上設(shè)置回歸閾值,來(lái)判斷當(dāng)前特征圖的當(dāng)前特征點(diǎn)位置的回歸結(jié)果是否合理,對(duì)不合理的回歸結(jié)果直接判定為負(fù)例。作者這么做的思路也是基于不同層的特征圖用于回歸不同尺度的目標(biāo),而當(dāng)一個(gè)像素點(diǎn)位置回歸具有歧義時(shí),多發(fā)生在兩個(gè)尺度相差較大的目標(biāo)間。「通過(guò)限制不同特征層的最大回歸尺寸,也就是使得淺層只用于回歸較小的目標(biāo),而深層回歸較大的目標(biāo)」。具體如下:
設(shè)為FPN輸出的特征圖,在每個(gè)的每個(gè)像素點(diǎn)位置上回歸一個(gè)檢測(cè)框的偏移量數(shù)組,記為$PB = {l^,r^,b^,t^}m_iF_im_i=[0,64,128,256,512,∞]max(l^?,t^?,r^?,b^?) > m_imax(l^?,t^?,r^?,b^?) < m_{i-1}$ 時(shí),將當(dāng)前回歸結(jié)果直接判定為負(fù)樣本。作者這么做的目的就是在網(wǎng)絡(luò)訓(xùn)練的時(shí)候直接限制了不同層的特征圖回歸指定尺寸的目標(biāo),而且作者通過(guò)實(shí)現(xiàn)發(fā)現(xiàn),大部分的像素點(diǎn)回歸歧義問(wèn)題,即一個(gè)像素點(diǎn)位置位于兩個(gè)目標(biāo)最小外接矩形相交位置時(shí)不好確定當(dāng)前位置回歸的框應(yīng)指向哪個(gè)目標(biāo),在采用FPN輸出的特征圖上進(jìn)行分類(lèi)和回歸時(shí)會(huì)得到消解。若仍舊存在歧義性問(wèn)題,「則當(dāng)前像素點(diǎn)位置回歸目標(biāo)指定ground truth面積較小的一個(gè)」。
FCOS訓(xùn)練過(guò)程
首先貼上FCOS的整個(gè)網(wǎng)絡(luò)圖:

1、首先輸入圖像并通過(guò)FPN獲取特征圖,然后在每個(gè)特征圖上進(jìn)行逐像素點(diǎn)的分類(lèi)和回歸,分類(lèi)輸出HxWxC,其中C為類(lèi)別數(shù),回歸輸出HxWx4,其中的四個(gè)通道分別為以當(dāng)前像素點(diǎn)位置對(duì)應(yīng)的原圖位置為中心,其所指向目標(biāo)的最小外接矩形四個(gè)邊界到中心點(diǎn)的距離值。其中回歸輸出,作者考慮到最終均為正值,所以通過(guò)4通道的值代入exp()函數(shù)使得其值域?yàn)?0,+∞),作者首先嘗試在FPN輸出的各級(jí)特征圖上共享頭卷積,但是對(duì)回歸頭來(lái)說(shuō)不同的特征圖所分配的回歸目標(biāo)尺寸區(qū)間不一致,為了增強(qiáng)適用性,作者最后采用的exp函數(shù)為 即對(duì)不同層FPN輸出特征圖設(shè)置一個(gè)可學(xué)習(xí)參數(shù)
2、「正負(fù)樣本的劃分」,作者規(guī)定正樣本為:當(dāng)特征圖上某像素點(diǎn)落在Ground Truth區(qū)間內(nèi)時(shí),其為正樣本。論文中提及的訓(xùn)練細(xì)節(jié)則說(shuō)明,作者考慮當(dāng)前像素點(diǎn)位置的分類(lèi)分?jǐn)?shù)大于0.05的,當(dāng)前像素點(diǎn)回歸目標(biāo)框在指定范圍內(nèi)的(符合當(dāng)前層特征圖指定范圍的),指定為正樣本,當(dāng)前回歸框的類(lèi)別為目標(biāo)框類(lèi)別,其余為負(fù)樣本。(作者原文里沒(méi)有說(shuō)當(dāng)回歸出現(xiàn)歧義的時(shí)候類(lèi)別如何設(shè)定,但是既然出現(xiàn)歧義時(shí)回歸指向面積較小的GT那么類(lèi)別標(biāo)簽應(yīng)當(dāng)也是指向同樣的目標(biāo))
3、「損失函數(shù)」,作者損失函數(shù)公式為
其中,分類(lèi)損失函數(shù)采用的是Retinanet中的Focal loss;回歸損失函數(shù)采用的是UnitBox中的IOU損失,回歸損失的具體計(jì)算為:。作者的值取的1,則表示,當(dāng)前的類(lèi)別標(biāo)簽為非背景類(lèi),即時(shí)為1,否則為0,實(shí)際作者還添加了另一個(gè)損失,將在下一節(jié)介紹
FCOS的其余改進(jìn)
作者參考了Retinanet,將最后的分類(lèi)器從多分類(lèi)器改為了多個(gè)類(lèi)別的二分類(lèi)器,有興趣的同學(xué)可以去看看這篇論文的原文。 作者在實(shí)際網(wǎng)絡(luò)訓(xùn)練時(shí)發(fā)現(xiàn),其網(wǎng)絡(luò)模型的性能并沒(méi)有達(dá)到和anchor base相同的程度,觀察和分析結(jié)果發(fā)現(xiàn)是在正負(fù)樣本選擇時(shí),雖然擴(kuò)大了輸入的正樣本,但是也同步的生成了很多遠(yuǎn)離目標(biāo)中心的負(fù)樣本,然后作者通過(guò)添加centerness分支來(lái)評(píng)價(jià)每個(gè)像素位置距離當(dāng)前目標(biāo)中心的程度值來(lái)達(dá)到對(duì)正負(fù)樣本的篩選,從而降低了遠(yuǎn)離目標(biāo)中心回歸框?qū)τ?xùn)練的影響,提高了網(wǎng)絡(luò)的精度。
centerness分支前向流程、損失計(jì)算:
首先我們看FCOS的整個(gè)網(wǎng)絡(luò)圖,centerness分支是放在分類(lèi)分支一起的,多添加了一個(gè)卷積層。所以測(cè)試時(shí)前向輸出的分?jǐn)?shù)就是分類(lèi)分?jǐn)?shù)和centerness的乘積。centerness分支的損失計(jì)算為:首先能夠由前向時(shí)的步長(zhǎng)確定原圖中的GT中心點(diǎn)對(duì)應(yīng)的當(dāng)前特征圖的像素位置,然后前向卷積計(jì)算得到的回歸值為,那么中心度損失就可以通過(guò)以下公式計(jì)算。因?yàn)樵撝凳窃赱0,1]區(qū)間內(nèi)的,所以就可以用BCEloss來(lái)計(jì)算該部分損失并加到總的損失函數(shù)里即為完整的損失。在論文里作者說(shuō)明有兩種中心度的計(jì)算方式,一種就是以該公式,從回歸的結(jié)果計(jì)算得到,一種就是像圖上那種通過(guò)網(wǎng)絡(luò)層直接卷積得到分?jǐn)?shù)。「作者試驗(yàn)說(shuō)明用網(wǎng)絡(luò)直接卷積得到的中心度分支表現(xiàn)最好」。
個(gè)人思考
(這個(gè)部分沒(méi)做過(guò)試驗(yàn)驗(yàn)證,純粹是自己的一點(diǎn)想法,大家聽(tīng)聽(tīng)就好)因?yàn)槲沂窍瓤吹腸enternet再看的FCOS,所以就覺(jué)得,centernet里的高斯核映射和centerness分支其實(shí)有一定的相似性的,這兩種方式我學(xué)習(xí)到的就是,雖然基于像素點(diǎn)做回歸增加了正樣本數(shù)量,但是越靠近目標(biāo)邊緣的正樣本其給訓(xùn)練模型帶來(lái)的貢獻(xiàn)越低,但是這兩者中也有一個(gè)假設(shè),就是不管是高斯核還是中心度其實(shí)都是圓形分布,但是我們知道以行人為目標(biāo)的話,其實(shí)可能橢圓型更加合適,那么如果在centernet的高斯核部分,由輸入樣本確定一個(gè)統(tǒng)計(jì)參數(shù)來(lái)調(diào)整核函數(shù)呢?是不是會(huì)有更高的性能;在FCOS中的話,centerness分支計(jì)算得到的是[0,1]之間的值,其實(shí)就是一個(gè)smooth的前背景分類(lèi)網(wǎng)絡(luò),或者說(shuō)分割網(wǎng)絡(luò)。那么物體檢測(cè)來(lái)說(shuō),其中心是不是應(yīng)該是一個(gè)橢圓型區(qū)域,這部分如何構(gòu)建來(lái)幫助更好的正負(fù)樣本選取呢?《Bridging the Gap Between Anchor-based and Anchor-free Detection》這篇論文也說(shuō)了,區(qū)分anchor base和anchor free的就是正負(fù)樣本的選取,那么我覺(jué)得這個(gè)點(diǎn)是可以做的。
歡迎關(guān)注GiantPandaCV, 在這里你將看到獨(dú)家的深度學(xué)習(xí)分享,堅(jiān)持原創(chuàng),每天分享我們學(xué)習(xí)到的新鮮知識(shí)。( ? ?ω?? )?
有對(duì)文章相關(guān)的問(wèn)題,或者想要加入交流群,歡迎添加BBuf微信:
為了方便讀者獲取資料以及我們公眾號(hào)的作者發(fā)布一些Github工程的更新,我們成立了一個(gè)QQ群,二維碼如下,感興趣可以加入。
