目標(biāo)檢測、實(shí)例分割、旋轉(zhuǎn)框樣樣精通!詳解高性能檢測算法 RTMDet(2)
數(shù)據(jù)增強(qiáng)改進(jìn)
數(shù)據(jù)增強(qiáng)不僅關(guān)乎模型的精度,也對訓(xùn)練的效率有著巨大的影響。隨著 GPU 計(jì)算性能的不斷增加,模型前向和反向傳播的速度在不斷提升。
然而,當(dāng)我們在訓(xùn)練工業(yè)級的模型時,由于引入大量的數(shù)據(jù)增強(qiáng),CPU 的計(jì)算能力以及存儲的 IO 往往成為了制約模型訓(xùn)練速度的瓶頸。尤其是當(dāng)使用了 YOLO 系列中廣泛使用的 Mosaic 和 MixUp 這樣涉及到多張圖片混合的數(shù)據(jù)增強(qiáng),由于需要讀取和處理的圖片數(shù)量成倍增加,數(shù)據(jù)增強(qiáng)的耗時也大幅增加。圖 6. Mosaic MixUp 數(shù)據(jù)增強(qiáng)效果圖為了解決多圖混合數(shù)據(jù)增強(qiáng)的耗時問題,我們在這些數(shù)據(jù)增強(qiáng)中引入了緩存機(jī)制。我們使用一個緩存隊(duì)列將歷史的圖片保存下來,當(dāng)需要進(jìn)行圖片混合操作時,不再通過 dataset 重新加載圖片,而是從緩存隊(duì)列中隨機(jī)選取歷史的圖片進(jìn)行混合。
通過實(shí)驗(yàn)發(fā)現(xiàn),當(dāng)緩存隊(duì)列足夠大,且使用隨機(jī)出隊(duì)的方式時,訓(xùn)練得到的模型精度與傳統(tǒng)的 Mosaic & MixUp 并無區(qū)別。由于引入了緩存機(jī)制,兩種數(shù)據(jù)增強(qiáng)的運(yùn)行效率得到了大幅提升。
通過使用 MMDetection 中的 benchmark 工具 tools/analysis_tools/benchmark.py,我們將 RTMDet 與以高效訓(xùn)練著稱的 YOLOv5 的數(shù)據(jù)增強(qiáng)進(jìn)行了對比:
YOLOv5 的數(shù)據(jù)增強(qiáng)(MixUp 概率僅為 0.1)的吞吐量:Overall fps: 30.2 img/s, times per img: 33.1 ms/img;RTMDet 的數(shù)據(jù)增強(qiáng)(MixUp 全程開啟)的吞吐量:Overall fps: 52.4 img/s, times per img: 19.1 ms/img。
除了優(yōu)化數(shù)據(jù)增強(qiáng)的運(yùn)行效率,我們也對數(shù)據(jù)增強(qiáng)的邏輯進(jìn)行了優(yōu)化。我們分析了 YOLOX 的數(shù)據(jù)增強(qiáng)后發(fā)現(xiàn)了其中的問題:YOLOX 使用強(qiáng)弱兩個階段的數(shù)據(jù)增強(qiáng),但其第一個訓(xùn)練階段引入了旋轉(zhuǎn)和切變等操作,導(dǎo)致標(biāo)注框產(chǎn)生了比較大的誤差,使其第二個訓(xùn)練階段需要對回歸分支額外增加一個 L1 loss 來對回歸任務(wù)進(jìn)行修正。這就造成了數(shù)據(jù)增強(qiáng)與模型的損失函數(shù)設(shè)計(jì)產(chǎn)生了耦合。
為了使數(shù)據(jù)增強(qiáng)和模型解耦,得到更通用的增強(qiáng)策略,我們選擇在第一個訓(xùn)練階段不引入導(dǎo)致標(biāo)注誤差的數(shù)據(jù)增強(qiáng),而是通過增加 Mosaic MixUp 混合圖片的數(shù)量來提升強(qiáng)度,我們將總體混合的圖片數(shù)量從 YOLOX 使用的 5 張?jiān)黾又?8 張。
得益于上文提到的緩存機(jī)制,增加混合圖片的數(shù)量并不會導(dǎo)致訓(xùn)練速度變慢。在第二個訓(xùn)練階段,我們關(guān)閉 Mosaic 和 MixUp,轉(zhuǎn)而使用 Large Scale Jitter(LSJ),使模型在更符合原數(shù)據(jù)集特征分布的狀態(tài)下微調(diào)。通過對比實(shí)驗(yàn)可以看出,我們的數(shù)據(jù)增強(qiáng)顯著優(yōu)于之前的方法:表 7. 數(shù)據(jù)增強(qiáng)訓(xùn)練精度對比
最終效果
通過上文的種種改進(jìn),我們最終得到了 RTMDet 系列模型,我們可以將實(shí)驗(yàn)拆解,并逐個應(yīng)用在我們的對照組模型 YOLOX 之上,來解析如何從 YOLOX 一步一步修改為 RTMDet:表 8. 從 YOLOX 到 RTMDet step-by-step 對比首先,為了解決 CosineLr 學(xué)習(xí)率衰減過快以及 SGD 收斂不穩(wěn)定的問題,我們將優(yōu)化器以及學(xué)習(xí)率分別更換為了 AdamW 和 FlatCosineLR,得到了 0.4% 的提升。
然后我們使用新的基礎(chǔ)單元構(gòu)建而成的 backbone 和 neck 替換了原有的模型結(jié)構(gòu),這一改進(jìn)又提升了 1.2% 的 AP,并且推理速度只減慢了 0.02ms。在使用共享權(quán)重的檢測頭后,參數(shù)量過大的問題得到了解決,而模型精度和推理速度都沒有下降。在此基礎(chǔ)之上,我們又增加了動態(tài)軟標(biāo)簽分配策略以及改進(jìn)后的數(shù)據(jù)增強(qiáng),分別帶來了 1.1% 和 1.3% 的精度提升。
最后,錦上添花的一點(diǎn),我們又將 backbone 在 imagenet 上進(jìn)行了預(yù)訓(xùn)練,也使精度得到了略微的提升。不過預(yù)訓(xùn)練模型僅在 tiny 和 s 模型上有精度提升的效果,在更大的模型結(jié)構(gòu)上則體現(xiàn)不出優(yōu)勢。
綜合以上這些修改,RTMDet 相比于 YOLOX 在相似的模型大小以及推理速度上提升了 4.3% AP!
通過調(diào)整深度以及寬度的系數(shù)進(jìn)行模型縮放,我們最終得到了 tiny/s/m/l/x 五種不同大小的模型,在不同量級上均超越了同級別的模型:表 9. RTMDet 與其他同級別模型的性能對比(推理測速使用 3090 GPU,TensorRT 8.4.3)另外,我們還在工業(yè)界常用的 T4 GPU 上進(jìn)行了測速,效果如下表所示:
Model | latency(ms) | FPS |
RTMDet-tiny | 2.34 | 427.35 |
RTMDet-s | 2.96 | 337.84 |
RTMDet-m | 6.41 | 156.01 |
RTMDet-l | 10.32 | 96.90 |
RTMDet-x | 18.80 | 53.19 |
多項(xiàng)任務(wù)取得 SOTA
為了驗(yàn)證 RTMDet 算法的通用性,我們通過僅增加任務(wù)頭的方式,對模型進(jìn)行了最小限度的修改,將其拓展至了實(shí)例分割以及旋轉(zhuǎn)目標(biāo)檢測任務(wù)上。在僅進(jìn)行了非常簡單的修改的情況下,RTMDet 也依然取得了 SOTA 的效果!圖 7. RTMDet 在三種不同任務(wù)上的可視化效果
實(shí)例分割
傳統(tǒng)的實(shí)例分割往往采用雙階段的方式來預(yù)測 mask,但近兩年來,基于 kernel 的方法正逐漸興起。為了保持單階段檢測器的簡潔高效和易于部署的特性,我們參考 CondInst 為 RTMDet 增加了 mask head 以及 kernel head。
mask head 由 4 個卷積層組成,通過 neck 輸出的多尺度特征預(yù)測出維度為 8 的 mask prototype feature。而 kernel head 則為每個 instance 預(yù)測 169 維的向量,從而組成 3 個動態(tài)卷積的卷積核,與 mask feature 進(jìn)行交互,最終得到每個 instance 的 mask。圖 8. RTMDet-Ins 實(shí)例分割分支示意圖為了最大化利用 mask 的標(biāo)注信息,我們還將標(biāo)簽分配中的中心先驗(yàn)代價的檢測框中心修改為了 mask 的重心。為了與其他實(shí)例分割方法做公平對比,我們使用 ResNet50 FPN 12 epoch 的標(biāo)準(zhǔn) setting 進(jìn)行了實(shí)驗(yàn),同時參考 CondInst 加入了語義分割的輔助分支加快收斂。
實(shí)驗(yàn)結(jié)果表明,我們的方法在標(biāo)準(zhǔn) setting 下,不僅超越了 CondInst,SOLOv2 等單階段模型,也超越了 Cascade Mask R-CNN 這樣的多階段模型。在使用與 RTMDet 一致的模型結(jié)構(gòu)以及訓(xùn)練策略后,得到的 RTMDet-Ins 模型,精度不僅大幅超越 YOLOv5-seg,也超越了前幾天剛剛推出的 YOLOv8,取得了實(shí)時實(shí)例分割的 SOTA。表 11. RTMDet-Ins 與其他實(shí)例分割算法的性能對比
旋轉(zhuǎn)目標(biāo)檢測
旋轉(zhuǎn)目標(biāo)檢測是遙感領(lǐng)域使用最廣泛的方法,而將 RTMDet 拓展至此任務(wù)也非常簡單,得益于 MMDetection 3.0 版本,我們只需要增加回歸分支的輸出特征維度,增加角度分量,同時更換 box 的編****,便能讓 RTMDet 支持預(yù)測旋轉(zhuǎn)框。由于旋轉(zhuǎn)框與普通目標(biāo)檢測任務(wù)僅有回歸分支有差異,因此旋轉(zhuǎn)框的模型也能夠加載目標(biāo)檢測的預(yù)訓(xùn)練模型并從中受益。
我們在遙感領(lǐng)域最常用的 DOTA 數(shù)據(jù)集上驗(yàn)證了我們的方法,結(jié)果表明,我們的模型不僅超越了眾多的多階段方法,也超越了之前最優(yōu)的算法 PPYOLOE-R,成為了 SOTA。圖 9. RTMDet-R 與其他旋轉(zhuǎn)目標(biāo)檢測方法在 DOTA 數(shù)據(jù)集上的對比
為了驗(yàn)證模型的泛化能力,我們還在 DOTA 1.5 以及 HRSC 兩個數(shù)據(jù)集上進(jìn)行了訓(xùn)練,也同樣取得了最優(yōu)的結(jié)果。表 12. RTMDet-R 在 DOTA 1.5 上的性能表 13. RTMDet-R 在 HRSC 上的性能,僅使用 tiny 模型就超越了之前的多階段算法
總結(jié)
通過在模型結(jié)構(gòu)的基本單元引入大 kernel 深度可分離卷積增大感受野,并平衡不同分辨率層級間以及 backbone 和 neck 間的計(jì)算量、參數(shù)量平衡,改進(jìn)標(biāo)簽分配以及數(shù)據(jù)增強(qiáng)策略,RTMDet 不論是在目標(biāo)檢測任務(wù)上,還是在實(shí)例分割以及旋轉(zhuǎn)目標(biāo)檢測任務(wù)上,均取得了優(yōu)異的性能。
我們希望我們探索出的這些改進(jìn)方案能夠?qū)υO(shè)計(jì)實(shí)時的目標(biāo)檢測模型有所啟發(fā),也希望我們在工程及算法上的優(yōu)化能夠在實(shí)際的工業(yè)場景中有所應(yīng)用。
最后,別忘了給 MMDetection、MMYOLO、MMRotate 點(diǎn)個 Star 哦~
*博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。
傳感器相關(guān)文章:傳感器工作原理
風(fēng)速傳感器相關(guān)文章:風(fēng)速傳感器原理 全息投影相關(guān)文章:全息投影原理