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