甘 嵐,李 佳,沈鴻飛
(華東交通大學 信息工程學院,南昌 330000)
目前,基于深度學習[1]的圖像分類識別與嵌入式設備相結合已成為智能化產業(yè)發(fā)展的新趨勢.在嵌入式設備中,參數(shù)較少的機器學習算法難以對復雜的圖像數(shù)據(jù)維持較高的分類準確率.卷積神經網絡CNN[2]可以更有效的對圖像進行精確分類[3-5].但卷積網絡的參數(shù)量極大,在廣泛應用的嵌入式平臺存在運行速度慢、難以部署的缺點.因此,實現(xiàn)精度更高的卷積神經網絡在嵌入式端的部署加速具有重要的研究意義.
深度殘差網絡是近年來較為流行的網絡結構,席志紅[6]利用殘差網絡對醫(yī)學圖像混合數(shù)據(jù)集進行分類實驗.相比其他方法,殘差網絡有效的減少了參數(shù)和訓練時間,提高了網絡性能.Michal Gregor[7]提出了一種結合遷移學習的殘差結構分類器,該分類器能夠很好的實現(xiàn)在外界環(huán)境嚴重干擾下的停車位影像的分類.這些實驗表明了殘差網絡相比其它分類網絡,擁有更好的網絡性能.殘差網絡以跳躍式殘差結構作為基本結構,這種結構很好的解決了網絡變深的性能退化問題,且這種結構計算壓力相對較小、易于優(yōu)化,更適合在嵌入式端部署.但是殘差網絡自身參數(shù)量較大,直接運行在嵌入式端需要很大的存儲資源和計算資源.
網絡加速方法可以有效減少網絡的計算量和存儲量,是實現(xiàn)殘差網絡在嵌入式端加速應用的重要手段.網絡加速可以從網絡結構入手,通過結構優(yōu)化和卷積分解等方法來減少參數(shù)和計算量,但是對于一些復雜網絡卷積分解過多會降低網絡性能,同時卷積分解后網絡中BN層數(shù)量增多,會占用大量計算資源;也可以對網絡模型進行壓縮,通過去除網絡冗余使得網絡稀疏化[8-10]和網絡參數(shù)定點化處理[11-13]等方法來實現(xiàn)網絡加速,但一些優(yōu)化后的網絡結構,由于網絡復雜度較低,網絡模型的壓縮會導致網絡性能大幅降低.網絡優(yōu)化可以優(yōu)化網絡結構,模型壓縮可以有效去除網絡冗余參數(shù).因此,如何結合網絡優(yōu)化和模型壓縮技術來降低網絡參數(shù),保證網絡性能,實現(xiàn)殘差網絡在嵌入式端最優(yōu)加速是本文研究的重點.
本文根據(jù)上述問題,結合不同加速方法的優(yōu)勢提出一種更有效的嵌入式網絡加速方法.該方法首先為了減少原始殘差結構的參數(shù),采用深度可分離卷積、線性優(yōu)化的方法對原始殘差結構進行卷積優(yōu)化,并設計能夠維持網絡性能,參數(shù)更少的殘差網絡;其次,為了將改進的殘差網絡在嵌入式端實現(xiàn)最優(yōu)加速,采用混合網絡剪枝、合并BN層與卷積層、隨機取舍的FP16量化的方法繼續(xù)減少網絡中冗余參數(shù)以加速網絡,并與常規(guī)方法進行性能比較.實驗結果表明,使用上述方法對可以有效實現(xiàn)殘差網絡在嵌入式端的優(yōu)化加速.
卷積優(yōu)化是通過更高效的卷積結構保證網絡性能,并減少網絡參數(shù)來實現(xiàn)網絡加速的.如Squeezenet[14]的fire module結構,通過控制進入3×3卷積的特征數(shù)量來降低計算量,但該結構適合于淺層網絡.
深度可分離卷積應用于很多高效神經網絡[15-18],如MobileNet、ShuffleNet、Xception等.它由一層深度卷積和一層逐點卷積組成,通過輸入通道的線性組合來計算新的特征.比較深度卷積和傳統(tǒng)卷積的輸出,假設輸入一個N×H×W×C特征,通過k個3×3的卷積,pad=1,普通卷積的輸出特征映射為N×H×W×k.對于深度可分離卷積,特征提取過程為:第一層的深度卷積可以將輸入分為C組,并收集每個通道的特征;第二層的逐點卷積將上層的輸出通過1×1的逐點卷積來收集每個點特征,最終通過深度可分離卷積的輸出特征映射也為N×H×W×k.使用深度可分離卷積替代標準卷積,計算量減少了8倍,輸出的特征映射數(shù)量沒有變化.可以在幾乎沒有精度損失的情況下大幅度降低參數(shù)量和計算量.卷積分解會使得卷積的輸出維度降低,網絡中的非線性函數(shù)會對較低的輸出特征造成影響,過多分解會造成網絡的性能急劇下降.
但是,過多的卷積優(yōu)化分解會使得網絡性能急劇下降,而且由于卷積分解使得卷積輸出的維度降低,網絡中的非線性函數(shù)會對較低的輸出特征造成影響.因此如何平衡卷積分解數(shù)量保證準確率是卷積優(yōu)化的核心問題.
訪存優(yōu)化是通過減少網絡訓練和推理時內存的讀寫次數(shù)來實現(xiàn)網絡加速的.殘差網絡卷積分解后網絡中的卷積層和BN層數(shù)量會增多,BN層的作用是對數(shù)據(jù)進行歸一化處理,它可以加快網絡收斂,防止過擬合現(xiàn)象出現(xiàn)[19].但是BN層在網絡推理時需要很大的計算資源,BN層增多會占用更多內存資源,從而影響網絡的推理速度.
網絡的BN層主要是對卷積層的輸出數(shù)據(jù)進行處理,因此直接去除可能會造成一定的精度損失,如何維持網絡精度和減少BN層內存消耗是BN層訪存優(yōu)化的重點.合并BN層和卷積層,可以將兩層的計算融為一次計算,該方法不會改變BN層輸出結果,可以維持網絡的精度,并通過減少網絡計算時訪問內存的次數(shù)來實現(xiàn)網絡加速[20].
模型壓縮是通過對網絡模型的參數(shù)進行精簡化,在保證網絡性能的同時降低網絡計算和存儲開銷來實現(xiàn)網絡的加速.常見的方法有:網絡剪枝、參數(shù)量化、參數(shù)共享、網絡分解等[21].參數(shù)共享依賴于聚類效果,過高的壓縮比會造成精度下降.網絡分解是通過矩陣分解對模型進行壓縮加速,但是對于維度較低的1×1和3×3卷積核,分解難以實現(xiàn)網絡加速.網絡剪枝和量化是廣泛應用于卷積神經網絡的壓縮加速方法.
網絡剪枝[22]是通過去除網絡中不重要的連接,降低網復雜度實現(xiàn)網絡加速.在網絡卷積層和全連接層中,存在大量輸出值趨近于0的神經元,這些神經元對網絡影響較小,去除后不會影響網絡性能.靳麗蕾[23]通過混合剪枝方法有效的去除vgg-16網絡中影響較小的參數(shù).網絡剪枝可以有效的降低網絡中的冗余參數(shù),降低計算量,剪枝核心問題是尋找評判機制,去除網絡中不重要的節(jié)點或卷積核.
網絡量化是對網絡參數(shù)定點化處理來實現(xiàn)網絡加速的.訓練生成的模型文件存儲的參數(shù)一般為32位的浮點型數(shù)據(jù),大部分的存儲是由分數(shù)部分占據(jù).模型量化就是通過將高位的數(shù)據(jù)向低位的數(shù)據(jù)進行映射來獲得更小的數(shù)據(jù)表示范圍和更稀疏的數(shù)值來有效的降低內存消耗的.而且,CNN網絡對噪聲和擾動的魯棒性較強,訓練的權重一般會在一個較小的范圍,量化后只會造成較低的精度損失.量化過程中數(shù)據(jù)的變換必須保證是線性的,這樣計算結果才能夠映射原始值.量化的重點是確定合適的量化范圍和映射關系.
殘差網絡對一些復雜的圖像具有良好的特征提取能力,但是網絡層數(shù)較深,模型參數(shù)較多,存儲體積較大,不適合在嵌入式等硬件資源或缺的平臺上直接應用.單一的模型加速方法對網絡加速效果是有限的,通過卷積優(yōu)化可以對網絡結構進行優(yōu)化且保證網絡性能,剪枝和量化技術分別是從參數(shù)的重要性評判和存儲方式兩個獨立的方向實現(xiàn)網絡加速.綜合使用這些方法才可以最有效的降低網絡參數(shù),達到網絡最優(yōu)加速.但是,在卷積優(yōu)化和剪枝后的網絡復雜性降低,不同形式的量化可能會造成差異較大的精度損失.
3.1.1 殘差結構
目前,殘差網絡有兩種主流的殘差結構,它們使用了不同的卷積核的連接方式.第一種是由兩個3×3的標準卷積串聯(lián)而成,輸入特征會通過兩個標準卷積處理后輸出,這種雙卷積結構具有較強的特征提取能力,但是網絡參數(shù)相對較多,一般用于40層以下的殘差網絡,常見的有ResNet34.第二種殘差結構首先使用1×1的卷積將輸入特征數(shù)量壓縮4倍,再通過3×3的標準卷積進行特征提取,最后使用1×1的卷積將輸出特征數(shù)量擴張4倍,這種結構針對第一種殘差結構的卷積參數(shù)較多的問題,通過1×1卷積有效的減少了網絡中的參數(shù).
對于一個標準卷積K,假設輸入特征映射W,輸出特征映射為G,它們的尺寸分別為(Df,Df,M)、(Dg,Dg,M,N),其中M,N分別表示為輸入和輸出通道數(shù),標準卷積K的大小為(Dk,Dk,M,N),那么卷積的計算公式表示為.
Gk,l,n=∑i,j,mKi,j,m,n·Fk+i-1,l+j-1.m
(1)
輸出特征為時(Dg,Dg,N),卷積的計算量為.
Dk·Dk·M·N·Df·Df
(2)
假設兩種輸入輸出特征映射均為(Df,Df,M)和(Dg,Dg,N),那么第一種殘差結構的計算量為.
2·3·3·M·N·Df·Df
(3)
第二種殘差結構的計算量為.
M·N·Df·Df/4+3·3·M·N·Df·Df/16
+M·N·Df/4
(4)
在輸入特征相等的情況下,第二種殘差結構的參數(shù)數(shù)量比第一種結構減少了16.94倍.但是第二種結構在初始維度較低時特征提取能力相對較弱,一般需要初始特征維度較大,才能保證其特征提取能力,而且模型的層數(shù)一般相對較深,這樣使得相等殘差結構組成的殘差網絡,第二種結構比第一種結構參數(shù)更多.
3.1.2 結構優(yōu)化
本文針對嵌入式平臺資源短缺問題,提出一種參數(shù)較少的殘差結構:該結構使用3×3深度可分離卷積和普通卷積串聯(lián)而成,對于1×1逐點卷積我們去除了ReLu激活函數(shù),使用線性瓶頸來降低非線性Relu激活函數(shù)對深度可分離卷積輸出特征的影響.改進后的殘差結構的輸入特征映射為64維與第一種殘差結構相似,結構如圖1所示.

圖1 改進的殘差結構Fig.1 Improved residual structure

對比計算發(fā)現(xiàn),采用深度可分離卷積對標準卷積進行分解,當深度卷積的尺寸為(Dk,Dk,1,M)輸出特征為(Dg,Dg,M);逐點卷積尺寸為(1,1,M,N),輸出特征也為(Dg,Dg,N),計算公式表示為.
(5)
深度可分離卷積的計算量為.
Dk·Dk·M·N·Df·Df+M·N·Df·Df
(6)
最終,深度可分離卷積減少的計算量為
(7)
3.1.3 線性瓶頸
當一個輸入特征維數(shù)嵌入到比激活空間低的多的子空間中時,消除較窄層中的非線性可以實現(xiàn)更好的網絡性能[24].當一個2維數(shù)據(jù)經隨機矩陣T將數(shù)據(jù)映射為M維,并通過非線性ReLU激活函數(shù)處理后,再利用T的逆矩陣由M維逆恢復到原始的維度.當映射維度M=2,3時,恢復后的結構發(fā)生了嚴重的坍縮,當映射維度M>15時,恢復后的結構較好.這表明了,這表對于一個低維數(shù)據(jù)進行ReLU等線性變換時,特征會相互重疊,導致較嚴重的信息丟失,維度較高時,恢復的信息才會增多.使用線性變換替代Bottleneck的激活層,可以有效的減少非線性激活函數(shù)對改進的殘差結構造成的信息損失.
深度卷積輸出維度較低,非線性的ReLU激活函數(shù)可能會濾除很多有用信息.因此,本實驗剔除了第二層1×1卷積ReLU激活函數(shù).
網絡結構:原始的ResNet34和ResNet50都是由16個殘差結構串聯(lián)的殘差塊組成.因此本文利于優(yōu)化后的殘差結構,根據(jù)常見ResNet網絡基礎設計了一個50層的殘差網絡ResNet50_dw,結構如圖2所示.

圖2 殘差網絡結構Fig.2 Residual network structure
改進的殘差網絡分為6個階段,第1階段使用7×7的卷積進行初始特征提取,輸出為特征維度為64;第2至5階段分別由多個輸出為64維,128維,256維,512維的改進的殘差塊串聯(lián)而成,其中第2階段和第5階段由3個殘差塊相連接,第3階段由4個殘差塊相連接,第4階段由6個殘差塊相連接;第6階段使用全連接層輸出,每層卷積層后分別使用Batch Normal正則化處理.圖2中MaxPool為最大池化操作,AvgPool為平均池化操作,整個網絡保留了較多的傳統(tǒng)卷積,維持了網絡的復雜性和特征提取能力.
優(yōu)化后的殘差結構相比于原始的兩種殘差結構參數(shù)分別減少了43.6%和40.3%,但單一的網絡卷積優(yōu)化后,網絡模型參數(shù)及復雜度依舊很高.剪枝、優(yōu)化BN層和量化技術分別是從參數(shù)的重要性評判、計算方式和存儲方式三個獨立的方向實現(xiàn)網絡加速,混合三種方法可以繼續(xù)對網絡加速,但是優(yōu)化剪枝后網絡的復雜性會大大降低,量化和優(yōu)化BN層可能會造成精度損失的差異,因此本文將繼續(xù)研究最為合適的混合加速方法,以保證網絡的性能.加速過程為:首先通過評估參數(shù)對初始網絡的卷積核進行有效裁剪,再對訓練后的網絡模型進行卷積層和BN層的合并,最后將模型中的浮點型數(shù)據(jù)進行定點化處理.實驗將對比合并BN和卷積層和去除BN層,以驗證最優(yōu)BN層優(yōu)化方法;對比隨機取舍的FP16量化與常見的TensorRT INT8量化方案,以驗證最優(yōu)量化方法.
4.1.1 剪枝過程
網絡剪枝可以有效的剔除卷積層和全連接層中影響較小的參數(shù),網絡剪枝過程為:第1步利用數(shù)據(jù)集訓練生成網絡模型文件;第2步根據(jù)網絡模型文件記錄的每個通道和卷積核的權重分布情況來衡量卷積核的重要性,確定剪枝百分比;第3步根據(jù)百分比刪除本層的待剪枝卷積核及特征圖對應關系,第4步在卷積核剪枝后,通過再訓練恢復模型精度.最后重復上述過程,逐層對剩下的卷積層進行剪枝和微調,剪枝完成后輸出最終網絡模型文件.
本文中衡量各層卷積核重要性的標準是卷積核權重絕對值之和,即L1范數(shù).將每層卷積層的卷積核權重之和由大到小排序,權重之和較小的卷積核,其特征提取的信息相對較少,對網絡貢獻較小,這些卷積核的重要性較低.每層卷積層剪枝的比例通過卷積層的敏感度來衡量,敏感度是指在不同卷積層刪除相同卷積核時對精度的影響關系,精度損失越嚴重說明該卷積層敏感度越高,對于這樣的卷積層要刪除較小比例的卷積核或不做處理,敏感度較低的卷積層要刪除較大比例的卷積核.
4.1.2 剪枝計算量
裁剪一層卷積后,假設它的第i個卷積層輸入特征的高度和寬度分別為hi和wi,原始輸入通道數(shù)為ni,輸出通道為ni+1,上層卷積層裁剪比例為p,本層裁剪比例為q,那么對于輸入特征圖xi∈Rni×hi×wi,經過ni+1個k×k三維卷積核F∈Rni×k×k,輸出特征圖為xi+1∈Rni+1×hi+1×wi+1原來的運算量為:
C
(8)
剪枝后的本層的計算量減少為:
C<(1-P)ni,(1-q)ni+1>=(1-)ni(1-q)ni+1k2hi+2wi+1
(9)
輸入本層卷積核剪除后,同時也會去除下層的輸入映射,那么假設下層輸出特征圖ni+2保持不變,剪枝后計算量總共減少了:
C<(1-p)ni,(1-q)ni+1,ni+2>=nini+1k2hi+1k2hi+1wi+1+
ni+1ni+2k2hi+2wi+2
(10)
顯然,對于深層的殘差網絡,卷積核剪枝可以有效的加快模型的運算速度和減少參數(shù),對網絡模型具有良好的加速效果.
優(yōu)化后的殘差網絡BN層數(shù)量增多,BN層推理時會占用較大的內存資源,融合BN層和卷積層計算可以有效解決網絡的運算時的內存問題.該方法過程為:首先網絡卷積層的計算是通過將輸入x乘以權重w后和偏執(zhí)b相加得到的,計算公式為:
(11)
BN層是對卷積層的輸出結果減去全局均值,再除以標準差,計算公式為:
(12)
兩層融合后即可得到新的權重參數(shù)和偏執(zhí)值,最終計算公式為:
(13)
合并兩層后,原始網絡的BN層輸出值并沒有產生變化,從而不會對網絡精度造成影響,而網絡的參數(shù)的計算和讀取次數(shù)會大幅的降低.
4.3.1 TensorRT方案
嵌入式端低比特的數(shù)據(jù)會比高比特的數(shù)據(jù)運算速度更快,數(shù)據(jù)量化就是將浮點型數(shù)據(jù)轉化為定定點型數(shù)據(jù).目前最常見的量化方式基于NVIDIA TensorRT的int8量化方法,普通的int8量化方式是直接將所有真實值映射在int8上,這種量化方式雖然簡單直接,但是會浪費大量位寬,甚至會導致準確率的大幅降低.TensorRT方案為了解決這一問題,采用了飽和技術來防止精度損失,通過設置閾值T,將閾值內的數(shù)據(jù)進行映射,閾值外的數(shù)據(jù)直接采用-128和127,量化過程中雖然舍棄了部分數(shù)據(jù),但可以節(jié)約大量存儲空間.TensorRT將32位浮點型數(shù)據(jù)映射為8位整型數(shù)據(jù)的映射公式為:
FP32_Tensor(T)=scale_factor(sf)*bit_Tensor(t)
+FP32_bias(b)
(14)
其中bias偏置值去掉對精度的影響較小,因此去除偏置值,最終的映射公式為:
T=sf·t
(15)
4.3.2 FP16量化
在內存中一個32浮點型數(shù)據(jù)表示形式為1bit符號位+8bit的指數(shù)部分+23bit的尾數(shù)部分,浮點數(shù)的實際值為符號位乘以指數(shù)偏移值再乘以分數(shù)值,將32位浮點數(shù)據(jù)轉化為FP16半精度浮點型后,數(shù)據(jù)指數(shù)部分和尾數(shù)部分別用5bit和10bit表示,網絡可以降低一半的存儲空間.FP16相比INT8可以表示更廣的數(shù)值范圍.
傳統(tǒng)的定點數(shù)據(jù)轉化規(guī)則是最近鄰取舍原則,定義方法為:
Round(x,
(16)
其中,
(17)
(18)
本實驗訓練的軟件環(huán)境為:ubuntu16.04操作系統(tǒng),使用Tensorflow-GPU深度學習框架完成模型訓練.硬件配置為i7處理器,16G運行內存,顯卡為GTX2080ti.測試環(huán)境為Jetson TX2嵌入式開發(fā)板,內存為8GB、存儲為32GB.
網絡訓練設置初始學習率為0.01,訓練批次大小為100.實驗采用的數(shù)據(jù)集為cifar10,由10個不同類別的32×32彩色圖像組成,其中每個類別有6000張圖像,分為5個訓練集共5000張圖像和1個測試集共1000張圖像.
實驗使用卷積優(yōu)化后的50層的殘差網絡對比兩種常規(guī)的殘差網絡,本實驗對數(shù)據(jù)集和超參數(shù)進行相同的處理和設置,在相同的條件下對比三種網絡的性能,首先設置訓練迭代的次數(shù)為50000次,每20000次降低一次學習率,訓練迭代時將cifar10數(shù)據(jù)集隨機裁剪為28×28像素.最終三種的殘差網絡的精度和損失變化,如圖3所示.

圖3 三種網絡訓練損失和精度變化Fig.3 Three loss and accuracy changes of network training
相比ResNet34,改進后的網絡收斂速度略低,但整體收斂趨勢一致;相比ResNet50,改進的殘差網絡在訓練初期收斂速度更快,最終收斂速度損失比較接近.可見,優(yōu)化后的殘差網絡能夠維持較強收斂速度和泛化能力.
繼續(xù)對比三種殘差網絡的平均準確率,前20000次改進的殘差網絡和原始的ResNet34精度變化速率相似,ResNet50精度變化速率稍緩.通過降低學習率再訓練最終三種網絡的最高準確率分別為:ResNet34為88.24%,ResNet50為87.62%,ResNet50_dw為87.79%.實驗表明:優(yōu)化后的殘差網絡相比于原來ResNet50精度提升了0.17%,略低于ResNet34,網絡依舊維持在較高的準確率.
網絡的存儲量和檢測速度是評判模型是否在嵌入式端實現(xiàn)加速的重要指標.本實驗使用平均單張圖片的檢測時長作為網絡檢測速度的評判標準.為此,實驗進一步對比三種殘差結構生成網絡模型所需存儲體積和檢測時長.對比結果如表1所示.
對于改進殘差結構組成的殘差網絡,相比于ResNet34和ResNet50存儲空間分別減少了40.5%、46.2%,平均單張圖片的檢測時長分別減少了33.2%、39.3%.改進的殘差網絡相比于常規(guī)的殘差網絡在檢測速度和存儲量上都有了明顯的降低,且在精度上沒有較大損失.可見,改進的殘差網絡更適合在嵌入式端加速應用.
5.2.1 網絡剪枝
實驗使用改進的殘差網絡,前期實驗發(fā)現(xiàn)卷積核的數(shù)量為64和128的卷積層,敏感度較高,不適合進行剪枝;卷積核的數(shù)量為256和512的卷積層,敏感度較低,存在冗余參數(shù)較多,為了維持網絡模型的精度,實驗只對網絡最后兩個階段,共9個殘差結構進行卷積核剪枝.對256維卷積設置剪枝比例為30%,512維卷積設置剪枝比例為50%,能夠保證最好的準確率.改進的網絡最后一次剪枝后的模型再迭代的損失和準確率變化情況如圖4所示,實驗迭代次數(shù)為1000次,在1000次前網絡已經趨于穩(wěn)定,學習率為0.001.
剪枝后的模型準確率相比之前模型的準確率在初始狀態(tài)時有所降低,通過再訓練后,改進殘差網絡精度分別恢復到87.34%,精度損失較低.再對比模型的平均測試速率和存儲體積,剪枝后的殘差網絡模型在損失較低精度的情況下,存儲體積降低為23.0MB,比剪枝前降低了54.6%,平均單張圖片的檢測時長為72.9ms,減少了31.8ms.
5.2.2 BN層優(yōu)化
實驗對比去除不同比例BN層的方法和合并BN層和卷積層的方法來驗證最優(yōu)的BN層優(yōu)化方案.由于殘差網絡減少較少BN層,網絡的檢測速度提升較低,網絡加速不明顯.因此本實驗對比了去除殘差網絡中常規(guī)3×3卷積共16層BN層、去除3×3深度可分離卷積共32層BN層和去除除第一層以外所有共48層BN層的三種殘差網絡與原始的殘差網絡的性能變化.實驗使用的殘差網絡均保留了第一層7×7卷積的BN層,維持網絡對初始特征的歸一化處理,以防止網絡擬合現(xiàn)象出現(xiàn).最終網絡的精度和速度的變化如5圖所示.

圖5 殘差網絡精度和速度變化Fig.5 Accuracy and speed changes of residual network
實驗表明去除網絡中的BN層網絡的檢測速度最高可加快43.9%,但是網絡精度損失10.63%,精度損失嚴重.去除部分BN層也存在一定的精度損失,因此直接去除BN層會造成網絡的性能損失.
進一步實驗,將改進后的模型和剪枝后的模型分別進行BN層和卷積層合并,并與原始網絡進行比較,最終網絡精度和平均單張圖片的檢測時長如表2所示.

表2 改進的殘差網絡優(yōu)化BN層性能變化Table 2 Performanc changes of the improved residual network optimizing BN layer
相比直接去除BN層,合并BN層和卷積層后,網絡的檢測速度提升了12.6%,且維持了原始的網絡準確率,剪枝和優(yōu)化BN層后檢測速度提升了39.1%,實驗表明該方可以有效解決BN層計算量大的問題.
5.2.3 模型量化
對優(yōu)化卷積和BN層的殘差網絡模型文件分別進行INT8和FP16量化,量化后的性能比較如表3所示.殘差網絡模型經過INT8和FP16量化后的存儲體積分別降低了74.3%和49.1%,平均單張圖片的檢測時長分別提高了47.7%和24.2%,但是常規(guī)的TensorRTINT8方案量化后模型精度降低了2.63%,性能損失嚴重,基于隨機取舍的FP16量化精度只降低了0.56%.

表3 殘差網絡量化性能變化Table 3 Performance changes of residual network quantitative
實驗結果表明:兩種量化方法,都使得模型明顯提速,滿足了一般嵌入式設備的內存要求.但是常見的TensorRT的INT8量化雖然壓縮比例較高,網絡精度損失嚴重;基于隨機取舍的FP16量化可以在保證網絡的性能的前提下,更有效的實現(xiàn)網絡加速.
本文實驗對比了常規(guī)的殘差網絡、卷積優(yōu)化后的殘差網絡和結合卷積優(yōu)化和混合加速的殘差網絡最終的精度、存儲和速度變化如圖6所示.

圖6 各殘差網絡性能比較Fig.6 Performance comparison of each residual network
實驗結果表明:卷積優(yōu)化后的殘差網絡可以維持常規(guī)殘差網絡的準確率,而且網絡存儲體積和計算速率都有了明顯的下降,具有更好的網絡性能.混合加速方法中,模型剪枝可以剔除大量影響相對較小的卷積核,讓模型的存儲體積減少58%左右,且模型的精度損失較低;BN層和卷積層的合并可以加快12.6%推理速度;模型INT8量化和FP16量化可以使模型的存儲體積縮小了4倍和2倍左右,計算速率提升47.7%和24.2%,但傳統(tǒng)TensorRTINT8存在著較高的精度損失,基于隨機取舍的FP16精度損失較低.最終本文選擇結合卷積優(yōu)化和混合剪枝、合并BN層和卷積層和FP16量化加速的方法,可以在降低較小的精度的情況下,大幅減少參數(shù)和存儲量,實現(xiàn)網絡最優(yōu)加速.
本文主要研究了基于嵌入式的殘差網絡的加速方法,首先使用深度可分離卷積對傳統(tǒng)卷積進行有效分解;其次使用線性瓶頸模式減少了非線性層對輸出特征的影響;再次設計了與常規(guī)殘差網絡精度和損失相似,但參數(shù)量更少、計算速度更快的殘差網絡;最后混合剪枝、合并BN層和卷積層和FP16量化加速方法繼續(xù)減少和規(guī)范殘差網絡參數(shù),實現(xiàn)在嵌入式端的加速和應用.與傳統(tǒng)加速方法相比,本文使用的方法可以更有效的減少殘差網絡的存儲體積,提高運算速率,實現(xiàn)網絡加速.但本文使用的方法還是存在較少的精度損失.在未來的工作中,還需要進一步研究卷積核裁剪指標和量化閾值以提高模型準確率和運算速率,實現(xiàn)深度神經網絡在嵌入式端的加速與應用.