• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于YOLOv3的卷積層結構化剪枝

      2021-03-23 03:44:24舒?zhèn)トA梅魁志
      計算機工程與應用 2021年6期
      關鍵詞:剪枝過濾器結構化

      張 良,張 增 ,舒?zhèn)トA,梅魁志

      1.武漢數(shù)字工程研究所,武漢 430074

      2.西安交通大學 電子與信息工程學部,西安 710049

      3.中國航發(fā)南方工業(yè)有限公司,湖南 株洲 412002

      卷積神經(jīng)網(wǎng)絡是深度學習[1]中重要的算法,在模式識別、圖像處理、自動控制和智能機器人等方面有著廣泛的應用。隨著研究中對精度、數(shù)據(jù)集要求提高,卷積神經(jīng)網(wǎng)絡的網(wǎng)絡層數(shù)、計算復雜度也隨之增加。

      目前,卷積神經(jīng)網(wǎng)絡主要在GPU(Graphics Processing Unit)或高性能 CPU(Central Processing Unit)上面運行,可以達到很流暢的運行效果,但是在各類移動設備、嵌入式設備中,會面臨功耗、體積、計算速度等限制。如何在保證卷積神經(jīng)網(wǎng)絡精度不下降的情況下,降低網(wǎng)絡計算量,削減網(wǎng)絡模型存儲空間,使之能在資源受限的設備上高效運行是亟需解決的問題。本文中提出的結構化剪枝就是一種對卷積神經(jīng)網(wǎng)絡壓縮和優(yōu)化的方法。網(wǎng)絡剪枝能夠通過去除模型中的部分連接加速卷積神經(jīng)網(wǎng)絡。剪枝的主要步驟是:訓練原始網(wǎng)絡,更新網(wǎng)絡中各個參數(shù)的權值;對網(wǎng)絡中權重較低的參數(shù)進行修剪;重新訓練網(wǎng)絡,恢復神經(jīng)網(wǎng)絡精度[2]。

      剪枝可以分為結構化剪枝和非結構化剪枝兩類。結構化剪枝相對非結構化剪枝的最明顯特點是它產(chǎn)生的稀疏矩陣是有規(guī)則的,剪枝后網(wǎng)絡加速需要的運算量更少[3]。

      結構化剪枝按照剪枝依據(jù)可分為基于重要性和基于正則化的剪枝方法,本文采用的是基于重要性的剪枝方法[4]。結構化剪枝按照被剪枝單元可分為向量級、核級[5]、組級和通道級剪枝[6]四種。本文選擇的是卷積核級的結構化剪枝方案。

      對YOLOv3模型的研究很多,在汲取其中精華思想后[7-10],本文對YOLOv3[11-12]結構化剪枝的方法是:單層一種卷積過濾器,設計公式計算每層重要性得分,并給出了一種可靠簡易的稀疏值分配策略,更快速、準確地給每層分配合適的稀疏值以及卷積過濾器。

      1 卷積層結構化剪枝

      結構化剪枝是在犧牲極限壓縮率的前提下,用以彌補非結構化剪枝在硬件實現(xiàn)、在線推理內存訪問效率不高的缺陷。

      將7×7的卷積核剪枝成5×7或更小的卷積核,對應到參數(shù)矩陣,即刪掉若干行。雖然輸入矩陣的列數(shù)需要減少,但是這樣剪枝并沒有改變通道個數(shù),不僅有著絕對的壓縮效果,而且在進行im2col[13](重排圖像塊為矩陣列)操作(修改步長等參數(shù))后,對輸入特征圖和輸出矩陣沒有任何影響。

      對YOLOv3卷積層參數(shù)壓縮方法研究與設計如圖1所示,中間部分為模型結構化剪枝的主流程,左邊虛線框內為計算層重要性得分的具體過程,右邊虛線框內為稀疏值配置的具體過程。通過對模型的權值參數(shù)計算得到每個可結構化剪枝卷積層的重要性得分,根據(jù)重要性得分以及稀疏值分配策略,給每個可結構化剪枝的卷積層匹配合適的稀疏值并選擇適當?shù)木矸e過濾器。在結構化剪枝壓縮優(yōu)化之后,還能加入定點化壓縮優(yōu)化過程,定點化壓縮優(yōu)化效果需要在合適的硬件平臺上才能得到更好的展示。

      1.1 結構化剪枝

      ANWAR 等人[14]在論文中使用N個卷積過濾器對相應的N個輸入數(shù)據(jù)矩陣進行的剪枝操作如圖2[14]所示。這種剪枝操作因為每層有多種卷積算子,導致剪枝過程非常耗時,故本文只使用很小的驗證數(shù)據(jù)集,用于卷積層單元打分,測試算法的性能。

      在此基礎上進行的主要改進是:每層只使用一種單元過濾器;通過對各層重要性評估來決定每層使用的單元過濾器,而不需要耗時的訓練;改進每個卷積對于整個網(wǎng)絡結構重要性公式。

      本文結構化剪枝原理如圖3 所示。對于每一層只使用一種卷積過濾器,對于一張輸入數(shù)據(jù)矩陣,因為每一層只使用一種卷積過濾器,所以經(jīng)過im2col操作選取的數(shù)據(jù)區(qū)域也是完全一樣的。根據(jù)卷積運算原理可知,上一層的輸出矩陣(即該層的輸入矩陣),需要與多組卷積核進行卷積計算,每一個輸入數(shù)據(jù)矩陣只需要經(jīng)過一次比原始矩陣小的im2col 變化,就能反復地被其他的卷積核利用,這樣做可以節(jié)省大量的存儲資源和運算資源。

      接下來需要解決的問題為:確定符合結構化剪枝的卷積過濾器;確定待剪枝卷積層相應的卷積過濾器;確定合適的模型調整策略,保證模型性能不變的同時得到最大模型壓縮效果。

      圖1 YOLOv3模型結構化剪枝流程圖

      圖2 Anwar等人卷積核級別結構化剪枝示意圖

      圖3 本文結構化剪枝原理示意圖

      1.2 卷積過濾器

      通過前面對YOLOv3 模型網(wǎng)絡結構的研究發(fā)現(xiàn),YOLOv3 模型的卷積層只有3×3 和1×1 兩種尺寸(當前模型優(yōu)化趨勢,且類似5×5、7×7等大卷積核可以優(yōu)化為由多個3×3卷積核替代)。由于1×1尺寸的卷積層的權值參數(shù)相對較少并且不適合本文的結構化剪枝方法,于是只對3×3的卷積層進行剪枝壓縮操作,后續(xù)可以做相關實驗評估1×1 層卷積核參數(shù)對YOLOv3 整個網(wǎng)絡性能的影響。

      為了制作3×3 卷積算子結構化剪枝所需單元過濾器,引入三個參數(shù):Kp_stride 為剪枝(或保留)步長,Kp_offset=i為剪去的第一個值的位置編號為i,Kp_keepset=j為保留的第一個值的位置編號為j。0~8 為3×3 卷積算子9 個數(shù)據(jù)的編號。如圖2 所示,原始卷積核的參數(shù)為1~9,剪枝后用0代替,現(xiàn)在列舉幾組不同參數(shù)的卷積算子剪枝情況。

      枚舉出四種離散的結構規(guī)范的卷積過濾器如圖4~圖7 所示。每種稀疏值有一種或者多種不同的卷積過濾器形狀,其中“1”表示保留卷積核算子的相應位置數(shù)值,“0”表示剪枝掉卷積核算子的相應位置數(shù)值。當確定一個卷積層的稀疏值后,可以選擇該稀疏值中任何一種卷積過濾器形狀,然后對網(wǎng)絡中的3×3的卷積核進行規(guī)則的結構化剪枝操作。

      圖4 稀疏值為1/3(0.33)

      圖5 稀疏值為4/9(0.44)

      圖6 稀疏值為5/9(0.56)

      圖7 稀疏值為2/3(0.67)

      1.3 實驗平臺及數(shù)據(jù)集

      卷積神經(jīng)網(wǎng)絡的實現(xiàn)需要依托深度學習框架。本文中采用的深度學習框架是Caffe[15],它是一個簡約高效、應用廣泛的開源深度學習框架。

      前期使用自制小數(shù)據(jù)集進行了相關測試,實驗結果表現(xiàn)良好。為了理論的證實更加科學,這里使用的數(shù)據(jù)集是Pascal VOC 2012 數(shù)據(jù)集(http://host.robots.ox.ac.uk/pascal/VOC),訓練集包括11 540張圖片,測試集包括4 952 張圖片(VOC 2007 數(shù)據(jù)集測試集部分)。訓練集與測試集的圖片數(shù)量比例為1∶2,屬于規(guī)范數(shù)據(jù)集。

      2 稀疏值分配策略

      本文對 YOLOv3 中卷積算子尺寸為 3×3 的 38 個卷積層進行結構化剪枝。同時對多個卷積層進行結構化剪枝,最大的問題在于如何分配每層的稀疏值。改進Liu等人[16]提出的冗余度度量公式(1)用于實驗。

      第l層的第n個卷積核Sl(n) 的稀疏性公式如公式(2)所示:

      式中,Ml為所有卷積核權值絕對值的平均值;l為指定層序號;kl,nchw為卷積核權值;N為輸入通道數(shù);C為輸出通道數(shù);H、W為卷積核的高和寬;Sl(n)為卷積核稀疏性;n,c,h,w為正整數(shù)且n∈[1,N],c∈[1,C],h∈[1,H],w∈[1,W]。

      簡而言之,如果卷積核有幾個系數(shù)小于該層的平均值,則Sl(n)接近1,這意味著該卷積核比其他卷積核的參數(shù)更冗余。

      借鑒公式(1)與(2)的思路,提出層重要性得分Ml*(即在全局網(wǎng)絡中貢獻度),計算方法如公式(3):

      對YOLOv3的38個待剪枝卷積層進行重要度定量評估,并通過每層的分配各層的稀疏率。將38個層的Ml*累加得到,每個層在全局網(wǎng)絡中重要性程度為,具體分布情況如圖8所示。

      對各層稀疏值的分配,遵循重要度和稀疏值成正相關(即重要性越大,分配的稀疏值越大),并且對重要度不同的層分配具有梯度的稀疏值,為了簡化實驗步驟,擬將相近重要度卷積層分配相同的稀疏值。

      圖8 38個可剪枝層重要度全局網(wǎng)絡占比情況

      根據(jù)圖9所示的稀疏值分配與調整策略對YOLOv3的38個可結構化剪枝的卷積層進行合理的稀疏值分配與調整。

      圖9 稀疏值分配與調整策略示意圖

      圖8 的縱坐標為單層重要性程度Dl,按照從小到大對Dl進行排序,根據(jù)Dl最大、最小值進行等間距區(qū)間分段,遵循每一個區(qū)段使用一種稀疏值,區(qū)間數(shù)量需要通過觀察Dl數(shù)據(jù)規(guī)律結合經(jīng)驗給出,保證總段數(shù)不超過層總數(shù)的一半,盡量區(qū)分開各卷積層。每改變一次稀疏值進行一次再訓練操作,若模型性能保持良好,繼續(xù)增大稀疏值,直至模型性能有較大的損失,用此次試驗上一次的稀疏值為最終值。

      模型性能的評價標準為準確率或者目標識別網(wǎng)絡中的mAP 值;若保持準確率或者mAP 值不下降則為模型性能保持良好,若下降超過預設閾值則表示模型性能有較大的損失。然后,在前面基礎上對下一個重要性得分區(qū)間的卷積層重復上述工作,直至完成對最后一個區(qū)間的卷積層稀疏值配置工作,得到全可剪枝卷積層的稀疏值初始配置。

      最后,可以修改少數(shù)卷積層的稀疏值進行再訓練微調,得到最終稀疏值配置;以上步驟按重要性同時將一個或者幾個卷積層稀疏值設置為相同的值,導致靠近重要性區(qū)段兩端的卷積層稀疏值分配準確度不高,需要對這些靠近重要性區(qū)段兩端的一些卷積層進行如下微調:數(shù)值小的一端稀疏值變大、數(shù)值大的一端稀疏值變小,遵循改變一次立即進行再訓練操作,比較模型性能前后的變化,得到最終全可剪枝卷積層的稀疏值配置,模型性能的評判依據(jù)準確率或者目標識別中的mAP值。

      YOLOv3 模型各層重要性得分、全局占比、層參數(shù)量等參數(shù)如表1所示。

      表1 YOLOv3模型Mj 值、全局占比及層參數(shù)量

      依據(jù)重要性得分公式(3)計算出每個可結構化剪枝卷積層的得分Mj值,然后將38個層的重要性累加得到;每個層重要性全局占比為最后根據(jù)稀疏值配置策略,得到了全部38 層卷積層結構化剪枝的三個參數(shù) kp_stride、kp_offset、kp_keepset。除去第一層重要性得分過大不做結構化剪枝操作,其他37個層都分配了合適的稀疏值以及選擇適當?shù)木矸e過濾器。

      最終調試完成后確定的各層稀疏值,以及個卷積層結構化剪枝使用的卷積過濾器的3 個參數(shù)kp_stride、kp_offset、kp_keepset如表2所示。

      表2 每層稀疏率及卷積過濾器參數(shù)

      表2 中的 1~80、88~92、100~104 與表1 中的層相對應,包含上下界限;stride、offset、keepset即為卷積層結構化剪枝的三個參數(shù)kp_stride、kp_offset、kp_keepset。

      3 實驗結果與分析

      根據(jù)表1 中對每個可結構化剪枝卷積層的參數(shù)設置,進行了結構化剪枝壓縮訓練,并測得相應的mAP值,整理如表3所示。

      表3 結構化剪枝前后mAP及模型文件大小比較

      從表3 中可以得到剪枝后的模型mAP 值下降了0.054 45 左右(與原始模型相比,mAP 值下降5.5%),雖然模型精度在數(shù)值上下降了,但是模型對目標物體的識別實際情況沒有影響。隨機抽取圖像進行目標物體檢測,并將剪枝前后的模型對圖像中物體的識別框標注情況以及識別的概率值進行比較。隨機選取三張圖片對比結構化剪枝前后目標識別概率,如圖10~圖12所示。

      圖10 結構化剪枝目標檢測對比結果一

      圖11 結構化剪枝目標檢測對比結果二

      圖12 結構化剪枝目標檢測對比結果三

      圖10 中,3 個比較完整的目標 person1、person2、horse1 在剪枝后識別概率值仍為100%,不完整且比較靠后的目標Person3、Person4、Horse2、Horse3 剪枝后識別概率有少許下降,但是對物體的識別準確率(top-1)沒有變化,圖中每個目標都可以被準確無誤的識別,對于實驗結論不會產(chǎn)生影響。通過觀察,剪枝前后,識別框無明顯差別(數(shù)量與位置,說明識別概率較高),并且識別準確率無明顯下降。

      目前算法更加注重于理論的建立,新方法的提出;本文只對3×3的算子進行結構化剪枝,下一步會在其他卷積神經(jīng)網(wǎng)絡模型中對其他諸如7×7、5×5 的卷積核進行結構化剪枝,使得算法在識別所有目標時都能達到更高的識別概率,并在實際的工程應用中有更好的表現(xiàn)。

      從這三幅圖的測試對比結果可以看出,剪枝前后的模型都能檢測出所有物體,只是剪枝后模型在物體分類識別準確率方面要稍遜于剪枝前模型。

      接下來,從計算資源使用角度對結構化剪枝后的YOLOv3模型進行評估,使用的模型為YOLOv3-416模型;參考數(shù)值為YOLOv3官方網(wǎng)站的數(shù)據(jù)。

      使用FLOPS(Floating-point Operations Per Second,每秒浮點運算次數(shù))來評估YOLOv3 運算資源占用情況。FLOPS 的計算方法為:假設有m×k的矩陣A和k×n的矩陣B相乘,最終得到m×n的矩陣C,總的運算量為m×k×n次乘加,將一次乘加看成兩次運算,則最終需要2×m×k×n次運算。

      根據(jù)表1、依據(jù)重要性得分公式(3)計算出每個可結構化剪枝卷積層的得分Mj值,然后將38 個層的重要性累加得到;每個層重要性全局占比為Dl=,最后根據(jù)稀疏值配置策略,得到了全部38層卷積層結構化剪枝的3個參數(shù)kp_stride、kp_offset、kp_keepset。除去第一層重要性得分過大不做結構化剪枝操作,其他37 個層都分配了合適的稀疏值以及選擇適當?shù)木矸e過濾器。

      最終調試完成后確定的各層稀疏值,以及個卷積層結構化剪枝使用的卷積過濾器的3 個參數(shù)kp_stride、kp_offset、kp_keepset 如表2 所示。表中的輸入、輸出數(shù)據(jù)以及卷積過濾器信息結合圖4、圖5、圖6、圖7卷積過濾器結構,可以得到卷積運算過程中im2col操作后得到的矩陣相關長寬信息,繼而使用上述的計算方法得到剪枝后YOLOv3 模型預測一次需要的總浮點運算量,如表4所示。

      表4 YOLOv3預測一次總浮點運算量

      可以得到剪枝后,模型預測一次需要的總浮點運算量減少了46%左右,再加上接下來全部卷積層定點化壓縮優(yōu)化操作,理論上經(jīng)過本文壓縮優(yōu)化后的YOLOv3模型在硬件上平臺上能獲得非常高效的性能。

      4 結論

      在Darknet上實現(xiàn)YOLOv3卷積層結構化剪枝的參數(shù)壓縮方法。通過單層剪枝實驗得到的YOLOv3 模型參數(shù)具有冗余性,根據(jù)YOLOv3 具有卷積層多、卷積核尺寸大小單一等特點,提出了一種針對卷積層每層只使用一種卷積過濾器的結構化剪枝方法。設計評估卷積層相對整個網(wǎng)絡重要性的公式,計算得分并排序,然后對卷積層分配稀疏值以及卷積過濾器,最后在結構化剪枝的基礎上增加定點化操作,使得模型能在硬件平臺上穩(wěn)定運行。

      猜你喜歡
      剪枝過濾器結構化
      人到晚年宜“剪枝”
      促進知識結構化的主題式復習初探
      基于YOLOv4-Tiny模型剪枝算法
      結構化面試方法在研究生復試中的應用
      計算機教育(2020年5期)2020-07-24 08:53:00
      支持過濾器的REST模型研究與實現(xiàn)
      電子測試(2018年9期)2018-06-26 06:45:56
      聲音過濾器
      趣味(語文)(2018年2期)2018-05-26 09:17:55
      剪枝
      天津詩人(2017年2期)2017-03-16 03:09:39
      基于圖模型的通用半結構化數(shù)據(jù)檢索
      計算機工程(2015年8期)2015-07-03 12:20:35
      基于LOGO!的空氣過濾器自潔控制系統(tǒng)
      自動化博覽(2014年6期)2014-02-28 22:32:20
      一種面向不平衡數(shù)據(jù)分類的組合剪枝方法
      計算機工程(2014年6期)2014-02-28 01:26:33
      青州市| 大洼县| 土默特左旗| 凤凰县| 伊金霍洛旗| 新竹市| 隆安县| 宁陵县| 阿拉尔市| 开远市| 新昌县| 绥德县| 闽侯县| 佛教| 孝感市| 凤山市| 云南省| 武汉市| 汉沽区| 宾阳县| 阿克苏市| 西平县| 浮山县| 淄博市| 平凉市| 新干县| 廉江市| 吉安县| 西峡县| 四平市| 榕江县| 山阴县| 舒兰市| 雷州市| 岑巩县| 会理县| SHOW| 宕昌县| 宣城市| 陆良县| 松滋市|