0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺論深層卷積神經(jīng)網(wǎng)絡(luò)的剪枝優(yōu)化

電子工程師 ? 來源:電子技術(shù)應(yīng)用第12期 ? 作者:馬治楠 韓云杰 彭 ? 2021-04-28 10:40 ? 次閱讀

摘要: 隨著近幾年來深度學(xué)習(xí)的興起,其在目標(biāo)檢測、圖像分類、語音識別、自然語言處理等機(jī)器學(xué)習(xí)領(lǐng)域都取得了重大的突破,其中以卷積神經(jīng)網(wǎng)絡(luò)在深度學(xué)習(xí)中的運(yùn)用較多。自VGGNet出現(xiàn)以來,深度學(xué)習(xí)逐漸向深層的網(wǎng)絡(luò)發(fā)展,網(wǎng)絡(luò)越來越深,這不僅增大了對硬件平臺存儲、運(yùn)行內(nèi)存的需求,還大大增加了計(jì)算量,對硬件平臺資源的要求越來越高。

因此將深度學(xué)習(xí)應(yīng)用于嵌入式平臺尤為困難。對此,通過對模型進(jìn)行剪枝的方法將訓(xùn)練好的網(wǎng)絡(luò)模型壓縮處理,在基本保證準(zhǔn)確率的情況下去除不重要的參數(shù),縮減模型,減小網(wǎng)絡(luò)的計(jì)算復(fù)雜度,將深度學(xué)習(xí)應(yīng)用于嵌入式平臺。

0 引言

深度學(xué)習(xí)起源于人工神經(jīng)網(wǎng)絡(luò),后來LECUN Y提出了卷積神經(jīng)網(wǎng)絡(luò)LeNet-5[1],用于手寫數(shù)字識別,并取得了較好的成績,但當(dāng)時并沒有引起人們足夠的注意。隨后BP算法被指出梯度消失的問題,當(dāng)網(wǎng)絡(luò)反向傳播時,誤差梯度傳遞到前面的網(wǎng)絡(luò)層基本接近于0,導(dǎo)致無法進(jìn)行有效的學(xué)習(xí)。

2006年HINTON G E提出多隱層的網(wǎng)絡(luò)可以通過逐層預(yù)訓(xùn)練來克服深層神經(jīng)網(wǎng)絡(luò)在訓(xùn)練上的困難[2],隨后深度學(xué)習(xí)迎來了高速發(fā)展期。一些新型的網(wǎng)絡(luò)結(jié)構(gòu)不斷被提出(如AlexNet、VGGNet、GoogleNet、ResNet等),網(wǎng)絡(luò)結(jié)構(gòu)不斷被優(yōu)化,性能不斷提升,用于圖像識別可以達(dá)到很好的效果。然而這些網(wǎng)絡(luò)大都具有更多的網(wǎng)絡(luò)層,對計(jì)算機(jī)處理圖像的能力要求很高,需要更多的計(jì)算資源,一般使用較好的GPU來提高訓(xùn)練速度,不利于在硬件資源(內(nèi)存、處理器、存儲)較低的設(shè)備運(yùn)行,具有局限性。

深度學(xué)習(xí)發(fā)展到目前階段,其研究大體可以分為兩個方向:(1)設(shè)計(jì)復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),提高網(wǎng)絡(luò)的性能;(2)對網(wǎng)絡(luò)模型進(jìn)行壓縮,減少計(jì)算復(fù)雜度。在本文將討論第二種情況,去除模型中冗余的參數(shù),減少計(jì)算量,提高程序運(yùn)行速度。

目前很多網(wǎng)絡(luò)都具有更復(fù)雜的架構(gòu)設(shè)計(jì),這就造成網(wǎng)絡(luò)模型中存在很多的參數(shù)冗余,增加了計(jì)算復(fù)雜度,造成不必要的計(jì)算資源浪費(fèi)。模型壓縮大體有以下幾個研究方向:(1)設(shè)計(jì)更為精細(xì)的網(wǎng)絡(luò)結(jié)構(gòu),讓網(wǎng)絡(luò)的性能更為簡潔高效,如MobileNet網(wǎng)絡(luò)[3];(2)對模型進(jìn)行裁剪,越是結(jié)構(gòu)復(fù)雜的網(wǎng)絡(luò)越存在大量參數(shù)冗余,因此可以尋找一種有效的評判方法,對訓(xùn)練好的模型進(jìn)行裁剪;

(3)為了保持?jǐn)?shù)據(jù)的精度,一般常見的網(wǎng)絡(luò)模型的權(quán)重,通常將其保存為32 bit長度的浮點(diǎn)類型,這就大大增加了數(shù)據(jù)的存儲和計(jì)算復(fù)雜度。因此,可以將數(shù)據(jù)進(jìn)行量化,或者對數(shù)據(jù)二值化,通過數(shù)據(jù)的量化或二值化從而大大降低數(shù)據(jù)的存儲。除此之外,還可以對卷積核進(jìn)行核的稀疏化,將卷積核的一部分誘導(dǎo)為0,從而減少計(jì)算量[4]。

本文著重討論第二種方法,對模型的剪枝,通過對無用權(quán)重參數(shù)的裁剪,減少計(jì)算量。

1 CNN卷積神經(jīng)網(wǎng)絡(luò)

卷積神經(jīng)網(wǎng)絡(luò)是一種前饋式網(wǎng)絡(luò),網(wǎng)絡(luò)結(jié)構(gòu)由卷積層、池化層、全連接層組成[5]。卷積層的作用是從輸入層提取特征圖,給定訓(xùn)練集:

6368160324185828021761918.gif

在卷積層后面一般會加一個池化層,池化又稱為降采樣,池化層可以用來降低輸入矩陣的緯度,而保存顯著的特征,池化分為最大池化和平均池化,最大池化即給出相鄰矩陣區(qū)域的最大值。池化層具有減小網(wǎng)絡(luò)規(guī)模和參數(shù)冗余的作用。

2 卷積神經(jīng)網(wǎng)絡(luò)剪枝

6368160326517124681388836.gif

6368160328756254815269472.gif

2.1 模型壓縮的方法

本文用以下方法修剪模型:(1)首先使用遷移學(xué)習(xí)的方法對網(wǎng)絡(luò)訓(xùn)練,然后對網(wǎng)絡(luò)進(jìn)行微調(diào),使網(wǎng)絡(luò)收斂并達(dá)到最優(yōu),保存模型;(2)對保存的模型進(jìn)行修剪,并再次訓(xùn)練,對修剪后的模型參數(shù)通過訓(xùn)練進(jìn)行微調(diào),如此反復(fù)進(jìn)行,直到檢測不到可供裁剪的卷積核;(3)對上一步裁剪后的模型再次訓(xùn)練,直到訓(xùn)練的次數(shù)達(dá)到設(shè)定的標(biāo)準(zhǔn)為止。具體的流程如圖2所示。

6368160330249990105358372.gif

上述的處理流程比較簡單,重點(diǎn)是如何評判網(wǎng)絡(luò)模型中神經(jīng)元的重要性。本文用價值函數(shù)C(W)作為評判重要性的工具。對于數(shù)據(jù)集D,經(jīng)訓(xùn)練后得到網(wǎng)絡(luò)模型Model,其中的權(quán)重參數(shù)為:

6368160333748393145490252.gif

6368160334423386497570206.gif

2.2 參數(shù)評估

網(wǎng)絡(luò)參數(shù)的評估在模型壓縮中有著非常重要的作用。一般采用下面的這種方法,通過比較權(quán)重參數(shù)的l2范數(shù)的大小,刪除l2范數(shù)較小的卷積核[8]。除此之外,還可以通過激活驗(yàn)證的方法對參數(shù)進(jìn)行評判,將數(shù)據(jù)集通過網(wǎng)絡(luò)前向傳播,對于某個網(wǎng)絡(luò)節(jié)點(diǎn),若有大量通過激活函數(shù)后的數(shù)值為0或者小于一定的閾值,則將其舍去。

2.2.1 最小化l2范數(shù)

6368160338676043048249929.gif

3 實(shí)驗(yàn)結(jié)果

3.1 訓(xùn)練和剪枝結(jié)果

本設(shè)計(jì)在Ubuntu16.04系統(tǒng),搭載1080Ti顯卡的高性能服務(wù)器上進(jìn)行實(shí)驗(yàn),使用Pytorch深度學(xué)習(xí)框架進(jìn)行訓(xùn)練和測試。本設(shè)計(jì)使用VGG16網(wǎng)絡(luò),對16類常見的路面障礙物圖片進(jìn)行訓(xùn)練,其中數(shù)據(jù)集中的訓(xùn)練集有24 000張圖片,訓(xùn)練集12 000張圖片。在VGG16網(wǎng)絡(luò)中有16個卷積網(wǎng)絡(luò)層,共4 224個卷積核。采用遷移學(xué)習(xí)的方法對其進(jìn)行訓(xùn)練,設(shè)置epoch為30,訓(xùn)練的結(jié)果如圖3所示。

6368160341543245505133610.gif

圖3縱軸表示訓(xùn)練的準(zhǔn)確率,橫軸表示迭代次數(shù),最后的訓(xùn)練準(zhǔn)確率為97.97%。

將上面的訓(xùn)練參數(shù)保存為模型,對其進(jìn)行剪枝,分5次對其修剪,首先會根據(jù)l2范數(shù)最小值篩選出要修剪的網(wǎng)絡(luò)層中的卷積核,每次去除512個卷積核,修剪后模型中剩余的卷積核數(shù)量如圖4所示。

6368160344351030337201847.gif

圖4中縱軸表示模型中保留的卷積核的數(shù)量,從最初的4 224降到1 664,裁剪率達(dá)到60.6%。5次迭代修剪后的準(zhǔn)確率如圖5所示。

6368160346057263738960776.gif

對修剪后的網(wǎng)絡(luò)重新訓(xùn)練得到最終的修剪模型,訓(xùn)練過程如圖6所示。

6368160347963495239166655.gif

最后達(dá)到98.7%的準(zhǔn)確率。剪枝前模型大小為512 MB,剪枝后模型可以縮小到162 MB,將模型的內(nèi)存占用降低了68.35%。

3.2 嵌入式平臺下的移植測試

在嵌入式平臺樹莓派3代B型上移植Pytorch框架,樹莓派3b擁有1.2 GHz的四核BCM2837 64位ARM A53處理器,1 GB運(yùn)行內(nèi)存,板載BCM43143WiFi。由于樹莓派運(yùn)行內(nèi)存有限,故增加2 GB的swap虛擬內(nèi)存,用于編譯Pytorch框架源碼。將在GPU服務(wù)器上訓(xùn)練好的網(wǎng)絡(luò)模型移植到嵌入式平臺,對其進(jìn)行測試。

對123張測試圖片進(jìn)行檢測分類,載入裁剪前的原始模型,用時109.47 s,準(zhǔn)確率為95.08%。載入剪枝后的模型,同樣對123張圖片進(jìn)行測試,用時41.85 s,準(zhǔn)確率達(dá)到96.72%。結(jié)果如圖7所示,可以看到對模型裁剪后時間上減少了61%,速度有了很大提升。

6368160351333774869500050.gif

4 結(jié)論

目前深度學(xué)習(xí)是一個熱門的研究方向,在圖像檢測、分類、語音識別等方面取得了前所未有的成功,但這些依賴于高性能高配置的計(jì)算機(jī),也出現(xiàn)了各種深度學(xué)習(xí)框架以及網(wǎng)絡(luò)模型,但是可以預(yù)見深度學(xué)習(xí)即將邁入一個發(fā)展平緩期,如果不能有一個寬闊的應(yīng)用領(lǐng)域,深度學(xué)習(xí)的發(fā)展將很快被擱淺。誠然,將其應(yīng)用于嵌入式平臺將會是一個非常好的發(fā)展方向。相信未來深度學(xué)習(xí)在嵌入式領(lǐng)域會有一個更大的突破,部署于移動平臺將不再是一個難題。

作者:馬治楠 韓云杰 彭琳鈺 周進(jìn)凡 林付春 劉宇紅

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 存儲
    +關(guān)注

    關(guān)注

    13

    文章

    4317

    瀏覽量

    85878
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4332

    瀏覽量

    62666
  • 卷積神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    4

    文章

    367

    瀏覽量

    11867
收藏 人收藏

    評論

    相關(guān)推薦

    卷積神經(jīng)網(wǎng)絡(luò)與傳統(tǒng)神經(jīng)網(wǎng)絡(luò)的比較

    在深度學(xué)習(xí)領(lǐng)域,神經(jīng)網(wǎng)絡(luò)模型被廣泛應(yīng)用于各種任務(wù),如圖像識別、自然語言處理和游戲智能等。其中,卷積神經(jīng)網(wǎng)絡(luò)(CNNs)和傳統(tǒng)神經(jīng)網(wǎng)絡(luò)是兩種常見的模型。 1. 結(jié)構(gòu)差異 1.1 傳統(tǒng)
    的頭像 發(fā)表于 11-15 14:53 ?476次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本概念、原理及特點(diǎn)

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是一種深度學(xué)習(xí)算法,它在圖像識別、視頻分析、自然語言處理等領(lǐng)域有著廣泛的應(yīng)用。本文將詳細(xì)介紹卷積神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-11 14:38 ?1084次閱讀

    BP神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)的關(guān)系

    BP神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)是兩種在人工智能和機(jī)器學(xué)習(xí)領(lǐng)域
    的頭像 發(fā)表于 07-10 15:24 ?1557次閱讀

    循環(huán)神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)的區(qū)別

    循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是深度學(xué)習(xí)領(lǐng)域中兩種非常重要的神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-04 14:24 ?1314次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)與循環(huán)神經(jīng)網(wǎng)絡(luò)的區(qū)別

    在深度學(xué)習(xí)領(lǐng)域,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks, CNN)和循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks, RNN)是兩種極其重要
    的頭像 發(fā)表于 07-03 16:12 ?3352次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)原理

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。本文將詳細(xì)介紹卷積神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-03 10:49 ?557次閱讀

    bp神經(jīng)網(wǎng)絡(luò)卷積神經(jīng)網(wǎng)絡(luò)區(qū)別是什么

    BP神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Network)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)是兩種不同類型的人工神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-03 10:12 ?1204次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)分類方法有哪些

    ,包括基本原理、常見架構(gòu)、優(yōu)化策略、應(yīng)用場景等。 1. 卷積神經(jīng)網(wǎng)絡(luò)的基本原理 卷積神經(jīng)網(wǎng)絡(luò)是一種前饋
    的頭像 發(fā)表于 07-03 09:40 ?478次閱讀

    cnn卷積神經(jīng)網(wǎng)絡(luò)分類有哪些

    卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像分類、目標(biāo)檢測、語義分割等領(lǐng)域。本文將詳細(xì)介紹CNN在分類任務(wù)中的應(yīng)用,包括基本結(jié)構(gòu)、關(guān)鍵技術(shù)、常見網(wǎng)絡(luò)架構(gòu)以及實(shí)際應(yīng)用案例。 引言 1.1
    的頭像 發(fā)表于 07-03 09:28 ?629次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)激活函數(shù)的作用

    起著至關(guān)重要的作用,它們可以增加網(wǎng)絡(luò)的非線性,提高網(wǎng)絡(luò)的表達(dá)能力,使網(wǎng)絡(luò)能夠?qū)W習(xí)到更加復(fù)雜的特征。本文將詳細(xì)介紹卷積神經(jīng)網(wǎng)絡(luò)中激活函數(shù)的作用
    的頭像 發(fā)表于 07-03 09:18 ?1107次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練的是什么

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。本文將詳細(xì)介紹卷積神經(jīng)網(wǎng)絡(luò)
    的頭像 發(fā)表于 07-03 09:15 ?423次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的原理與實(shí)現(xiàn)

    1.卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。 卷積神經(jīng)網(wǎng)絡(luò)是一種前饋
    的頭像 發(fā)表于 07-02 16:47 ?600次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)及其功能

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、視頻分析、自然語言處理等領(lǐng)域。本文將詳細(xì)介紹卷積神經(jīng)網(wǎng)絡(luò)的基
    的頭像 發(fā)表于 07-02 14:45 ?2143次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)的原理是什么

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡稱CNN)是一種深度學(xué)習(xí)模型,廣泛應(yīng)用于圖像識別、語音識別、自然語言處理等領(lǐng)域。本文將詳細(xì)介紹卷積神經(jīng)網(wǎng)絡(luò)的原
    的頭像 發(fā)表于 07-02 14:44 ?666次閱讀

    卷積神經(jīng)網(wǎng)絡(luò)和bp神經(jīng)網(wǎng)絡(luò)的區(qū)別

    卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,簡稱CNN)和BP神經(jīng)網(wǎng)絡(luò)(Backpropagation Neural Networks,簡稱BPNN)是兩種
    的頭像 發(fā)表于 07-02 14:24 ?4118次閱讀