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