【论文解读】OneNet:一阶段的端到端物体检测器,无需NMS
導讀
將分類損失引入到正樣本的匹配過程中,每個gt只匹配一個正樣本,簡單的兩個改動,消除了冗余的預測框,去掉了NMS。
論文:https://arxiv.org/abs/2012.05780
代碼:https://github.com/PeizeSun/OneNet
后臺回復“onenet”,獲取下載好的論文和代碼。
摘要:端到端物體檢測的主要障礙在于ground truth的標簽分配以及去除NMS上。目前在做標簽分配的時候,只是通過位置來匹配,沒有使用分類,這導致了在推理的時候會出現高置信度的冗余的框,這就需要在后處理的時候使用NMS。我們提出了一種方法,對于一個groundtruth,只分配一個正樣本,其他的都是負樣本。為了驗證我們的方法的有效性,我們設計了一個非常簡單的模型,叫做OneNet,這個模型可以避免生成冗余的框,所以不需要NMS。
1. 介紹
在當前的目標檢測方法中,標簽的匹配是一個非常重要的環節,目前的匹配方式主要基于IoU,當候選框和gt的IoU高于設定的閾值時,則匹配為正樣本,我們把這種方式稱為“框分配”。在進行框匹配時,需要預設大量的anchor框,而anchor框的大小,比例,對于性能的影響是很大的,而且需要手工的去設計這些anchor框。于是,后來有了anchor free的方法,這種方法將網格點作為樣本,看網格點與目標點的距離以及網格點是否在目標內部來判斷是否為正樣本。我們將這種方式稱為“點分配”。
這兩種方法都有一個共同的問題,就是“多對一”,對于一個gt,可以有超過一個正樣本與之匹配。這樣使得模型的性能對于超參數很敏感,而且容易產生冗余的檢測結果,這就需要在后處理的時候必須去使用NMS。
于是最近出現了一對一的匹配的方法,很有前途,直接給出結果,不需要NMS。如果直接在一階段的方法中使用一對一的話,性能會很差,而且在推理的時候,還是會出現冗余的框,所以還是需要NMS。我們發現,在標簽分配的時候,缺少分類損失是一階段檢測器去除NMS的主要問題。因此,我們設計了一個簡單的標簽分配策略,叫做Minimum Cost Assignment,具體來說,對于每個gt框,只有一個具有最小的分類和定位損失的樣本被分配為正樣本。見圖2(c)。
我們為OneNet總結了幾條優點:
整個網絡是個全卷積結構,端到端的,沒有任何的ROI和注意力交互之類的操作。
標簽的分配基于分類和定位的最小損失,而不是手工設計的規則。
不需要后處理,比如NMS或者是最大池化。
2. 標簽分配
2.1 匹配損失
之前方法是通過IoU或者是點的距離來進行匹配的,我們把這種方式總結為位置損失,位置損失定義為:
其中,是IoU損失,是L1損失,在框分配中,,在點分配中,。
但是,檢測是個多任務,既有分類又有回歸,所以只使用位置損失并不是最優的,會導致高置信度的冗余框的出現,導致后處理的時候需要NMS。因此,我們把分類損失引入匹配損失中,定義如下:
2.2 最小損失分配
下面的算法顯示了最小損失的例子,分類損失使用交叉熵,定位損失使用L1。在dense的檢測器中,分類損失可以使用Focal Loss,定位損失可以同時包含L1和GIoU Loss。
#?For?simplicity, #?cross?entropy?loss?as?classification?cost #?L1?loss?as?location?cost #?Input: #?class_pred,?box_pred:?network?output(HxWxK,?HxWx4) #?gt_label,?gt_box:?ground-truth?(N,?Nx4) #?Output: #?src_ind:?index?of?positive?sample?in?HW?sequence(N) #?tgt_ind:?index?of?corresponding?ground-truth?(N) #?flattened?class:?HWxK output_class?=?class_pred.view(-1,?K) #?flattened?box:?HWx4 output_box?=?box_pred.view(-1,?4) #?classification?cost:?HWxN cost_class?=?-torch.log(output_class[:,?gt_label]) #?location?cost:?HWxN cost_loc?=?torch.cdist(out_box,?gt_bbox,?p=1) #?cost?matrix:?HWxN cost_mat?=?cost_class?+?cost_loc #?index?of?positive?sample:?N _,?src_ind?=?torch.min(cost_mat,?dim=0) #?index?of?ground-truth:?N tgt_ind?=?torch.arange(N)定義如下:
3. OneNet
OneNet是一個端到端的結構,具體的pipeline如圖3:
backbone:這里的backbone包括主干網絡和一個FPN,最后只輸出了一張特征圖,尺寸為H/4xW/4。
head:head包括兩個并行的分支,分別進行分類和回歸。
訓練:標簽分配的方法使用最小損失方法,訓練損失和匹配損失類似,包括Focal Loss,L1 Loss, GIoU Loss。
推理:最后的輸出直接就是按照得分進行排序,取TopK,不需要后處理NMS或者max-pooling。
3.1 多頭訓練
還有一種可選的策略叫做多頭訓練,包括了一個級聯的預測頭和共享的權重。如圖4:
Cascading heads:在第一個stage中,特征圖用F0來表示,將F0的channel維度C廣播為2C,得到維度為H/4xW/4x2C,然后通過卷積得到F1,F1的維度為H/4xW/4xC,然后基于F1進行分類和回歸,對于后面的stage j,原始的特征F0和前一個stage的特征Fj-1拼接起來,得到的維度為H/4xW/4x2C,然后再卷積得到Fj,維度為H/4xW/4xC,然后基于Fj進行分類和回歸。
Weight-sharing:分類的卷積和回歸的卷積在每個頭中進行權重共享。
單純的引入這個多頭訓練在精度上并沒有什么提升,而且速度還會變慢,之所以這么做是為了引入另外兩個修改,大的學習率和單頭推理。
Large learning rate:增大學習率是有可能提高精度的,但是直接增加學習率會導致訓練不穩定,所以需要使用級聯的頭和共享的權重,這樣增大學習率也可以穩定的訓練,同時提高精度。
Single-head Inference:在推理的時候,只使用第一個stage,其他的不使用,相比多頭推理,只有非常微小的精度損失。我們的實驗表明,使用多頭訓練和大學習率可以提高AP一個點。
4. 實驗
4.1 正樣本的可視化
我們對OneNet和CenterNet的正樣本進行了可視化的對比,如下圖,在CenterNet中,正樣本都在gt框附件的網格點上,這種方法對框的回歸是有好處的,但是對正負樣本的分類并不是最好的選擇,比如第一列圖片上的人,第一排是CenterNet的框,由于人身體的扭曲,導致了網格點定位到了人身體的邊緣上,并不是特征區分最明顯的區域。而對于OneNet,可以看到,正樣本定位到了人的身體上,是最具特征區分性的地方。
4.2 消融實驗
表1進行了標簽分配的方案的有效性的對比:
多頭訓練的效果對比:
圖像尺寸的對比:
訓練策略的對比:
和CenterNet的對比:
在其他方法上使用的對比:
—END—
論文鏈接:https://arxiv.org/abs/2012.05780
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習及深度學習筆記等資料打印機器學習在線手冊深度學習筆記專輯《統計學習方法》的代碼復現專輯 AI基礎下載機器學習的數學基礎專輯 獲取本站知識星球優惠券,復制鏈接直接打開: https://t.zsxq.com/qFiUFMV 本站qq群704220115。加入微信群請掃碼:總結
以上是生活随笔為你收集整理的【论文解读】OneNet:一阶段的端到端物体检测器,无需NMS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 萝卜家园win11系统32位微软原版镜像
- 下一篇: 傲游浏览器记事本怎么打开