陳 力,丁世飛,于文家
(中國礦業大學計算機科學與技術學院,江蘇徐州221116)
(?通信作者電子郵箱dingsf@cumt.edu.cn)
2006 年,多倫多大學的Hinton 教授等[1]在Science雜志上發表了文章,標志著人工智能的復興。計算機視覺技術也隨之取得巨大進步。卷積神經網絡(Convolutional Neural Network,CNN)[2]作為計算機視覺領域的基礎模型之一,是當前許多研究和應用的基礎。自從AlexNet[3]在ILSVRC(ImageNet Large Scale Visual Recognition Challenge)[4]中取得了巨大成功,目前已經提出了許多高性能的CNN 模型,例如VGGNet[5]、ZFNet[6]、GoogLeNet[7]、ResNet[8]、DenseNet[9],SENet[10]等。但是,準確率的提高并不一定會使網絡在模型尺寸和速度方面更有優勢。目前移動設備和嵌入式設備被廣泛使用,這些設備的計算資源和存儲資源非常有限,不利于大規模網絡的部署。
2017 年之后,ImageNet 競賽不再舉辦,對CNN 的研究也從僅追求高精度的大規模網絡逐漸過渡到研究更適合實際應用的輕量級架構。精度高、規模小、速度快的輕量級架構成為當前CNN 研究的主流。近年來,壓縮卷積神經網絡以實現準確率與模型尺寸之間的權衡已成為一種熱門的研究方向。一方面,可以對現有的卷積神經網絡模型進行壓縮,使網絡具有較少的參數和較低的計算復雜度。這些壓縮方法[11]可以分為四類:參數剪枝和共享[12]、低秩分解[13]、遷移/緊湊卷積濾波器[14]和知識蒸餾[15]。基于參數剪枝和共享的方法主要是探索模型參數的冗余部分,并刪除對網絡影響不大的參數以實現網絡壓縮。基于低秩分解的技術主要分解卷積核以減少冗余,關鍵是如何設置卷積核的參數以及對哪個維度加以約束。基于遷移/壓縮卷積濾波器的方法設計具有特殊結構的卷積內核,以降低存儲消耗和計算復雜度。知識蒸餾的方法創建了一個與教師網絡的特征分布相適應的學生網絡,以便小型網絡可以學習大型網絡的知識。通常,學生網絡是一個輕量級網絡,而教師網絡是一個較大的網絡。另一方面,除了壓縮現有的網絡模型,還可以使用一些高效的方法來設計新的網絡結構,即輕量級卷積神經網絡模型設計。輕量級的CNN 可以使更多的計算機視覺研究成果應用到工業產品和服務中。
針對一些常用的輕量級模型設計方法存在的明顯不足,本文在提出相應的解決方法的同時提出了一種輕量級卷積神經網絡模型C-Net,旨在保證在高準確率水平的前提下減少模型參數量和降低計算復雜度。本文主要工作如下:
1)針對分組卷積各分組之間缺少信息交流的問題,提出了一種跨通道交叉融合的方法,在增加深度和減少參數的同時實現了不同分組跨通道信息交流。
2)針對特征提取不充分和特征圖利用不充分的問題,提出了一種跨模塊連接方法,在同一階段內部實現特征重用和更好的上下文建模來增強特征的顯著性。
3)基于提出的兩種方法設計了一種新型的輕量級卷積神經網絡C-Net。
對于傳統卷積[16]來說,每個輸出通道都與每個輸入通道互相連接,即通道之間是密集連接。例如,如果輸入特征映射的尺寸為C×H×W,其中:C表示輸入特征映射的通道數,H表示輸入特征映射的高,W表示輸入特征映射的寬,如果卷積核個數為N,則輸出特征映射的數量與卷積核的個數相同,每個卷積核的尺寸為C×K×K,總參數量為N×C×K×K。
對于分組卷積,輸入通道和輸出通道分成g組。每組的輸出通道僅連接到相應組的輸入通道,而與其他通道無關。具體為首先對輸入特征映射進行分組,然后將每組分別卷積。
假設輸入特征映射的尺寸為C×H×W,輸出特征映射的尺寸為N×H×W,其中,H和W為特征映射的長度和高度,C和N分別為通道數。如果將其分為G組,則每組中的輸入特征圖的數量為,每組中的輸出特征圖的數量為。卷積核的尺寸為。卷積核的個數仍為N。每組卷積核的個數為,卷積核僅與同組的輸入特征映射進行卷積,總參數量為×K×K,可見總參數量減少到原來的。
顯然,盡管分組卷積可以顯著減少參數量,但是存在不同分組之間缺乏信息交流的問題,這將很大程度上影響模型的性能。本文提出了一種稱為跨通道交叉融合的方法來實現不同分組之間信息交流。
標準卷積運算實現了空間和通道維度上特征的聯合映射,但是計算復雜性高,內存占用大,并且權重參數過多。深度可分離卷積的基本假設[17]是輸入的特征映射可以解耦。因此,卷積過程可分成兩個部分:首先使用給定大小的卷積核分別對每個通道進行卷積并組合結果,該部分稱為深度卷積。然后使用1×1卷積核[18]進行標準卷積并輸出特征映射,這部分稱為逐點卷積。
深度可分離卷積的作用是將圖像的空間信息和通道信息解耦,主要目的是將空間互相關信息與通道互相關信息分離,通過使用一個一維卷積核和一個二維位置卷積核,分別學習圖像中的通道信息和位置信息。即通過3×3 卷積對每個獨立通道的空間區域提取特征,然后使用1×1卷積融合從不同通道中提取到的特征。標準卷積和深度可分離卷積的區別如圖1所示。

圖1 卷積方式Fig.1 Convolution methods
假設輸入特征映射的尺寸為C×H×W,輸出特征映射的尺寸為N×H×W,其中H和W為特征映射的長度和高度,C和N分別為通道數。標準卷積層使用大小為C×K×K的卷積核,計算復雜度為CK2HWN,參數量為CK2N。深度可分離卷積包括一組K×K×1×C的卷積核和一組1×1×C×N的卷積核。深度可分離卷積的計算復雜度為CK2HW+CHWN,這只是標準卷積的。考慮輸入和輸出通道數量上的差異,深度可分離卷積的權重約為標準卷積權重的10%~25%[17]。通過使用深度可分離卷積代替傳統卷積可以減少模型參數,實現模型的輕量化。
神經網絡的深度在圖像分類中起著至關重要的作用。隨著網絡層數的增加,從理論上,網絡可以學習更多的特征,擬合更復雜的函數,從而提高識別的準確率。但是,由于使用基于梯度的BP(Back Propagation)算法[19]優化時,層數很深的網絡在反向傳播過程中容易出現梯度消失[20]或梯度爆炸[21],造成模型訓練過程中難以收斂。
ResNet[8]是計算機視覺領域一項突破性工作。ResNet 通過添加快捷連接以引入殘差學習來解決深層網絡的退化問題,從而可以訓練出層數更深的網絡。ResNet 的核心思想是從輸入中學習殘差函數而不是原始函數。快捷連接默認為恒等映射,即直接添加原始輸入而不進行任何改變直接與輸出做加和作為下一層的輸入。通過添加快捷連接,使得深層網絡更容易優化,并得到更好的性能。包含一個快捷連接的多層網絡稱為一個殘差塊,如圖2所示。

圖2 快捷連接Fig.2 Shortcut connection
將輸入表示為X,底層映射表示為H(X),殘差映射定義為:

其中:X代表殘差塊的輸入;H(X)代表殘差塊的輸出;F(X)代表殘差映射。進一步的:

即變成使用神經網絡來擬合輸入和輸出之間的殘差F(X)映射。

殘差映射比原始映射更易于優化。在極端情況下,如果恒等映射是最佳輸出,則殘差為0,相較把恒等映射用一系列非線性層的堆疊去擬合更簡單,而且通過快捷連接實現恒等映射,不會增加額外的參數和計算量。
ResNet和快捷連接的提出解決了加深網絡層數不能提高性能的問題。快捷連接在先進的輕量級CNN 中均有應用。本文借鑒了殘差學習的思想并加以改進,使網絡能夠在同一階段內部更好地進行局部殘差學習,該方法稱為跨模塊連接。
分組卷積是輕量級卷積神經網絡設計中的一種常用方法。分組卷積可以用較少的參數量和較低的計算復雜度生成大量的特征映射,而更多的特征映射意味著可以編碼更多的信息以獲得更豐富的特征。分組卷積也有明顯的缺點:將輸入特征映射分組導致輸入信息不完整,輸出特征圖不能包含輸入特征圖的所有信息。在ShuffleNet[22]中,使用通道重排來解決這個問題。


表1 不同分組數在Cifar_10的準確率對比Tab.1 Accuracy comparison of different grouping numbers on Cifar_10
通過對k的不同取值發現,當k=2時,即當將輸入分為兩組時效果最好。k=2實現了全通道的信息交流。同時,如文獻[23]所建議,過多的分組會增加MAC(Media Access Control address),使用兩個組也是合理的。因此,應用于C-Net 中設置k=2,即將輸入通道數分為兩組,并使用1×1 卷積實現兩階段的降維操作。當然,也可以用其他大小的卷積核替換它。兩階段降維方法加深網絡深度的同時減少了參數量,提高了模型的非線性建模能力。首先,將輸入特征圖分為通道數相同的兩組G1和G2。兩組中的通道數均為輸入的一半,對兩組使用1×1 卷積得到和,通道數減少了一半。顯然,和包含了所在分組中所有通道的信息。然后再次卷積得到和,尺寸保持不變。最后使用跨通道交叉融合,將和添加到和的相鄰組中合并在一起,結果用作下一層的輸入。因此,輸入特征圖的維數減少是通過兩階段的分組卷積和跨通道交叉融合實現的。C-Net 中用于分組卷積的跨通道融合如圖3所示。假設輸入特征映射的尺寸為C×H×W,直接使用標準1×1 卷積來減小尺寸實現降維,則參數量為,使用本文的方法則參數量為,因此參數數量減少了。通道數C通常比較大,因此,實現用于分組卷積的跨通道交叉融合以提高模型的泛化能力的同時減少到原始參數量的75%。

圖3 C-Net中的跨通道交叉融合Fig.3 Cross-channel fusion in C-Net
如文獻[24]中建議的那樣,為了提高網絡的準確性,增加基數比增加網絡的深度和寬度更有效,其中基數是指并行堆疊的某些模塊的數量。目前最先進的輕量級CNN 架構[22-23,25-27]有一個共同的特征,即網絡結構由基本構建塊堆疊而成。把具有相同輸入輸出分辨率的幾個基本構建塊的堆疊稱為一個階段,相鄰階段通過池化[28-29]或步長為2卷積運算實現下采樣。同一階段內通常由許多具有相同結構的基本構建塊組成。通常,快捷連接通常是在單個基本構建塊內部實現的,一般是在某個基本構建塊的輸入和輸出之間添加了快捷連接。快捷連接破壞了網絡的對稱性并改善了網絡的表征能力。通過增加快捷連接,參數量保持不變,分類精度得到進一步提高,網絡的可控制性和可擴展性也得到改善。傳統架構中的快捷連接如圖4所示。
考慮到同一階段內的基本構建塊的輸入輸出具有相同的結構,為了進一步提高模型的特征提取和泛化能力,提出了一種稱為跨模塊連接的方法。在同一階段內相鄰的基本構建塊之間,上一個基本構建塊的通過兩階段降維后的特征映射和下一個基本構建塊的降維后的特征映射之間添加快捷連接,然后將融合后的結果用作深度可分卷積的輸入。這有助于增強模型的特征提取能力,實現上下文更好的建模。跨模塊連如圖5所示。

圖4 傳統架構中的快捷連接Fig.4 Shortcut connections in traditional architecture

圖5 跨模塊連接Fig.5 Cross-module connections
利用提出的兩種方法,設計了一個輕量級的特征提取單元作為C-Net 基本構建塊。這是從殘差塊啟發而來,采用先壓縮和后擴張策略[30]。它分為兩部分:降維層和特征提取層。降維層使用兩階段跨通道交叉融合,通過卷積進行輸入特征映射的降維處理,降維為原始輸入維的一半。特征提取層使用深度可分離卷積。首先,使用深度卷積進行特征提取,然后使用逐點卷積增加輸出通道的維度。基本構建模塊如圖6所示。

圖6 某一階段內部的基本構建塊Fig.6 Basic building blocks in a certain stage
通常,卷積操作后會添加非線性。最常用的激活函數是ReLU。ReLU的計算式(圖7)表示如下:

如圖7 所示,如果對ReLU 的激活范圍沒有限制,則輸出范圍為0 到正無窮大;如果激活值很大并且分布在很大的范圍內,則低精度時無法很好地精確描述造成精度損失。考慮到這些因素,使用ReLU6[26]作為C-Net中的激活函數。ReLU6是普通的ReLU,但將最大輸出值限制為6。移動終端設備float16 的精度較低,ReLU6 可以提供良好的數值分辨率。將最大值限制為6 也有助于使網絡為定點推理做好準備。ReLU6的計算式(圖8)表示如下:

Xception[17]中實驗結果表明深度卷積后增加非線性會降低性能。一種猜測是深度卷積輸出通道的數量太少,非線性的應用會造成信息丟失。因此在C-Net 基本構建塊的設計中,去除了深度卷積后的激活函數,輸出為線性。

圖7 激活函數ReLUFig.7 Activation function ReLU

圖8 激活函數ReLU6Fig.8 Activation function ReLU6
C-Net架構主要由C-Net基本構建塊堆疊組成。網絡結構如表2 所示,其中k為類別數。除了最后的全局平均池化[31],整個網絡再不使用池化,但每個階段的第一個基本構建塊都使用步長為2 的卷積進行下采樣。全局平均池化用于防止過擬合并實現輕量級。此外,Dropout[32]和BatchNormalization[33]用于訓練。

表2 C-Net網絡架構Tab.2 Network architecture of C-Net
實驗環境:整個實驗在Ubuntu16.04 LTS 和Python 3.6、Pytorch 1.2.0[34]和Opencv 3.1 的軟件環境下進行。CPU 是具有8 核3.7 GHz 的Intel Xeon E5-1620,內存為32 GB。使用的GPU 是具有CUDA 10.0 和cuDNN 7.6 的NVIDIA-RTX2080ti。相關數據集如下:
1)Cifar_10 數據集由10 個類別的60 000 張彩色圖像組成,每個類別有6 000 張圖像。其中有50 000 張訓練圖像和10 000張測試圖像。
2)Food_101 數據集包含101 種食物的101 000 張圖像,每種包含1 000張圖像。每個類別有250張測試圖像和750張訓練圖像,因此共有75 750張訓練圖像和25 250張測試圖像。
3)Caltech_256 數據集共包含257 個類別的30 607 張圖像,每個類別中最少80 張圖像,最多827 張圖像,其中一個是背景的類別。在本實驗中,將背景類刪除,訓練集和測試集以4∶1的比例隨機分離。
在當前的圖像識別研究中,這些公開數據集被廣泛使用。其中,Cifar_10數據集主要用于消融實驗。
數據預處理:在訓練之前對所有數據集進行預處理。所有數據集均使用數據增強增加訓練樣本。對于Cifar_10,所有圖像使用像素0 填充圖像的邊緣,然后將圖像隨機裁剪為32×32。對于Food_101和Caltech_256,首先將所有圖像縮放到256×256,然后隨機裁剪為224×224。在訓練過程中,按50%的概率水平翻轉和垂直翻轉。最后對所有圖像進行歸一化處理。
超參數設置:在使用Food_101和Caltech_256數據集進行的實驗中,數據處理、初始化、批處理大小和訓練迭代次數等實驗設置保持不變。在訓練期間,批處理大小為128,每個epoch 后進行一次測試迭代。所有層使用相同的學習率并將初始學習率設置為0.1。訓練過程采取學習率衰減的策略,γ為0.1。學習率衰減3次后停止訓練。使用交叉熵損失函數,優化器為隨機梯度下降(Stochastic Gradient Descent,SGD),動量為0.9,權重衰減參數為0.000 5。Food_101在180 000次迭代后結束訓練,而Caltech_256 在90 000 次迭代后結束訓練。
為了評估C-Net 的性能,在Food_101 數據集和Caltech_256 數據集進行了實驗。實驗評估了Food_101 數據集和Caltech_256 數據集上具有代表性的不同類型的典型CNN 模型的性能。AlexNet[3]和ResNet[8]是傳統CNN 架構的代表,其中AlexNet 沒有快捷連接,ResNet 包含快捷連接;SqueezeNet[25]、MobileNetV2[27]和ShuffleNetV2[23]是目前最先進的輕量級CNN 的代表,其中,SqueezeNet 通過提出FireModule模塊,先利用1×1 卷積進行降維,再利用1×1 卷積+3×3 卷積組合升維,實現了參數優化;MobileNetV2 通過使用深度可分離卷積和Inverted Residual Block,可以用較少的運算量得到較高的精度,適用于移動端的需求;ShuffleNetV2 通過使用channel split和channel shuffle等方法,在速度和準確度之間做了很好的平衡。實驗結果如表3和表4所示。
從表3 和表4 可以看出,C-Net 在Food_101 數據集和Caltech_256 數據集上的準確率相較AlexNet 分別提高了8.67個百分點和8.91 個百分點,但參數僅為AlexNet 的4%和4.2%,計算復雜度僅為AlexNet 的47.69%和47.67%。這充分說明傳統的CNN 架構具有很大的冗余和缺陷,可以通過使用更有效的卷積方法和設計高質量的網絡架構來實現CNN性能的提高,而不僅是單純依靠網絡規模的增加。此外,C-Net 的準確率相較ResNet-18 低1.34 個百分點和1.61 個百分點,但參數數量和計算復雜度遠小于ResNet-18,大約僅為ResNet-18 的20%和25%,更加適合在存儲和計算資源有限的設備上運行。

表3 不同模型在Food_101上的分類性能對比Tab.3 Comparison of different models for classification performance on Food_101

表4 不同模型在Caltech_256上的分類性能對比Tab.4 Comparison of different models for classification performance on Caltech_256
另外,與SqueezeNet、MobileNetV2、ShuffleNetV2 這三個最先進的輕量級模型的對比實驗結果表明,C-Net不僅比傳統的CNN模型更有優勢,而且與其他最先進的輕量級架構相比也具有很強的競爭力。與SqueezeNet 相比,C-Net的準確率分別高出6.97個百分點和8.60個百分點,盡管參數量增加,但計算復雜度大幅降低,這主要得益于深度可分離卷積和快捷連接帶來的特征提取能力的增強。C-Net在兩個數據集的準確率表現均介于1.0MobileNetV2 和ShuffleNetV2 1.5x 之間,參數量與1.0MobileNetV2和ShuffleNetV2 1.5x處于同一級別,但均比它們小,顯示出C-Net 在移動端部署的可行性。C-Net 的計算復雜度略高于1.0MobileNetV2,但僅為ShuffleNetV2 1.5x的大約68.05%,這也解釋了C-Net在準確度上與MobileNetV2基本持平卻低于ShuffleNetV2,主要是復雜度相較ShuffleNetV2 極大降低,這也充分說明模型復雜度在特征提取和建模過程中的重要性。這些輕量級架構是為資源有限的設備設計的,與某些基準模型相比具有競爭優勢。不同模型在Food_101 和Caltech_256訓練過程中的準確率如圖9和圖10所示。

圖9 不同模型在Food_101上的準確率Fig.9 Accuracies of different models on Food_101

圖10 不同模型在Caltech_256上的準確率Fig.10 Accuracies of different models on Caltech_256
總的來說,C-Net 不僅在參數量方面相較傳統的CNN 架構占用更少的硬件資源,而且在不犧牲模型性能的情況下比其他幾種先進的輕量級架構更輕巧。實驗結果表明,C-Net通過使用跨通道交叉融合進行分組卷積以減少參數數量,并在同一階段內部實現跨模塊連接以增強特征表達,與其他網絡架構相比,C-Net 是一種高效且輕量的網絡模型,具有更少的參數和更高的識別精度。C-Net 更加便于硬件應用,性能更優。
為了對提出的兩種方法進行評估,使用Cifar_10 數據集進行消融實驗。為了適應數據集的變化,對網絡輸入輸出進行相應修改。輸入大小改為32×32,最后一個全連接層的輸出更改為10。此外,由于輸入分辨率的寬度和高度變小,將階段2 的步幅為2 的卷積更改為步幅為1,不進行下采樣,然后全局平均池化從7×7變為4×4。其他參數保持不變。
3.3.1 跨通道交叉融合的分組卷積vs.普通分組卷積
為了評估分組卷積中各分組間跨通道交叉融合對于分組卷積的重要性,比較了是否包含跨通道融合的兩組模型。由于沒有引入額外參數,因此兩組模型的參數量和計算復雜度相同,其準確率曲線如圖11所示。

圖11 跨通道交叉融合的分組卷積vs.普通分組卷積Fig.11 Cross-channel fusion for grouped convolution vs.traditional grouped convolution
從圖11 可以看出,使用跨通道交叉融合進行分組卷積的模型(C-Net)與使用普通分組卷積的模型在收斂方面沒有太大差異,但是最終精度比使用普通分組卷積的模型高1%~2%。這表明跨通道交叉融合在實現了跨通道信息交流的同時,提高了模型的特征提取能力和模型泛化性能。這表明了跨通道信息通信對提高分組卷積性能的重要性。
3.3.2 跨模塊連接vs.無連接
為了評估跨模塊連接的重要性,比較了是否包含跨模塊連接的兩組模型。由于跨模塊連接也沒有引入額外參數,因此,這兩組模型的參數量和計算復雜度相同,其準確率曲線如圖12所示。
如圖12 所示,使用跨模塊連接的模型(C-Net)的收斂比不使用跨模塊連接的模型快得多,并且其最終的分類精度明顯高于不使用跨模塊連接的模型,表明了跨模塊連接更好地實現了特征重用和梯度反向傳播,而特征提取能力的增強和反向傳播的優化也帶來了更好的模型泛化性能。這也顯示了快捷連接對于在深層網絡中梯度傳播的重要性。

圖12 跨模塊連接vs.無連接Fig.12 Cross-module connection vs.no connection
本文提出了一種新型的輕量級卷積神經網絡架構C-Net。首先,提出了跨通道交叉融合的方法,在一定程度上解決了分組卷積中不同分組間缺乏信息交流的問題;然后,提出了跨模塊連接的方法,更好地實現同一階段內部的特征提取和特征復用;最后,基于上述兩種方法設計出輕量級網絡模型C-Net。C-Net 在Food_101 數據集上的準確率為69.41%,在Caltech_256 數據集上的準確率為63.93%,表明C-Net 是一種高效的輕量級神經網絡結構。同時,在Cifar_10 數據集上的消融實驗驗證了所提出的兩種方法都可以提高CNN 的分類準確率。由于時間和實驗條件的限制,C-Net的性能僅在圖像分類任務上得到了驗證。下一步工作是探索如何進一步提高C-Net 的性能,并將C-Net 應用于其他復雜任務,例如場景分割[35]和目標檢測[36]。