Anchor-free應(yīng)用一覽:目標(biāo)檢測(cè)、實(shí)例分割、多目標(biāo)跟蹤
來(lái)源|https://zhuanlan.zhihu.com/p/163266388編輯|極士平臺(tái)從去年5月開(kāi)始,我一直對(duì)Anchor-free工作保持著一定的關(guān)注。本次借組內(nèi)的paper reading分享的契機(jī),整理了與Anchor free相關(guān)的一些工作。一方面是分享近期在目標(biāo)檢測(cè)領(lǐng)域中一些工作,另一方面,和大家一起梳理一下非?;馃岬木W(wǎng)絡(luò)模型CenterNet、FCOS,當(dāng)我們把他們遷移到分割、多目標(biāo)追蹤等其他任務(wù)上時(shí),大佬們是如何去設(shè)計(jì)的。
首先我們要回答為什么要有 anchor?在前幾年,物體檢測(cè)問(wèn)題通常都被建模成對(duì)一些候選區(qū)域進(jìn)行分類和回歸的問(wèn)題。在單階段檢測(cè)器中,這些候選區(qū)域就是通過(guò)滑窗方式產(chǎn)生的 anchor;在兩階段檢測(cè)器中,候選區(qū)域是 RPN 生成的 proposal,但是 RPN 本身仍然是對(duì)滑窗方式產(chǎn)生的 anchor 進(jìn)行分類和回歸。
這里我列出的幾種anchor-free 方法,是通過(guò)另外一種手段來(lái)解決檢測(cè)問(wèn)題的。CornetNet通過(guò)預(yù)測(cè)成對(duì)的關(guān)鍵點(diǎn)(左上角與右下角)來(lái)表征目標(biāo)框;CenterNet和FCOS通過(guò)預(yù)測(cè)物體中心點(diǎn)及其到邊框的距離來(lái)表征目標(biāo)框;ExtremeNet是通過(guò)檢測(cè)物體四個(gè)極值點(diǎn),將四個(gè)極值點(diǎn)構(gòu)成一個(gè)物體檢測(cè)框;AutoAssign也是近期的一篇論文,提出一種在anchor free檢測(cè)器上,正負(fù)樣本標(biāo)簽的新的分配策略;Point-Set是近期ECCV 2020的一個(gè)工作,提出來(lái)一個(gè)更加泛化的point-based的anchor表示形式,統(tǒng)一了目標(biāo)檢測(cè)、實(shí)例分割、姿態(tài)估計(jì)的三個(gè)大任務(wù),后面我們會(huì)進(jìn)一步展開(kāi)。首先我們來(lái)簡(jiǎn)單回顧一下FCOS的網(wǎng)絡(luò)架構(gòu),其中C3, C4, C5表示骨干網(wǎng)絡(luò)的特征圖,P3到P7是用于最終預(yù)測(cè)的特征級(jí)別。這五層的特征圖后分別會(huì)跟上一個(gè)head,head中包括了三個(gè)分支,分別用于分類、中心點(diǎn)置信度、回歸的預(yù)測(cè)。整體的架構(gòu)非常簡(jiǎn)潔,有很多人通過(guò)修改FCOS的輸出分支,用于解決實(shí)例分割、關(guān)鍵點(diǎn)檢測(cè)、目標(biāo)追蹤等其他任務(wù)。下邊我列出來(lái)原作者在更新論文版本時(shí),做出的三點(diǎn)細(xì)節(jié)上的調(diào)整,一是使用了新的中心點(diǎn)采樣的方式,在判斷正負(fù)樣本時(shí),考慮了不同階段的步長(zhǎng)值,去調(diào)整了正樣本所處框的大小。而非像FCOS v1中,直接判斷其是否落在gt bbox里。這種新的center sampling方式,使得難判別的樣本減少,是否使用center-ness branch造成的精度區(qū)別也減小了。二是將回歸的loss換成了GIoU loss。三是FCOS v2 的不同特征層在回歸參數(shù)的時(shí)候,使用了不同的reg范圍(除以了stride)。(而在FCOS v1中,是用過(guò)乘以一個(gè)可以學(xué)習(xí)的參數(shù),該參數(shù)在FCOS v2有保留,但重要性減小。)為了提升fcos的效果,特別考慮到一些不穩(wěn)定環(huán)境,由于傳感器噪聲或不完整的數(shù)據(jù),目標(biāo)探測(cè)器需要考慮定位預(yù)測(cè)的置信度,有人提出加入一個(gè)預(yù)測(cè)bbox的不確定度的分支。這里的不確定度是通過(guò)預(yù)測(cè)bbox的四個(gè)offset的分布得到的。這里假設(shè)每一個(gè)示例都是獨(dú)立的,用多元高斯分布的輸出與協(xié)方差矩陣的對(duì)角矩陣去表征每一個(gè)bbox的offset。在FCOS的分類、中心點(diǎn)、回歸的三個(gè)loss上,新增了一個(gè)衡量bbox offset的不確定度的loss。下邊我們來(lái)具體看一下他的實(shí)現(xiàn)方式。這里的box offsets我們用 (l, r, t, b) 來(lái)表示, 是網(wǎng)絡(luò)的可學(xué)習(xí)的參數(shù),B的維度是4,μ 是bbox的偏置,計(jì)算得到的多元高斯分布, 是之前提到的協(xié)方差矩陣的對(duì)角矩陣,帶入網(wǎng)絡(luò)設(shè)計(jì)的衡量bbox offset的不確定度的loss,我們可以著重關(guān)注紅色線左邊的這一項(xiàng),當(dāng)預(yù)測(cè)出的 μ 與真實(shí)的bbox的高斯分布 相差很大時(shí),網(wǎng)絡(luò)會(huì)傾向于得到一個(gè)很大的標(biāo)準(zhǔn)差 ,也就是說(shuō)這個(gè)時(shí)候的不確定度是很大的。當(dāng)然它后邊還有一個(gè)類似正則化的約束 ,去限制不要過(guò)大。對(duì)比FCOS,同樣使用ResNet-50的框架,它在coco數(shù)據(jù)集上AP能提升0.8個(gè)點(diǎn)。對(duì)比兩個(gè)loss,其回歸情況也是更好的。
下面我們來(lái)看看,《Point-Set Anchors for Object Detection, Instance Segmentation and Pose Estimation》這個(gè)point-based的網(wǎng)絡(luò),是如何使用回歸的思路去統(tǒng)一Object Detection, Instance Segmentation,Pose Estimation三個(gè)大任務(wù)的。作者稱這是統(tǒng)一這三大任務(wù)的第一人。作者認(rèn)為,在object detection領(lǐng)域,無(wú)論是若干個(gè)IOU大于一定閾值的anchor表示正樣本,還是用物體的中心點(diǎn)來(lái)表示正樣本。不論是anchor based或者anchor-free based的方法,對(duì)于正樣本在原圖的定位,都是基于回歸的形式直接回歸矩形坐標(biāo),或者是矩形長(zhǎng)寬+矩形中心點(diǎn)offset。Anchor從某種程度上來(lái)說(shuō),表示的只是一種先驗(yàn)信息,anchor可以是中心點(diǎn),也可以是矩形,同時(shí)它還可以提供更多的模型設(shè)計(jì)思路,如正負(fù)樣本的分配,分類、回歸特征的選擇。所有作者的思路是,能不能提出更加泛化的anchor,泛化的應(yīng)用于更多的任務(wù)中,而不只是目標(biāo)檢測(cè)中,并給出一個(gè)更好的先驗(yàn)信息。對(duì)于Instance Segmentation和Object Detection,使用最左邊的Anchor,其有兩個(gè)部分:一個(gè)中心點(diǎn)和n個(gè)有序錨點(diǎn),在每個(gè)圖像位置,我們會(huì)改變邊界框的比例和長(zhǎng)寬比來(lái)形成一些anchor,這里和anchor-based的方法一樣,涉及到一些超參數(shù)的設(shè)置。對(duì)姿態(tài)估計(jì)中的anchor,使用訓(xùn)練集中最常見(jiàn)的姿態(tài)。Object Detection的回歸任務(wù)比較簡(jiǎn)單,用中心點(diǎn)或者左上/右下角點(diǎn)回歸即可。對(duì)于Instance Segmentation來(lái)說(shuō),作者使用了特定的匹配準(zhǔn)則去匹配右圖中綠色的Point-set anchor中的anchor points和黃色的gt實(shí)例的points,并且轉(zhuǎn)換為回歸任務(wù)。右邊的三個(gè)圖分別是將綠色與黃色的點(diǎn),最近的相連;將綠色的點(diǎn)與最近的邊緣相連;最右側(cè)中時(shí)作者優(yōu)化后的方式,對(duì)角點(diǎn)采用最近點(diǎn)的方法,根據(jù)角點(diǎn)得到的最近四個(gè)點(diǎn)將gt的輪廓?jiǎng)澐殖?個(gè)區(qū)域。將上邊界與下邊界上綠色的點(diǎn),做垂線對(duì)應(yīng)到有效的gt point(若不在區(qū)域內(nèi),則無(wú)效,例如圖中的綠色空心點(diǎn))。總的來(lái)說(shuō),Point-set用它提出的新的anchor的設(shè)計(jì)方式代替?zhèn)鹘y(tǒng)的矩形anchor,并在頭部附加一個(gè)并行的回歸分支用于實(shí)例分割或姿態(tài)估計(jì)。圖中展示了它的網(wǎng)絡(luò)架構(gòu),和retinanet一樣,作者使用了不同尺度的特征層,head包含了用于分類、分割姿態(tài)的回歸、檢測(cè)框的回歸的子網(wǎng)絡(luò)。每一個(gè)子網(wǎng)絡(luò)都包含了四個(gè)3乘3的、stride為1的卷積層,只在姿態(tài)估計(jì)任務(wù)上使用的FAM模塊,和一個(gè)輸出層。下邊的表格中,列出的是輸出層的維度,分別對(duì)應(yīng)了三個(gè)任務(wù)。其損失函數(shù)非常簡(jiǎn)單,對(duì)分類使用focal loss,對(duì)回歸任務(wù)使用L1 loss。除了目標(biāo)歸一化和將先驗(yàn)知識(shí)嵌入anchor的形狀之外,作者也提到了我們?nèi)绾芜M(jìn)一步用anchor去聚合特征,以保證特征變換不變性、并拓展到多階段學(xué)習(xí)當(dāng)中。(1)我們將可變卷積中的可學(xué)習(xí)偏移量替換為point-based anchor中點(diǎn)的位置。(2)由于人體形狀的這個(gè)回歸,是相對(duì)檢測(cè)更加困難的。一方面是由于它對(duì)特征的提取要求非常大,另一方面是不同的關(guān)鍵點(diǎn)之間存在差異。所以作者提出,可以直接使用第一階段的姿態(tài)預(yù)測(cè)作為第二階段的anchor(分類、掩?;蛭蛔嘶貧w、邊界盒回歸),使用額外的細(xì)化階段進(jìn)行姿態(tài)估計(jì)。
它們都參考了FCOS的做法,將目標(biāo)檢測(cè)中anchor-free的思想,遷移到了實(shí)例分割的任務(wù)上。網(wǎng)絡(luò)的具體細(xì)節(jié)不會(huì)展開(kāi)講,這里只會(huì)說(shuō)到他們?cè)诮鉀Q實(shí)例分割任務(wù)時(shí),在FCOS的整體架構(gòu)上做了哪一些調(diào)整。
首先講到的是CenterMask,把這個(gè)放在最前面是因?yàn)樗南敕ǚ浅V苯?,這個(gè)結(jié)構(gòu)可以理解成 FCOS + MaskRCNN 的 mask的分支。我們可以將它和FCOS做一下對(duì)比,輸入圖像通過(guò) FCOS 得到目標(biāo)框,這一部分是一樣的。之后類似 MaskRCNN,用 ROIAlign 把對(duì)應(yīng)的區(qū)域 crop 出來(lái),resize 到 14 x14 ,最后經(jīng)過(guò) mask branch 計(jì)算 loss。想法非常簡(jiǎn)單。第二篇是EmbedMask,在保證近似精度的基礎(chǔ)上,它的最快速度可以達(dá)到MaskRCNN的三倍。它采取了one-stage方法,相當(dāng)于直接使用語(yǔ)義分割得到分割結(jié)果之后,在使用聚類或者一些手段將同一個(gè)實(shí)例的整合到一起,得到最終實(shí)例的分割結(jié)果。整個(gè)網(wǎng)絡(luò)的結(jié)構(gòu)如上圖所示,還是一個(gè)FPN的結(jié)構(gòu),在分辨率最大的特征曾P3使用pixel的embedding,將每個(gè)pixel都embedding成一個(gè)D長(zhǎng)度的向量,因此最后得到的是H_W_D的特征圖。然后依次對(duì)每個(gè)特征圖P3、P4、P5、P6、P7使用proposal head,也就是傳統(tǒng)的目標(biāo)檢測(cè)的head,再其中的改進(jìn)就是,對(duì)于每個(gè)proposal也都embedding成一個(gè)D長(zhǎng)度的向量。使用一個(gè)margin來(lái)定義兩個(gè)embedding之間的關(guān)聯(lián)程度,如果小于這個(gè)embedding,就認(rèn)為這個(gè)pixel和這個(gè)proposal是同一個(gè)instance。但是呢,文中提出使用一個(gè)人為定義的margin,會(huì)導(dǎo)致一些問(wèn)題,因此呢,本文就提出了一個(gè)learnable margin,讓網(wǎng)絡(luò)自動(dòng)學(xué)習(xí)每個(gè)proposal的margin,就如結(jié)果圖中所示的proposal margin那條路徑。對(duì)比FCOS,EmbedMask加入了圖中藍(lán)色的模塊。雖然EmbedMask和CenterMask等工作都是基于一階段的檢測(cè)算法,來(lái)做實(shí)例分割,但是它的核心要點(diǎn),其實(shí)并沒(méi)有變,都是基于一個(gè)足夠好的detector來(lái)從proposal里面生成mask。事實(shí)證明這非常有效,基于一個(gè)足夠好的detector的實(shí)例分割方法不僅僅有利于找到更多的mask,同時(shí)這些mask的生成反過(guò)來(lái)會(huì)提升detector本身的效果。所以你可以看到這兩個(gè)實(shí)例分割的box AP都要比FCOS要高,當(dāng)然這也是必然。第三篇是PolarMask,它也是基于FCOS,把實(shí)例分割統(tǒng)一到了FCN的框架下。PolarMask提出了一種新的instance segmentation建模方式,在將極坐標(biāo)的360度等分成36分,通過(guò)預(yù)測(cè)這36個(gè)方向上,邊緣到極坐標(biāo)中心的距離,從而得到物體的輪廓。
這里主要對(duì)比了兩篇基于CenterNet的擴(kuò)展出的工作。首先簡(jiǎn)單介紹一下MOT(Multi-Object Tracking)的任務(wù),它需要對(duì)視頻中的每一幀進(jìn)行物體檢測(cè),并對(duì)每一個(gè)物體賦予一個(gè)id,去追蹤這個(gè)目標(biāo)。
CenterTrack是CenterNet的原作者做的工作,在將目標(biāo)檢測(cè)任務(wù)擴(kuò)展到多目標(biāo)檢測(cè)上時(shí),作者通過(guò)追蹤物體的中心點(diǎn),來(lái)解決追蹤問(wèn)題。多目標(biāo)檢測(cè)任務(wù)有兩個(gè)關(guān)鍵,一是我們需要把每一幀當(dāng)中的物體檢測(cè)出來(lái),這里包括了遮擋物體;二是我們需要在時(shí)間維度上,對(duì)物體做id的匹配。下邊這張圖中的紅色區(qū)域是為了解決Track任務(wù)時(shí),輸入了t時(shí)刻的圖像 、t-1時(shí)刻的圖像 以及在t-1時(shí)刻的檢測(cè)出的所有物體 ,這里的紅色區(qū)域是不同于目標(biāo)檢測(cè)任務(wù)的,新增了四個(gè)通道(其中三個(gè)通道是圖像的輸入、還有一個(gè)通道的計(jì)算會(huì)在后邊展開(kāi))。
在輸出部分,網(wǎng)絡(luò)除了輸出檢測(cè)的中心峰值點(diǎn)的heatmap與預(yù)測(cè)長(zhǎng)寬的特征圖之外,網(wǎng)絡(luò)還輸出了一個(gè)2通道的offset,這里的offset表示的是兩幀之間,物體的移動(dòng)距離。左邊是網(wǎng)絡(luò)的輸入,右邊是網(wǎng)絡(luò)的輸出。在數(shù)學(xué)上的表示I 為的是圖像輸入、T中的b表示的是bbox,右邊分別是檢測(cè)的中心峰值點(diǎn)、長(zhǎng)寬的特征圖、物體移動(dòng)的偏移量。以上是在網(wǎng)絡(luò)訓(xùn)練時(shí),其對(duì)應(yīng)中心峰值點(diǎn)、長(zhǎng)寬的特征圖、物體移動(dòng)的偏移量的三個(gè)損失函數(shù)的具體表現(xiàn)形式。在解決中心點(diǎn)預(yù)測(cè)的任務(wù)是,這里采用的是focal loss,x、y表示了點(diǎn)在heatmap上的位置,c是類別。Y是屬于0,1的峰值圖, 是渲染了高斯形狀的凸起的峰值,對(duì)每一個(gè)位置,如果它在某個(gè)類別數(shù)存在中心點(diǎn),在對(duì)應(yīng)的channel上就會(huì)形成一個(gè)峰,我們對(duì)每個(gè)位置取出最大的坡高。其中p表示中心點(diǎn),q為位置。我們得到這些最大坡高之后,放到1個(gè)通道的heatmap中,做為網(wǎng)絡(luò)輸入的一部分。和上一幀的三通道的圖片,就組成了前面說(shuō)的,在解決tracking任務(wù)時(shí),新增的4個(gè)channel的輸入。對(duì)長(zhǎng)寬和偏移量的損失計(jì)算,用的就是簡(jiǎn)單的L1 loss。有了足夠好的偏移量預(yù)測(cè),網(wǎng)絡(luò)就可以去關(guān)聯(lián)前一時(shí)刻的目標(biāo)。對(duì)于每個(gè)檢測(cè)位置p,我們將它與之前最近的物體賦予同一個(gè)id,如果在一個(gè)半徑κ中,沒(méi)有前一個(gè)時(shí)刻的目標(biāo),我們就生成一個(gè)新的追蹤。FairMOT也是基于CenterNet的工作,和CenterTrack是同期的。與CenterTrack引入目標(biāo)框在前后幀中的移動(dòng)距離偏置不同,它借鑒了重識(shí)別的想法,在檢測(cè)的分支上,加入了一個(gè)Re-ID的分支,它將目標(biāo)的id識(shí)別的embedding作為分類任務(wù)。在訓(xùn)練時(shí),所有訓(xùn)練集中具有相同id的所有對(duì)象實(shí)例都被視為一個(gè)類。通過(guò)給特征圖上的每一個(gè)點(diǎn),附上一個(gè)128維的Embedding向量,最后將這個(gè)向量映射到每一個(gè)類的分?jǐn)?shù)p(k)。其中k是類別數(shù)(即出現(xiàn)過(guò)的id), 是gt的one-hot的編碼,最后用softmax 計(jì)算loss。2020-7-24更新:可能有人會(huì)對(duì)這里的embedding映射到分類的做法,提出一些質(zhì)疑,當(dāng)在后續(xù)幀中出現(xiàn)大量新的人的時(shí)候,F(xiàn)airMot能給這些新的人賦予一正確的新id嗎?作者在解決這個(gè)問(wèn)題的時(shí)候,在訓(xùn)練的時(shí)候采用的是分類loss,測(cè)試階段采取用cos距離做判斷。并且,當(dāng)reid不可靠的時(shí)候,就用bbox IOU來(lái)匹配。具體地,對(duì) reid embedding沒(méi)匹配上bbox,用IOU得到前一幀中可能的追蹤框,計(jì)算他們之間的相似度矩陣,最后用匈牙利算法得到最后的結(jié)果。最后附上在本次學(xué)習(xí)梳理的過(guò)程中,讓我受益的一些技術(shù)文鏈接:陀飛輪:目標(biāo)檢測(cè):Anchor-Free時(shí)代FY.Wei:利用Point-set Anchor統(tǒng)一物體檢測(cè),實(shí)例分割,以及人體姿態(tài)估計(jì)陳愷:物體檢測(cè)的輪回:anchor-based 與 anchor-free https://zhuanlan.zhihu.com/p/62372897
本文僅做學(xué)術(shù)分享,如有侵權(quán),請(qǐng)聯(lián)系刪文。
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。