超越YOLOv4-tiny!YOLObile:移動設備上的實時目標檢測

_AI視線算法


點擊關注上方AI深度視線」,並「星標」公號
數組

技術硬文,第一時間送達!微信


YOLObile:經過壓縮編譯協同設計在移動設備上進行實時目標檢測,在三星S20上速度可達17FPS!比YOLOv4快5倍!同時mAP和FPS均優於YOLOv4-tiny!
網絡

paper:
併發

https://arxiv.org/abs/2009.05697
框架

做者單位:東北大學, 威廉與瑪麗學院, 匹茲堡大學
less





1編輯器


摘要性能




目標檢測技術的快速發展和普遍應用引發了對目標檢測器的準確性和速度的關注。可是,當前的最新目標檢測工做要麼使用大型模型以準確性爲導向,但致使高延遲,或者使用輕量級模型以速度爲導向,但犧牲準確性。
學習

在這項工做中,咱們提出了YOLObile框架,該框架是經過壓縮編譯協同設計在移動設備上進行實時目標檢測的。針對任何內核大小,提出了一種新穎的block-punched剪枝方案。爲了提升移動設備上的計算效率,採用了GPU-CPU協做方案以及高級的編譯器輔助優化。

實驗結果代表,咱們的剪枝方案以49.0 mAP達到YOLOv4壓縮率的14倍。在咱們的YOLObile框架下,咱們在Samsung Galaxy S20上使用GPU實現了17 FPS推理速度。經過合併咱們提出的GPU-CPU協做方案,推理速度提升到19.1 FPS,而且比原始YOLOv4高出5倍。


2


本文思路


2.1 DNN Model Pruning

  • 非結構化剪枝:

非結構化修剪容許對權值矩陣中任意位置的權值進行修剪,保證了搜索優化修剪結構的更高靈活性,如圖1(a)所示。所以,一般壓縮率高,精度損失小。可是,非結構化的剪枝會致使權值矩陣的不規則稀疏性,在計算過程當中須要額外的索引來定位非零權值。這使得底層系統(例如,移動平臺上的gpu)提供的硬件並行性得不到充分利用。所以,非結構化修剪不適用於DNN推理加速,甚至能夠觀察到速度的降低。


  • 結構化剪枝

結構化剪枝對DNN權重的整個通道/過濾器進行剪枝。如圖1 (b)所示,過濾器修剪刪除了權值矩陣的整行,其中通道修剪刪除了權值矩陣中對應通道的連續列。結構化修剪保持了降維權值矩陣的規則形狀。所以,它是硬件友好的,能夠利用硬件並行性來加速。然而,因爲結構化剪枝的粗粒度特徵,其準確性會受到很大的影響。


  • 基於模式的剪枝

基於模式的剪枝被認爲是一種細粒度結構的剪枝方案。因爲其適當的結構靈活性和結構規律性,同時保持了精度和硬件性能。基於模式的剪枝包括核模式剪枝和連通性剪枝兩部分。核模式修剪在每一個卷積核中刪除固定數量的權值,如圖2所示。

2.2 Motivation

如上所述,最早進的目標檢測工做要麼是精度導向使用大模型大小或速度導向使用輕量級模型但犧牲精度。所以,它們都很難同時知足實際應用在移動設備上的準確性和延時要求。
所以,咱們須要一種在移動設備上既能實現高精度又能實現低延遲的解決方案。
而基於模式的修剪彷佛是一個理想的選擇,由於它在執行效率和準確性之間取得了平衡。但它只適用於3×3的CONV層,不利於目標檢測任務的有效性。圖3給出了3×3卷積層與非3×3層的對比。咱們選擇了4種有表明性的目標檢測方法,並比較了它們的權重和計算方法的百分比。例如,在YOLOv4中,一個表明最早進的目標檢測網絡,至關多的權重和計算量(分別爲17%和19%)是由非3×3 CONV層貢獻的。

編譯器輔助的DNN推理加速是移動設備上低延遲DNN推理的另外一個有吸引力的選擇。實驗證實,藉助編譯器優化,能夠實現圖像分類任務的低延遲DNN推理。然而,這樣的加速仍然不足以知足目標檢測任務所需的低延遲,由於它有大量的權重,須要更復雜的計算。爲此,咱們提出了兩個關鍵的設計目標:
•目標1:咱們須要一個剪枝方案,能夠:

        (i)同時實現高精度和利用底層硬件並行性

        (ii)普遍應用於不一樣類型的層。
•目標2:咱們須要一種更高效的計算方法來進一步加快目標檢測任務的DNN推理速度。


3


具體實現


3.1 Block-Punched Pruning

爲了實現第3節中的第一個目標,咱們提出了一種新的剪枝方案——block-punched剪枝,它在保持高精度的同時實現了高硬件並行性。除了3×3 CONV層外,還能夠映射到其餘類型的DNN層,如1×1 CONV層和FC層。尤爲適用於資源有限的移動設備上的高效DNN推理。如圖4所示,將某一層的整個DNN權值劃分爲若干等大小的塊,每一個塊包含來自m個連續濾波器的n個連續信道的權值。在每一個塊中,咱們在全部過濾器的相同位置上修剪一組權值,同時在全部通道的相同位置上修剪權值。換句話說,被修剪的權重將穿透一個塊內全部過濾器和通道的相同位置。請注意,每一個塊中通過修剪的權重的數量是靈活的,而且能夠在不一樣的塊之間有所不一樣。

從精度的角度來看,受基於模式的剪枝的啓發,咱們在block-punched剪枝中採用了一種細粒度的結構化剪枝策略,以增長結構的靈活性,減小精度的損失。從硬件性能的角度來看,與粗粒度結構修剪相比,咱們的塊打孔修剪方案經過利用適當的塊大小和編譯器級代碼生成的幫助,可以實現高硬件並行性。緣由是一般DNN層中的權重數很是大。即便咱們將權重劃分爲塊,每一個塊所需的計算量仍然足以飽和硬件計算資源,並實現高度並行,特別是在資源有限的移動設備上。

此外,咱們的修剪方案能夠從內存和計算兩個角度更好地利用硬件並行性。首先,在卷積計算中,全部的濾波器在每一層共享相同的輸入。因爲在每一個塊中的全部過濾器中刪除了相同的位置,所以這些過濾器將跳過讀取相同的輸入數據,從而減輕處理這些過濾器的線程之間的內存壓力。其次,限制在一個塊內刪除相同位置的通道,保證了全部這些通道共享相同的計算模式(索引),從而消除了處理每一個塊內通道的線程之間的計算髮散。
在咱們的block-punched剪枝,
塊大小影響精度和硬件加速。一方面,更小的塊大小提供了更高的結構靈活性,由於它的粒度更細,一般能夠得到更高的精度,但代價是下降速度。另外一方面,更大的塊大小能夠更好地利用硬件並行性來實現更高的加速度,但也可能形成更嚴重的精度損失。
爲了肯定適當的塊大小,咱們首先經過考慮設備的計算資源來肯定每一個塊中包含的通道數。例如,咱們爲每一個塊使用與智能手機上移動CPU/GPU中的向量寄存器長度相同的通道數來實現高並行性。若是每一個塊中包含的信道數小於向量寄存器的長度,則向量寄存器和向量計算單元都將得不到充分利用。相反的,增長信道的數量並不會提升性能,反而會致使更嚴重的精度降低。所以,每一個塊中包含的濾波器的數量應該相應地肯定,考慮到精度和硬件加速之間的權衡。

經過推理速度能夠推導出硬件加速度,不須要對DNN模型進行再訓練就能夠獲得硬件加速度,與模型精度相比更容易推導。所以,設定合理的最小推理速度要求做爲須要知足的設計目標。在塊大小知足推理速度目標的狀況下,咱們選擇在每一個塊中保留最小的濾波器數量,以減小精度損失。


3.2 Reweighted Regularization Pruning Algorithm

在之前的權重修剪算法中,使用諸如組套索正則化或乘數交替方向方法(ADMM)被主要採用。可是,這會致使潛在的精度損失或須要手動壓縮速率調整。

所以,咱們採用從新加權的方法。基本思想是系統地動態調整處罰。更具體地說,重加權方法減小了對較大量級的權重的懲罰(多是更關鍵的權重),並增長了對較小量級的權重的懲罰。
設W i∈R_M×N×K_h×K_w表示CNN的第i個CONV層的4-D權重張量,其中M是濾波器的數量;N是輸入通道數;K_w和K_h是第i層的寬度和高度核心。通常的加權加權修剪問題表示爲:

在咱們的分塊修剪中,每一個W i分爲K個塊,所以,正則項爲:

修剪過程始於預訓練的DNN模型。經過使用從新加權的正則化修剪算法進行另外一個訓練過程,能夠得到具備咱們的block-punched約束的修剪模型。


3.3 Mobile Acceleration with a Mobile GPU-CPU Collaborative Scheme

在咱們的框架中,咱們結合了咱們的GPU-CPU協同計算方案來優化DNNs中的兩種分支結構,即:

1)具備CONV層的分支結構

2)具備非CONV操做的分支結構。

這兩種分支結構的示例如圖5 (a)和(b)所示。咱們根據部署前的速度進行脫機設備選擇。

咱們知道,GPU適合高並行性計算,好比卷積計算,在速度上明顯優於CPU。所以,對於具備CONV層的分支結構,如YOLOv4中的Cross Stage Partial (CSP)塊,如圖5(a),選擇GPU來計算最耗時的分支,剩下的問題是肯定其餘分支是使用CPU併發計算仍是仍然使用GPU順序計算。
在圖5(a)中,咱們將分支1和分支2的GPU計算時間命名爲t_g一、t_g2, CPU計算時間命名爲t_c一、t_c2,數據複製時間命名爲咱們在GPU中執行最耗時的分支1,而後對分支2進行決策。
當使用CPU進行並行計算時,咱們也能夠須要添加數據複製時間。指望的GPU-CPU並行計算時間T_par取決於分支1和分支2的最大時間開銷:

僅gpu串行計算時間T_ser爲兩個支路計算時間T_g1 + T_g2的總和:

以YOLOv4中最終輸出的三個YOLO頭結構爲例,如圖5(b)所示,在每一個分支中對最後一個CONV層的輸出進行轉置和從新排列後,咱們仍然須要進行屢次非CONV操做才能獲得最終的輸出。咱們測量每一個分支中非conv操做的GPU和CPU總執行時間,分別表示爲t_g0, t_g1, t g2和t_c0, t_c1, t_c2。T_total表示全部三個分支的總計算時間。
對於這三個分支,如今咱們有8種可能的設備選擇組合。例如,若是前兩個分支使用CPU,第三個分支使用GPU,總的計算時間將是

請注意,最終輸出早晚必須移至CPU,所以咱們不將數據複製時間計入總計算時間。結果,咱們選擇總計算時間最少的組合做爲所需的計算方案。綜上所述,咱們提出的GPU-CPU協做方案能夠有效提升硬件利用率並提升DNN推理速度。


3.4 Compiler-assisted Acceleration

YOLObile依靠幾種先進的編譯器輔助優化,這些優化由咱們新設計的塊打孔修剪啓用,以進一步提升推理性能。因爲篇幅所限,咱們在這裏簡要總結一下。

首先,YOLObile經過利用修剪信息來緊湊地存儲模型權重,與衆所周知的「壓縮稀疏行」格式相比,修剪信息能夠進一步壓縮索引數組。

其次,YOLObile對塊進行從新排序以提升內存和計算規則性,並消除沒必要要的內存訪問。
此外,YOLObile採用高度並行的自動調整模型來查找最佳執行配置參數。

YOLObile爲每一層生成CPU和GPU代碼,並在實際推理過程當中根據咱們的GPU-CPU協做方案調用正確的代碼。


4


代碼實操


4.1 Ablation Study

4.2 Evaluation of YOLObile framework




潮水自會來去,但心志得堅若磐石。即使成不了那根定海神針,也至少不是那隨意被拍上岸的野鬼遊魂。 

長按關注 "AI深度視線"
最新人工智能、深度學習、SLAM乾貨奉上!








本文分享自微信公衆號 - AI深度學習視線(AI_DeepSight)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索