宋婷婷,徐世許
(青島大學自動化與電氣工程學院,山東 青島 266071)
近年來,隨著計算能力的提升和卷積神經網絡的發展,卷積神經網絡在圖像分類任務中的表現逐年變強,相比全連接神經網絡[1-4]的性能提升了很多。自2012年,AlexNet[5]獲得ILSVRC(ImageNet Large Scale Visual Recognition Challenge)圖像分類項目冠軍之后,2014年亞軍、2014年冠軍和 2015年冠軍也分別被卷積神經網絡 VGGNet[6]、Google InceptionNet[7]和ResNet[8]獲得。在卷積神經網絡中,池化層對分類性能有重要影響。根據 Springenberg等[9]的分析,池化層的作用相當于卷積層中的激活函數,只是用p范數替代了激活函數。池化層通過減小輸入尺寸來減少后一層的參數量和計算量。在最大池化層中,每個池化窗口中最大值被認為是對分類“最有用”的信息而得以保留,其余信息被丟棄。而實際上,被丟棄的信息也可能對分類任務來說是有用的。針對最大池化的這一問題,本文提出全采樣方法和基于 L1范數的降采樣方法替代最大池化層,在CIFAR-10和MNIST數據集上的實驗結果表明,在網絡結構相同、參數不增加的情況下,所提方法的分類準確率高于最大池化方法。
全采樣包括重新組織輸入信息和使用 1×1卷積恢復通道數兩步。以尺寸為4×4、通道數為L的輸入為例,介紹全采樣是如何重新組織輸入的。如圖1所示,輸入包括16個尺寸為1×1、通道數為L的張量(多維數組),并且進行了編號。一個尺寸為2×2,步長為2的窗口遍歷輸入,窗口中的四個張量被抽取出來,然后滑動窗口,重復上述操作,直至遍歷結束。把每次抽取出來的相同位置上的張量拼成尺寸為2×2,通道數為L的張量,然后把這四個張量在通道維度上拼接成尺寸為2×2,通道數為4L的張量。為了把通道數恢復為L,后緊跟一個包含L個1×1卷積核的卷積層。
如果要減少全采樣過程中 1×1卷積層的參數量,可以保留每個窗口的4個張量中L1范數最大的k∈ { 1,2,3}個張量,而不是所有的張量,這就是基于L1范數的降采樣方法。假設原輸入尺寸為 DF×DF(要求 DF為大于零的偶數),通道數為 L。圖 2給出了使用 L1范數進行降采樣(k=3)的示意圖,DF= 4 。使用tensorflow[10,11]實現的具體步驟為:
步驟一,對原輸入進行切片,得到四個新輸入,第一個新輸入與原輸入相同,第二個新輸入是原輸入右邊 DF×(DF-1)的部分,第三個新輸入是原輸入下邊(DF- 1 )× DF的部分,第四個新輸入是原輸入右下(DF- 1 )× ( DF- 1 )的部分;
步驟二,對每個新輸入進行1×1、步長為2的最大池化,得到四個張量,每個張量的尺寸為
步驟三,計算步驟二得到的四個張量的 L1范數;
為了比較全采樣方法、基于L1范數的降采樣方法和最大池化方法,本文使用結構相同的四個神經網絡:FS-CNN、L1-Norm-CNN(k=3)、L1-Norm-CNN(k=2)和MP-CNN。每個神經網絡的結構和參數如表1所示。受VGGNet啟發,堆疊3×3卷積層就可以獲得不錯的分類準確率,每個卷積神經網絡都只使用 3×3的卷積層。每個卷積層后都緊跟一個BN(Batch Normalization 批歸一化)層[12]用于加速訓練過程,再使用ReLU(Rectified Linear Unit修正線性單元)層[13]作為激活函數。
(1)FS-CNN(Fully-Sampled-CNN)。第一層和第二層都是卷積層,分別包含96個3×3卷積核。第三層是全采樣層,包含一個96個1×1卷積核的卷積層。第四層和第五層是卷積層,分別包含 192個3×3卷積核。第六層是全采樣層,包含一個192個1×1卷積核的卷積層。第七層是包含192個3×3卷積核的卷積層。第八層是包含192個1×1卷積核的卷積層。第九層是包含10個1×1卷積核的卷積層。第十層是全局平均池化層,滑動窗口尺寸為7×7,得到尺寸為 1×1、通道數為 10的輸出,正好對應下小節實驗中CIFAR10和MNIST的圖片種類。最后一層為softmax層。
(2)L1-CNN(k=3) (L1-Norm-CNN with k=3)。與FS-CNN的區別在于,L1- CNN(k=3)的第三層和第六層換成了基于 L1范數的降采樣層,選取了 3個L1范數最大的張量。
(3)L1-CNN(k=2)。與 L1-CNN(k=3)的區別在于,L1-CNN(k=2)降采樣層選取了2個L1范數最大的張量。
(4)MP-CNN(MaxPool-CNN)。為了說明FS-CNN比MP-CNN的性能提升既不是因為結構不同導致,也不是因為增加參數導致,把MP-CNN的最大池化層的輸出拷貝4份,然后在通道維度上拼接起來,后接一層 1×1卷積層,使 MP-CNN和FS-CNN的結構和參數個數都相同。
實驗開發平臺為Tensorflow 1.2 GPU版本,使用 Python 3.4作為開發語言,使用 cuda8.0和cudnn5.1作為運算平臺,開發系統為ubuntu14.04。硬件平臺主要元件的規格型號如表2所示。

圖1 全采樣過程示意圖Fig.1 Full sampling process diagram

圖2 基于L1范數的降采樣方法的tensorflow實現示意圖Fig.2 The diagram of tensorflow implementation of the down-sampling method based on L1 norm

表1 實驗使用的卷積神經網絡的結構Tab.1 The structure of the convolutional neural networks used in experiments
CIFAR-10數據集包含10類物體的圖像,每類物體有6000張圖片,50000張用于訓練,10000張用于測試,圖像尺寸為32×32。實驗使用了數據增強(data augmentation)技術,包括隨機剪切、左右翻轉、調整亮度、調整色調、調整飽和度和調整對比度。隨機剪切時從原圖像中隨機截取28×28的連續像素區域。歸一化數據增強后的圖像作為神經網絡的輸入。訓練方法采用最小批梯度下降法(Mini Batch Gradient Descent),使用交叉熵函數作為損失函數,每批訓練數據包含50張圖片。采用Xavier[14]方法對參數初始化,每層神經網絡的參數按照下列均勻分布進行初始化:

其中,ni表示當前層神經網絡的參數量,ni+1表示下一層神經網絡的參數量。參數更新采用Adam方法[15]。訓練總迭代次數設置為300000次。為了比較不同卷積神經網絡的性能,將四個網絡分別進行三次實驗,每次實驗包括一個訓練過程和一個測試過程。

表2 硬件平臺主要元件的規格型號Tab.2 Specifications of the main components of the hardware platform

表3 CIFAR-10數據集上的平均分類準確率(單位:%,使用了數據增強)Tab.3 The average classification accuracy on CIFAR-10 datasets. (Unit: %, with data augmentation)

表4 卷積神經網絡的參數量(單位:百萬)Tab.4 The number of parameters of the convolutional neural networks. (Unit: million)
所有神經網絡的平均分類準確率如表3所示,參數量如表4所示。平均準確率是三次實驗結果的平均值。從表3可以看到,分類準確率最高的神經網絡是 FS-CNN,L1-CNN的分類準確率低于FS-CNN、高于MP-CNN。表4給出了所有神經網絡的參數量,FS-CNN與 MP-CNN的參數量相同,L1-CNN的參數量略少一些。從表3和表4中可以看出,當輸入的四分之一被丟棄時(L1-CNN(k=3)),分類準確率與輸入全部保留時(FS-CNN)相比下降了 0.49%,當輸入的四分之二被丟棄時(L1-CNN(k=2)),分類準確率繼續下降,與丟棄四分之一輸入時相比下降了0.41%,已經與MP-CNN的分類準確率89.60%差別不大。這說明輸入信息都是對分類“有用的”,盡管貢獻大小可能不一樣,丟棄的輸入越多,對分類越不利。
MNIST數據集包含60000張手寫體阿拉伯數字圖片,訓練集包含55000張圖片,驗證集包含5000張圖片,測試集包含10000張圖片。所有圖片都是灰度圖,尺寸為28×28。訓練迭代次數為20000次,沒有使用數據增強,直接把28×28原始灰度圖片作為卷積神經網絡的輸入,實驗所用的神經網絡結構、訓練方法和參數設置與 CIFAR-10相同。平均分類準確率如表5所示,MNIST上平均分類準確率的排名與CIFAR-10相同。因為MNIST相比CIFAR-10分類難度低,所以神經網絡的分類準確率都比較高。因為MNIST實驗所用的神經網絡結構與CIFAR-10數據集相同,所以參數量與表4相差很小,故不再單獨列出。MNIST實驗也說明,與MP-CNN相比,FS-CNN和L1-CNN (k=3)使用了更多對分類“有用”的輸入信息,從而提高了分類準確率因為大部分神經網絡的平均分類準確率較高。

表5 MNIST數據集上的平均分類準確率(單位:%,沒有使用數據增強)Tab.5 The average classification accuracy on MNIST datasets. (Unit: %, without data augmentation)
本文從卷積神經網絡的降采樣層入手,針對最大池化丟棄對圖像分類“有用”的信息這一問題,提出了全采樣方法和基于L1范數的降采樣方法。分別保留全部輸入和部分輸入。在 CIFAR-10和MNIST上的實驗表明,在神經網絡結構相同、參數量也相同甚至更少的情況下,所提方法比最大池化的分類準確率高,說明使用的輸入信息越多,分類準確率越高。
[1] 楊燕, 劉剛, 張龍. 基于2DPCA和LDA的人臉圖像預處理與RBF神經網絡的人臉圖像識別研究[J]. 軟件, 2014,35(2): 115-118.
[2] 王宏濤, 孫劍偉. 基于BP神經網絡和SVM的分類方法研究[J]. 軟件, 2015, 36(11): 96-99.
[3] 安大海, 蔣硯軍. 基于BP神經網絡的人臉識別系統[J]. 軟件, 2015, 36(12): 76-79.
[4] 王新年, 張濤, 王海姣. 基于神經網絡和先驗知識的低分辨率車牌字符復原方法[J]. 新型工業化, 2011, 1(6): 78-83.
[5] A. Krizhevsky, I. Sutskever, and G. E. Hinton, Imagenet classification with deep convolutional neural networks[C],Advances in neural information processing systems, 2012:1097-1105.
[6] K. Simonyan, A. Zisserman, Very deep convolutional networks for large-scale image recognition[J], arXiv preprint arXiv: 1409. 1556, 2014.
[7] C. Szegedy, W. Liu, Y. Jia, et al, Going deeper with convo-lutions[C], Proceedings of the IEEE conference on computer vision and pattern recognition, 2015: 1-9.
[8] K. He, X. Zhang, S. Ren, et al, Deep residual learning for image recognition[C], Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.
[9] J. T. Springenberg, A. Dosovitskiy, T. Brox, et al, Striving for simplicity: The all convolutional net[J], arXiv preprint arXiv: 1412. 6806, 2014.
[10] 才云科技Caicloud, 鄭澤宇, 顧思宇. TensorFlow: 實戰Google深度學習框架[M]. 北京: 電子工業出版社, 2017.
[11] 山姆·亞伯拉罕著. 段菲, 陳澎譯. 面向機器智能的TensorFlow實踐[M]. 北京: 機械工業出版社, 2017.
[12] S. Ioffe, C. Szegedy, Batch normalization: Accelerating deep network training by reducing internal covariate shift[C], International Conference on Machine Learning,2015: 448-456.
[13] V. Nair, G. E. Hinton, Rectified linear units improve restricted boltzmann machines[C], Proceedings of the 27th international conference on machine learning, 2010: 807-814.
[14] X. Glorot, Y. Bengio, Understanding the difficulty of training deep feedforward neural networks[C], Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, 2010: 249-256.
[15] 何宇健. Python與機器學習實戰: 決策樹、集成學習、支持向量機與神經網絡算法詳解及編程實現[M]. 北京: 電子工業出版社, 2017.