目標檢測、實例分割、旋轉框樣樣精通!詳解高性能檢測算法 RTMDet(1)
因此,我們對目前的單階段目標檢測器進行了全面的改進:從增強模型的特征提取能力和對各個組件的計算量進行均衡化,到使用動態的軟標簽來優化訓練策略,再到對數據增強的效率和性能進行改進,我們對算法的各個方面都提出了新的優化方案。
通過這些改進,我們得到了從 tiny 到 extra-large 大小的一系列高性能檢測模型,我們將這套實時目標檢測模型(Real-Time Models for object Detection)命名為 RTMDet。
其中,RTMDet-x 取得了 52.8 mAP 的精度和 300+FPS 的運行速度,同時,RTMDet-tiny 在僅有 4M 參數量的情況下達到了 41.1 mAP 的精度,超越了同級別的所有模型。RTMDet 不僅僅在目標檢測這一任務上性能優異,在實時實例分割以及旋轉目標檢測這兩個任務中也同樣達到了 SOTA 的水平!
除了擁有超高的精度,RTMDet 的工程優化也非常全面:基于 MMDeploy,RTMDet 全系列已經支持了 ONNXRuntime 以及 TensorRT 等推理框架的部署。同時,為了節約廣大煉丹師的寶貴時間,RTMDet 的訓練效率也同樣進行了大幅的優化,我們在 MMYOLO 中提供了高效訓練版本的代碼,RTMDet-s 訓練 300 epoch 僅需 14 × 8GPU 時!
檢測和實例分割模型代碼已開源至:
https://github.com/open-mmlab/mmdetection/tree/3.x/configs/rtmdet
基于 MMYOLO 的高效訓練版本:
https://github.com/open-mmlab/mmyolo/tree/dev/configs/rtmdet
基于 MMRotate 的旋轉框檢測模型:
https://github.com/open-mmlab/mmrotate/tree/1.x/configs/rotated_rtmdet
技術報告鏈接:
https://arxiv.org/abs/2212.07784
話不多說,接下來就讓我們來詳細了解 RTMDet 在各方面的改進吧~算法和工程優化詳解
模型結構設計
擁有一個高效的模型結構是設計實時目標檢測器最關鍵的問題之一。自 YOLOv4 將 Cross Stage Partial Network 的結構引入 DarkNet 之后,CSPDarkNet 因其簡潔高效而被廣泛應用于 YOLO 系列的各個改進版中。而 RTMDet 也將 CSPDarkNet 作為基線,并使用同樣構建單元組成的 CSPPAFPN 進行多尺度的特征融合,最后將特征輸入給不同的檢測頭,進行目標檢測、實例分割和旋轉框檢測等任務。整體的模型結構如下圖所示:
首先讓我們回顧一下 DarkNet 基本的構建單元,如圖 2.(a) 所示,它由 1 個 1x1 的卷積和 1 個 3x3 的卷積組成,以及殘差連接組成。為了提升基本單元的特征提取能力,我們選擇引入更大的卷積核來增大感受野。
在經過對不同 kernel size 的消融實驗(表 1)后我們發現,在基本單元中加入一個 5x5 的深度可分離卷積,取得了最好的計算效率與精度的平衡。新的基礎單元結構如 圖 2.(b) 所示。
然而,重參數化也有其弊端,比如會明顯增加訓練的顯存開銷,同時也會導致使用低精度對模型進行量化時產生較大的性能下降。盡管可以通過 QAT 等方式解決量化掉點的問題,但這也使得從模型訓練到部署的流程變得更為復雜。
因此,我們認為引入大卷積核增加感受野的方式相比引入重參數化來說,不論是從訓練還是部署都能夠提供更好的效果。
除了基本構建單元的修改之外,RTMDet 還對整個模型的不同分辨率層級之間、以及 backbone 和 neck 之間的計算量分配上進行了全面的調整。
由于在基本單元中引入了深度可分離卷積,使得模型整體的層數相比于 CSPDarkNet 來說變得更深,從而導致推理速度的減慢。
為了解決這一問題,我們對模型不同分辨率層級的基本單元數量進行了調整,從原本 C2~C5 分別為 3-9-9-3 個 block,調整為了 3-6-6-3 個 block
然而,過多的特征層之間的連接會顯著增加顯存的占用,也會因為訪存問題而增加推理耗時。因此,我們選擇僅通過增加 neck 模塊的計算量占比來提升其性能,當 backbone 與 neck 的參數量調整至相似時,整個檢測器的推理速度更快,性能也更高:
但是,由于不同層級之間特征的統計量仍存在差異,Normalization layer 依然是必須的,由于直接在共享參數的檢測頭中引入 BN 會導致其滑動平均值產生誤差,而引入 GN 又會增加推理時的開銷,因此我們參考 NASFPN 的做法,讓檢測頭共享卷積層,而 BN 則分別獨立計算。
在使用共享的檢測頭后,模型的參數量得到了減少,而且性能非但沒有下降,反而還得到了略微的提升:
訓練策略優化
正負樣本的標簽分配策略是目標檢測訓練過程中最重要的一環,近幾年來,標簽分配策略從最初的基于 anchor IoU 的靜態匹配方式,逐漸演進為使用代價函數進行動態標簽分配。然而,目前主流的動態標簽分配策略,如匈牙利匹配、OTA 等均使用與損失函數一致的函數計算代價矩陣。
我們經過實驗發現,與損失函數完全一致的代價矩陣計算方式并不是最優的。因此,RTMDet 基于 YOLOX 的 SimOTA 進行改進,使用了動態的軟標簽分配策略,其代價矩陣計算公式如下:
因此我們參考 GFL,將預測框與 Ground Truth 的 IoU 得分作為軟標簽,并對不同得分的匹配進行了重新加權,使得分類代價的匹配結果更為準確和穩定,其公式如下:
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。