<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 消費(fèi)電子 > 設(shè)計(jì)應(yīng)用 > CNN模型壓縮與加速算法綜述

          CNN模型壓縮與加速算法綜述

          作者: 時(shí)間:2018-07-25 來(lái)源:網(wǎng)絡(luò) 收藏

          自從AlexNet一舉奪得ILSVRC 2012 ImageNet圖像分類競(jìng)賽的冠軍后,卷積神經(jīng)網(wǎng)絡(luò)(CNN)的熱潮便席卷了整個(gè)視覺(jué)領(lǐng)域。CNN模型火速替代了傳統(tǒng)人工設(shè)計(jì)(hand-crafted)特征和分類器,不僅提供了一種端到端的處理方法,還大幅度地刷新了各個(gè)圖像競(jìng)賽任務(wù)的精度,更甚者超越了人眼的精度(LFW人臉識(shí)別任務(wù))。CNN模型在不斷逼近視覺(jué)任務(wù)的精度極限的同時(shí),其深度和尺寸也在成倍增長(zhǎng)。

          本文引用地址:http://www.ex-cimer.com/article/201807/383798.htm

          表1 幾種經(jīng)典模型的尺寸,計(jì)算量和參數(shù)數(shù)量對(duì)比

          ModelModel Size(MB)Million
          Mult-Adds
          Million
          Parameters
          AlexNet[1]>20072060
          VGG16[2]>50015300138
          GoogleNet[3]~5015506.8
          Inception-v3[4]90-100500023.2

          隨之而來(lái)的是一個(gè)很尷尬的場(chǎng)景:如此巨大的模型只能在有限的平臺(tái)下使用,根本無(wú)法移植到移動(dòng)端和嵌入式芯片當(dāng)中。就算想通過(guò)網(wǎng)絡(luò)傳輸,但較高的帶寬占用也讓很多用戶望而生畏。另一方面,大尺寸的模型也對(duì)設(shè)備功耗和運(yùn)行速度帶來(lái)了巨大的挑戰(zhàn)。因此這樣的模型距離實(shí)用還有一段距離。

          在這樣的情形下,模型小型化與加速成了亟待解決的問(wèn)題。其實(shí)早期就有學(xué)者提出了一系列CNN模型壓縮方法,包括權(quán)值剪值(prunning)和矩陣SVD分解等,但壓縮率和效率還遠(yuǎn)不能令人滿意。

          近年來(lái),關(guān)于模型小型化的算法從壓縮角度上可以大致分為兩類:從模型權(quán)重?cái)?shù)值角度壓縮和從網(wǎng)絡(luò)架構(gòu)角度壓縮。另一方面,從兼顧計(jì)算速度方面,又可以劃分為:僅壓縮尺寸和壓縮尺寸的同時(shí)提升速度。

          本文主要討論如下幾篇代表性的文章和方法,包括SqueezeNet[5]、Deep Compression[6]、XNorNet[7]、Distilling[8]、MobileNet[9]和ShuffleNet[10],也可按照上述方法進(jìn)行大致分類:

          表2 幾種經(jīng)典壓縮方法及對(duì)比

          MethodCompression ApproachSpeed Consideration
          SqueezeNetarchitectureNo
          Deep CompressionweightsNo
          XNorNetweightsYes
          DistillingarchitectureNo
          MobileNetarchitectureYes
          ShuffleNetarchitectureYes

          一、SqueezeNet

          1.1 設(shè)計(jì)思想

          SqueezeNet是F. N. Iandola,S.Han等人于2016年的論文《SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and 0.5MB model size》中提出的一個(gè)小型化的網(wǎng)絡(luò)模型結(jié)構(gòu),該網(wǎng)絡(luò)能在保證不損失精度的同時(shí),將原始AlexNet壓縮至原來(lái)的510倍左右( 0.5MB)。

          SqueezeNet的核心指導(dǎo)思想是——在保證精度的同時(shí)使用最少的參數(shù)。

          而這也是所有模型壓縮方法的一個(gè)終極目標(biāo)。

          基于這個(gè)思想,SqueezeNet提出了3點(diǎn)網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計(jì)策略:

          策略 1.將3x3卷積核替換為1x1卷積核。

          這一策略很好理解,因?yàn)?個(gè)1x1卷積核的參數(shù)是3x3卷積核參數(shù)的1/9,這一改動(dòng)理論上可以將模型尺寸壓縮9倍。

          策略 2.減小輸入到3x3卷積核的輸入通道數(shù)。

          我們知道,對(duì)于一個(gè)采用3x3卷積核的卷積層,該層所有卷積參數(shù)的數(shù)量(不考慮偏置)為:

          式中,N是卷積核的數(shù)量,也即輸出通道數(shù),C是輸入通道數(shù)。

          因此,為了保證減小網(wǎng)絡(luò)參數(shù),不僅僅需要減少3x3卷積核的數(shù)量,還需減少輸入到3x3卷積核的輸入通道數(shù)量,即式中C的數(shù)量。

          策略 3.盡可能的將降采樣放在網(wǎng)絡(luò)后面的層中。

          在卷積神經(jīng)網(wǎng)絡(luò)中,每層輸出的特征圖(feature map)是否下采樣是由卷積層的步長(zhǎng)或者池化層決定的。而一個(gè)重要的觀點(diǎn)是:分辨率越大的特征圖(延遲降采樣)可以帶來(lái)更高的分類精度,而這一觀點(diǎn)從直覺(jué)上也可以很好理解,因?yàn)榉直媛试酱蟮妮斎肽軌蛱峁┑男畔⒕驮蕉唷?/p>

          上述三個(gè)策略中,前兩個(gè)策略都是針對(duì)如何降低參數(shù)數(shù)量而設(shè)計(jì)的,最后一個(gè)旨在最大化網(wǎng)絡(luò)精度。

          1.2 網(wǎng)絡(luò)架構(gòu)

          基于以上三個(gè)策略,作者提出了一個(gè)類似inception的網(wǎng)絡(luò)單元結(jié)構(gòu),取名為fire module。一個(gè)fire module 包含一個(gè)squeeze 卷積層(只包含1x1卷積核)和一個(gè)expand卷積層(包含1x1和3x3卷積核)。其中,squeeze層借鑒了inception的思想,利用1x1卷積核來(lái)降低輸入到expand層中3x3卷積核的輸入通道數(shù)。如圖1所示。

          圖1 Fire module結(jié)構(gòu)示意圖

          其中,定義squeeze層中1x1卷積核的數(shù)量是s1x1,類似的,expand層中1x1卷積核的數(shù)量是e1x1, 3x3卷積核的數(shù)量是e3x3。令s1x1 e1x1+ e3x3從而保證輸入到3x3的輸入通道數(shù)減小。SqueezeNet的網(wǎng)絡(luò)結(jié)構(gòu)由若干個(gè) fire module 組成,另外文章還給出了一些架構(gòu)設(shè)計(jì)上的細(xì)節(jié):

          為了保證1x1卷積核和3x3卷積核具有相同大小的輸出,3x3卷積核采用1像素的zero-padding和步長(zhǎng)

          squeeze層和expand層均采用RELU作為激活函數(shù)

          在fire9后采用50%的dropout

          由于全連接層的參數(shù)數(shù)量巨大,因此借鑒NIN[11]的思想,去除了全連接層而改用global average pooling。

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

          表3 不同壓縮方法在ImageNet上的對(duì)比實(shí)驗(yàn)結(jié)果[5]

          上表顯示,相比傳統(tǒng)的壓縮方法,SqueezeNet能在保證精度不損(甚至略有提升)的情況下,達(dá)到最大的壓縮率,將原始AlexNet從240MB壓縮至4.8MB,而結(jié)合Deep Compression后更能達(dá)到0.47MB,完全滿足了移動(dòng)端的部署和低帶寬網(wǎng)絡(luò)的傳輸。

          此外,作者還借鑒ResNet思想,對(duì)原始網(wǎng)絡(luò)結(jié)構(gòu)做了修改,增加了旁路分支,將分類精度提升了約3%。

          1.4 速度考量

          盡管文章主要以壓縮模型尺寸為目標(biāo),但毋庸置疑的一點(diǎn)是,SqueezeNet在網(wǎng)絡(luò)結(jié)構(gòu)中大量采用1x1和3x3卷積核是有利于速度的提升的,對(duì)于類似caffe這樣的深度學(xué)習(xí)框架,在卷積層的前向計(jì)算中,采用1x1卷積核可避免額外的im2col操作,而直接利用gemm進(jìn)行矩陣加速運(yùn)算,因此對(duì)速度的優(yōu)化是有一定的作用的。然而,這種提速的作用仍然是有限的,另外,SqueezeNet采用了9個(gè)fire module和兩個(gè)卷積層,因此仍需要進(jìn)行大量常規(guī)卷積操作,這也是影響速度進(jìn)一步提升的瓶頸。

          二、Deep Compression

          Deep Compression出自S.Han 2016 ICLR的一篇論文《Deep Compression: Compressing Deep Neural Networks with Pruning, Trained Quantization and Huffman Coding》。該文章獲得了ICLR 2016的最佳論文獎(jiǎng),同時(shí)也具有里程碑式的意義,引領(lǐng)了CNN模型小型化與加速研究方向的新狂潮,使得這一領(lǐng)域近兩年來(lái)涌現(xiàn)出了大量的優(yōu)秀工作與文章。

          2.1 算法流程

          與前面的“架構(gòu)壓縮派”的SqueezeNet不同,Deep Compression是屬于“權(quán)值壓縮派”的。而兩篇文章均出自S.Han團(tuán)隊(duì),因此兩種方法結(jié)合,雙劍合璧,更是能達(dá)到登峰造極的壓縮效果。這一實(shí)驗(yàn)結(jié)果也在上表中得到驗(yàn)證。

          Deep Compression的算法流程包含三步,如圖2所示:

          圖2 Deep Compression Pipeline

          1、Pruning(權(quán)值剪枝)

          剪枝的思想其實(shí)早已在早期論文中可以窺見(jiàn),LeCun等人曾經(jīng)就利用剪枝來(lái)稀疏網(wǎng)絡(luò),減小過(guò)擬合的風(fēng)險(xiǎn),提升網(wǎng)絡(luò)泛化性。

          圖3是MNIST上訓(xùn)練得到的LeNet conv1卷積層中的參數(shù)分布,可以看出,大部分權(quán)值集中在0處附近,對(duì)網(wǎng)絡(luò)的貢獻(xiàn)較小,在剪值中,將0值附近的較小的權(quán)值置0,使這些權(quán)值不被激活,從而著重訓(xùn)練剩下的非零權(quán)值,最終在保證網(wǎng)絡(luò)精度不變的情況下達(dá)到壓縮尺寸的目的。

          實(shí)驗(yàn)發(fā)現(xiàn)模型對(duì)剪枝更敏感,因此在剪值時(shí)建議逐層迭代修剪,另外每層的剪枝比例如何自動(dòng)選取仍然是一個(gè)值得深入研究的課題。

          圖3 LeNet conv1層權(quán)值分布圖

          2、Quantization (權(quán)值量化)

          此處的權(quán)值量化基于權(quán)值聚類,將連續(xù)分布的權(quán)值離散化,從而減小需要存儲(chǔ)的權(quán)值數(shù)量。

          初始化聚類中心,實(shí)驗(yàn)證明線性初始化效果最好;

          利用k-means算法進(jìn)行聚類,將權(quán)值劃分到不同的cluster中;

          在前向計(jì)算時(shí),每個(gè)權(quán)值由其聚類中心表示;

          在后向計(jì)算時(shí),統(tǒng)計(jì)每個(gè)cluster中的梯度和將其反傳。

          圖4 權(quán)值量化前向和后向計(jì)算過(guò)程

          3、Huffman encoding(霍夫曼編碼)

          霍夫曼編碼采用變長(zhǎng)編碼將平均編碼長(zhǎng)度減小,進(jìn)一步壓縮模型尺寸。

          2.2 模型存儲(chǔ)

          前述的剪枝和量化都是為了實(shí)現(xiàn)模型的更緊致的壓縮,以實(shí)現(xiàn)減小模型尺寸的目的。

          對(duì)于剪枝后的模型,由于每層大量參數(shù)為0,后續(xù)只需將非零值及其下標(biāo)進(jìn)行存儲(chǔ),文章中采用CSR(Compressed Sparse Row)來(lái)進(jìn)行存儲(chǔ),這一步可以實(shí)現(xiàn)9x~13x的壓縮率。

          對(duì)于量化后的模型,每個(gè)權(quán)值都由其聚類中心表示(對(duì)于卷積層,聚類中心設(shè)為256個(gè),對(duì)于全連接層,聚類中心設(shè)為32個(gè)),因此可以構(gòu)造對(duì)應(yīng)的碼書(shū)和下標(biāo),大大減少了需要存儲(chǔ)的數(shù)據(jù)量,此步能實(shí)現(xiàn)約3x的壓縮率。

          最后對(duì)上述壓縮后的模型進(jìn)一步采用變長(zhǎng)霍夫曼編碼,實(shí)現(xiàn)約1x的壓縮率。

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

          表4 不同網(wǎng)絡(luò)采用Deep Compression后的壓縮率

          通過(guò)SqueezeNet+Deep Compression,可以將原始240M的AlexNet壓縮至0.47M,實(shí)現(xiàn)約510x的壓縮率。

          2.4 速度考量

          可以看出,Deep Compression的主要設(shè)計(jì)是針對(duì)網(wǎng)絡(luò)存儲(chǔ)尺寸的壓縮,但在前向時(shí),如果將存儲(chǔ)模型讀入展開(kāi)后,并沒(méi)有帶來(lái)更大的速度提升。因此Song H.等人專門針對(duì)壓縮后的模型設(shè)計(jì)了一套基于FPGA的硬件前向加速框架EIE[12],有興趣的可以研究一下。

          三、XNorNet

          二值網(wǎng)絡(luò)一直是模型壓縮和加速領(lǐng)域經(jīng)久不衰的研究課題之一。將原始32位浮點(diǎn)型的權(quán)值壓縮到1比特,如何最大程度地減小性能損失就成為了研究的關(guān)鍵。

          此篇論文主要有以下幾個(gè)貢獻(xiàn):

          提出了一個(gè)BWN(Binary-Weight-Network)和XNOR-Network,前者只對(duì)網(wǎng)絡(luò)參數(shù)做二值化,帶來(lái)約32x的存儲(chǔ)壓縮和2x的速度提升,而后者對(duì)網(wǎng)絡(luò)輸入和參數(shù)都做了二值化,在實(shí)現(xiàn)32x存儲(chǔ)壓縮的同時(shí)帶了58x的速度提升;

          提出了一個(gè)新型二值化權(quán)值的算法;

          第一個(gè)在大規(guī)模數(shù)據(jù)集如ImageNet上提交二值化網(wǎng)絡(luò)結(jié)果的工作;

          無(wú)需預(yù)訓(xùn)練,可實(shí)現(xiàn)training from scratch。

          3.1 BWN

          即最優(yōu)的二值化濾波器張量B即為原始參數(shù)的符號(hào)函數(shù),最優(yōu)的尺度因子為每個(gè)濾波器權(quán)值的絕對(duì)值的均值。

          訓(xùn)練算法如圖5所示,值得注意的是,只有在前向計(jì)算和后向傳播時(shí)使用二值化后的權(quán)值,在更新參數(shù)時(shí)依然使用原始參數(shù),這是因?yàn)槿绻褂枚祷蟮膮?shù)會(huì)導(dǎo)致很小的梯度下降,從而使得訓(xùn)練無(wú)法收斂。

          3.2 XNOR-Net

          在XNOR網(wǎng)絡(luò)中,優(yōu)化的目標(biāo)是將兩個(gè)實(shí)數(shù)向量的點(diǎn)乘近似到兩個(gè)二值向量的點(diǎn)乘,即

          在卷積計(jì)算中,輸入和權(quán)值均量化成了二值,因此傳統(tǒng)的乘法計(jì)算變成了異或操作,而非二值化數(shù)據(jù)的計(jì)算只占了很小一部分。


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: 計(jì)算機(jī)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();