DAMO-YOLO:兼顧速度與精度的高效目標(biāo)檢測框架
一、目標(biāo)檢測簡介
目標(biāo)檢測的定義是在圖像/空間中定位出感興趣物體的位置和大小。
一般情況下,輸入圖像、視頻或者點(diǎn)云,輸出物體的類別和檢測框坐標(biāo)。左下方這張圖片就是一個對圖像進(jìn)行目標(biāo)檢測的示例。目標(biāo)檢測應(yīng)用場景非常多,比如自動駕駛場景中車輛行人檢測,碼頭管理中常用泊船檢測。這兩者都是對目標(biāo)檢測的直接應(yīng)用。目標(biāo)檢測同時還是很多 CV 應(yīng)用的基礎(chǔ)任務(wù),比如工廠用到的侵入檢測,和人臉識別,這些都需要行人檢測和人臉檢測作為基礎(chǔ)才能夠完成檢測任務(wù)。可以看出目標(biāo)檢測在日常中有很多重要的應(yīng)用,在 CV 落地中的地位也十分重要,因此這是一個競爭十分激烈的領(lǐng)域。
當(dāng)前已經(jīng)有很多各有特色的目標(biāo)檢測框架。根據(jù)我們在實(shí)際使用過程中的經(jīng)驗(yàn)積累,我們發(fā)現(xiàn)當(dāng)前檢測框架在實(shí)際應(yīng)用時仍然有以下幾個痛點(diǎn):
① 模型尺度變化不夠靈活,難以適應(yīng)不同的算力場景。如 YOLO 系列的檢測框架,一般只提供 3-5 個模型的計(jì)算量,從十幾到一百多 Flops 數(shù)量級,難以覆蓋不同的算力場景。
② 多尺度檢測能力弱,特別是小物體檢測性能較差,這使得模型應(yīng)用場景十分受限。比如在無人機(jī)檢測場景,它們的效果往往都不太理想。
③ 速度/精度曲線不夠理想,速度和精度難以同時兼容。
針對上述情況,我們設(shè)計(jì)并開源了 DAMO-YOLO。DAMO-YOLO 主要著眼于工業(yè)落地。相比于其他的目標(biāo)檢測框架具有三個明顯的技術(shù)優(yōu)勢:
① 整合了自研 NAS 技術(shù),可低成本自定義模型,讓用戶充分發(fā)揮芯片算力。
② 結(jié)合 Efficient RepGFPN 以及 HeavyNeck 模型設(shè)計(jì)范式,能夠很大程度上提高模型的多尺度檢測能力,擴(kuò)大模型應(yīng)用范圍。
③ 提出了全尺度通用的蒸餾技術(shù),能夠?qū)π∧P?、中模型、大模型無痛地提升精度。
下面我們將從 3 個技術(shù)優(yōu)勢的價值進(jìn)一步分析 DAMO-YOLO。
二、DAMO-YOLO 技術(shù)價值
DAMO-YOLO 實(shí)現(xiàn)低成本模型定制化,是基于自研的 MAE-NAS 算法??梢愿鶕?jù)延遲或者 FLOPS 預(yù)算來低成本的定制化模型。它無需模型訓(xùn)練,也無需真實(shí)數(shù)據(jù)參與,即可給出模型的評估打分,模型搜索成本低。以 FLOPS 為目標(biāo),可以充分利用芯片算力。以時延作為預(yù)算進(jìn)行搜索,則非常適用于各種對時延要求嚴(yán)格的場景。我們還提供了支持不同硬件延遲場景的數(shù)據(jù)庫構(gòu)建方案,方便大家完成使用延遲作為目標(biāo)進(jìn)行搜索。
由下圖展示了如何用時延進(jìn)行模型搜索。首先針對目標(biāo)芯片或目標(biāo)設(shè)備采樣,得到所有可能用到的算子的時延,根據(jù)該時延數(shù)據(jù)對模型進(jìn)行延遲預(yù)測。如果預(yù)測的模型量級符合預(yù)設(shè)的目標(biāo),模型會進(jìn)入到后續(xù)模型更新和計(jì)算分?jǐn)?shù)。最后經(jīng)過迭代更新,得到符合時延約束的最優(yōu)模型。
接下來介紹如何增強(qiáng)模型的多尺度檢測能力。DAMO-YOLO 結(jié)合提出 Efficient RepGFPN,以及創(chuàng)新性的 HeavyNeck,顯著提升了多尺度的檢測能力。Efficient RepGFPN 能夠高效地完成多尺度特征融合。HeavyNeck 范式,指的是將模型的 FLOPS 大量地分配到特征融合層。如模型 FLOPS 配比表。以 DAMO-YOLO-S 為例,neck 的計(jì)算量占到了將近整個模型的一半,這和其他的模型把計(jì)算量主要放在 backbone 有顯著的差異。
最后介紹蒸餾模型。蒸餾指將大模型的知識轉(zhuǎn)移到小模型上,在不帶來推理負(fù)擔(dān)的情況下,提升小模型的性能。模型蒸餾是一個提高檢測模型效率的利器,但是學(xué)術(shù)界和工業(yè)界探索大多局限于大模型,缺乏對小模型的蒸餾方案。DAMO-YOLO 則提供了一套對全尺度模型都通用的蒸餾。此方案不僅能夠?qū)崿F(xiàn)全尺度模型的顯著提點(diǎn),并且魯棒性高,而且使用動態(tài)權(quán)重?zé)o需調(diào)參,一鍵式腳本即可完成蒸餾。另外此方案對異構(gòu)蒸餾也是魯棒的,這對于前文中提到的低成本自定義模型來說意義重大。在 NAS 模型中并不能保證搜索得到的小模型和大模型的結(jié)構(gòu)相似度。如果有一個異構(gòu)魯棒的蒸餾就可以保證充分發(fā)揮 NAS 和蒸餾的優(yōu)勢。下圖中給出了我們在蒸餾上的性能,可以看到無論在 T 模型、S 模型還是 M 模型上,蒸餾后都有穩(wěn)定提升。
三、DAMO-YOLO 應(yīng)用價值
基于上述技術(shù)價值,可以轉(zhuǎn)化出多少應(yīng)用價值呢?下面將介紹 DAMO-YOLO 與當(dāng)前其它 SOTA 檢測框架的對比。
DAMO-YOLO 與當(dāng)前 SOTA 相比,同精度下模型提速 20%-40%,計(jì)算量減少15%-50%,參數(shù)減少 6%-50%,全尺度漲點(diǎn)明顯,適用范圍廣。此外,在小物體和大物體上都有明顯的提升。
從以上數(shù)據(jù)對比可以看出,DAMO-YOLO 速度快、Flops 低,適用范圍廣;并且可以針對算力自定義模型,提高芯片利用效率。
相關(guān)模型已經(jīng)上線 ModelScope,通過三到五行代碼的配置就可以進(jìn)行推理和訓(xùn)練,大家可以體驗(yàn)使用,使用過程中有任何問題或者意見歡迎到評論區(qū)留言。
接下來圍繞 DAMO-YOLO 的 3 點(diǎn)技術(shù)優(yōu)勢,介紹它背后的原理,幫助大家更好地理解和使用 DAMO-YOLO。
四、DAMO-YOLO 原理簡介
首先介紹低成本模型定制化能力的關(guān)鍵技術(shù) MAE-NAS。它的基本思想是把一個深度網(wǎng)絡(luò)看作是一個有連續(xù)狀態(tài)空間的信息系統(tǒng),并找到能夠最大化信息系統(tǒng)的熵。
網(wǎng)絡(luò)建模思路如下:將網(wǎng)絡(luò) F 的拓?fù)浣Y(jié)構(gòu)抽象為圖 G=(V,E),其中頂點(diǎn) V 表示特征,邊 E 表示各種算子。在此基礎(chǔ)上,可以用 h(v) 和 h(e) 來分別表示頂點(diǎn)和邊中的值,就可以產(chǎn)生這樣的一個集合 S,定義了網(wǎng)絡(luò)的連續(xù)狀態(tài)空間,而集合 S 的熵可以代表網(wǎng)絡(luò)或者信息系統(tǒng) F 的總信息量。其中頂點(diǎn)的信息量衡量了網(wǎng)絡(luò)的表達(dá)能力,而邊中的信息量也是邊的熵,衡量了網(wǎng)絡(luò)的復(fù)雜度。對于 DAMO-YOLO 目標(biāo)檢測任務(wù)來說,我們主要關(guān)注的是網(wǎng)絡(luò)的表達(dá)能力能夠最大化。在實(shí)際的應(yīng)用中只關(guān)注網(wǎng)絡(luò)特征的熵。根據(jù)高斯分布微分熵,以及高斯熵上界定理,我們使用特征圖的方差來近似網(wǎng)絡(luò)特征熵的上界。
在實(shí)際操作中,我們首先用標(biāo)準(zhǔn)的高斯分布對網(wǎng)絡(luò) backbone 的權(quán)重進(jìn)行初始化,同時用一個標(biāo)準(zhǔn)的高斯噪聲圖片作為輸入。在高斯噪聲送入網(wǎng)絡(luò)前向傳遞后,可以得到若干個特征。然后計(jì)算每個尺度特征的單尺度熵,即方差,隨后通過加權(quán)得到多尺度熵。在加權(quán)過程中,用先驗(yàn)系數(shù)來平衡不同尺度特征表達(dá)能力,此參數(shù)一般會被設(shè)置為[0,0,1,1,6]。為什么會設(shè)置這樣,原因如下:因?yàn)樵跈z測模型中,一般特征都是分五個stage,即五種不同的分辨率,從 1/2 到 1/32。為了保持高效的特征利用,我們只利用后面 3 個 stage。所以其實(shí)前兩個 stage 不參與到模型的 prediction 中,所以是 0 和 0。另外三個我們經(jīng)過廣泛的實(shí)驗(yàn),發(fā)現(xiàn) 1,1,6 是一個較好的模型配比。
基于上述核心原理,我們可以用網(wǎng)絡(luò)的多尺度熵作為性能代理,以凈化算法作為基本框架進(jìn)行網(wǎng)絡(luò)結(jié)構(gòu)搜索,這就構(gòu)成了完整的 MAE-NAS。NAS 有非常多的優(yōu)勢。首先它支持多種推理 budget 的限制,可以用 FLOPS,參數(shù)量,latency 還有網(wǎng)絡(luò)層數(shù)進(jìn)行一個模型搜索。其次,它還支持非常多的細(xì)粒度網(wǎng)絡(luò)結(jié)構(gòu)的變異。因?yàn)檫@里用進(jìn)化算法去進(jìn)行網(wǎng)絡(luò)搜索,所以如果支持的網(wǎng)絡(luò)結(jié)構(gòu)的變異體越多,搜索時自定義化程度和靈活程度都會更高。另外,為了方便用戶自定義搜索過程,我們提供了官方的教程。最后,也是最重要的一點(diǎn),MAE-NAS 是 zero-short,即它的搜索不需要任何實(shí)際的數(shù)據(jù)參與,不需要任何的實(shí)際模型訓(xùn)練。它在 CPU 上進(jìn)行幾十分鐘的搜索,就可以產(chǎn)出在當(dāng)前的限制條件下的一個最優(yōu)網(wǎng)絡(luò)結(jié)果。
在 DAMO-YOLO 中,我們使用 MAE-NAS 以不同時延作為搜索目標(biāo)搜索 T/S/M 模型的骨干網(wǎng)絡(luò);對搜索出的骨干網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)進(jìn)行包裝,小模型使用 ResStyle,大模型使用 CSPStyle。
從下表中可以看出 CSP-Darknet 是一個使用 CSP 結(jié)構(gòu)的人工設(shè)計(jì)的網(wǎng)絡(luò),在 YOLO v 5 /V6 中也取得了一些廣泛的應(yīng)用。我們使用 MAE-NAS 產(chǎn)生一個基礎(chǔ)結(jié)構(gòu),再用 CSP 包裝之后,發(fā)現(xiàn)模型在速度和精度上都有明顯的提升。另外在小模型上大家可以看到 MAE-ResNet 形式,精度會更高。在大模型上使用 CPS 結(jié)構(gòu)會有一個比較明顯的優(yōu)勢,可以達(dá)到 48.7。
如何使用 MAE-NAS 進(jìn)行 backbone 的搜索?這里介紹一下我們的 TinyNAS 工具箱,它已經(jīng)在 ModelScope上線了,通過網(wǎng)頁可視化配置就可以輕松得到想要的模型。同時, MAE-NAS 也已經(jīng)在 github上開源,有興趣的同學(xué)可以以開源代碼為基礎(chǔ),更大自由度的搜索想要的模型。
接下來介紹 DAMO-YOLO 如何提升多尺度檢測能力,它是依賴于網(wǎng)絡(luò)的不同尺度特征的融合。在以往的檢測網(wǎng)絡(luò)中,不同尺度的特征,深度差異較大。比如大分辨率特征用來檢測小物體,但是它的特征深度又較淺,這個時候會影響小物體檢測性能。
我們在 ICLR2022 提出的一個工作——GFPN,以相同的優(yōu)先級同時處理高層語義信息和低層空間信息,對多尺度特征的融合互補(bǔ)非常友好。在 GFPN 的設(shè)計(jì)中,我們首先引入一個 skip layer,目的是為了使得 GFPN 能夠設(shè)計(jì)得更深。我們使用了一個 log2n-link 來進(jìn)行特征復(fù)用,減少冗余。
Queen fusion 是為了增加不同尺度特征和不同深度特征的交互融合。Queen fusion 中每一個節(jié)點(diǎn)除了接收它斜上方和斜下方的不同尺度特征,還接收同一特征深度上的不同尺度特征,極大的增加了特征融合時的信息量,促進(jìn)了多尺度信息在同一深度上的融合。
盡管 GFPN 的特征復(fù)用和獨(dú)特的連接設(shè)計(jì)帶來了模型精度上的提升。由于我們的 skip layer 和我們的 Queen fusion 帶來了在多尺度特征節(jié)點(diǎn)上的融合的運(yùn)算,還有上采樣下采樣的運(yùn)算,極大增加了推理耗時,難以滿足工業(yè)界的實(shí)施要求。所以其實(shí) GFPN 它是一個 FLOPS 高效,但是延遲低效的結(jié)構(gòu)。針對 GFPN 的一些缺陷,我們進(jìn)行分析,將原因歸結(jié)如下:
① 首先,不同尺度特征其實(shí)是共享通道數(shù)的,它存在很多的特征冗余,網(wǎng)絡(luò)配置也不夠靈活。
② 第二,在 Queen feature 中有上采樣和下采樣連接,上采樣和下采樣算子耗時提升顯著。
③ 第三,在節(jié)點(diǎn)堆疊的時候,同特征深度上的串行連接降低了 GPU 的并行效率, 并且每次堆疊帶來的串行路徑的增長非常顯著。
針對這些問題,我們進(jìn)行了相應(yīng)的優(yōu)化,提出了 Efficient RepGFPN。
在優(yōu)化時,主要分為兩類,一類是拓?fù)浣Y(jié)構(gòu)的優(yōu)化,另一類是融合方式的優(yōu)化。
拓?fù)浣Y(jié)構(gòu)優(yōu)化方面,Efficient RepGFPN 在不同尺度特征下使用不同的通道數(shù),從而在輕量級計(jì)算量的約束下,能夠靈活地控制高層特征和低層特征的表達(dá)能力。在 FLOPS 和延遲近似的情況下,靈活的配置能夠得到最好的精度和速度效率。另外,我們還對 queen fusion 中的一個連接進(jìn)行了效率分析,發(fā)現(xiàn)上采樣算子負(fù)擔(dān)極大,但是精度提升較小,遠(yuǎn)遠(yuǎn)低于下采樣算子的收益。于是我們移除了 queen fusion 中的上采樣連接。表格中可以看到,斜下的勾其實(shí)是上采樣,往斜上的勾是下采樣,可以對照左側(cè)的圖去看,小分辨率逐漸往下變大分辨率,向右下的連接表示的是把小分辨率特征上采樣連接到大分辨率上,融合到大分辨率特征上面。最后的結(jié)論就是,下采樣算子的收益更高,上采樣算子收益非常低,所以我們移除了 Queen feature 中的上采樣連接,來提高整個 GFPN 的效率。
在融合方式方面,我們也進(jìn)行了一些優(yōu)化。首先固定融合節(jié)點(diǎn)的數(shù)目,這樣每個模型里面只做兩次融合,而不會像之前一樣通過不斷地堆疊融合來打造一個更深的 GFPN,這樣避免了串行鏈路的不斷增長導(dǎo)致的并行效率降低。另外我們專門設(shè)計(jì)了 fusion block 來進(jìn)行特征融合。fusion block 中我們引入重參數(shù)化機(jī)制和多層聚合連接等技術(shù),進(jìn)一步提升融合效果。
除了 Neck 以外,檢測頭 Head 也是檢測模型的一個重要組成部分。它以 Neck 輸出的特征作為輸入,負(fù)責(zé)輸出回歸和分類的結(jié)果。我們設(shè)計(jì)實(shí)驗(yàn)驗(yàn)證了 Efficient RepGFPN 與 Head 之間的 trade off,發(fā)現(xiàn)在嚴(yán)格控制模型 latency 的情況下,Efficient RepGFPN 的深度越深越好。于是在網(wǎng)絡(luò)設(shè)計(jì)中將計(jì)算量主要分配給 Efficient RepGFPN,而 Head 部分只保留一層用來進(jìn)行分類和回歸任務(wù)的線性投影。我們把只有一層分類和回歸一層非線性映射層的 Head,稱為 ZeroHead。而將這種計(jì)算量主要分配給 Neck 的一個設(shè)計(jì)模式稱為 HeavyNeck 范式。
最終 DAMO-YOLO 的模型結(jié)構(gòu)如下圖所示。
以上就是模型設(shè)計(jì)中的一些思考。最后來介紹一下蒸餾方案。
DAMO-YOLO 中取 Efficient RepGFPN 的輸出特征進(jìn)行蒸餾。student 特征會先經(jīng)過alignmodule,把它的通道數(shù)向 teacher 對齊。為了去除模型本身的偏置,student 和 teacher 的特征會經(jīng)過無偏的 BN 進(jìn)行歸一化,再進(jìn)行蒸餾 loss 計(jì)算。在蒸餾時,我們觀察到過大的 loss 會阻礙 student 本身分類分支的收斂。于是我們選擇使用一個隨著訓(xùn)練不斷衰減的動態(tài)權(quán)重。從實(shí)驗(yàn)結(jié)果中看,動態(tài)均蒸餾權(quán)重對于 T/S/M 模型都是魯棒的。
DAMO-YOLO 的蒸餾鏈條是,L 蒸餾 M,M 蒸餾 S。其中值得一提的是 M 蒸餾 S 時,M 使用的是 CSP 包裝,而 S 使用的是 Res 包裝,從結(jié)構(gòu)上講 M 和 S 是異構(gòu)的。但是在使用 DAMO-YOLO 的蒸餾方案,M 蒸餾 S,蒸餾后也能有 1.2 個點(diǎn)的提升,表明我們的蒸餾方案對異構(gòu)也是魯棒的。所以總結(jié)來說,DAMO-YOLO 的蒸餾方案調(diào)參 free ,支持全系列模型,并且異構(gòu)魯棒。
最后我們再對 DAMO-YOLO 進(jìn)行一下總結(jié)。DAMO-YOLO 結(jié)合 MAE-NAS 技術(shù),能夠進(jìn)行低成本的模型自定義,充分發(fā)揮芯片算力;結(jié)合 Efficient RepGFPN 以及 HeavyNeck 范式,提升了多尺度檢測能力,模型應(yīng)用范圍廣泛;借助全尺度蒸餾方案,可以進(jìn)一步提升模型效率。
DAMO-YOLO 模型已在 ModelScope 上線,并在 github 開源,歡迎大家試用。
五、DAMO-YOLO發(fā)展計(jì)劃
DAMO-YOLO 剛發(fā)布不久,還有許多需要完善和優(yōu)化的地方。我們計(jì)劃在短期內(nèi)進(jìn)行部署工具的完善和 ModelScope 的支持。另外還會基于組內(nèi)的競賽冠軍方案提供更多的應(yīng)用范例,比如無人機(jī)小目標(biāo)檢測以及旋轉(zhuǎn)目標(biāo)檢測等。還計(jì)劃推出更多的范例模型,包括面向端上的 Nano 模型和云上的 Large 模型。最后,希望大家保持關(guān)注,積極反饋。