肖振久,楊曉迪+,魏 憲,唐曉亮
1.遼寧工程技術大學軟件學院,遼寧葫蘆島 125105
2.中國科學院海西研究院泉州裝備制造研究所,福建晉江 362200
隨著AlexNet[1]在圖像分類領域ImageNet 競賽中取得優(yōu)異的成績,卷積神經(jīng)網(wǎng)絡(convolutional neural network,CNN)開始廣泛應用在計算機視覺領域中。至此以后,各種新型的網(wǎng)絡結(jié)構(gòu)不斷被提出,如ConvNet[2]、VGG[3](visual geometry group)和ResNet[4]等。這些網(wǎng)絡結(jié)構(gòu)大多使用卷積層與池化層的組合提取圖像的特征并使用全連接層(fully-connected layer,F(xiàn)C)對圖像進行分類,但采用傳統(tǒng)卷積方式會帶來較大的計算成本,而用全連接層訓練的模型會消耗較大的存儲空間。通常,一種解決這些問題的方式是對訓練好的模型進行網(wǎng)絡剪枝、網(wǎng)絡蒸餾[5]等,最終使得模型具有輕量且準確度高的網(wǎng)絡。另一種是直接設計出輕量級的神經(jīng)網(wǎng)絡架構(gòu)[6]。在第二種方法上,有些學者通過壓縮卷積過濾器,提出了SqueezeNet[7]及SqueezeNext[8]方法,并使用了Batch Normalization[9]來加快訓練網(wǎng)絡時的收斂過程。有些學者從特征提取的角度出發(fā),利用深度可分離卷積提出了MobileNet[10]。類似設計輕量化卷積結(jié)構(gòu)的方法還有Inception[11]、Xception[12]、ShuffleNet[13-14]和ThunderNet[15]等。從而使得深度可分離卷積在人臉識別[16]、目標檢測、圖像分割[17]等領域得到廣泛應用。
但這些方法都是針對特征提取模塊的改進,Lin等[18]提出NIN(network in network)網(wǎng)絡,采用全局平均池化(global average pooling,GAP)替換全連接層用于控制模型規(guī)模,但全局平均池化嚴重依賴于特征提取模塊輸出特征圖的質(zhì)量,若特征圖包含的特征較多,全局池化會丟失許多有用信息,同時也會造成模型訓練收斂速度降低等問題。吳進等[19]提出用卷積層直接替換全連接層的方法,并用多個小卷積逐層縮小特征圖的方法達到了一定的壓縮效果。Zhou 等[20]提出了克羅內(nèi)克積(Kronecker product,KP)的方法應用于分類器模塊,在SVHN和ImageNet數(shù)據(jù)集上能夠?qū)崿F(xiàn)10倍的壓縮率,且精度只有1%的損失。Jose 等[21]提出了一種克羅內(nèi)克循環(huán)單元(Kronecker recurrent units,KRU)用于分解循環(huán)神經(jīng)網(wǎng)絡(recurrent neural network,RNN)中的權重矩陣,這種方法在降低參數(shù)量的同時還能在一定程度上解決網(wǎng)絡訓練過程中梯度消失和梯度爆炸問題。Thakker 等[22-23]為應用于移動互聯(lián)網(wǎng)設備,進一步利用克羅內(nèi)克積壓縮循環(huán)神經(jīng)網(wǎng)絡,取得了38 倍的壓縮率,同時可以有效解決自然語言處理(natural language processing,NLP)任務中模型規(guī)模大的問題。
為解決上述只單一優(yōu)化特征提取模塊或分類器模塊帶來的局限性,本文側(cè)重在分類器模塊上運用克羅內(nèi)克積方法,同時在特征提取模塊上結(jié)合深度可分離卷積、ResNet 殘差結(jié)構(gòu),旨在圖像分類任務中更大限度降低計算量及存儲空間。通過大量實踐,設計了一個能夠?qū)崿F(xiàn)端到端的稱為sep_res18_s3 的網(wǎng)絡架構(gòu),該架構(gòu)用克羅內(nèi)克積方法設計了3 層separable 模塊,并在特征提取模塊上設計了一層卷積和一個18 層的深度可分離殘差模塊。實驗結(jié)果表明,該網(wǎng)絡結(jié)構(gòu)相比只用ResNet 殘差結(jié)構(gòu)或只用深度可分離卷積網(wǎng)絡,可以在分類任務中更好權衡網(wǎng)絡模型的精度和存儲空間。
在這一部分,首先介紹在分類器模塊中用克羅內(nèi)克積方法替換全連接層權重矩陣的實現(xiàn)原理,然后介紹了在特征提取模塊設計可分離殘差模塊的原理,最后介紹了權衡網(wǎng)絡寬度、深度進一步改進網(wǎng)絡結(jié)構(gòu)的方法,并給出了一系列可以實現(xiàn)端到端訓練的網(wǎng)絡架構(gòu)。
深度神經(jīng)網(wǎng)絡的一個全連接層可以理解為輸入向量到輸出向量的映射??紤]到一個輸入樣本的情形,若輸入向量X∈?m×1,輸出向量為Y∈?n×1,全連接層可以表示為:
其中,W∈?n×m和b∈?n×1分別表示權重矩陣和偏置,σ(?)表示非線性激活函數(shù),權重矩陣W的大小由輸入向量和輸出向量共同決定。全連接某層的參數(shù)量r和浮點運算次數(shù)(floating point of operations,F(xiàn)LOPs)o可以表示為:
當全連接層輸入向量X∈?m×1與輸出向量Y∈?n×1的維度很大時,容易導致網(wǎng)絡參數(shù)爆炸問題。如VGG16 有三層全連接層,整個網(wǎng)絡架構(gòu)中有90%的參數(shù)都源自于此。為了緩解多層感知機參數(shù)量大的問題,提出了一種分離全連接權重矩陣的方法。這一方法將權重矩陣W∈?n×m分解為兩個較小權重矩陣,并且W等于兩個小參數(shù)矩陣的克羅內(nèi)克積:
且滿足n=n1n2,m=m1m2,由式(1)、式(2)可知:
其中,vec-1(*)為把一個列向量轉(zhuǎn)化為對應的矩陣操作,因此,可以將式(1)全連接層改寫為式(5)中輸入矩陣vec-1(X)∈與兩個小參數(shù)矩陣A∈和BT∈的乘積再加上一個偏置矩陣vec-1(b)∈,小參數(shù)矩陣可以用反向傳播算法學習。為對比需要,在公式或表格中用FC 表示全連接層,把替換全連接層的這種方式稱為separable 層。vec-1(Y)∈是separable 層的輸出,vec-1(X)∈是separable層的輸入,vec-1(b)∈是可學習的偏置。
圖1 為式(5)第一行的全連接層替換為第三行separable層的過程。
Fig.1 Schematic diagram of replacing fully connected layer with separable layer圖1 全連接層替換為separable層示意圖
因此,一層separable的參數(shù)量為n1m1+n2m2+n1n2,一層FC 的參數(shù)量為n1m1×n2m2+n1n2。若兩者均不考慮偏置參數(shù)帶來的影響,參數(shù)之比可以表示為:
因為n1,n2,m1,m2?1,可推知,因此separable層相比FC 層可以極大程度降低參數(shù)量。
由于一個separable 層包含兩次矩陣乘法運算,運算復雜度為O(m1×m2×n1+m2×n2×n1),而一層全連接層的運算復雜度為O(m1×m2×n1×n2),兩者運算復雜度之比可以表示為:
因為n2,m1?1,由式(4)可推知separable 層相比FC 層可以在降低參數(shù)量的同時降低運算成本。
當m1=m2=n1=n2,如VGG16 第二層全連接權重矩陣為W1∈?4096×4096,可以分解為A1∈?64×64和B1∈?64×64的克羅內(nèi)克積,則使用separable 層替換該層全連接可分別使參數(shù)量和計算量減少99.95%和96.88%。
深度可分離卷積是一種應用于特征提取模塊的輕量化結(jié)構(gòu),自從在MobileNet 網(wǎng)絡架構(gòu)中大量運用此結(jié)構(gòu)后,這種較新的網(wǎng)絡結(jié)構(gòu)不斷被應用于各種領域,如目標檢測[24]、圖像語義分割[25]等。圖2(a)黃色部分為傳統(tǒng)的標準3D 卷積核,圖2(b)、(c)綠色部分為深度可分離卷積組成結(jié)構(gòu)。分別將標準3D 卷積核分解成一個逐通道處理的二維(2D)卷積核和一個跨通道的1×1 大小的3D 卷積核。如果不考慮偏置參數(shù),根據(jù)圖2(a),標準3D 在某一卷積層進行卷積的參數(shù)量R1和計算量分別為:
Fig.2 Comparison between traditional convolution filters and depthwise separable convolution filters圖2 傳統(tǒng)卷積核與深度可分離卷積核對比
其中,DK×DK為卷積核尺寸;M為輸入通道數(shù);N為輸出通道數(shù);DF×DF為輸入分辨率。而根據(jù)圖2(b)、(c),深度可分離卷積在某一層進行卷積的參數(shù)量R2和計算量分別為:
因此,深度可分離卷積相比傳統(tǒng)卷積的參數(shù)量和計算量可表示為式(12)的形式。
由式(12)可知,在一層卷積中,采用深度可分離卷積相比傳統(tǒng)3×3 卷積在參數(shù)量和復雜度上具有相同的壓縮效果,壓縮幅度僅與輸出通道數(shù)N和卷積核的尺寸DK有關。例如當某一層輸入輸出通道數(shù)均為64 時,傳統(tǒng)3×3 卷積的參數(shù)量為36 864 個;深度可分離卷積的參數(shù)量僅為4 672 個,參數(shù)量相比傳統(tǒng)3×3 卷積壓縮了87.33%。同理計算量同樣減少了87.33%。
為增加網(wǎng)絡特征提取能力,在網(wǎng)絡卷積層上借鑒了殘差網(wǎng)絡結(jié)構(gòu)。圖3(a)為殘差模塊,這種結(jié)構(gòu)可以表示為:
x、y分別表示殘差塊的輸入和輸出,F(xiàn)(x,ω)表示經(jīng)過可學習的參數(shù)ω線性變化后的輸出。通過跳躍連接相加,可以實現(xiàn)不同特征的結(jié)合,淺層網(wǎng)絡包含低級語義的特征,而深層網(wǎng)絡有高級語義特征,因此通過特征映射(feature map),可以將前面層學習到的特征直接傳到后面層中。當輸入輸出特征圖分辨率不同時,這種跳躍連接還可以融合不同分辨率的特征,使得殘差結(jié)構(gòu)擁有更好的特征提取能力。
Fig.3 Two types of residual modules圖3 兩種殘差模塊
本文受深度可分離卷積結(jié)構(gòu)和殘差結(jié)構(gòu)的啟發(fā),通過將兩種結(jié)構(gòu)結(jié)合的方式,在深度可分離卷積的基礎上引入殘差結(jié)構(gòu)。圖3(b),在輸入輸出通道數(shù)不變的情況下,采用一層逐通道的(2D)3×3 卷積和一層跨通道的(3D)1×1 卷積替換了圖3(a)中傳統(tǒng)(3D)3×3 卷積,可知,這種深度可分離殘差模塊相比殘差模塊,可以進一步降低訓練所需的計算量和存儲空間,相比只使用深度可分離卷積,這種網(wǎng)絡結(jié)構(gòu)又可以融合不同尺度上的空間信息,同時也可以在訓練過程中有效防止梯度消失問題。
在分類器模塊中,使用三層separable 構(gòu)建了一個SepNet 分類器網(wǎng)絡結(jié)構(gòu),該結(jié)構(gòu)相當于對標準VGG16 網(wǎng)絡中兩層4 096 個神經(jīng)元和一個Softmax 分類器全連層的替換。表1 和表2 分別列出了VGG16和SepNet分類器的網(wǎng)絡結(jié)構(gòu)。
Table 1 VGG16 network structure of classifier module表1 VGG16 分類器模塊網(wǎng)絡結(jié)構(gòu)
Table 2 Network structure of SepNet classifier module表2 SepNet分類器模塊網(wǎng)絡結(jié)構(gòu)
實驗將表1 中FC1 輸入向量X∈?m×1reshape 為表2 中Sep1 的輸入矩陣X1∈,然后,SepNet 分類器的輸入與兩個定義好的小參數(shù)矩陣A和B進行矩陣乘法運算,通過逐層訓練,在Sep3 中得到一個?1×n的輸出,并經(jīng)過Softmax 層后用于分類(n為分類類別數(shù))。與輸入輸出元素個數(shù)相同的全連接層相比,SepNet 分類器的網(wǎng)絡參數(shù)和運算成本更少,更適合應用于移動終端設備等智能場景中。
在特征提取模塊中,參考了EfficientNet[26]網(wǎng)絡的設計思路。EfficientNet 研究了模型尺度縮放,發(fā)現(xiàn)均衡網(wǎng)絡的深度、寬度和分辨率可以獲得更好的性能?;诖颂岢隽艘环N新的縮放方法,使用一個簡單而高效的復合系數(shù)來均勻地標度深度、寬度、分辨率的所有維度,并采用神經(jīng)架構(gòu)搜索(neural architecture search,NAS)控制模型規(guī)模,在給定的資源條件下最大化模型精度。
本文借鑒了EfficientNet 部分思想,綜合考慮特征提取模塊中的網(wǎng)絡深度、寬度,通過手工設計優(yōu)化網(wǎng)絡結(jié)構(gòu),訓練出了一系列效率更高、參數(shù)更少的網(wǎng)絡。圖4(a)為最終設計的sep_res18_s3 網(wǎng)絡結(jié)構(gòu),該網(wǎng)絡在特征提取模塊上由一層卷積和18 層的深度可分離殘差模塊組成。圖4(b)、(c)、(d)分別為在(a)的基礎上設計的對比網(wǎng)絡,分別稱為sep18_s3、cov_res18_s3、sep_res18_fc。其中圖4(b)去掉了所有殘差結(jié)構(gòu),用于對比驗證殘差結(jié)構(gòu)的重要性,圖4(c)替換了所有深度可分離卷積而用傳統(tǒng)3×3 卷積,用于對比驗證深度可分離卷積的重要性,圖4(d)替換了三層separable 而直接用一層全連接,用于對比驗證克羅內(nèi)克積方法的有效性。圖4 中的sep、cov 分別表示深度可分離卷積模塊和傳統(tǒng)3×3 卷積模塊,跳躍連接實線部分為恒等映射(identical mapping),可以直接進行Concat 操作,因此不需要增加額外參數(shù)量。虛線部分為保證輸出特征圖尺寸不變而用步長為2的1×1 卷積。
在圖像分類任務中,往往將分類結(jié)果準確率作為參考依據(jù),而在各種輕量化網(wǎng)絡模型中,除了考慮準確率以外,網(wǎng)絡模型的存儲空間和計算量也是很重要的參考因素,因此本文結(jié)合各種輕量化網(wǎng)絡結(jié)構(gòu)評估方法,主要對比各網(wǎng)絡結(jié)構(gòu)在各數(shù)據(jù)集上的分類精度、模型參數(shù)量、計算量、訓練收斂速度等,作為分析網(wǎng)絡性能的依據(jù)。
MNIST 數(shù)據(jù)集來自美國國家標準與技術研究所(National Institute of Standards and Technology(NIST))。訓練集(training set)包含60 000 個樣本,測試數(shù)據(jù)集(testing set)包含10 000 個樣本,每張圖片由28×28 個像素點構(gòu)成。
CIFAR-10 是由Hinton 的學生Alex Krizhevsky和Ilya Sutskever 整理的一個用于識別普適物體的小型數(shù)據(jù)集,分為10 個類別,一共有60 000 個32×32 彩色圖像,每個類有6 000 個圖像。分為50 000 個訓練圖像和10 000 個測試圖像。
作為兩種比較典型的小數(shù)據(jù)集,用于圖像分類任務上對比各網(wǎng)絡結(jié)構(gòu)的性能指標具有一定的代表性。
CIFAR-100 數(shù)據(jù)集有100 類,每類包含600 張圖片,其中有500 個訓練圖片和100 個測試圖片,圖片的大小和格式與CIFAR-10 相同。由于CIFAR-100 每類訓練樣本和測試樣本都只有CIFAR-10 的1/10,因此識別難度更大。
Fig.4 4 kinds of baseline network structures圖4 4 種網(wǎng)絡結(jié)構(gòu)
本實驗用到的硬件環(huán)境為CoreTMi7-6700CPU@3.40 GHz、GeForce GTX1080 Mobile 顯卡,主要用到的軟件為pycharm2019.2 及anaconda3-5.3.1。用于配置的虛擬環(huán)境基于python3.6,用到的深度學習框架為keras2.2.4,并用tensorflow1.14 作為后端。采用matplotlib3.1.1 作為繪圖工具。
為了便于對比,在訓練各數(shù)據(jù)集時,使用Keras框架自帶的數(shù)據(jù)增強對輸入樣本進行了輕微的預處理。由于訓練數(shù)據(jù)的不同,訓練CIFAR-10 和CIFAR-100時統(tǒng)一采用學習率0.001,訓練MNIST 時統(tǒng)一采用學習率0.000 5,每次在epoch數(shù)為80、120時,將當前學習率降低90%,并都以Adam 優(yōu)化器訓練150 個epoch。
為了對比驗證separable 層替換全連接層的有效性,用VGG16 變體作為對比網(wǎng)絡,對比實驗首先保證特征提取模塊網(wǎng)絡結(jié)構(gòu)不變,以驗證分類器模塊的性能。由于VGG16 原本用于大圖像分類,因此適當降低VGG16 網(wǎng)絡的寬度和深度以適應小數(shù)據(jù)集的分類任務。
表3 和表4 分別為縮小后的VGG16 特征提取網(wǎng)絡結(jié)構(gòu)和分類器結(jié)構(gòu),稱為VGG10。表中一共用7層卷積層和3 層池化層以及3 層全連接層,其中Filter size 為卷積核尺寸,F(xiàn)ilter num 為對應卷積核的數(shù)量,同時也為該層卷積層的輸出通道數(shù)。Strides為步長。
Table 3 Feature extraction module of VGG10表3 VGG10 特征提取模塊
同時在分類器模塊,將VGG16 全連接層的4 096個神經(jīng)元替換為1 024 個神經(jīng)元,見表4。
Table 4 VGG10 network structure of classifier module表4 VGG10 分類器模塊網(wǎng)絡結(jié)構(gòu)
X為經(jīng)過Faltten 之后的輸入,W為權重矩陣,組合表3 和表4,最終形成縮小后的VGG10 網(wǎng)絡結(jié)構(gòu),同時通過用3 層separable 結(jié)構(gòu)替換了VGG16 的3 層全連接層,組合表3 和表2,最終形成SepNet網(wǎng)絡。
分別在MNIST、CIFAR-10、CIFAR-100 數(shù)據(jù)集上訓練VGG10 和SepNet網(wǎng)絡。表5 列出了各網(wǎng)絡結(jié)構(gòu)分別在每個數(shù)據(jù)集上的精度、參數(shù)量及浮點運算次數(shù)(FLOPs)。由表5 可以看出,采用MNIST 數(shù)據(jù)集訓練,SepNet結(jié)構(gòu)在分類準確度上與VGG10 相近,但參數(shù)量和運算量相比VGG10 網(wǎng)絡分別降低了91.89%和92.59%。采用CIFAR-10 數(shù)據(jù)集訓練,使用SepNet結(jié)構(gòu)在分類準確度上略好于VGG10 網(wǎng)絡結(jié)構(gòu),而且參數(shù)量和計算量相比VGG10 均降低了94.09%。采用CIFAR-100 數(shù)據(jù)集訓練,使用SepNet 結(jié)構(gòu)在精度上高出VGG10 近6 個百分點,而且參數(shù)量和計算量相比VGG10 均降低了94.07%。實驗結(jié)果表明,在保證分類精度不降低的情況下,使用separable 層替換全連接層可以極大程度降低參數(shù)冗余和計算成本,證實了克羅內(nèi)克積方法的有效性。
Table 5 Comparative results on VGG10 and SepNet表5 VGG10 和SepNet對比實驗結(jié)果
為了進一步探究VGG10 和SepNet 訓練MNIST、CIFAR-10 和CIFAR-100 的表現(xiàn),圖5 展示了VGG10和SepNet 網(wǎng)絡在訓練CIFAR-10 時各自的訓練結(jié)果,分別為訓練集準確率和驗證集準確率、訓練集損失函數(shù)和驗證集損失函數(shù)之間的對比曲線。
從圖5 可以看出,在訓練集準確率acc 上,圖5(b)不如圖5(a),且損失值loss 相比圖5(a)更大,主要是由于VGG10 參數(shù)量較多,能夠?qū)W習更復雜的特征,因此圖5(a)在訓練集上表現(xiàn)得更好。但由圖5(a)可以看出,在第15 次迭代后,驗證集上的準確度并沒有隨著訓練集準確度上升而上升,而是趨于平穩(wěn)。這一過程在驗證集損失值val_loss 上表現(xiàn)出不能很好地收斂,并在第20 次迭代之后損失值開始不斷輕微增大,由此可以判斷出現(xiàn)了一定程度的過擬合現(xiàn)象。而由圖5(b)可以看出,通過采用SepNet 結(jié)構(gòu),驗證集準確度曲線基本可以“一直跟隨”訓練集曲線上升,并且驗證集上的損失值可以很好地收斂。
為了對比VGG10 和SepNet 訓練不同數(shù)據(jù)集收斂速度和損失值下降過程的表現(xiàn),圖6 分別展示了VGG10 和SepNet 在MNIST、CIFAR-10 和CIFAR-100各自的訓練結(jié)果。其中圖6 各子圖上方為驗證集準確率對比曲線,下方為驗證集損失函數(shù)的對比曲線。
Fig.5 SepNet and VGG10 training curve圖5 SepNet與VGG10 訓練曲線
實驗表明,在MNIST 數(shù)據(jù)集上,如圖6(a),SepNet 和VGG10 的收斂速度區(qū)別不大,主要是MNIST易于訓練。在CIFAR-10數(shù)據(jù)集上,如圖6(b),VGG10 在20 次epoch 之前的收斂速度快于SepNet,但是在20 次epoch 之后,由于VGG10 參數(shù)量過多導致過擬合現(xiàn)象,最終使得SepNet 的分類精度高于VGG10,同樣在圖6(c)中,這一現(xiàn)象在更難訓練的CIFAR-100 數(shù)據(jù)集上表現(xiàn)更為明顯。實驗結(jié)果表明,在MNIST、CIFAR-10 和CIFAR-100 數(shù)據(jù)上,SepNet比VGG10 具有更高分類精度,且更容易防止過擬合。
為了探究SepNet 和VGG10 在同一數(shù)據(jù)集上的訓練速度,表6 列出了SepNet和VGG10 分別在GPU、CPU 上訓練CIFAR-10 的每個batch 平均訓練時間。
Fig.6 Comparison training curve between SepNet and VGG10圖6 SepNet與VGG10 對比訓練曲線
Table 6 Comparison of running time of CIFAR-10表6 CIFAR-10 的運行時間對比 ms
實驗結(jié)果表明,SepNet 在GPU 上的訓練時間與VGG10 相當,這主要是用separable 替換全連接層后,雖然運算量降低了,但是每層separable 需要依次進行兩次矩陣乘法運算,增加了更多必要的串行運算。而在CPU 上,主要采用串行運算的方式,由于沒有了并行運算的優(yōu)勢,因此SepNet 在CPU 上的運行時間則明顯低于VGG10。
綜合對比可以發(fā)現(xiàn),SepNet 方法相比VGG10 更不容易發(fā)生過擬合,在擁有更小的參數(shù)量和計算量的前提下仍能達到更高的精度,且在CPU 上的訓練速度更快,更能滿足部署在移動設備等智能場景中。
2.3 節(jié)驗證了用separable 層替換全連接層的有效性,為了進一步改進網(wǎng)絡結(jié)構(gòu),在特征提取模塊上設計了一個深度可分離殘差模塊,見圖3(b)。在MNIST、CIFAR-10 數(shù)據(jù)集上訓練圖4 中的4 個網(wǎng)絡模型,表7 為在各網(wǎng)絡的訓練準確率、參數(shù)量及計算量(FLOPs)對比。圖7 為對應網(wǎng)絡結(jié)構(gòu)在CIFAR-10 上的訓練集準確率及驗證集準確率的對比曲線。
Table 7 Comparison results of each network on MNIST and CIFAR-10 datasets表7 各網(wǎng)絡在MNIST、CIFAR-10數(shù)據(jù)集上的對比結(jié)果
結(jié)果表明,在MNIST 數(shù)據(jù)集上,sep_res18_s3 訓練準確率均高出其他3 個網(wǎng)絡的準確率,在CIFAR-10 數(shù)據(jù)集上,由圖7 可以看出,各網(wǎng)絡的訓練結(jié)果無論是在訓練集準確率還是在測試集準確率上,分類精度基本相同。
Fig.7 Test set accuracy of each network on CIFAR-10圖7 各網(wǎng)絡在CIFAR-10 上的測試集準確率
結(jié)合表7 可以發(fā)現(xiàn),sep_res18_s3 訓練準確率僅低于sep_res18_fc,準確率減少了0.39 個百分點,但同時參數(shù)量和計算量相比sep_res18_fc 分別降低了11.10%和10.93%,這說明相比目前較流行只用一層全連接來做分類的方法,用separable 層替換全連接層的方法在一定程度上仍然可以進一步降低參數(shù),并保證訓練準確率。對比sep_res18_s3 與sep18_s3,sep_res18_s3 在兩個數(shù)據(jù)集上訓練準確率均高于sep18_s3,在CIFAR-10 數(shù)據(jù)集上高出了sep18_s3 網(wǎng)絡1.37 個百分點。但sep18_s3 參數(shù)量和計算量相比sep_res18_s3 分別降低了7.92%和9.73%,參數(shù)增加的部分來自sep_res18_s3 網(wǎng)絡“跳躍連接”的虛線部分,這說明殘差結(jié)構(gòu)可以付出額外很小的存儲空間來進一步提升準確率。對比sep_res18_s3 與cov_res18_s3,sep_res18_s3 網(wǎng)絡在CIFAR-10、MNIST 上的準確率均高于cov_res18_s3,且參數(shù)量和計算量相比cov_res18_s3 分別降低了58.33%和81.82%。這說明在ResNet 殘差結(jié)構(gòu)中使用3×3 卷積仍然存在較大的參數(shù)冗余,在小數(shù)據(jù)集的分類任務中,采用深度可分離卷積相比傳統(tǒng)的3×3 卷積可以在保證訓練準確率的同時極大降低參數(shù)量。
為與其他網(wǎng)絡對比,在訓練CIFAR-100 時增加了網(wǎng)絡的特征提取能力以提升一定的精度,在特征提取模塊采用ResNet18 結(jié)構(gòu),將每層的通道數(shù)設置為64。在分類器模塊上仍然用表2 的3 層separable 層,形成的網(wǎng)絡結(jié)構(gòu)稱為ResNet18+s3,表8 列出了各網(wǎng)絡結(jié)構(gòu)在CIFAR-100 上的參數(shù)量和訓練精度,實驗結(jié)果表明,ResNet18+s3 在保持較低參數(shù)量的同時仍然可以達到更高的精度。同時,設計的sep_res18_s3、sep18_s3 在參數(shù)量上相比X-KerasNet[27]等網(wǎng)絡仍具有較大優(yōu)勢。
Table 8 Training accuracy and number of parameters on CIFAR-100表8 CIFAR-100 訓練精度及參數(shù)量
本文提出了一種用于替換多層感知機全連接層和改進特征提取模塊傳統(tǒng)卷積層的方法,該方法首先用克羅內(nèi)克積解決了傳統(tǒng)類似VGG 網(wǎng)絡全連接層參數(shù)量大,且在訓練過程中容易過擬合的問題,然后結(jié)合在特征提取模塊上設計的深度可分離殘差模塊,既解決了類殘差網(wǎng)絡用傳統(tǒng)3×3 卷積冗余度高的問題,又保證了深度可分離卷積層與層之間的信息流通。實驗結(jié)果表明,通過權衡網(wǎng)絡深度、寬度,同時結(jié)合深度可分離卷積、殘差結(jié)構(gòu)及克羅內(nèi)克積方法,形成的sep_res18_s3 網(wǎng)絡能夠?qū)崿F(xiàn)圖像分類任務中精度和存儲空間的平衡,可以進一步應用到移動設備或嵌入式設備等智能視覺場景中。
由于本文只是在MNIST、CIFAR-10、CIFAR-100這樣的小數(shù)據(jù)集分類任務上驗證了sep_res18_s3 網(wǎng)絡的有效性,對網(wǎng)絡性能的驗證仍有一定的局限性,在下一步工作中,將按照同樣的方法改進網(wǎng)絡結(jié)構(gòu)以適應圖像識別任務中更多小數(shù)據(jù)集及大數(shù)據(jù)集樣本的分類,并考慮結(jié)合網(wǎng)絡剪枝、參數(shù)量化等壓縮方法,訓練出冗余度更小的模型。