最近 Anchor-free (no-prior box)的概念又重新火熱起來,anchor-free的概念從2015年densebox, yolov1開始出現,但一開始效能並不是很好,後來基於anchor(prior box)的概念的檢測演算法如faster rcnn, ssd效能有很大的提升,於是目標檢測從此走進anchor時代,但是最近anchor-free的文章出現很多,目標檢測發現不使用anchor依然可以達到較好的效果。今天要介紹的Dubox和Densebox都是由百度提出的無先驗框的一階段目標檢測演算法。
《DuBox: No-Prior Box Objection Detection via Residual Dual Scale Detectors》
arXiv: https://arxiv.org/abs/1904.06883
github: None
作者團隊:百度
注:2019年04月17日剛出爐的paper
引言:
傳統的神經目標檢測方法使用多尺度特徵,讓多個檢測器獨立並行地在多個分支執行檢測任務。同時,加入先驗框(prior box)提高了演算法處理尺度不變性的能力。然而,過多的先驗框和多個檢測器會增加檢測演算法的計算冗餘度。這篇論文介紹了一種新的一步檢測方法Dubox,它可以在沒有先驗框的情況下檢測物體。設計的雙尺度殘差單元具有多尺度特性,使雙尺度檢測器不再獨立執行。高層檢測器學習低層檢測器的餐叉。Dubox增強了啟發式引導的能力,進一步使第一尺度探測器能夠最大限度地檢測小目標,第二尺度探測器能夠檢測第一尺度探測器無法識別的目標。此外,對於每一個比例探測器,採用新的classification-regression strap loss,使檢測過程不基於先驗框。結合這些策略,檢測演算法在速度和精度方面取得了優異的效能。透過對VOC、COCO目標檢測基準的大量實驗,證實了該演算法的有效性。
標籤和loss設計:
首先對於標籤的設計:
文章定義了在物體框內
為正樣本,其他為負樣本。
熟悉densebox的同學都知道,這種設計和densebox相似,densebox更像分割類演算法,對物體的中心範圍進行迴歸+分類,因為物體內的範圍都是正樣本,其其他範圍為負樣本,為了克服正負樣本波動性所以在正樣本週圍加上了一圈ignore範圍,從而防止梯度的波動。Dubox沒有使用固定的ignore範圍,而是在loss設計時候是有iou gate unit自動的學習ignore範圍。
既只有迴歸框和真值框達到0.5的重合時分類才在該點產生loss,從而達到自動學習ignore範圍的作用。用公式表達就可以寫成:
其中
Dubox框架設計:
Dubox的另一大創新是不再多個分支上獨立並行的使用多個檢測器,而是將檢測器減少到了兩個:
在這種設計中高層的檢測器去檢測底層檢測器無法檢測到的物體,從而最大化檢測效能,
同時論文中為了減少兩個檢測器之間的檢測冗餘,設計了諸多減少冗餘策略,使兩個檢測器之間的檢測冗餘最小,但整體達到了最優效能。
這種設計帶來的好處有以下幾點:
1. 基於分割的檢測使底層檢測效果明顯高於yolo等演算法。這源自於其基於分割的思想。
2. 第二個分支去檢測第一個分支的殘差,使獨立執行變成了協同運作。
3. 整個網路的設計只使用簡單的基本操作,這讓其在部署中有非常大的優勢。
4. 最後一個核心的可能只有經歷過硬體部署的同學才能體會到,那就是更加優秀的int8部署。在部署gpu硬體上一般使用int8加速,但是使用一個分支進行int8進行量化時,有非常大的損失,這種損失可以看作,迴歸範圍被強制對映到256個值,損失是在所難免的。而dubox的設計將兩個分支進行分成無冗餘的兩個分支,兩個分支分別進行int8量化產生的損失非常小甚至幾乎沒有。
實驗:
最終的實驗結果,論文各個部件的消融實驗:
在voc上的速度和效能,達到了82.89的map, 其320x320版本達到了79.31map 和高達50fps的速度。
在coco上的效能:
總結:
Dubox整體上屬於densebox的強化版,進一步加強了其在硬體上的友好性,達到了速度和效能上的最優表現。使用int8量化後的速度會有更大的提升,相對的精度會損失很少,雖然論文中沒有提到,這使dubox的設計更加適用於工程實踐。