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