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