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