深度學習模型壓縮與加速


  深度神經網絡在人工智能的應用中,包括語音識別、計算機視覺、自然語言處理等各方面,在取得巨大成功的同時,這些深度神經網絡需要巨大的計算開銷和內存開銷,嚴重阻礙了資源受限下的使用。模型壓縮是對已經訓練好的深度模型進行精簡,進而得到一個輕量且准確率相當的網絡,壓縮后的網絡具有更小的結構和更少的參數,可以有效降低計算和存儲開銷,便於部署在受限的硬件環境中。

許多網絡結構中,如VGG-16網絡,參數數量1億3千多萬,占用500MB空間,需要進行309億次浮點運算才能完成一次圖像識別任務。相關研究表明,並不是所有的參數都在模型中發揮作用,存在着大量冗余地節點,僅僅只有少部分(5-10%)權值參與着主要的計算,也就是說,僅僅訓練小部分的權值參數就可以達到和原來網絡相近的性能。

  模型壓縮方法主要有:

緊湊的模型設計、剪枝(Pruning)、量化(Quantization)、低秩近似/分解(low-rank Approximation/factorization)、知識蒸餾(Knowledge distillation)

模型壓縮方法 描述 應用場景 方法細節
緊湊的模型設計 設計特別的卷積和來保存參數 只有卷積層 設計了特殊的結構卷積濾波器來降低存儲和計算復雜度,只能從零開始訓練
剪枝(Pruning) 刪除對准確率影響不大的參數 卷積和全連接層 針對模型參數的冗余性,試圖去除冗余和不重要的項,支持從零訓練和預訓練
量化(Quantization)      

低秩近似/分解

(low-rank Approximation/factorization)

使用矩陣對參數進行分解估計 卷積和全連接層 使用矩陣/張量分解來估計深度學習模型的信息參數,支持從零訓練和預訓練
知識蒸餾(Knowledge distillation) 訓練一個更緊湊的神經網絡來從大的模型蒸餾知識 卷積和全連接層

通過學習一個蒸餾模型,訓練一個更緊湊的神經網絡來重現一個更大的網絡的輸出,只能從零開始訓練

也能把模型壓縮分為前端壓縮和后端壓縮:

緊湊的模型結構設計

  輕量網絡設計方向的主要代表論文是 MobileNet v1 / v2,ShuffleNet v1 / v2 等,其主要思想是利用 Depthwise Convolution、Pointwise Convolution、Group Convolution 等計算量更小、更分散的卷積操作代替標准卷積。也有將5x5卷積替換為兩個3x3卷積、深度可分離卷積(3x3卷積替換為1*1卷積(降維作用)+3*3卷積)等輕量化設計。

分組卷積

  分組卷積即將輸入的feature maps分成不同的組(沿channel維度進行分組),然后對不同的組分別進行卷積操作,即每一個卷積核至於輸入的feature maps的其中一組進行連接,而普通的卷積操作是與所有的feature maps進行連接計算。分組數k越多,卷積操作的總參數量和總計算量就越少(減少k倍)。然而分組卷積有一個致命的缺點就是不同分組的通道間減少了信息流通,即輸出的feature maps只考慮了輸入特征的部分信息,因此在實際應用的時候會在分組卷積之后進行信息融合操作,接下來主要講兩個比較經典的結構,ShuffleNet[1]和MobileNet[2]結構。

1) ShuffleNet結構:

  如上圖所示,圖a是一般的group convolution的實現效果,其造成的問題是,輸出通道只和輸入的某些通道有關,導致全局信息 流通不暢,網絡表達能力不足。圖b就是shufflenet結構,即通過均勻排列,把group convolution后的feature map按通道進行均勻混合,這樣就可以更好的獲取全局信息了。 圖c是操作后的等價效果圖。在分組卷積的時候,每一個卷積核操作的通道數減少,所以可以大量減少計算量。

2) MobileNet結構:

如上圖所示,mobilenet采用了depthwise separable convolutions的思想,采用depthwise (或叫channelwise)和1x1 pointwise的方法進行分解卷積。其中depthwise separable convolutions即對每一個通道進行卷積操作,可以看成是每組只有一個通道的分組卷積,最后使用開銷較小的1x1卷積進行通道融合,可以大大減少計算量。

3、MobileNetV2:

隨后谷歌提出了一種改進模型稱為MobileNet V2,其提高了它在多個任務和基准、不同模型尺寸范圍內的性能,並定義了一種稱為SSDLite的新框架。其特點是:

  • 基於逆殘差結構(inverted residual structure),其中薄的瓶頸(bottleneck)層之間設置快捷連接(skip connection)。
  • 中間擴展層使用輕型深度卷積來過濾特征作為非線性的來源。
  • 另外,去除窄層中的非線性以保持表征能力是很重要的。
  • 最后,它允許輸入/輸出域與變換的表達相分離。

ReLU一定會帶來信息損耗,而且這種損耗是沒有辦法恢復的。可以有兩種解決方案:

  1. 將ReLU替換成線性激活函數;
  2. 較多的通道數能減少信息損耗,那么使用更多的通道。

ProjectionNet: Learning Efficient On-Device Deep Networks Using Neural Projections

AMC: AutoML for Model Compression and Acceleration on Mobile Devices

分解卷積

分解卷積,即將普通的kxk卷積分解為kx1和1xk卷積,通過這種方式可以在感受野相同的時候大量減少計算量,同時也減少了參數量,在某種程度上可以看成是使用2k個參數模擬k*k個參數的卷積效果,從而造成網絡的容量減小,但是可以在較少損失精度的前提下,達到網絡加速的效果。

右圖是在圖像語義分割任務上取得非常好的效果的ERFNet[3]的主要模塊,稱為NonBottleNeck結構借鑒自ResNet[4]中的Non-Bottleneck結構,相應改進為使用分解卷積替換標准卷積,這樣可以減少一定的參數和計算量,使網絡更趨近於efficiency。

Bottleneck結構

  右圖為ENet[5]中的Bottleneck結構,借鑒自ResNet中的Bottleneck結構,主要是通過1x1卷積進行降維和升維,能在一定程度上能夠減少計算量和參數量。其中1x1卷積操作的參數量和計算量少,使用其進行網絡的降維和升維操作(減少或者增加通道數)的開銷比較小,從而能夠達到網絡加速的目的。

C.ReLU[7]結構

C.ReLU來源於CNNs中間激活模式引發的。輸出節點傾向於是"配對的",一個節點激活是另一個節點的相反面,即其中一半通道的特征是可以通過另外一半通道的特征生成的。根據這個觀察,C.ReLU減少一半輸出通道(output channels)的數量,然后通過其中一半通道的特征生成另一半特征,這里使用 negation使其變成雙倍,最后通過scale操作使得每個channel(通道)的斜率和激活閾值與其相反的channel不同。

SqueezeNet[8]結構

  SqueezeNet思想非常簡單,就是將原來簡單的一層conv層變成兩層:squeeze層+expand層,各自帶上Relu激活層。在squeeze層里面全是1x1的卷積kernel,數量記為S11;在expand層里面有1x1和3x3的卷積kernel,數量分別記為E11和E33,要求S11 < input map number。expand層之后將 1x1和3x3的卷積output feature maps在channel維度拼接起來。

神經網絡搜索[18]

  神經結構搜索(Neural Architecture Search,簡稱NAS)是一種自動設計神經網絡的技術,可以通過算法根據樣本集自動設計出高性能的網絡結構,在某些任務上甚至可以媲美人類專家的水准,甚至發現某些人類之前未曾提出的網絡結構,這可以有效的降低神經網絡的使用和實現成本。

  NAS的原理是給定一個稱為搜索空間的候選神經網絡結構集合,用某種策略從中搜索出最優網絡結構。神經網絡結構的優劣即性能用某些指標如精度、速度來度量,稱為性能評估,可以通過NAS自動搜索出高效率的網絡結構。

總結

  本節主要介紹了模型模型設計的思路,同時對模型的加速設計以及相關缺陷進行分析。總的來說,加速網絡模型設計主要是探索最優的網絡結構,使得較少的參數量和計算量就能達到類似的效果。

低秩近似/分解

  這一部分的思路比較簡單,如果把原先網絡的權值矩陣當作滿秩矩陣來看,我們可以使用多種矩陣低秩近似方法,將兩個大矩陣的乘法操作拆解為多個小矩陣之間的一系列乘法操作,降低整體的計算量,加速模型的執行速度。

優點

  • 可以降低存儲和計算消耗;
  • 一般可以壓縮2-3倍;
  • 精度幾乎沒有損失;

缺點

  • 利用低秩近似重構參數矩陣不能保證模型的性能 ;
  • 隨着模型復雜度的提升,搜索空間急劇增大。

在這方面有幾篇經典的論文

Jaderberg M, Vedaldi A, Zisserman A. Speeding up convolutional neural networks with low rank expansions[J]. arXiv preprint arXiv:1405.3866, 2014.

這篇文章提出用$k*1+1*k$的卷積核來替代$k*k$的卷積核的方法來進行低秩近似,下圖可以很直觀的表達作者思想:

該方法在場景文字識別中實驗在無精度損失的情況下達到原來的2.5倍速,而達到4.5倍速的同時僅損失1%的accuracy。

2014-Exploiting Linear StructureWithin Convolutional Networks for Efficient Evaluation

2015-NPIS-Structured transforms for small footprint deep learning

2015-Accelerating Very Deep Convolutional Networks for Classification and Detection

2014-Speeding-up Convolutional Neural Networks Using Fine-tuned CP-Decomposition||pytorch代碼||借鑒博客

2015-Compression of Deep Convolutional Neural Networks for Fast and Low Power Mobile Applications||pytorch代碼

2017-High performance ultra-low-precision convolutions on mobile devices

存在問題

  應該說矩陣分解方法經過過去的發展已經非常成熟了,所以在2017、2018年的工作就只有Tensor Ring和Block Term分解在RNN的應用兩篇相關文章了。

那么為什么Low-Rank在這兩年不再流行了呢?除了剛才提及的分解方法顯而易見、比較容易實現之外,另外一個比較重要的原因是現在越來越多網絡中采用1×1的卷積,而這種小的卷積使用矩陣分解的方法很難實現網絡加速和壓縮。

模型剪枝 (pruning)

深度學習網絡模型存在着大量冗余的參數,將權重矩陣中相對“不重要”的權值剔除,從而達到降低計算資源消耗和提高實時性的效果,而對應的技術則被稱為模型剪枝。

剪枝步驟:使用L1\L2正則訓練一個稀疏模型,進行模型剪裁,再訓練,再剪裁...。如果一次剪枝過多,網絡可能會損壞,無法恢復。所以在實踐中,這是一個迭代執行的步驟。

  模型剪枝算法根據粒度的不同,可以粗分為4種粒度:

  1. 細粒度剪枝(fine-grained):對連接或者神經元進行剪枝,它是粒度最小的剪枝。
  2. 向量剪枝(vector-level):它相對於細粒度剪枝粒度更大,屬於對卷積核內部(intra-kernel)的剪枝。
  3. 核剪枝(kernel-level):去除某個卷積核,它將丟棄對輸入通道中對應計算通道的響應。
  4. 濾波器剪枝(Filter-level):對整個卷積核組進行剪枝,會造成推理過程中輸出特征通道數的改變。

  細粒度剪枝(fine-grained),向量剪枝(vector-level),核剪枝(kernel-level)方法在參數量與模型性能之間取得了一定的平衡,但是網絡的拓撲結構本身發生了變化,需要專門的算法設計來支持這種稀疏的運算,被稱之為非結構化剪枝。非結構化修剪方法(直接修剪權重)的一個缺點是所得到的權重矩陣是稀疏的,如果沒有專用硬件/庫,則不能達到壓縮和加速的效果。

  濾波器剪枝(Filter-level)只改變了網絡中的濾波器組和特征通道數目,所獲得的模型不需要專門的算法設計就能夠運行,被稱為結構化剪枝。除此之外還有對整個網絡層的剪枝,它可以被看作是濾波器剪枝(Filter-level)的變種,即所有的濾波器都丟棄。

細粒度剪枝(連接剪枝):其中重點在於兩個,一個是如何評估一個連接的重要性,另一個是如何在剪枝后恢復模型的性能。

第一步:訓練一個基准模型。

第二步:對權重值的幅度進行排序,去掉低於一個預設閾值的連接,得到剪枝后的網絡。

第三步:對剪枝后網絡進行微調以恢復損失的性能,然后繼續進行第二步,依次交替,直到滿足終止條件,比如精度下降在一定范圍內。

  • 優點:保留模型精度
  • 缺點:非結構化剪枝,對局部進行調整,依賴於專門的運行庫和硬件設備

粗粒度剪枝(通道剪枝):相對於連接權重剪枝,粗粒度剪枝其實更加有用,它可以得到不需要專門的算法支持的精簡小模型。

第一個是基於重要性因子,即評估一個通道的有效性,再配合約束一些通道使得模型結構本身具有稀疏性,從而基於此進行剪枝。

第二個是利用重建誤差來指導剪枝,間接衡量一個通道對輸出的影響。

第三個是基於優化目標的變化來衡量通道的敏感性。

  • 優點:模型速度和大小有效提升,保證了通用性
  • 缺點:容易造成精度大幅下降,同時模型殘留冗余

迭代式剪枝:訓練權重-->剪枝-->訓練

動態剪枝:剪枝與訓練同時進行,一般指稀疏約束的方法,具體做法是在網絡的優化目標中加入權重的稀疏正則項,使得訓練時網絡的部分權重趨向於0,而這些0值正是剪枝對象。

【知乎】模型剪枝技術原理及其發展現狀和展望

【CSDN文章】深度學習模型壓縮與優化加速

【博客園】深度學習網絡模型壓縮剪枝詳細分析

模型量化

  神經網絡的參數類型一般是32位浮點型,通過對網絡中的浮點值進行量化處理,一來可以降低權重所需的比特數,二來浮點數計算可以轉換為位操作(或者小整數計算),不僅能夠減少網絡的存儲,而且能夠大幅度進行加速。量化后的權值張量是一個高度稀疏的有很多共享權值的矩陣,對非零參數,我們還可以進行定點壓縮,以獲得更高的壓縮率。常見的量化方法有:二值神經網絡、同或網絡、三值權重網絡、量化神經網絡等。最為典型就是二值網絡、XNOR網絡等。其主要原理就是采用1 bit對網絡的輸入、權重、響應進行編碼。減少模型大小的同時,原始網絡的卷積操作可以被bit-wise運算代替,極大提升了模型的速度。但是,如果原始網絡結果不夠復雜,由於二值網絡會較大程度降低模型的表達能力。因此現階段有相關的論文開始研究n-bit編碼方式成為n值網絡或者多值網絡或者變bit、組合bit量化來克服二值網絡表達能力不足的缺點。

優點:模型大小減少8-16倍,模型性能損失很小

缺點

  • 壓縮率大時,性能顯著下降
  • 依賴專門的運行庫,通用性較差

Gong et al. 對參數值使用 K-Means 量化。

Vanhoucke et al. 使用了 8 比特參數量化可以在准確率損失極小的同時實現大幅加速。

Han S 提出一套完整的深度網絡的壓縮流程:首先修剪不重要的連接,重新訓練稀疏連接的網絡。然后使用權重共享量化連接的權重,再對量化后的權重和碼本進行霍夫曼編碼,以進一步降低壓縮率。如圖 2 所示,包含了三階段的壓縮方法:修剪、量化(quantization)和霍夫曼編碼。修剪減少了需要編碼的權重數量,量化和霍夫曼編碼減少了用於對每個權重編碼的比特數。對於大部分元素為 0 的矩陣可以使用稀疏表示,進一步降低空間冗余,且這種壓縮機制不會帶來任何准確率損失。這篇論文獲得了 ICLR 2016 的 Best Paper。

二值神經網絡

  二值神經網絡(BNN)要求不僅對權重做二值化,同時也要對網絡中間每層的輸入值進行二值化,這一操作使得所有參與乘法運算的數據都被強制轉換為“-1”、“+1”二值。我們知道計算機的硬件實現采用了二進制方式,而神經網絡中處理過的二值數據 恰好與其一致,這樣一來就可以考慮從比特位的角度入手優化計算復雜度。

  BNN也正是這樣做的:將二值浮點數“-1”、“+1”分別用一個比特“0”、“1”來表示,這樣,原本占用32個比特位的浮點數現在只需1個比特位就可存放,稍加處理就可以實現降低神經網絡前向過程中內存占用的效果。同時,一對“-1”、“+1”進行乘法運算,得到的結果依然是“-1”、“+1”,通過這一特性就可將原本的浮點數乘法用一個比特的位運算代替,極大的壓縮了計算量,進而達到提高速度、降低能耗的目的。然而,大量的實驗結果表明,BNN只在小規模數據集上取得了較好的准確性,在大規模數據集上則效果很差。

  • 優點:網絡體積小,運算速度快,有時可避免部分網絡的 overfitting
  • 缺點
    • 二值神經網絡損失的信息相對於浮點精度是非常大
    • 粗糙的二值化近似導致訓練時模型收斂速度非常慢

三值神經網絡

  三值網絡主要是指三值權重網絡(TWN)。二值網絡中精度的損失主要來自於 對數據強置為(-1, +1)時與本身全精度之間產生的誤差,而神經網絡中訓練得到的 權重服從均值為 0 的正態分布,這就意味着絕大部分權重在二值后會產生將近1的誤差,這對計算結果造成的影響將是十分巨大的。為了解決這一問題,提高二值網絡的正確率,Fengfu Li和 Bo Zhang等人在二值的基礎上提出了TWN。

  TWN的核心在於計算出量化閾值Δ,將數值大小處於閾值內的數據強置為0,其他值依然強置為-1或+1,對於閾值的計算,作者也給了論證,能夠最小三值化誤差所帶來的精度損失,還能夠使神經網絡權重稀疏化,減小計算復雜度的同時也能得到更好的准確率和泛化能力。在運行效率上,TWN與BWN相當,但是准確率卻有着明顯的提升。

知識蒸餾

  一個復雜模型可由多個簡單模型或者強約束條件訓練得到。復雜模型特點是性能好,但其參數量大,計算效率低。小模型特點是計算效率高,但是其性能較差。知識蒸餾是讓小模型去擬合大模型,從而讓小模型學到與大模型相似的函數映射。使其保持其快速的計算速度前提下,同時擁有復雜模型的性能,達到模型壓縮的目的。模型蒸餾的關鍵在於監督特征的設計,例如使用 Soft Target 所提供的類間相似性作為依據 [9],或使用大模型的中間層特征圖 [10] 或 attention map [11] 作為暗示,對小網絡進行訓練。整體的框架圖如圖下所示。

卷積算法優化

  卷積運算本身有多種算法實現方式,例如滑動窗、im2col + gemm、FFT、Winograd卷積等方式。這些卷積算法在速度上並沒有絕對的優劣,因為每種算法的效率都很大程度上取決於卷積運算的尺寸。因此,在優化模型時,我們應該對模型的各個卷積層有針對性的選用效率最高的卷積算法,從而充分利用不同卷積算法的優勢。

總體壓縮效果評價指標有哪些?

  網絡壓縮評價指標包括運行效率參數壓縮率准確率。與基准模型比較衡量性能提升時,可以使用提升倍數(speed up)或提升比例(ratio)

  • 准確率:目前,大部分研究工作均會測量 Top-1 准確率,只有在 ImageNet 這類大型數據集上才會只用 Top-5 准確率。
  • 參數壓縮率:統計網絡中所有可訓練的參數,根據機器浮點精度轉換為字節(byte)量綱,通常保留兩位有效數字以作近似估計。
  • 運行效率:可以從網絡所含浮點運算次數(FLOP)、網絡所含乘法運算次數(MULTS)或隨機實驗測得的網絡平均前向傳播所需時間這 3 個角度來評價

幾種輕量化網絡結構對比

網絡結構 TOP1 准確率/% 參數量/M CPU運行時間/ms
MobileNet V1 70.6 4.2 123
ShuffleNet(1.5) 69.0 2.9 -
ShuffleNet(x2) 70.9 4.4 -
MobileNet V2 71.7 3.4 80
MobileNet V2(1.4) 74.7 6.9 149

網絡壓縮未來研究方向有哪些?

網絡剪枝、網絡精餾和網絡分解都能在一定程度上實現網絡壓縮的目的。回歸到深度網絡壓縮的本質目的上,即提取網絡中的有用信息,以下是一些值得研究和探尋的方向。

(1) 權重參數對結果的影響度量.深度網絡的最終結果是由全部的權重參數共同作用形成的,目前,關於單個卷積核/卷積核權重的重要性的度量仍然是比較簡單的方式,盡管文獻[14]中給出了更為細節的分析,但是由於計算難度大,並不實用。因此,如何通過更有效的方式來近似度量單個參數對模型的影響,具有重要意義。

(2) 學生網絡結構的構造。學生網絡的結構構造目前仍然是由人工指定的,然而,不同的學生網絡結構的訓練難度不同,最終能夠達到的效果也有差異。因此,如何根據教師網絡結構設計合理的網絡結構在精簡模型的條件下獲取較高的模型性能,是未來的一個研究重點。

(3) 參數重建的硬件架構支持。通過分解網絡可以無損地獲取壓縮模型,在一些對性能要求高的場景中是非常重要的。然而,參數的重建步驟會拖累預測階段的時間開銷,如何通過硬件的支持加速這一重建過程,將是未來的一個研究方向。

(4) 任務或使用場景層面的壓縮。大型網絡通常是在量級較大的數據集上訓練完成的,比如,在 ImageNet上訓練的模型具備對 1 000 類物體的分類,但在一些具體場景的應用中,可能僅需要一個能識別其中幾類的小型模型。因此,如何從一個全功能的網絡壓縮得到部分功能的子網絡,能夠適應很多實際應用場景的需求。

(5) 網絡壓縮效用的評價。目前,對各類深度網絡壓縮算法的評價是比較零碎的,側重於和被壓縮的大型網絡在參數量和運行時間上的比較。未來的研究可以從提出更加泛化的壓縮評價標准出發,一方面平衡運行速度和模型大小在不同應用場景下的影響;另一方面,可以從模型本身的結構性出發,對壓縮后的模型進行評價。

目前有哪些深度學習模型優化加速方法?

模型優化加速方法

模型優化加速能夠提升網絡的計算效率,具體包括:

  1. Op-level的快速算法:FFT Conv2d (7x7, 9x9), Winograd Conv2d (3x3, 5x5) 等;
  2. Layer-level的快速算法:Sparse-block net [1] 等;
  3. 優化工具與庫:TensorRT (Nvidia), Tensor Comprehension (Facebook) 和 Distiller (Intel) 等;

TensorRT加速原理

在計算資源並不豐富的嵌入式設備上,TensorRT之所以能加速神經網絡的的推斷主要得益於兩點:

  1. TensorRT支持int8和fp16的計算,通過在減少計算量和保持精度之間達到一個理想的trade-off,達到加速推斷的目的。
  2. TensorRT對於網絡結構進行了重構和優化,主要體現在一下幾個方面。
    • TensorRT通過解析網絡模型將網絡中無用的輸出層消除以減小計算。
    • 對於網絡結構的垂直整合,即將目前主流神經網絡的Conv、BN、Relu三個層融合為了一個層,例如將圖1所示的常見的Inception結構重構為圖2所示的網絡結構。
    • 對於網絡結構的水平組合,水平組合是指將輸入為相同張量和執行相同操作的層融合一起,例如圖2向圖3的轉化。

圖1 

圖2

圖3

  以上3步即是TensorRT對於所部署的深度學習網絡的優化和重構,根據其優化和重構策略,第一和第二步適用於所有的網絡架構,但是第三步則對於含有Inception結構的神經網絡加速效果最為明顯。

Tips: 想更好地利用TensorRT加速網絡推斷,可在基礎網絡中多采用Inception模型結構,充分發揮TensorRT的優勢。

TensorRT如何優化重構模型?

若訓練的網絡模型包含TensorRT支持的操作

  1.  對於Caffe與TensorFlow訓練的模型,若包含的操作都是TensorRT支持的,則可以直接由TensorRT優化重構
  2.  對於MXnet, PyTorch或其他框架訓練的模型,若包含的操作都是TensorRT支持的,可以采用TensorRT API重建網絡結構,並間接優化重構;

若訓練的網絡模型包含TensorRT不支持的操作

  1. TensorFlow模型可通過tf.contrib.tensorrt轉換,其中不支持的操作會保留為TensorFlow計算節點;
  2. 不支持的操作可通過Plugin API實現自定義並添加進TensorRT計算圖;
  3. 將深度網絡划分為兩個部分,一部分包含的操作都是TensorRT支持的,可以轉換為TensorRT計算圖。另一部則采用其他框架實現,如MXnet或PyTorch

TensorRT加速效果如何?

以下是在TitanX (Pascal)平台上,TensorRT對大型分類網絡的優化加速效果:

Network Precision Framework/GPU:TitanXP Avg.Time(Batch=8,unit:ms) Top1 Val.Acc.(ImageNet-1k)
Resnet50 fp32 TensorFlow 24.1 0.7374
Resnet50 fp32 MXnet 15.7 0.7374
Resnet50 fp32 TRT4.0.1 12.1 0.7374
Resnet50 int8 TRT4.0.1 6 0.7226
Resnet101 fp32 TensorFlow 36.7 0.7612
Resnet101 fp32 MXnet 25.8 0.7612
Resnet101 fp32 TRT4.0.1 19.3 0.7612
Resnet101 int8 TRT4.0.1 9 0.7574

影響神經網絡速度的4個因素(再稍微詳細一點)

  1. FLOPs(FLOPs就是網絡執行了多少multiply-adds操作);
  2. MAC(內存訪問成本);
  3. 並行度(如果網絡並行度高,速度明顯提升);
  4. 計算平台(GPU,ARM)

壓縮和加速方法如何選擇?

1)對於在線計算內存存儲有限的應用場景或設備,可以選擇參數共享和參數剪枝方法,特別是二值量化權值和激活、結構化剪枝。其他方法雖然能夠有效的壓縮模型中的權值參數,但無法減小計算中隱藏的內存大小(如特征圖)。​

2)如果在應用中用到的緊性模型需要利用預訓練模型,那么參數剪枝、參數共享以及低秩分解將成為首要考慮的方法。相反地,若不需要借助預訓練模型,則可以考慮緊性濾波設計及知識蒸餾方法。​

3)若需要一次性端對端訓練得到壓縮與加速后模型,可以利用基於緊性濾波設計的深度神經網絡壓縮與加速方法。​

4)一般情況下,參數剪枝,特別是非結構化剪枝,能大大壓縮模型大小,且不容易丟失分類精度。對於需要穩定的模型分類的應用,非結構化剪枝成為首要選擇。​

5)若采用的數據集較小時,可以考慮知識蒸餾方法。對於小樣本的數據集,學生網絡能夠很好地遷移教師模型的知識,提高學生網絡的判別性。​

6)主流的5個深度神經網絡壓縮與加速算法相互之間是正交的,可以結合不同技術進行進一步的壓縮與加速。如:韓松等人結合了參數剪枝和參數共享;溫偉等人以及Alvarez等人結合了參數剪枝和低秩分解。此外對於特定的應用場景,如目標檢測,可以對卷積層和全連接層使用不同的壓縮與加速技術分別處理。

 參考

【簡書】模型壓縮總覽

【知乎】模型加速概述與模型裁剪算法技術解析

【深度學習大講堂】【一文看懂】深度神經網絡加速和壓縮新進展年度報告

【知乎】深度學習模型壓縮與加速綜述

【CSDN文章】深度學習模型壓縮與優化加速 (Model Compression and Acceleration Overview)

【CSDN文章】TensorRT Inference 引擎簡介及加速原理簡介

【論文】深度神經網絡壓縮與加速綜述

【CSDN】閑話模型壓縮之量化(Quantization)篇

【pytorch官方文檔】量化

【pytorch官方文檔】剪裁教程

【知乎】模型壓縮深度學習(李宏毅)(十三)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM