朱 斌,劉子龍
(上海理工大學 光電信息與計算機工程學院,上海 200093)
計算機硬件技術(shù)和攝像設備的迅猛發(fā)展帶動了計算機領(lǐng)域內(nèi)視覺行業(yè)的發(fā)展,很大程度上可幫助人們提取圖像中超越人眼辨識范圍的信息,并讀取圖像中所包含的內(nèi)容。圖像的分類問題,其根本是通過計算機模擬人腦內(nèi)部神經(jīng)對圖像的分析過程,對圖像信息進行特征分析與特征提取,自動把不同圖像分門別類的過程。卷積神經(jīng)網(wǎng)絡是一種內(nèi)部包含多種運算的人為模擬神經(jīng)系統(tǒng)的網(wǎng)絡模型。自從20世紀50年代發(fā)現(xiàn)視覺系統(tǒng)中的信息處理是分級的[1]之后,人類便開始通過計算機模仿人類的神經(jīng)元對圖像進行處理。
在實際圖像分類問題中,傳統(tǒng)的卷積神經(jīng)網(wǎng)絡可能會產(chǎn)生提取特征不足、精確度不高、欠擬合以及梯度爆炸、消失等問題。本文在傳統(tǒng)神經(jīng)網(wǎng)絡模型的基礎上加入新型Inception模塊提高模型對特征的提取能力,并通過增加通道數(shù)以及擴展模型的深度和寬度來提升處理信息的性能。此外,通過在模型處理數(shù)據(jù)信息過程中加入數(shù)據(jù)標準化、ReLU激活函數(shù)、數(shù)據(jù)增強、權(quán)重優(yōu)化以及Adadelta優(yōu)化手段,有效緩解數(shù)據(jù)訓練過程中一些常見的問題,如梯度突然消失、擬合程度過大或者不足等。
一個完整的卷積神經(jīng)網(wǎng)絡主要由輸入層、輸出層和隱含層3種構(gòu)造層混合而成。輸入層用來處理多維數(shù)據(jù),輸出層一般會通過歸一化指數(shù)函數(shù)或邏輯函數(shù)來輸出分類標簽。隱含層指的是在整個網(wǎng)絡模型中除開輸入和輸出的部分,同樣也是由3種構(gòu)造層混合組成,包括卷積層、池化層(卷積層加池化層也是卷積模型中的一個固有搭配)和全連接層[2]。傳統(tǒng)卷積神經(jīng)網(wǎng)絡的結(jié)構(gòu)如圖1所示。
圖1 傳統(tǒng)卷積神經(jīng)網(wǎng)絡結(jié)構(gòu)圖Figure 1. Traditional convolutional neural network structure
卷積層也稱為特征提取層,主要作用是通過卷積核對輸入數(shù)據(jù)進行特征提取。在處理特征過程中,類似于滑動窗口理論中的窗口移動,卷積核的滑動路徑為從左到右,從上到下地依次掃過輸入特征,在感受區(qū)域內(nèi)對特征進行矩陣元素乘法求和并疊加偏差,得到經(jīng)過卷積處理的特征值大小。卷積層的特征提取方式類似神經(jīng)元的提取方式,首先對局部特征進行感知,然后對感知的局部特征進行綜合,多次往復后得到全局信息。經(jīng)過卷積處理后的輸出特征的大小如式(1)所示。
(1)
其中,n×n表示輸入特征的尺寸大小;w×w表示該層所含的卷積核尺寸大??;s表示該層卷積核的步長;p表示邊緣補齊像素數(shù)(一般而言,p可以有3種不同模式選擇,為full、same或valid);f表示經(jīng)過卷積處理后的輸出特征的尺寸大小[4]。
池化層則是對經(jīng)過卷積層提取后的特征進行選擇和過濾操作,也可以理解為對特征量進行刪減。通過將特征圖中某個點的結(jié)果替換為相鄰區(qū)域的特征圖統(tǒng)計量,可以解決上一層提取特征的參數(shù)量過大的問題,降低特征維數(shù)[5]。經(jīng)過池化處理的特征大小的計算式與式(1)相同。
全連接層是隱含層網(wǎng)絡的最后部分。全連接層的作用一般是將池化后傳遞過來的局部特征重新通過權(quán)重矩陣進行重組,然后將學習到的特征映射到相應的標記空間,也就是特征展開成向量的形式輸入到激勵函數(shù)。經(jīng)過激勵函數(shù)的激勵,然后再將響應部分以組合的形式輸出[6]。全連接層的連接結(jié)構(gòu)示意圖如圖2所示。
圖2 全連接層示意圖Figure 2. Schematic diagram of the full connection layer
從圖2中可以看出,如果網(wǎng)絡的上一層發(fā)送神經(jīng)元的個數(shù)固定,那么下一層接收神經(jīng)元個數(shù)也是固定不變的。所以每次特征映射輸入必須是一定的大小,與權(quán)重矩陣正好可以相乘。
新型初始模塊是結(jié)合卷積神經(jīng)網(wǎng)絡中的初始模塊和殘差模塊搭建出來的,如圖3所示。新增的初始模塊由3個分支通道組成:
圖3 New Inception 模塊Figure 3. New Inception module
(1)第一個通道block中疊加一個雙通道支干,每個支干由兩個卷積層堆疊,分別采用大小為1×3和3×1的卷積核依次堆疊,來代替原始的3×3。該方式增加了通道的非線性,提升了網(wǎng)絡的適應程度,使得訓練速度加快。相比于原來的3×3卷積核,新方法在相同的情況下所需要的參數(shù)更少,并且雙支干通道在經(jīng)過deep concat后的合成特征增加了信息的融合;
(2)第二個通道block則是由一個1×1的卷積層加上兩個1×3和3×1的卷積結(jié)構(gòu),并且在1×3卷積層的基礎上引入了殘差單元的思想(使用全等映射將前一層輸出,跳過一層或更多層,傳到后面),每兩層增加一個跳遠連接。該方法使得模型深度增加并且不會發(fā)生退化,在加快訓練速度的同時,一定程度上提高了性能[7];
(3)第三個通道block是3×3的最大池化操作和1×1的內(nèi)核卷積操作[8]。采用初始模塊的優(yōu)點有:1)加速訓練網(wǎng)絡的速度;2)防止表征維度極度壓縮從而導致表征受阻,使得表征特征的大小平緩地從輸入向輸出遞減[9];3)輸出的特征冗余信息較少,提取的特征信息比單通道分支提取的特征更加準確,提升網(wǎng)絡學習能力且不退化;4)使得網(wǎng)絡寬度和深度有了一定的加強及平衡[10]。
包含初始模塊的改進的卷積神經(jīng)網(wǎng)絡結(jié)構(gòu)如圖4所示。
圖4 包含初始模塊的改進卷積神經(jīng)網(wǎng)絡示意圖Figure 4. Schematic diagram of an improved convolutional neural network with initial modules
和傳統(tǒng)卷積模型一樣,新型卷積網(wǎng)絡同樣將輸入層用作圖像數(shù)據(jù)的輸入,輸入數(shù)據(jù)信息的尺寸為32×32像素,深度為3。卷積層包含3×3卷積核,步長為1。池化層池化方式都為最大池化,池化窗口為2×2,步長為2。邊緣補充的方式讓輸入與輸出保持同樣的尺寸,padding為“same”。激活函數(shù)為ReLU,在最后兩層全連接層中加入Dropout緩解過擬合,由輸出層輸出分類結(jié)果。包含新型初始模塊的卷積神經(jīng)網(wǎng)絡模型參數(shù)如表1所示。
內(nèi)部優(yōu)化是在模型訓練過程中加入了一些優(yōu)化手段來提升模型的工作性能和數(shù)據(jù)處理能力。
2.2.1 數(shù)據(jù)標準化
為了防止數(shù)據(jù)信息的分布在傳遞過程中發(fā)生變化,導致模型不穩(wěn)定,在卷積層之后插入BatchNorm層,對輸入進行標準化處理[11]:
(1)數(shù)據(jù)增強。數(shù)據(jù)增強是提高卷積神經(jīng)網(wǎng)絡魯棒性和泛化能力的有效手段,包括在線增強和離線增強兩類[12]。實驗中使用數(shù)據(jù)的在線增強,通過裁剪、翻轉(zhuǎn)、旋轉(zhuǎn)等得到新的圖像,通過變換方法對數(shù)據(jù)集進行補充;
表1 新型卷積神經(jīng)網(wǎng)絡各結(jié)構(gòu)參數(shù)
(2)激活函數(shù)ReLU。本文使用ReLU作為激活函數(shù),可以避免傳統(tǒng)的Sigmod或Tanh函數(shù)易飽和的問題,其表達式如式(2)所示。
(2)
函數(shù)具有不飽和性,當輸入為正數(shù)時,梯度保持不變,有效解決了訓練過程中梯度突然消失的問題,收斂速度也得到提升[13];
(3)權(quán)重初始化He_normal。本實驗采用He_normal初始化方法。He_normal是以0為中心,標準差如式(3)所示。
stddev=sqrt(2/fan_in)
(3)
其中,fan_in是權(quán)重張量中輸入單位的數(shù)量;sqrt是開方操作;stddev為標準差。He_normal權(quán)重初始化可以較大程度地體現(xiàn)數(shù)據(jù)本身的分布特性,每層權(quán)重值變化趨勢呈現(xiàn)出離散性[14];
(4)優(yōu)化器Adadelta。Adadelta優(yōu)化方法在梯度下降的迭代計算中只增加少量的額外計算量,并且不需要在訓練前人為給出一個初始學習率[15]。其學習率會隨著梯度的倒數(shù)增長,即在較大梯度時具有較小的學習率,在較小的梯度時具有較大的學習率,與學習率固定不變的傳統(tǒng)方法有顯著的區(qū)別[16]。
實驗所用到的數(shù)據(jù)集為CIFAR-10數(shù)據(jù)集。CIFAR-10數(shù)據(jù)集總共有10類互相獨立的60 000張圖片,圖片的大小為32×32×3,其中部分樣本數(shù)據(jù)如圖5所示。
圖5 CIFAR-10 部分樣本數(shù)據(jù)Figure 5. CIFAR-10 partial sample data
本文的實驗環(huán)境為Inter(R)Core i5-9700,內(nèi)存為4 GB,操作系統(tǒng)為Ubuntu,操作平臺是tensorflow。在通過傳統(tǒng)的神經(jīng)網(wǎng)絡進行測試數(shù)據(jù)時,將輸出定義為10類,測試輪次設置為100,設定batch_size為128,設置初始學習率為0.001,激活函數(shù)為Sigmod,梯度下降算法使用的是隨機梯度下降SGD,實驗結(jié)果如圖6所示。
圖6 傳統(tǒng)卷積網(wǎng)絡測試結(jié)果圖Figure 6. Test results of traditional convolution network
將上述測試網(wǎng)絡中的激活函數(shù)由Sigmod換成ReLU,梯度下降算法由隨機梯度下降SGD換成Adadelta算法,權(quán)重初始化方法使用He_normal。再結(jié)合數(shù)據(jù)增強和標準化,同樣進行100個輪次的測試,batch_size仍是128。此測試中由于使用的Adadelta算法,所以不用事先給予學習率,實驗結(jié)果如圖7所示。
圖7 傳統(tǒng)網(wǎng)絡加上ReLU、Adadelta和數(shù)據(jù)增強測試結(jié)果Figure 7. Test results of raditional network plus ReLU、Adadelta and data enhancement
從這兩個實驗中可以看出,在同樣是傳統(tǒng)網(wǎng)絡模型的基礎上,使用梯度優(yōu)化算法和權(quán)重初始化優(yōu)化算法可以提高網(wǎng)絡的實驗精度,將測試準確度從68.94%提高到74.28%。
使用改進的新型卷積神經(jīng)網(wǎng)絡作為網(wǎng)絡基礎,同樣將輸出定義為10類,測試輪次為100,batch_size為128,設置初始學習率為0.001,激活函數(shù)為Sigmod,梯度下降算法使用的是隨機梯度下降SGD,實驗結(jié)果如圖8所示。
圖8 改進的網(wǎng)絡模型最終測試結(jié)果圖Figure 8. Final test results of improved network model
從實驗結(jié)果可以看出,在同樣的條件下,使用新型卷積神經(jīng)網(wǎng)絡模型可以獲得更高的識別精度,準確度從68.94%提高到73.11%,證明新型網(wǎng)絡模型結(jié)構(gòu)的正確性和有效性。
使用新型網(wǎng)絡模型作為基礎結(jié)構(gòu),激活函數(shù)為ReLU,優(yōu)化方法為Adadelta算法,權(quán)重初始化方法使用He_normal,結(jié)合數(shù)據(jù)增強和標準化,同樣進行100個輪次的測試,batch_size為128。實驗結(jié)果如圖9所示,損失函數(shù)如圖10所示。
圖9 改進模型加上ReLU、Adadelta和數(shù)據(jù)增強測試結(jié)果Figure 9. Test results of improved model plus ReLU, Adadelta and data enhancement
圖10 改進模型加上ReLU、Adadelta和數(shù)據(jù)增強測試損失函數(shù)Figure 10. Loss of improved model plus ReLU, Adadelta and data enhancement
從圖中可以看出,改進模型最高在第78代達到了84.23%的測試準確率。但是Testing Loss曲線并不是一直下降的,而是伴有上升的曲線。這是因為本文的檢測性能指標不是val_loss而是val_accuracy,因此并不能在模型的loss停止下降時就結(jié)束訓練。將本文所有實驗的數(shù)據(jù)結(jié)果進行比對,其對比結(jié)果如表2所示。
表2 不同模型的測試準確率對比結(jié)果表
由表2可以看出,梯度優(yōu)化算法和激活函數(shù)度的改進確可以提升網(wǎng)絡模型的工作性能,提高測試精度。另一方面,改進的卷積神經(jīng)網(wǎng)絡相比于傳統(tǒng)的網(wǎng)絡模型有較大的準確率提升,準確率提高了4.17%;結(jié)合了ReLU、Adadelta和數(shù)據(jù)增強優(yōu)化手段,網(wǎng)絡的準確率比單純的傳統(tǒng)網(wǎng)絡提升了5.34%;新型網(wǎng)絡模型結(jié)合ReLU、Adadelta和數(shù)據(jù)增強后,模型的準確率提升了15.29%,具有更好的泛化能力。
針對傳統(tǒng)卷積網(wǎng)絡模型分類效率較低,處理能力不足的缺點,本文提出了一種包含初始模塊的卷積神經(jīng)網(wǎng)絡模型。新方法通過在主通道模型網(wǎng)絡中新增Inception模塊來同時加深寬度和深度,使得模型結(jié)構(gòu)有所平衡。本文在處理數(shù)據(jù)信息的同時結(jié)合ReLU激活函數(shù)、He_normal初始化、數(shù)據(jù)標準化以及擴充數(shù)據(jù)集,分類效果較傳統(tǒng)模型有了很大提升,其準確率高達84.23%。實驗結(jié)果證明初始模塊的卷積網(wǎng)絡模型是有效的。未來的工作是對網(wǎng)絡模型加以改善,以提升網(wǎng)絡的寬度或者深度,或從多角度改善特征參數(shù)的提取方式,并將其應用于實際生產(chǎn)活動中。