作者:楚怡、凱衡等
近日,美團(tuán)視覺智能部研發(fā)了一款致力于工業(yè)應(yīng)用的目標(biāo)檢測框架 YOLOv6,能夠同時專注于檢測的精度和推理效率。在研發(fā)過程中,視覺智能部不斷進(jìn)行了探索和優(yōu)化,同時吸取借鑒了學(xué)術(shù)界和工業(yè)界的一些前沿進(jìn)展和科研成果。在目標(biāo)檢測權(quán)威數(shù)據(jù)集 COCO 上的實驗結(jié)果顯示,YOLOv6 在檢測精度和速度方面均超越其他同體量的算法,同時支持多種不同平臺的部署,極大簡化工程部署時的適配工作。特此開源,希望能幫助到更多的同學(xué)。
1. 概述
YOLOv6 是美團(tuán)視覺智能部研發(fā)的一款目標(biāo)檢測框架,致力于工業(yè)應(yīng)用。本框架同時專注于檢測的精度和推理效率,在工業(yè)界常用的尺寸模型中:YOLOv6-nano 在 COCO 上精度可達(dá) 35.0% AP,在 T4 上推理速度可達(dá) 1242 FPS;YOLOv6-s 在 COCO 上精度可達(dá) 43.1% AP,在 T4 上推理速度可達(dá) 520 FPS。在部署方面,YOLOv6 支持 GPU(TensorRT)、CPU(OPENVINO)、ARM(MNN、TNN、NCNN)等不同平臺的部署,極大地簡化工程部署時的適配工作。目前,項目已開源至Github,傳送門:??YOLOv6??。歡迎有需要的小伙伴們Star收藏,隨時取用。
精度與速度遠(yuǎn)超 YOLOv5 和 YOLOX 的新框架
目標(biāo)檢測作為計算機(jī)視覺領(lǐng)域的一項基礎(chǔ)性技術(shù),在工業(yè)界得到了廣泛的應(yīng)用,其中 YOLO 系列算法因其較好的綜合性能,逐漸成為大多數(shù)工業(yè)應(yīng)用時的首選框架。至今,業(yè)界已衍生出許多 YOLO 檢測框架,其中以 YOLOv5[1]、YOLOX[2] 和 PP-YOLOE[3] 最具代表性,但在實際使用中,我們發(fā)現(xiàn)上述框架在速度和精度方面仍有很大的提升的空間。基于此,我們通過研究并借鑒了業(yè)界已有的先進(jìn)技術(shù),開發(fā)了一套新的目標(biāo)檢測框架——YOLOv6。該框架支持模型訓(xùn)練、推理及多平臺部署等全鏈條的工業(yè)應(yīng)用需求,并在網(wǎng)絡(luò)結(jié)構(gòu)、訓(xùn)練策略等算法層面進(jìn)行了多項改進(jìn)和優(yōu)化,在 COCO 數(shù)據(jù)集上,YOLOv6 在精度和速度方面均超越其他同體量算法,相關(guān)結(jié)果如下圖 1 所示:

圖1-1 YOLOv6 各尺寸模型與其他模型性能對比

圖1-2 YOLOv6 與其他模型在不同分辨率下性能對比圖 1-1 展示了不同尺寸網(wǎng)絡(luò)下各檢測算法的性能對比,曲線上的點分別表示該檢測算法在不同尺寸網(wǎng)絡(luò)下(s/tiny/nano)的模型性能,從圖中可以看到,YOLOv6 在精度和速度方面均超越其他 YOLO 系列同體量算法。圖 1-2 展示了輸入分辨率變化時各檢測網(wǎng)絡(luò)模型的性能對比,曲線上的點從左往右分別表示圖像分辨率依次增大時(384/448/512/576/640)該模型的性能,從圖中可以看到,YOLOv6 在不同分辨率下,仍然保持較大的性能優(yōu)勢。
2. YOLOv6關(guān)鍵技術(shù)介紹
YOLOv6 主要在 Backbone、Neck、Head 以及訓(xùn)練策略等方面進(jìn)行了諸多的改進(jìn):
- 我們統(tǒng)一設(shè)計了更高效的 Backbone 和 Neck :受到硬件感知神經(jīng)網(wǎng)絡(luò)設(shè)計思想的啟發(fā),基于 RepVGG style[4] 設(shè)計了可重參數(shù)化、更高效的骨干網(wǎng)絡(luò) EfficientRep Backbone 和 Rep-PAN Neck。
- 優(yōu)化設(shè)計了更簡潔有效的 Efficient Decoupled Head,在維持精度的同時,進(jìn)一步降低了一般解耦頭帶來的額外延時開銷。
- 在訓(xùn)練策略上,我們采用Anchor-free 無錨范式,同時輔以 SimOTA[2] 標(biāo)簽分配策略以及 SIoU[9] 邊界框回歸損失來進(jìn)一步提高檢測精度。
2.1 Hardware-friendly 的骨干網(wǎng)絡(luò)設(shè)計
YOLOv5/YOLOX 使用的 Backbone 和 Neck 都基于 CSPNet[5] 搭建,采用了多分支的方式和殘差結(jié)構(gòu)。對于 GPU 等硬件來說,這種結(jié)構(gòu)會一定程度上增加延時,同時減小內(nèi)存帶寬利用率。下圖 2 為計算機(jī)體系結(jié)構(gòu)領(lǐng)域中的 Roofline Model[8] 介紹圖,顯示了硬件中計算能力和內(nèi)存帶寬之間的關(guān)聯(lián)關(guān)系。

圖2 Roofline Model 介紹圖
于是,我們基于硬件感知神經(jīng)網(wǎng)絡(luò)設(shè)計的思想,對 Backbone 和 Neck 進(jìn)行了重新設(shè)計和優(yōu)化。該思想基于硬件的特性、推理框架/編譯框架的特點,以硬件和編譯友好的結(jié)構(gòu)作為設(shè)計原則,在網(wǎng)絡(luò)構(gòu)建時,綜合考慮硬件計算能力、內(nèi)存帶寬、編譯優(yōu)化特性、網(wǎng)絡(luò)表征能力等,進(jìn)而獲得又快又好的網(wǎng)絡(luò)結(jié)構(gòu)。對上述重新設(shè)計的兩個檢測部件,我們在 YOLOv6 中分別稱為 EfficientRep Backbone 和 Rep-PAN Neck,其主要貢獻(xiàn)點在于:
- 引入了 RepVGG[4] style 結(jié)構(gòu)。
- 基于硬件感知思想重新設(shè)計了 Backbone 和 Neck。
RepVGG[4] Style 結(jié)構(gòu)是一種在訓(xùn)練時具有多分支拓?fù)洌趯嶋H部署時可以等效融合為單個 3x3 卷積的一種可重參數(shù)化的結(jié)構(gòu)(融合過程如下圖 3 所示)。通過融合成的 3x3 卷積結(jié)構(gòu),可以有效利用計算密集型硬件計算能力(比如 GPU),同時也可獲得 GPU/CPU 上已經(jīng)高度優(yōu)化的 NVIDIA cuDNN 和 Intel MKL 編譯框架的幫助。
實驗表明,通過上述策略,YOLOv6 減少了在硬件上的延時,并顯著提升了算法的精度,讓檢測網(wǎng)絡(luò)更快更強(qiáng)。以 nano 尺寸模型為例,對比 YOLOv5-nano 采用的網(wǎng)絡(luò)結(jié)構(gòu),本方法在速度上提升了21%,同時精度提升 3.6% AP。

圖3 Rep算子的融合過程[4]
EfficientRep Backbone:在 Backbone 設(shè)計方面,我們基于以上 Rep 算子設(shè)計了一個高效的Backbone。相比于 YOLOv5 采用的 CSP-Backbone,該 Backbone 能夠高效利用硬件(如 GPU)算力的同時,還具有較強(qiáng)的表征能力。
下圖 4 為 EfficientRep Backbone 具體設(shè)計結(jié)構(gòu)圖,我們將 Backbone 中 stride=2 的普通 Conv 層替換成了 stride=2 的 RepConv層。同時,將原始的 CSP-Block 都重新設(shè)計為 RepBlock,其中 RepBlock 的第一個 RepConv 會做 channel 維度的變換和對齊。另外,我們還將原始的 SPPF 優(yōu)化設(shè)計為更加高效的 SimSPPF。

圖4 EfficientRep Backbone 結(jié)構(gòu)圖
Rep-PAN:在 Neck 設(shè)計方面,為了讓其在硬件上推理更加高效,以達(dá)到更好的精度與速度的平衡,我們基于硬件感知神經(jīng)網(wǎng)絡(luò)設(shè)計思想,為 YOLOv6 設(shè)計了一個更有效的特征融合網(wǎng)絡(luò)結(jié)構(gòu)。
Rep-PAN 基于 PAN[6] 拓?fù)浞绞剑?RepBlock 替換了 YOLOv5 中使用的 CSP-Block,同時對整體 Neck 中的算子進(jìn)行了調(diào)整,目的是在硬件上達(dá)到高效推理的同時,保持較好的多尺度特征融合能力(Rep-PAN 結(jié)構(gòu)圖如下圖 5 所示)。

圖5 Rep-PAN 結(jié)構(gòu)圖
2.2 更簡潔高效的 Decoupled Head
在 YOLOv6 中,我們采用了解耦檢測頭(Decoupled Head)結(jié)構(gòu),并對其進(jìn)行了精簡設(shè)計。原始 YOLOv5 的檢測頭是通過分類和回歸分支融合共享的方式來實現(xiàn)的,而 YOLOX 的檢測頭則是將分類和回歸分支進(jìn)行解耦,同時新增了兩個額外的 3x3 的卷積層,雖然提升了檢測精度,但一定程度上增加了網(wǎng)絡(luò)延時。
因此,我們對解耦頭進(jìn)行了精簡設(shè)計,同時綜合考慮到相關(guān)算子表征能力和硬件上計算開銷這兩者的平衡,采用 Hybrid Channels 策略重新設(shè)計了一個更高效的解耦頭結(jié)構(gòu),在維持精度的同時降低了延時,緩解了解耦頭中 3x3 卷積帶來的額外延時開銷。通過在 nano 尺寸模型上進(jìn)行消融實驗,對比相同通道數(shù)的解耦頭結(jié)構(gòu),精度提升 0.2% AP 的同時,速度提升6.8%。

圖6 Efficient Decoupled Head 結(jié)構(gòu)圖
2.3 更有效的訓(xùn)練策略
為了進(jìn)一步提升檢測精度,我們吸收借鑒了學(xué)術(shù)界和業(yè)界其他檢測框架的先進(jìn)研究進(jìn)展:Anchor-free 無錨范式 、SimOTA 標(biāo)簽分配策略以及 SIoU 邊界框回歸損失。
Anchor-free 無錨范式
YOLOv6 采用了更簡潔的 Anchor-free 檢測方法。由于 Anchor-based檢測器需要在訓(xùn)練之前進(jìn)行聚類分析以確定最佳 Anchor 集合,這會一定程度提高檢測器的復(fù)雜度;同時,在一些邊緣端的應(yīng)用中,需要在硬件之間搬運大量檢測結(jié)果的步驟,也會帶來額外的延時。而 Anchor-free 無錨范式因其泛化能力強(qiáng),解碼邏輯更簡單,在近幾年中應(yīng)用比較廣泛。經(jīng)過對 Anchor-free 的實驗調(diào)研,我們發(fā)現(xiàn),相較于Anchor-based 檢測器的復(fù)雜度而帶來的額外延時,Anchor-free 檢測器在速度上有51%的提升。
SimOTA 標(biāo)簽分配策略
為了獲得更多高質(zhì)量的正樣本,YOLOv6 引入了 SimOTA [4]算法動態(tài)分配正樣本,進(jìn)一步提高檢測精度。YOLOv5 的標(biāo)簽分配策略是基于 Shape 匹配,并通過跨網(wǎng)格匹配策略增加正樣本數(shù)量,從而使得網(wǎng)絡(luò)快速收斂,但是該方法屬于靜態(tài)分配方法,并不會隨著網(wǎng)絡(luò)訓(xùn)練的過程而調(diào)整。
近年來,也出現(xiàn)不少基于動態(tài)標(biāo)簽分配的方法,此類方法會根據(jù)訓(xùn)練過程中的網(wǎng)絡(luò)輸出來分配正樣本,從而可以產(chǎn)生更多高質(zhì)量的正樣本,繼而又促進(jìn)網(wǎng)絡(luò)的正向優(yōu)化。例如,OTA[7] 通過將樣本匹配建模成最佳傳輸問題,求得全局信息下的最佳樣本匹配策略以提升精度,但 OTA 由于使用了Sinkhorn-Knopp 算法導(dǎo)致訓(xùn)練時間加長,而 SimOTA[4]算法使用 Top-K 近似策略來得到樣本最佳匹配,大大加快了訓(xùn)練速度。故 YOLOv6 采用了SimOTA 動態(tài)分配策略,并結(jié)合無錨范式,在 nano 尺寸模型上平均檢測精度提升 1.3% AP。
SIoU 邊界框回歸損失
為了進(jìn)一步提升回歸精度,YOLOv6 采用了 SIoU[9] 邊界框回歸損失函數(shù)來監(jiān)督網(wǎng)絡(luò)的學(xué)習(xí)。目標(biāo)檢測網(wǎng)絡(luò)的訓(xùn)練一般需要至少定義兩個損失函數(shù):分類損失和邊界框回歸損失,而損失函數(shù)的定義往往對檢測精度以及訓(xùn)練速度產(chǎn)生較大的影響。
近年來,常用的邊界框回歸損失包括IoU、GIoU、CIoU、DIoU loss等等,這些損失函數(shù)通過考慮預(yù)測框與目標(biāo)框之前的重疊程度、中心點距離、縱橫比等因素來衡量兩者之間的差距,從而指導(dǎo)網(wǎng)絡(luò)最小化損失以提升回歸精度,但是這些方法都沒有考慮到預(yù)測框與目標(biāo)框之間方向的匹配性。SIoU 損失函數(shù)通過引入了所需回歸之間的向量角度,重新定義了距離損失,有效降低了回歸的自由度,加快網(wǎng)絡(luò)收斂,進(jìn)一步提升了回歸精度。通過在 YOLOv6s 上采用 SIoU loss 進(jìn)行實驗,對比 CIoU loss,平均檢測精度提升 0.3% AP。
3. 實驗結(jié)果
經(jīng)過以上優(yōu)化策略和改進(jìn),YOLOv6 在多個不同尺寸下的模型均取得了卓越的表現(xiàn)。下表 1 展示了 YOLOv6-nano 的消融實驗結(jié)果,從實驗結(jié)果可以看出,我們自主設(shè)計的檢測網(wǎng)絡(luò)在精度和速度上都帶來了很大的增益。
表1 YOLOv6-nano 消融實驗結(jié)果下表 2 展示了 YOLOv6 與當(dāng)前主流的其他 YOLO 系列算法相比較的實驗結(jié)果。從表格中可以看到:

表2 YOLOv6各尺寸模型性能與其他模型的比較
- YOLOv6-nano 在 COCO val 上 取得了 35.0% AP 的精度,同時在 T4 上使用 TRT FP16 batchsize=32 進(jìn)行推理,可達(dá)到 1242FPS 的性能,相較于 YOLOv5-nano 精度提升 7% AP,速度提升 85%。
- YOLOv6-tiny 在 COCO val 上 取得了 41.3% AP 的精度, 同時在 T4 上使用 TRT FP16 batchsize=32 進(jìn)行推理,可達(dá)到 602FPS 的性能,相較于 YOLOv5-s 精度提升 3.9% AP,速度提升 29.4%。
- YOLOv6-s 在 COCO val 上 取得了 43.1% AP 的精度, 同時在 T4 上使用 TRT FP16 batchsize=32 進(jìn)行推理,可達(dá)到 520FPS 的性能,相較于 YOLOX-s 精度提升 2.6% AP,速度提升 38.6%;相較于 PP-YOLOE-s 精度提升 0.4% AP的條件下,在T4上使用 TRT FP16 進(jìn)行單 batch 推理,速度提升 71.3%。
4. 總結(jié)與展望
本文介紹了美團(tuán)視覺智能部在目標(biāo)檢測框架方面的優(yōu)化及實踐經(jīng)驗,我們針對 YOLO 系列框架,在訓(xùn)練策略、主干網(wǎng)絡(luò)、多尺度特征融合、檢測頭等方面進(jìn)行了思考和優(yōu)化,設(shè)計了新的檢測框架-YOLOv6,初衷來自于解決工業(yè)應(yīng)用落地時所遇到的實際問題。
在打造 YOLOv6 框架的同時,我們探索和優(yōu)化了一些新的方法,例如基于硬件感知神經(jīng)網(wǎng)絡(luò)設(shè)計思想自研了 EfficientRep Backbone、Rep-Neck 和 Efficient Decoupled Head,同時也吸收借鑒了學(xué)術(shù)界和工業(yè)界的一些前沿進(jìn)展和成果,例如 Anchor-free、SimOTA 和 SIoU 回歸損失。在 COCO 數(shù)據(jù)集上的實驗結(jié)果顯示,YOLOv6 在檢測精度和速度方面都屬于佼佼者。
未來我們會持續(xù)建設(shè)和完善 YOLOv6 生態(tài),主要工作包括以下幾個方面:
- 完善 YOLOv6 全系列模型,持續(xù)提升檢測性能。
- 在多種硬件平臺上,設(shè)計硬件友好的模型。
- 支持 ARM 平臺部署以及量化蒸餾等全鏈條適配。
- 橫向拓展和引入關(guān)聯(lián)技術(shù),如半監(jiān)督、自監(jiān)督學(xué)習(xí)等等。
- 探索 YOLOv6 在更多的未知業(yè)務(wù)場景上的泛化性能。



































