馮松松,王斌君
(中國人民公安大學(xué)信息網(wǎng)絡(luò)安全學(xué)院,北京 100038)
卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)是根據(jù)生物視知覺原理構(gòu)建的前饋神經(jīng)網(wǎng)絡(luò),可對輸入信息按設(shè)計的階層進行平移不變分類,適用于有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)任務(wù)。卷積神經(jīng)網(wǎng)絡(luò)最早可追溯到1979—1980年福島邦彥模擬生物視覺皮層機制提出的“neocognitron”深度神經(jīng)網(wǎng)絡(luò)[1],初步實現(xiàn)卷積層和池化層功能,可對特征進行提取、篩選,對后續(xù)卷積神經(jīng)網(wǎng)絡(luò)的發(fā)展具有啟發(fā)性意義。
Waibel等[2]首次將卷積神經(jīng)網(wǎng)絡(luò)用于語音識別,設(shè)計出了時延卷積神經(jīng)網(wǎng)絡(luò)(time delay neural network,TDNN)算法,并采用反向傳播機制進行訓(xùn)練,獲得了圓滿的效果,優(yōu)于同時期的主流語音識別算法隱馬爾可夫模型(hidden Markov model,HMM)等。
LeCun等[3]提出適用于計算機視覺問題的LeNet,它包含卷積層、全連接層,并用隨機梯度下降(stochastic gradient descent,SGD)進行學(xué)習(xí),結(jié)構(gòu)上已接近現(xiàn)代卷積神經(jīng)網(wǎng)絡(luò)。同時期,隨著支持向量機(support vector machine,SVM)等核學(xué)習(xí)方法的流行,對卷積神經(jīng)網(wǎng)絡(luò)的研究熱度逐漸降低。Hinton等[4]正式提出深度學(xué)習(xí)(deep learning)概念,開啟了現(xiàn)代深度學(xué)習(xí)研究新紀元。深度學(xué)習(xí)源于人工神經(jīng)網(wǎng)絡(luò)的研究,是機器學(xué)習(xí)的一種,目前,卷積神經(jīng)網(wǎng)絡(luò)、深度神經(jīng)網(wǎng)絡(luò)、深度信念網(wǎng)絡(luò)等深度學(xué)習(xí)模型已成功應(yīng)用于計算機視覺、自然語言處理、語音識別等眾多領(lǐng)域,碩果顯著。
此后,得益于硬件設(shè)備計算能力的提升,以及大數(shù)據(jù)時代的到來,AlexNet[5]、ZFNet[6]、VGG[7]、GoogLeNet[8]、ResNet[9]、DenseNet[10]和UNet[11]等一系列深度卷積神經(jīng)網(wǎng)絡(luò)被提出,廣泛應(yīng)用于不同計算機視覺任務(wù)中;此外TextCNN[12]、DPCNN[13]、TextRCNN[14]等卷積神經(jīng)網(wǎng)絡(luò)在文本分類等自然語言處理任務(wù)中也取得顯著成果,這些成就和實質(zhì)性的進展,極大地推動了卷積神經(jīng)網(wǎng)絡(luò)的深入研究和蓬勃發(fā)展。
現(xiàn)代卷積神經(jīng)網(wǎng)絡(luò)由輸入層、多個隱藏層、輸出層3個主要模塊組成,其中,每個隱藏層通常還可包含卷積層、池化層等。不同的網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計,實現(xiàn)的效果也有較大差別。通常池化層可實現(xiàn)特征選擇、縮小參數(shù)矩陣、降低特征維度的功能。此外,池化操作還具有擴大感受野等作用。
在實際使用中,為更好地保留內(nèi)容和風(fēng)格特征,減少特征信息損失,研究人員根據(jù)整體模型架構(gòu)提出了不同的池化方法。本文按池化結(jié)果與池化窗口內(nèi)單個點的值或多個點的值有關(guān),將現(xiàn)有的池化方法分為單值策略和多值策略。下面分別進行闡述。
(1)單值策略。這類池化算法中最具代表性的是最大池化。最大池化是取每個池化窗口內(nèi)的最大值,能很好地保留最強的紋理、輪廓等特征,但會淡化其它紋理特征以及整體背景風(fēng)格等信息。
He等[15]提出空間金字塔池化(spatial pyramid pooling)方案,在該池化算法中,作者使用不同尺寸的最大池化核對特征圖進行池化,對得到的池化結(jié)果進行拼接,獲得了多個尺度上的特征,豐富了感受野。
Wu等[16]提出最大池化失活(max pooling dropout)方案,作者指出在訓(xùn)練時使用最大池丟失等價于具有可調(diào)參數(shù)的多項分布抽樣激活,本質(zhì)是對池化窗口內(nèi)部分元素進行隨機失活,再取余下元素的最大值。此外,Zhai等[17]還提出隨機采樣池化等。
(2)多值策略。平均池化是多值策略的代表,平均池化是對池化窗口內(nèi)的所有元素求均值,降低了估計值方差,能很好地保留整體風(fēng)格特征,但會弱化紋理、輪廓等信息。
Deliège等[18]提出順序池化(ordinal pooling)方案,將每個池化窗口內(nèi)的元素按順序排列,并根據(jù)對應(yīng)位置的權(quán)重計算求值,其中權(quán)重是在訓(xùn)練中學(xué)習(xí)得到的。順序池化考慮到了池化核內(nèi)的每個元素,減少了特征信息的丟失,但計算復(fù)雜度較大。
Rippel等[19]提出譜池化(spectral pooling)方案,基于快速傅里葉變換,對特征圖進行離散傅里葉變換,通過截斷頻域?qū)崿F(xiàn)特征降維,再經(jīng)過傅里葉逆變換得到池化結(jié)果。譜池化具有濾波功能,在保存低頻變化特征的同時可靈活調(diào)整輸出維度。整體保存了更多特征信息。但是,計算量大,訓(xùn)練時間長。
劉硯萍等[20]提出引入少量可學(xué)習(xí)參數(shù)的自學(xué)習(xí)池化算法,對不同特征通道進行獨立池化,并給池化層可學(xué)習(xí)權(quán)重添加正則約束項,增加算法的魯棒性。
此外Stergiou等[21]提出基于Softmax加權(quán)的池化方案,Gong等[22]提出多尺度無序池化(multi-scale orderless pooling),Gao等[23]提出基于局部重要性的池化,Sharma等[24]提出引入模糊邏輯的模糊池化,Wan等[25]提出基于信息熵的特征加權(quán)池化,Lin等[26]提出用于特征融合的雙線性池化,Arandjelovic等[27]提出局部特征聚合的NetVlad池化,王宇航等[28]提出基于高斯函數(shù)的加權(quán)平均池化等均屬于多值池化方案。
除上述兩種基本的池化方法外,Yu等[29]提出混合池化(mixed pooling)方案,在最大池化和平均池化中隨機選擇,結(jié)合了兩種經(jīng)典池化方案的優(yōu)點,豐富了特征層,一定程度上解決了過擬合問題,但普適性較差。
針對上述各池化算法存在的問題,在設(shè)計全新的池化算法時,將考慮特征圖整體的內(nèi)容及風(fēng)格特征分布,有選擇性的進行池化,在保持池化前后特征圖的內(nèi)容、風(fēng)格特征分布一致的情況下,穩(wěn)定提高模型準確率,并且可用來替代常用的最大池化、平均池化,成為一種通用的池化算法。
池化的最終目的是對特征圖進行降采樣,在降低模型參數(shù)量的同時,盡量減少特征信息的損失,保持池化前后特征圖的不變性。當(dāng)前,常用的池化方法是在池化窗口內(nèi)取某個代表值(如最大池化)或多個值的加權(quán)(如平均池化),同一池化層采用相同的策略。一般來說,單值策略能更好的保持特征圖的某些內(nèi)容特征,而多值策略則能更好的保持圖像的整體風(fēng)格特征。因此,現(xiàn)有的池化方法要么導(dǎo)致池化前后特征圖的均值保持接近,要么導(dǎo)致池化前后特征圖的標(biāo)準差保持接近,二者難以兼顧。
受人眼視覺系統(tǒng)更關(guān)注圖像中的邊緣區(qū)域以及視覺皮層分級處理視覺信號的啟發(fā),在對卷積后的特征圖進行池化時,不僅要保留池化域中的最大值、平均值,還需保留一部分最小值。保留部分最小值有兩個好處,一是使池化前后特征圖的均值、標(biāo)準差分布保持一致,特別是能減少整體特征的損失;二是使池化后的特征圖有明顯的對比,邊緣清晰,便于后續(xù)進一步識別。為此設(shè)計全新的池化算法,根據(jù)特征圖中風(fēng)格特征、內(nèi)容特征的分布,合理地選擇池化窗口內(nèi)的最大值、平均值或最小值作為池化結(jié)果。
為保持池化前后特征圖中的風(fēng)格特征、內(nèi)容特征不變,在對同一卷積后的特征圖池化時,不僅要選擇池化窗口內(nèi)的最大值、平均值作為池化結(jié)果,還要有一部分池化窗口選擇最小值,保持池化前后特征圖的均值、標(biāo)準差分布一致。
Mam(maximum-average-minimum)池化算法的設(shè)計思路是對池化窗口進行劃分,即一部分池化窗口取最大值;一部分池化窗口取均值,還有一部分池化窗口取最小值。劃分的依據(jù)為每個池化窗口的均值A(chǔ)vg(aij)與整個池化域的均值mA和標(biāo)準差sA的加權(quán)做比較。以非重疊池化為例,池化核大小、步長均為k,aij=A[k*i:k*i+k,k*j:k*j+k]表示池化域中的每一個池化窗口。其中,i,j表示池化后特征圖的第i行、第j列,*表示卷積操作。具體池化過程表達式為
(1)
式(1)中:A表示池化前特征圖;B表示池化后特征圖;α、β為可調(diào)節(jié)參數(shù)。
Mam池化算法的優(yōu)點是實現(xiàn)簡單,便于理解,引入的額外計算量小。缺點也很明顯,并沒有考慮每個池化窗口內(nèi)的特征分布與整個池化域的內(nèi)容特征、風(fēng)格特征分布之間的內(nèi)在關(guān)聯(lián),而是簡單根據(jù)整個池化域的均值、標(biāo)準差對不同池化窗口進行劃分,在實際使用中表現(xiàn)不佳。
理論上講,Mam池化算法能保持池化前后特征圖的整體內(nèi)容和風(fēng)格特征分布一致。為使池化更能充分體現(xiàn)整體風(fēng)格、主要內(nèi)容等特征的分布,本文使用了Sobel算子對卷積后的特征圖進行處理,得到每個像素點的梯度值,并根據(jù)梯度值大小分布選擇池化窗口內(nèi)的最大值、均值或最小值做為池化結(jié)果。
1.2.1 Sobel算子
Sobel算子是基于一階導(dǎo)數(shù)的離散性差分算子,對像素值變化更為敏感,常用作對數(shù)字圖像進行邊緣檢測。在進行邊緣檢測時,Sobel算子對周圍像素的重要性根據(jù)位置進行加權(quán)求值,邊緣檢測效果較好。
Sobel算子包括檢測水平邊緣的gx算子[圖1(a)]和檢測豎直邊緣的gy算子[圖1(b)],本文中在使用Sobel算子進行邊緣檢測時,只保留梯度值,不考慮梯度方向。
圖1 Sobel算子Fig.1 Sobel operator
計算每個像素點梯度值的流程如下:
(1)用gx算子在圖像A上做卷積(*)操作檢測水平邊緣,即
Gx=A*gx
(2)
(2)用gy算子在圖像A上做卷積操作檢測垂直邊緣,即
Gy=A*gy
(3)
(3)結(jié)合水平方向和垂直方向計算圖像A中每一個像素點的梯度值,即
G=|Gx|+|Gy|
(4)
1.2.2 Sobel池化算法
池化也稱降采樣,旨在對輸入的特征圖進行壓縮,減少冗余信息,合理的池化算法能在減小模型參數(shù)量的同時,最大程度保留關(guān)鍵特征。為使池化前后特征圖中內(nèi)容特征、風(fēng)格特征分布保持一致,將特征損失降至最小,先用Sobel算子對特征圖進行邊緣檢測得到每個像素點的梯度值,對特征圖進行池化時,考慮到池化窗口的梯度均值與整個特征圖的梯度均值和梯度標(biāo)準差之間的關(guān)系,確定取該池化窗口內(nèi)的最大值、均值或最小值作為池化結(jié)果[式(5)],使每個池化窗口的取值更合理。
具體實現(xiàn)過程如圖2所示(以單個特征圖池化為例),算法如下。
圖2 Sobel池化流程圖Fig.2 Sobel pooling flow chart
(1)對特征圖A進行上、下、左、右為1的邊緣復(fù)制填充,使采用Sobel算子計算得到的梯度圖G保持尺度大小不變。
(2)對填充后的特征圖進行水平[式(2)]、垂直[式(3)]兩個方向的邊緣檢測求得Gx、Gy。
(3)采用式(4)合并Gx、Gy得到特征圖中每一個點的梯度,求得梯度圖G,不考慮梯度方向,只保留數(shù)值。
(4)對梯度圖G求均值mG,標(biāo)準差sG。以非重疊池化為例,按照池化核大小、步長k將梯度圖G劃分成多個k×k大小的池化窗口,對每個池化窗口分別求均值A(chǔ)vg(gij),其gij=G[k*i:k*i+k,k*j:k*j+k]。
(5)以非重疊池化為例,按照池化核大小、步長k將特征圖A劃分成多個k×k大小的池化窗口aij,其中aij=A[k*i:k*i+k,k*j:k*j+k]。對特征圖進行池化,Avg(gij)大于mG+αsG的取特征圖A中對應(yīng)池化窗口內(nèi)最大值作為池化結(jié)果,Avg(gij)小于mG-βsG的取特征圖A中對應(yīng)池化窗口內(nèi)最小值作為池化結(jié)果,Avg(gij)介于mG-βsG到mG+αsG之間的取特征圖A中對應(yīng)池化窗口內(nèi)均值作為池化結(jié)果,計算過程為
(5)
本節(jié)實驗選擇計算機視覺領(lǐng)域經(jīng)典的分類任務(wù)來驗證設(shè)計的池化方法能在不同圖像分類模型、不同圖像數(shù)據(jù)集上起到較好的分類效果。
進行實驗的環(huán)境為一臺4核心、16 G內(nèi)存的服務(wù)器,操作系統(tǒng)為Windows10,并配有一張32 G顯存的NVIDIA Tesla V100顯卡,使用Python 3.7.13、Pytorch 1.11.0+cu113框架。
為驗證設(shè)計的Sobel池化算法對圖像池化后,得到的圖像層次更加分明、易于判別,選擇了最大池化、平均池化、Mam池化做對比,直接對顏色、細節(jié)、紋理、對比度等各不相同的2 048×2 048像素高清圖像連續(xù)進行4次2×2非重疊池化,采用各池化算法池化后的圖像如圖3所示。
圖3 不同池化方法池化效果Fig.3 Pooling results of different pooling methods
從圖3中可以看出:采用最大池化得到的圖像只保留了每個池化窗口內(nèi)的最大值,導(dǎo)致池化后圖像像素均值高于原圖,使圖像整體偏亮,明、暗區(qū)域?qū)哟尾幻黠@;采用平均池化得到的圖像保持了池化前后圖像像素均值不變,但池化后圖像像素的標(biāo)準差小于原圖,導(dǎo)致池化后圖像邊緣輪廓模糊,辨別度低;采用Mam池化、Sobel池化得到的圖像,既保留了原圖中的部分最大值,也保留了部分最小值,使得池化前后圖像的均值、標(biāo)準差變化較小,得到的池化圖像輪廓清晰,明、暗區(qū)域?qū)哟畏置鳎子谧R別,但采用Mam池化算法得到的的圖像存在亮的區(qū)域更亮、暗的區(qū)域更暗,而且邊緣位置會向亮的區(qū)域偏移,出現(xiàn)失真,而本文中采用的Sobel池化算法能很好地均衡圖像的明、暗區(qū)域分布,使得圖像邊緣輪廓更為清晰真實,易于識別。
為驗證設(shè)計的Sobel池化算法具有普適性,能夠取代最大池化、平均池化,在VGG、ResNet等經(jīng)典且廣泛適用的模型上取得較好的分類結(jié)果,設(shè)計了本實驗,選擇的數(shù)據(jù)集為貓、狗數(shù)據(jù)集,它是kaggle上經(jīng)典的圖像二分類競賽數(shù)據(jù)集,實驗時貓、狗各選擇2 000張作為基礎(chǔ)數(shù)據(jù)集,按8∶2劃分訓(xùn)練集、測試集。訓(xùn)練、測試時,輸入圖像尺寸為256×256像素,不做圖像增強,Batch設(shè)置為64,采用隨機梯度下降優(yōu)化器,學(xué)習(xí)率為0.001,動量設(shè)置為0.9,采用交叉熵損失函數(shù),Sobel池化、Mam池化中的α、β均設(shè)置為0.5。評價標(biāo)準為充分訓(xùn)練后在測試集上的最高準確率,為降低偶然性,將測試集前五準確率均值也作為評價指標(biāo)之一。
如表1所示,將VGG、ResNet等經(jīng)典模型的池化層替換成Mam池化層后,Mam池化整體上優(yōu)于平均池化,但并不優(yōu)于最大池化,雖然Mam池化算法實現(xiàn)了對不同池化窗口進行劃分,但并沒有考慮特征圖整體的內(nèi)容、風(fēng)格特征分布,因而效果并沒有達到預(yù)期。
表1 各經(jīng)典圖像分類模型準確率Table 1 Accuracy of each classic image classification model
將池化層替換成本文設(shè)計的Sobel池化算法后,在測試集的準確率上有明顯提升,均優(yōu)于最大池化、平均池化、Mam池化,這也證實了Sobel池化算法能夠替代常用的最大池化、平均池化,適用于各種卷積神經(jīng)網(wǎng)絡(luò)模型。
本節(jié)實驗選擇的是廣泛應(yīng)用于圖像分類、目標(biāo)檢測定位、圖像分割等任務(wù)的基礎(chǔ)VGG16模型以及Resnet34模型,所選擇的數(shù)據(jù)集為Caltech101、Flowers數(shù)據(jù)集和Fruits360數(shù)據(jù)集[30]。Caltech101是用于圖像分類、目標(biāo)識別的數(shù)據(jù)集,包含101個種類,每種類別圖像數(shù)量在40~800張不等,圖像大小約為300×200像素。Flowers數(shù)據(jù)集是網(wǎng)上公開數(shù)據(jù)集,它包括雛菊、蒲公英、玫瑰、向日葵、郁金香5個種類,共計4 326張圖像。Fruits 360數(shù)據(jù)集包含蔬菜、水果共計131個種類類,90 483張圖片,圖像大小為100×100像素。
如表2所示,本文所設(shè)計的Sobel池化算法不僅能夠適用于不同經(jīng)典模型,對同一模型在不同尺寸大小、不同數(shù)據(jù)量的圖像數(shù)據(jù)集上亦能取得顯著的提升,測試集上準確率均高于常用的最大池化、平均池化以及Mam池化,再一次證實了Sobel池化算法的具有較強的泛化性,適用于不同模型、不同數(shù)據(jù)集。
Sobel池化中參數(shù)α、β的設(shè)定影響著模型準確率,根據(jù)式(7)知,當(dāng)mG+αsG
如表3所示,根據(jù)實驗結(jié)果可以看出,在一定范圍內(nèi),隨α、β取值的增大,準確率程下降趨勢。隨著(α+β)sG接近Gmax-Gmin時,Sobel池化測試準確率也在逐漸接近平均池化準確率。
表3 不同α、β取值下VGG16測試準確率Table 3 Accuracy of VGG16 under different α and β values
根據(jù)上述實驗結(jié)果可以看出,用本文設(shè)計的Sobel池化算法替換VGG、ResNet等經(jīng)典模型中的池化層,經(jīng)模型充分擬合訓(xùn)練集數(shù)據(jù)后,在測試集上的準確率均高于最大池化、平均池化以及簡單的對激活后特征圖求均值、標(biāo)準差后分層的Mam池化,此外,Sobel池化算法在不同復(fù)雜數(shù)據(jù)集上亦取得了顯著的提高,這證實了Sobel池化算法具有普適性、通用性,能夠增強模型的泛化能力,穩(wěn)定提高模型準確率。
本文設(shè)計了一種基于Sobel算子的池化算法,將其命名為Sobel池化。Sobel池化先用Sobel算子對激活后特征圖進行邊緣檢測得到梯度值,根據(jù)梯度變化明顯點的分布,對特征圖不同池化窗口進行選擇性池化,這樣能夠在減少參數(shù)量的同時,盡可能的保留關(guān)鍵特征,降低信息損失,由于對特征圖中的數(shù)據(jù)不只保留最大值或加權(quán)均值,而是根據(jù)特征圖內(nèi)容、風(fēng)格分布綜合決定每一個池化窗口選擇最大值、平均值還是最小值作為池化結(jié)果,能夠合理的保留背景、紋理等關(guān)鍵特征信息,有效的避免過擬合,穩(wěn)定提升模型準確率。
通過實驗可以明顯看出本文設(shè)計的Sobel池化算法具有普適性、通用性,能夠在不同的卷積神經(jīng)網(wǎng)絡(luò)模型、不同復(fù)雜數(shù)據(jù)集上取得較好的效果,可以用來替代常用的最大池化、平均池化。