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