干貨實踐 | Anchor優化后在目標檢測提升這么明顯
目標檢測發展已經到了一個瓶頸,但是依然有很多優秀的產出,比如最近比較火熱的“Anchor—Free”,貌似在該機制下精度有一定程度的提升,今天博主基于之前積累的知識,為大家分享基于Anchor的優化,主要涉及動態特征選擇Anchor,增加深度特征的表示,最終精度大幅度提升。
1.前言
基于無anchor機制的特征選擇模塊,是一個簡單高效的單階段組件,其可以結合特征金字塔嵌入到單階段檢測器中。FSAF解決了傳統基于anchor機制的兩個限制:
(1) 啟發式的特征選擇
(2) overlap-based anchor采樣
FSAF的通用解釋是將在線特征選擇應用于與anchor無關的分支的訓練上。即無anchor的分支添加到特征金字塔的每一層,從而可以以任意層次對box進行編碼解碼。訓練過程中,將每個實例動態的放置在最適合的特征層次上。在進行inference時,FSAF可以結合帶anchor的分支并行的輸出預測結果。FSAF主要包含無anchor分支的實現及在線特征選擇兩部分。FSAF結合RetinaNet在COCO檢測任務上實現更高的準確率及速度,獲得了44.6%的mAP,超過了當前存在的單階段檢測網絡。
但是,除了Anchor-Free,其實大部分檢測框架中使用的還是Anchor機制,在詳細分享今天的干貨之前,和大家預熱下 Anchor refinement module (ARM)。
RefineDet中使用ARM模塊對anchor進行微調,然后將微調后的anchor送到ODM模塊中進一步的預測。但是,對比ODM模塊和SSD就會發現。ODM中輸入的anchor尺寸不在是固定的,而是經過調整之后的。也就是說,在SSD中anchor的W,H是一個標量,但在ODM卻成了一個變量。更為重要的是,anchor成為一個變量后,ODM中的輸入并沒有發生變化,依舊是原始未經過調整anchor對應的feature-map,這種不對等性限制了網絡的性能。
所以Anchor的設計對One-Stage網絡的性能至關重要!
就如上述所說,ARM被提出來調整默認anchor的初始化,為檢測器提供了更好的anchor參考。然而,這個模塊帶來了另一個問題:特征映射中的所有像素都具有相同的感受野,而與每個像素相關聯的anchor具有不同的位置和大小。這種不一致可能導致不太有效的檢測結果。
于是,我想是不是應該有一個動態特征選擇操作,在一個特征映射中選擇新的像素,從中獲取最佳的anchor。根據新的anchor點位置和大小選擇像素,使這些像素的感受野能夠很好地適應anchor區域,這使得檢測器,特別是回歸部分更容易優化。此外,為了提高所選特征像素的表達能力,還設計了一個雙向特征融合模塊,將早期和深層特征相結合。
在One-Stage中,SSD和Yolo是大家常見的檢測框架,今天我就以SSD為例,和大家詳細說下具體細節!
ARM是One-Stage檢測器中使用的類似RPN模塊,是[Shifeng Zhang, Longyin Wen, Xiao Bian, Zhen Lei, and Stan Z Li. Single-shot refinement neural network for object detection. In Proceedings of the IEEE conference on computer vision and pattern recognition, 2018]首先提出的。它在多尺度檢測框架下,在每個 detection source layer上附加兩個卷積核。ARM的主要目的是為每個anchor分配背景/前景分數和預測調整的位置。利用二進制分類分數篩選出負樣本,并將細化的anchor發送到最終的目標檢測模塊(ODM),與SSD中的檢測器頭完全相同。為了更好地分析ARM對探測器的影響,首先給出了探測器頭的邊界框回歸和分類的定義。
Bounding box regression
從上面的分析可以看出,ARM將導致輸入特征點的感受野與其相關的新細化anchor之間的不一致。這種不一致可能導致次優檢測器,特別是對于回歸部分。
一種簡單的解決方案是基于anchor的新形狀動態采樣檢測器頭的特征點。這樣,特征點就能夠感知anchor的存在。特征選擇函數可以寫成如下:
整體的框架就差不多了,之后進行簡單的實驗測試,驗證其是否具有較好的性能!
上表是在VOC數據集中測試,使用的是SSD512網絡。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。