博客專欄

EEPW首頁 > 博客 > YOLOv10 解析與地平線 征程 6 模型量化

YOLOv10 解析與地平線 征程 6 模型量化

發(fā)布人:地平線開發(fā)者 時(shí)間:2025-03-22 來源:工程師 發(fā)布文章

# 一,YOLOv10 解析


## 1.簡介


近些年來,研究人員對(duì) YOLO 的架構(gòu)設(shè)計(jì)、優(yōu)化目標(biāo)、數(shù)據(jù)增強(qiáng)策略等進(jìn)行了探索,取得了顯著進(jìn)展。然而,后處理對(duì)非極大值抑制(NMS)的依賴阻礙了 YOLO 的端到端部署,并對(duì)推理延遲產(chǎn)生不利影響。此外,YOLO 中各個(gè)組件的設(shè)計(jì)缺乏全面徹底的檢查,導(dǎo)致明顯的計(jì)算冗余并限制了模型的能力。


YOLOv10 的突破就在于從后處理和模型架構(gòu)方面進(jìn)一步提升了 YOLO 的性能 - 效率邊界。


為此,研究團(tuán)隊(duì)**首次提出了** **YOLO** **無 NMS 訓(xùn)練的一致雙重分配(consistent dual assignment)**,這使得 YOLO 在性能和推理延遲方面有所改進(jìn)。


研究團(tuán)隊(duì)為 YOLO 提出了整體效率 - 準(zhǔn)確率驅(qū)動(dòng)的模型設(shè)計(jì)策略,從效率和準(zhǔn)確率兩個(gè)角度全面優(yōu)化 YOLO 的各個(gè)組件,大大降低了計(jì)算開銷并增強(qiáng)了模型能力。


大量實(shí)驗(yàn)表明,YOLOv10 在各種模型規(guī)模上都實(shí)現(xiàn)了 SOTA 性能和效率。例如,YOLOv10-S 在 COCO 上的類似 AP 下比 RT-DETR-R18 快 1.8 倍,同時(shí)參數(shù)數(shù)量和 FLOP 大幅減少。與 YOLOv9-C 相比,在性能相同的情況下,YOLOv10-B 的延遲減少了 46%,參數(shù)減少了 25%。


![img](https://i-blog.csdnimg.cn/img_convert/0a98bab652ecb0dc193a8f1a3f67f7d6.png)


## 2.**方法介紹**


為了實(shí)現(xiàn)整體效率 - 準(zhǔn)確率驅(qū)動(dòng)的模型設(shè)計(jì),研究團(tuán)隊(duì)從效率、準(zhǔn)確率兩方面分別提出改進(jìn)方法。


為了提高效率,該研究提出了輕量級(jí)分類 head、空間通道(spatial-channel)解耦下采樣和排序指導(dǎo)的塊設(shè)計(jì),以減少明顯的計(jì)算冗余并實(shí)現(xiàn)更高效的架構(gòu)。


為了提高準(zhǔn)確率,研究團(tuán)隊(duì)探索了大核卷積并提出了有效的部分自注意力(partial self-attention,PSA)模塊來增強(qiáng)模型能力,在低成本下挖掘性能改進(jìn)的潛力?;谶@些方法,該團(tuán)隊(duì)成功實(shí)現(xiàn)了一系列不同規(guī)模的實(shí)時(shí)端到端檢測(cè)器,即 YOLOv10-N / S / M / B / L / X。


## 3.**用于無 NMS 訓(xùn)練的一致雙重分配**


在訓(xùn)練期間,YOLO 通常利用 TAL 為每個(gè)實(shí)例分配多個(gè)正樣本。一對(duì)多的分配方式產(chǎn)生了豐富的監(jiān)督信號(hào),促進(jìn)了優(yōu)化并使模型實(shí)現(xiàn)了卓越的性能。


然而,這需要 YOLO 依賴于 NMS 后處理,這導(dǎo)致了部署時(shí)次優(yōu)的推理效率。雖然之前的研究工作探索了一對(duì)一匹配來抑制冗余預(yù)測(cè),但它們通常引入了額外的推理開銷。


與一對(duì)多分配不同,一對(duì)一匹配對(duì)每個(gè) ground truth 僅分配一個(gè)預(yù)測(cè),避免 NMS 后處理。然而,這會(huì)導(dǎo)致弱監(jiān)督,以至于準(zhǔn)確率和收斂速度不理想。幸運(yùn)的是,這種缺陷可以通過一對(duì)多分配來彌補(bǔ)。


該研究提出的「雙標(biāo)簽分配」結(jié)合了上述兩種策略的優(yōu)點(diǎn)。如下圖所示,該研究為 YOLO 引入了另一個(gè)一對(duì)一 head。它保留了與原始一對(duì)多分支相同的結(jié)構(gòu)并采用相同的優(yōu)化目標(biāo),但利用一對(duì)一匹配來獲取標(biāo)簽分配。在訓(xùn)練過程中,兩個(gè) head 聯(lián)合優(yōu)化,以提供豐富的監(jiān)督;在推理過程中,YOLOv10 會(huì)丟棄一對(duì)多 head 并利用一對(duì)一 head 做出預(yù)測(cè)。這使得 YOLO 能夠進(jìn)行端到端部署,而不會(huì)產(chǎn)生任何額外的推理成本。


 


![img](https://i-blog.csdnimg.cn/img_convert/39cca1e2033e01fe3153d5f7ee273818.png)


## 4.**整體效率 - 準(zhǔn)確率驅(qū)動(dòng)的模型設(shè)計(jì)**


除了后處理之外,YOLO 的模型架構(gòu)也對(duì)效率 - 準(zhǔn)確率權(quán)衡提出了巨大挑戰(zhàn)。盡管之前的研究工作探索了各種設(shè)計(jì)策略,但仍然缺乏對(duì) YOLO 中各種組件的全面檢查。因此,模型架構(gòu)表現(xiàn)出不可忽視的計(jì)算冗余和能力受限。


YOLO 中的組件包括 stem、下采樣層、帶有基本構(gòu)建塊的階段和 head。作者主要對(duì)以下三個(gè)部分執(zhí)行效率驅(qū)動(dòng)的模型設(shè)計(jì)。


1. 輕量級(jí)分類 head。

2. 空間通道解耦下采樣。

3. 排序指導(dǎo)的模塊設(shè)計(jì)。


![img](https://i-blog.csdnimg.cn/img_convert/a9eaca6c6fc30704f81a92a49d5acbb6.png)


# 二,yolov10 訓(xùn)練


## 1.下載模型訓(xùn)練代碼。


github 網(wǎng)址:https://github.com/THU-MIG/yolov10


拉取壓縮包如下圖


![img](https://i-blog.csdnimg.cn/img_convert/f92e11960687d35499d46673a2d86072.png)


## 2.搭建 conda 訓(xùn)練環(huán)境


conda activate yolov10 #先激活自己的虛擬環(huán)境


pip install -r requirements.txt #一鍵安裝相應(yīng)的安裝包


 


## 3.設(shè)置數(shù)據(jù)集


我使用的是 coco 數(shù)據(jù)集,如圖


![img](https://i-blog.csdnimg.cn/img_convert/2e7e98e7a707009d6c9a44ac18e843fd.png)


## 4.模型訓(xùn)練,代碼如下圖。


![img](https://i-blog.csdnimg.cn/img_convert/f2b651f688f9a6c4e3743a854768f8a7.png)


## 5.訓(xùn)練之后轉(zhuǎn) onnx 模型。


# 三,yolov10 模型量化


使用的是地平線 征程 6 的 docker,版本是 v3.0.22


## 1.首先進(jìn)行模型檢查。


在浮點(diǎn)模型準(zhǔn)備好之后,我們建議先進(jìn)行快速的模型驗(yàn)證,以確保其符合計(jì)算平臺(tái)的支持約束。啟動(dòng)樣例里面的腳本,修改一下路徑即可,如下圖。如果模型驗(yàn)證不通過,請(qǐng)根據(jù)終端打印或在當(dāng)前路徑下生成的日志文件確認(rèn)報(bào)錯(cuò)信息和修改建議。


![img](https://i-blog.csdnimg.cn/img_convert/c556ef3a56765069cb9b763f21838130.png)


## 2.準(zhǔn)備校準(zhǔn)數(shù)據(jù)集。


PTQ 方案的校準(zhǔn)數(shù)據(jù)一般是從訓(xùn)練集或驗(yàn)證集中篩選 100 份左右(可適當(dāng)增減)的典型數(shù)據(jù),并應(yīng)避免非常少見的異常樣本, 如純色圖片、不含任何檢測(cè)或分類目標(biāo)的圖片等。篩選出的校準(zhǔn)數(shù)據(jù)還需進(jìn)行與模型 inference 前一致的預(yù)處理操作, 處理后保持與原始模型一樣的數(shù)據(jù)類型、layout 和尺寸。


對(duì)于校準(zhǔn)數(shù)據(jù)的預(yù)處理,地平線建議直接參考示例代碼進(jìn)行修改使用,preprocess.py 文件中 的 calibration_transformers 函數(shù)的包含了其校準(zhǔn)數(shù)據(jù)的前處理 transformers,處理完的校準(zhǔn)數(shù)據(jù)與其 yaml 配置文件保持一致,


![aW1hZ2U=.png](https://i-blog.csdnimg.cn/img_convert/fdf17383e29a314d62868690ca2869e3.png)


## 3.編輯 yaml 文件進(jìn)行模型量化編譯


Yaml 配置文件共包含 4 個(gè)必選參數(shù)組和 1 個(gè)可選參數(shù)組, 每個(gè)參數(shù)組下也區(qū)分必選和可選參數(shù)(可選參數(shù)默認(rèn)隱藏), 具體要求和填寫方式可以參考 OE 文檔里的具體章節(jié)。


準(zhǔn)備完校準(zhǔn)數(shù)據(jù)和 yaml 配置文件后,即可一步命令完成模型解析、圖優(yōu)化、校準(zhǔn)、量化、編譯的全流程轉(zhuǎn)換。


![img](https://i-blog.csdnimg.cn/img_convert/a15c3a4d0c82bdd4f2daa426a1bc75d3.png)


## 4.編譯模型結(jié)果查看


轉(zhuǎn)換完成后,會(huì)在 yaml 文件配置的路徑下保存各階段流程產(chǎn)出的模型文件和編譯器預(yù)估的模型 BPU 部分的靜態(tài)性能評(píng)估文件。


各個(gè)算子余弦相似度如圖


![img](https://i-blog.csdnimg.cn/img_convert/5e330354bcaf28cd219c8242843e9519.png))


生成包含模型靜態(tài)性能預(yù)估的 html 和 json 文件,兩者內(nèi)容相同, 但 html 文件的可讀性更好,如下圖。


余弦相似度如圖


[外鏈圖片轉(zhuǎn)存中...(img-410vo2h6-1740490280824)])


生成包含模型靜態(tài)性能預(yù)估的 html 和 json 文件,兩者內(nèi)容相同, 但 html 文件的可讀性更好,如下圖。


![img](https://i-blog.csdnimg.cn/img_convert/56cd6fb5376a6ea1a34b215bc1330661.png)


*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請(qǐng)聯(lián)系工作人員刪除。




相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉