【論文解讀】OneNet:一階段的端到端物體檢測器,無需NMS
導(dǎo)讀
將分類損失引入到正樣本的匹配過程中,每個gt只匹配一個正樣本,簡單的兩個改動,消除了冗余的預(yù)測框,去掉了NMS。
論文:https://arxiv.org/abs/2012.05780
代碼:https://github.com/PeizeSun/OneNet
后臺回復(fù)“onenet”,獲取下載好的論文和代碼。
摘要:端到端物體檢測的主要障礙在于ground truth的標簽分配以及去除NMS上。目前在做標簽分配的時候,只是通過位置來匹配,沒有使用分類,這導(dǎo)致了在推理的時候會出現(xiàn)高置信度的冗余的框,這就需要在后處理的時候使用NMS。我們提出了一種方法,對于一個groundtruth,只分配一個正樣本,其他的都是負樣本。為了驗證我們的方法的有效性,我們設(shè)計了一個非常簡單的模型,叫做OneNet,這個模型可以避免生成冗余的框,所以不需要NMS。
1. 介紹
在當前的目標檢測方法中,標簽的匹配是一個非常重要的環(huán)節(jié),目前的匹配方式主要基于IoU,當候選框和gt的IoU高于設(shè)定的閾值時,則匹配為正樣本,我們把這種方式稱為“框分配”。在進行框匹配時,需要預(yù)設(shè)大量的anchor框,而anchor框的大小,比例,對于性能的影響是很大的,而且需要手工的去設(shè)計這些anchor框。于是,后來有了anchor free的方法,這種方法將網(wǎng)格點作為樣本,看網(wǎng)格點與目標點的距離以及網(wǎng)格點是否在目標內(nèi)部來判斷是否為正樣本。我們將這種方式稱為“點分配”。
這兩種方法都有一個共同的問題,就是“多對一”,對于一個gt,可以有超過一個正樣本與之匹配。這樣使得模型的性能對于超參數(shù)很敏感,而且容易產(chǎn)生冗余的檢測結(jié)果,這就需要在后處理的時候必須去使用NMS。
于是最近出現(xiàn)了一對一的匹配的方法,很有前途,直接給出結(jié)果,不需要NMS。如果直接在一階段的方法中使用一對一的話,性能會很差,而且在推理的時候,還是會出現(xiàn)冗余的框,所以還是需要NMS。我們發(fā)現(xiàn),在標簽分配的時候,缺少分類損失是一階段檢測器去除NMS的主要問題。因此,我們設(shè)計了一個簡單的標簽分配策略,叫做Minimum Cost Assignment,具體來說,對于每個gt框,只有一個具有最小的分類和定位損失的樣本被分配為正樣本。見圖2(c)。

我們?yōu)镺neNet總結(jié)了幾條優(yōu)點:
整個網(wǎng)絡(luò)是個全卷積結(jié)構(gòu),端到端的,沒有任何的ROI和注意力交互之類的操作。 標簽的分配基于分類和定位的最小損失,而不是手工設(shè)計的規(guī)則。 不需要后處理,比如NMS或者是最大池化。
2. 標簽分配
2.1 匹配損失
之前方法是通過IoU或者是點的距離來進行匹配的,我們把這種方式總結(jié)為位置損失,位置損失定義為:

其中,是IoU損失,是L1損失,在框分配中,,在點分配中,。
但是,檢測是個多任務(wù),既有分類又有回歸,所以只使用位置損失并不是最優(yōu)的,會導(dǎo)致高置信度的冗余框的出現(xiàn),導(dǎo)致后處理的時候需要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是一個端到端的結(jié)構(gòu),具體的pipeline如圖3:

backbone:這里的backbone包括主干網(wǎng)絡(luò)和一個FPN,最后只輸出了一張?zhí)卣鲌D,尺寸為H/4xW/4。
head:head包括兩個并行的分支,分別進行分類和回歸。
訓(xùn)練:標簽分配的方法使用最小損失方法,訓(xùn)練損失和匹配損失類似,包括Focal Loss,L1 Loss, GIoU Loss。
推理:最后的輸出直接就是按照得分進行排序,取TopK,不需要后處理NMS或者max-pooling。
3.1 多頭訓(xùn)練
還有一種可選的策略叫做多頭訓(xùn)練,包括了一個級聯(lián)的預(yù)測頭和共享的權(quán)重。如圖4:

Cascading heads:在第一個stage中,特征圖用F0來表示,將F0的channel維度C廣播為2C,得到維度為H/4xW/4x2C,然后通過卷積得到F1,F(xiàn)1的維度為H/4xW/4xC,然后基于F1進行分類和回歸,對于后面的stage j,原始的特征F0和前一個stage的特征Fj-1拼接起來,得到的維度為H/4xW/4x2C,然后再卷積得到Fj,維度為H/4xW/4xC,然后基于Fj進行分類和回歸。
Weight-sharing:分類的卷積和回歸的卷積在每個頭中進行權(quán)重共享。
單純的引入這個多頭訓(xùn)練在精度上并沒有什么提升,而且速度還會變慢,之所以這么做是為了引入另外兩個修改,大的學(xué)習(xí)率和單頭推理。
Large learning rate:增大學(xué)習(xí)率是有可能提高精度的,但是直接增加學(xué)習(xí)率會導(dǎo)致訓(xùn)練不穩(wěn)定,所以需要使用級聯(lián)的頭和共享的權(quán)重,這樣增大學(xué)習(xí)率也可以穩(wěn)定的訓(xùn)練,同時提高精度。
Single-head Inference:在推理的時候,只使用第一個stage,其他的不使用,相比多頭推理,只有非常微小的精度損失。我們的實驗表明,使用多頭訓(xùn)練和大學(xué)習(xí)率可以提高AP一個點。
4. 實驗
4.1 正樣本的可視化
我們對OneNet和CenterNet的正樣本進行了可視化的對比,如下圖,在CenterNet中,正樣本都在gt框附件的網(wǎng)格點上,這種方法對框的回歸是有好處的,但是對正負樣本的分類并不是最好的選擇,比如第一列圖片上的人,第一排是CenterNet的框,由于人身體的扭曲,導(dǎo)致了網(wǎng)格點定位到了人身體的邊緣上,并不是特征區(qū)分最明顯的區(qū)域。而對于OneNet,可以看到,正樣本定位到了人的身體上,是最具特征區(qū)分性的地方。

4.2 消融實驗
表1進行了標簽分配的方案的有效性的對比:

多頭訓(xùn)練的效果對比:

圖像尺寸的對比:

訓(xùn)練策略的對比:

和CenterNet的對比:

在其他方法上使用的對比:


論文鏈接:https://arxiv.org/abs/2012.05780
往期精彩回顧
獲取本站知識星球優(yōu)惠券,復(fù)制鏈接直接打開:
https://t.zsxq.com/qFiUFMV
本站qq群704220115。
加入微信群請掃碼:

