博客專欄

        EEPW首頁 > 博客 > EdgeYOLO來襲 | Xaiver超實時,精度和速度完美超越YOLOX、v4、v5、v6

        EdgeYOLO來襲 | Xaiver超實時,精度和速度完美超越YOLOX、v4、v5、v6

        發布人:計算機視覺工坊 時間:2023-02-21 來源:工程師 發布文章

        圖片

        本文提出了一種基于最先進YOLO框架的高效、低復雜度和Anchor-Free的目標檢測器,該檢測器可以在邊緣計算平臺上實時實現。

        本文開發了一種增強的數據增強方法,以有效抑制訓練過程中的過擬合問題,并設計了一種混合隨機損失函數,以提高小目標的檢測精度。

        受FCOS的啟發,提出了一種更輕、更有效的Decoupled-Head,其推理速度得到了提高,精度損失很小。

        本文的基線模型在MS COCO2017數據集中可以達到50.6% AP50:95和69.8% AP50的精度,在VisDrone2019 DET數據集中達到26.4% AP50:95、44.8% AP50,并且在邊緣計算設備Nvidia Jetson AGX Xavier上滿足實時要求(FPS≥30)。圖片

        如圖1所示,還為具有較低計算能力的邊緣計算設備設計了參數較少的輕量化模型,這也顯示了更好的性能。

        github:https://github.com/LSH9832/edgeyolo

        1、簡介

        隨著計算硬件性能的不斷提高,基于深度神經網絡的計算機視覺技術在過去十年中迅速發展,其中目標檢測是自主智能系統中應用的重要組件。目前,有兩種主流的目標檢測策略。一種是以R-CNN系列為代表的兩階段策略,另一種是一階段策略,YOLO是最流行的框架之一。

        • 對于兩階段策略,在第一階段使用啟發式方法或區域建議生成方法來獲得多個候選框,然后在第二階段對這些候選框進行篩選、分類和回歸。

        • 單階段策略以端到端的方式給出結果,其中目標檢測問題被轉化為全局回歸問題。全局回歸不僅能夠將位置和類別同時分配給多個候選框,而且能夠使模型在目標和背景之間獲得更清晰的分離。

        在常見的目標檢測數據集(如MS COCO2017)上,使用兩階段策略的模型比使用一階段策略的更好。然而,由于兩階段框架的內在局限性,它遠遠不能滿足傳統計算設備上的實時要求,并且在大多數高性能計算平臺上可能面臨同樣的情況。

        相比之下,單階段目標檢測器可以在實時指示器和性能之間保持平衡。因此,更受研究人員的關注,YOLO系列算法以高速迭代更新。YOLOv1到YOLOv3的更新主要是對底層框架結構的改進,YOLO的大多數后期主流版本都側重于提高精度和推理速度。

        此外,他們的優化測試平臺主要是具有高性能GPU的大型工作站。然而,他們最先進的模型通常在這些邊緣計算設備上以令人不滿意的低FPS運行。出于這個原因,一些研究人員提出了參數更少、結構更輕的網絡結構,如MobileNet和ShuffleNet,以取代原有的骨干網絡,從而可以在移動設備和邊緣設備上實現更好的實時性能,但要犧牲一定的精度。

        本文的目標是設計一種具有良好精度并且能夠在邊緣設備上實時運行的目標檢測器。

        本文的貢獻總結如下:

        1. 設計了一種Anchor-Free目標檢測器,該檢測器可以在MS COCO2017數據集中實時運行在邊緣設備上,準確率為50.6%AP;
        2. 提出了一種更強大的數據增強方法,進一步確保了訓練數據的數量和有效性;
        3. 本文的模型中使用了可重參化的結構,以減少推理時間;
        4. 設計了一個損失函數,以提高小目標的精度。
        2、相關方法2.1、Anchor-free檢測器

        自YOLOv1問世以來,YOLO系列在實時目標檢測領域一直處于領先地位。還有一些其他優秀的檢測器,如SSD、FCOS等。當在目標檢測任務中測試FPS時,大多數先前的研究只計算模型推斷的時間成本,而完整的目標檢測任務包含3個部分:預處理、模型推理和后處理。

        由于預處理可以在視頻流期間完成,因此在計算目標檢測的FPS時應包括后處理時間成本。在高性能GPU工作站或服務器上,預處理和后處理只占一小部分時間,而在邊緣計算設備上,所需的延遲甚至是其十倍以上。

        因此,減少后處理計算可以顯著提高邊緣計算設備的速度。當使用Anchor-Base的策略時,后處理的時間延遲幾乎與每個網格單元的Anchor數量成比例。Anchor-Base的YOLO系列通常為每個網格單元分配3個Anchor。與那些Anchor-Base的框架相比,Anchor-Free檢測器可以在后處理部分節省一半以上的時間。

        為了確保檢測器在邊緣計算設備上的實時性能,本文選擇Anchor-Free策略構建目標檢測器。目前有2種主要類型的Anchor-Free目標檢測器,一種是基于Anchor point的,另一種是關鍵點的。在本文中采用了基于Anchor point的范式。

        2.2、數據增強

        數據增強是神經網絡訓練中必不可少的數據處理步驟。合理使用數據擴充方法可以有效緩解模型的過度擬合。

        對于圖像數據集,幾何增強(隨機裁剪、旋轉、鏡像、縮放等)和光度增強(HSV和亮度調整)通常應用于單個圖像。這些基本的增強方法通常在多圖像混合和拼接之前或之后使用。

        目前,主流的數據增強技術,如Mosaic、Mixup、CopyPaste等,通過不同的方法將多張圖片的像素信息放在同一張圖片中,以豐富圖像信息并降低過度擬合的概率。

        圖片

        如圖2(b)所示,本文設計了一種更加靈活和強大的組合增強方法,這進一步確保了輸入數據的豐富性和有效性。

        2.3、Model Reduction

        通過模型縮放,降低了計算成本,可以有效提高模型推理速度。模型縮放方法可分為兩類:有損縮放和無損縮放。

        有損縮放通常通過減少網絡層和通道的數量來構建更小的網絡。無損縮放集成并耦合多個分支模塊,通過重參化技術構建更精簡的等效模塊。模型參數量的降低是通過犧牲精度來實現更快的速度,并且由于耦合結構傾向于降低訓練效率,因此通常在模型訓練完成后使用重參化方法進行推理。

        通過結合有損和無損縮減方法,本文構建了幾個不同大小的模型(如圖1所示),以適應具有不同計算能力的邊緣設備,并加快模型推理過程。

        2.4、Decoupled Regression

        從YOLOv1到YOLOv5,對于每個具有不同尺度的特征圖,獲取目標的位置、類別和置信度的回歸使用了一組統一的卷積核。一般來說,如果不同的任務密切相關,則使用相同的卷積核。然而,在數值邏輯中,目標的位置、置信度和類別之間的關系還不夠接近。

        此外,相關實驗證明,與直接處理所有任務的單一回歸檢測頭相比,使用解耦回歸檢測頭可以獲得更好的結果,并加速損失收斂。

        盡管如此,一個被解耦的頭卻會帶來額外的推理成本。作為改進,本文作者設計了一個較輕的解耦頭,并共同考慮了模型的推理速度和精度。

        2.5、Small Object Detecting Optimization

        自目標檢測研究開始以來,小目標檢測問題一直受到廣泛關注。隨著圖像中對象的比例減少,用于表示目標的像素信息減少。與小目標相比,大目標通常占據數十倍甚至數百倍的信息,小目標的檢測精度通常明顯低于大目標。

        此外,位圖圖像的屬性無法消除這種差距。此外,研究人員發現,在訓練過程中,小目標在總損失中所占的比例始終較小。

        為了提高小目標的檢測效果,先前的研究提出了以下方法:

        1. 復制小目標并將其隨機放置在圖像的其他位置,以在數據增強過程中增加小目標的訓練數據樣本,這被稱為復制增強;
        2. 圖像被縮放和拼接,原始圖像中的一些較大目標被縮放為小目標;
        3. 損失函數旨在通過增加小目標損失的比例來更加關注小目標。

        由于使用方法1處理的圖像中存在尺度失配和背景失配的問題,本文只參考方法2和2來優化訓練過程。

        本文的數據增強中包括縮放和拼接方法,并重新設計了損失函數,這可以有效地提高中小目標的檢測和模型整體精度。

        3、本文方法3.1、數據增強的改進

        許多實時目標檢測器在訓練期間使用Mosaic+Mixeup策略進行數據增強,這可以有效緩解訓練期間的過度擬合情況。

        如圖3(a)和(b)所示,有兩種常見的組合方法,當數據集中的單個圖像具有相對足夠的標簽時,它們表現良好。由于數據論證中的隨機過程,當圖3(a)中的標簽空間中存在響應時,數據加載器可能會提供沒有有效目標的圖像。這種情況的概率隨著每個原始圖像中標簽數量的減少而增加。

        圖片

        因此作者設計了圖3(c)中的數據增強結構:

        • 首先,對多組圖像使用Mosaic方法,因此可以根據數據集中單個圖片中標簽的平均數量的豐富程度來設置組數。
        • 然后,通過Mixup方法將最后一個簡單處理的圖像與Mosaic處理的圖像混合。

        在這些步驟中,最后一幅圖像的原始圖像邊界在變換后的最終輸出圖像的邊界內。這種數據增強方法有效地增加了圖像的豐富性以減輕過度擬合,并確保輸出圖像必須包含足夠的有效信息。

        3.2、Lite-Decoupled Head

        圖4中的解耦頭首先在FCOS中提出,然后用于其他Anchor-Free目標檢測器,如YOLOX。證實了在最后幾個網絡層使用解耦結構可以加速網絡收斂并提高回歸性能。

        圖片

        由于解耦頭采用了導致額外推理成本的分支結構,因此提出了具有更快推理速度的高效解耦頭,這將中間3×3卷積層的數量減少到僅一層,同時保持與輸入特征圖相同的更大數量的通道。

        然而,在實驗測試中,這種額外的推理成本隨著通道和輸入大小的增加而變得更加明顯。因此,設計了一個更輕的解耦頭,具有更少的通道和卷積層。

        此外,將隱式表示層添加到所有最后的卷積層,以獲得更好的回歸性能。通過重參化的方法,隱式表示層被集成到卷積層中,以降低推理成本。框和置信度回歸的最后卷積層也被合并,使得模型可以進行高并行計算的推斷。

        3.3、損失函數的改進

        對于目標檢測,損失函數一般可以寫成如下:

        圖片

        其中表示分類損失、IOU損失、目標損失和調節損失,α、λ、μ、ζ為超參數。在實驗中將訓練過程分為三個階段。

        在第一階段,采用最常見的損失函數配置之一:GIOU損失用于IOU損失,平衡交叉熵損失用于分類損失和目標損失,調節損失設置為零。在最后幾個Epoch數據擴充的Epoch,訓練過程進入第二階段。分類損失和目標損失的損失函數由混合隨機損失代替:

        圖片

        其中p表示預測結果,t表示GT值,r是0到1之間的隨機數。對于一張圖像中的所有結果,都有這個結果:

        圖片

        這表明在小目標的精度和總精度之間有較好的平衡。在第三階段,關閉數據擴充,將L1損失設為調節損失,用cIOU損失代替gIOU損失。

        4、實驗4.1、消融實驗1、Decoupled head

        圖片

        2、Segmentation labels (poor effect)

        當在數據增強期間處理旋轉的標簽時,在沒有分割信息的情況下,在旋轉后獲得原始標簽框的四個坐標角點,并繪制一個不傾斜并穿過四個點的框作為要使用的標簽。這可能包含更多無效的背景信息。

        因此,當在MS COCO2017上訓練模型時,嘗試通過使用分割標簽來生成邊界框,以便圖像旋轉后的標簽仍然保持高精度。當啟用數據擴充并且損失進入穩定下降階段時,使用分段標簽可以顯著增加2%-3%AP。

        由于數據擴充在訓練的最后階段被設置為禁用,因此所有標簽都變得更加準確。此外,即使不使用分割標簽,最終精度也僅降低約0.04%AP。

        3、損失函數

        圖片

        4.2 為邊緣計算設備設計的技巧1、Input size adaptation

        圖片

        2、多進程和多線程的計算體系結構

        作為一個包含預處理、模型輸入和后處理的整體檢測過程,這三個部分可以在實際部署中拆分,并分配給多個進程和線程進行計算。在測試中,使用拆分架構可以實現大約8%-14%的FPS增長。

        4.3、SOTA對比

        圖片

        4.4、總結

        本文提出了一種邊緣實時和Anchor-Free單階段檢測器EdgeYOLO,其一些代表性結果如圖5和圖6所示。如實驗所示,EdgeYOLO可以在邊緣設備上以高精度實時運行,其檢測小目標的能力得到了進一步提高。

        圖片圖片

        由于EdgeYOLO使用Anchor-Free結構,因此設計復雜性和計算復雜性降低,并且在邊緣設備上的部署更加友好。

        此外,作者相信該框架可以擴展到其他像素級識別任務,例如實例分割。在未來的工作中,將進一步提高框架對小目標的檢測精度,并進行有效優化的探索。

        5、參考

        [1].EdgeYOLO: An Edge-Real-Time Object Detector.


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: AI

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 铁岭县| 旌德县| 宣恩县| 米林县| 应用必备| 阿瓦提县| 固镇县| 辉县市| 突泉县| 固始县| 麦盖提县| 东辽县| 上杭县| 雅江县| 民乐县| 万全县| 阳曲县| 松溪县| 西乌珠穆沁旗| 措勤县| 新邵县| 南阳市| 始兴县| 开原市| 左云县| 大关县| 洮南市| 甘德县| 庐江县| 巴楚县| 乐安县| 子长县| 胶州市| 麻阳| 芜湖市| 延津县| 开江县| 精河县| 安吉县| 新邵县| 沐川县|