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