張夢雨
(河海大學計算機與信息學院,江蘇 南京 211100)
近年來,隨著人工智能的不斷發(fā)展,深度學習在圖像分類、目標檢測、圖像分割領域所達到的效果優(yōu)于傳統(tǒng)的機器學習方法,基于深度學習的圖像識別技術被廣泛應用于缺陷檢測、人臉識別、車牌識別、指紋識別等領域[1]。ImageNet競賽中不斷有優(yōu)秀的網(wǎng)絡模型在識別率上實現(xiàn)突破,AlexNet[2]、VGGNet[3]、GoogLeNet[4]相繼被提出,并展現(xiàn)出網(wǎng)絡層數(shù)越來越深的趨勢。但通過實驗發(fā)現(xiàn)簡單地堆疊卷積層與池化層搭建的深層網(wǎng)絡,會出現(xiàn)梯度消失、梯度爆炸、網(wǎng)絡退化等現(xiàn)象,2015年何凱明團隊提出的ResNet[5]較好地解決了這些問題。ResNet主要由殘差塊組成,通過殘差塊的堆疊可以搭建很深的網(wǎng)絡,并且不會出現(xiàn)網(wǎng)絡退化現(xiàn)象。
社會不斷發(fā)展,人們物質生活得到滿足,逐漸開始追求精神生活的充實,因此人們游覽公園、景點頻率提高,但花卉種類繁多,不免有些不認識的品種。隨著互聯(lián)網(wǎng)和智能移動設備的普及,使用設備進行拍攝照片并利用深度學習技術對花卉進行識別變得十分方便,因此花卉識別應用價值較高,同時基于深度學習的圖像識別技術又具備很強的泛化能力。
傳統(tǒng)的花卉識別方法泛化能力不強[6],隨著深度學習成為研究熱點,越來越多的學者嘗試使用深度神經(jīng)網(wǎng)絡模型進行花卉識別。王麗雯[7]優(yōu)化AlexNet網(wǎng)絡結構和網(wǎng)絡順序后識別精度達到66.3%;劉德建[8]使用LeNet模型對116類花卉進行識別,達到了80%的識別率;林君宇等[9]使用多輸入卷積神經(jīng)網(wǎng)絡對花卉及其病癥分類,識別率為88.2%,使用遷移學習后識別率提升到94.4%;劉嘉政[10]提出一種基于Inception_v3的深度遷移學習模型的花卉圖像識別方法,平均識別率達到93.73%;吳麗娜等[11]提出改進型LeNet-5卷積網(wǎng)絡模型,使用隨機梯度下降和Dropout相結合的算法將識別率提高到96.5%。
以上深度學習方法均在各類網(wǎng)絡模型的基礎上進行改進并取得了進步,但簡單的淺層網(wǎng)絡識別率較低,大型的深層網(wǎng)絡模型訓練難度大且不適合小型數(shù)據(jù)集,網(wǎng)絡加深容易出現(xiàn)網(wǎng)絡退化現(xiàn)象。本文在ResNet34模型中加入通道注意力機制、空間注意力機制,并使用在CIFAR-100數(shù)據(jù)集上訓練好的網(wǎng)絡參數(shù)進行遷移學習。與傳統(tǒng)深度學習模型相比,在花卉數(shù)據(jù)集上,本文提出的模型識別效果更好。
深層卷積神經(jīng)網(wǎng)絡在圖像分類、目標檢測、圖像分割領域都取得了良好的效果,隨著深度學習的發(fā)展,優(yōu)秀的模型不斷涌現(xiàn)出來。但學者們發(fā)現(xiàn)并不是網(wǎng)絡層數(shù)越深效果越好,伴隨著網(wǎng)絡層數(shù)的加深,出現(xiàn)了梯度消失、梯度爆炸、網(wǎng)絡退化等問題[12]。為了解決以上問題,He等人[5]提出了ResNet, ResNet由一系列殘差塊(Residual Block)堆疊而成,并且可以達到成百上千層。
圖1為ResNet使用的2種不同的殘差塊,殘差塊圖1(a)多應用于網(wǎng)絡層數(shù)較少的網(wǎng)絡,殘差塊圖1(b)多應用于層數(shù)較深的網(wǎng)絡。圖1(a)的結構,輸入通過2個3×3的卷積層得到一個輸出,右邊有一個捷徑(Shortcut)直接從輸入連接到輸出,主線經(jīng)過卷積操作得到的輸出通過捷徑與輸入相加,兩者相加之后的結果再通過ReLU激活函數(shù)輸出。
圖1 2種殘差塊結構
殘差塊圖1(b)主線有3個卷積層分別是1×1、3×3、1×1的卷積層,假設輸入是深度為256的特征矩陣,第1層的1×1卷積層起到降維的作用,第3層的1×1卷積層起到升維的作用。這樣設置卷積層的目的是為了節(jié)省參數(shù),深層網(wǎng)絡所使用的殘差塊越多節(jié)省的參數(shù)越多,所以圖1(b)多用于深層網(wǎng)絡。
既然要將主線卷積操作后的輸出和捷徑相加,那么必須保證主線與捷徑的輸出特征矩陣的高、寬、深度必須相同,當輸入與卷積后輸出的特征矩陣深度不同時,要在捷徑上加卷積層使兩者一致。如圖2所示,虛線部分為捷徑,捷徑上有個1×1卷積層,卷積核個數(shù)為主線輸出特征矩陣的深度。
圖2 捷徑帶卷積層的殘差塊結構
假設殘差塊輸入為x,殘差塊輸出為H(x),捷徑上的輸出與輸入一致也為x,模型只需學習殘差函數(shù)F(x)=H(x)-x,最小化殘差函數(shù)F(x)即可解決網(wǎng)絡退化問題,增強網(wǎng)絡性能。
除了使用殘差結構來解決網(wǎng)絡退化的問題,在ResNet中還使用了批歸一化[13](Batch Normalization, BN)。在網(wǎng)絡訓練過程中,通過歸一化使卷積層的輸出都滿足均值為0、方差為1的分布規(guī)律,使激活輸入值落在非線性函數(shù)對輸入比較敏感的區(qū)域,此時輸入的小變化會導致?lián)p失函數(shù)較大的變化,讓梯度變大,避免梯度消失問題產(chǎn)生。而且梯度變大意味著學習收斂速度快,能加快訓練速度,也增強了網(wǎng)絡的泛化能力[14]。因此ResNet的卷積層后都要設置一個BN層,通過該方法能夠解決網(wǎng)絡退化問題、加速網(wǎng)絡的收斂并提升識別準確率。深度學習網(wǎng)絡模型使用BN時,不需要再使用Dropout。
BN算法如下:
輸入:一個批次的樣本{x1,x2,…,xm},批大小為m
輸出:
{yi=BNγ,β(xi)}
注意力機制(Attention Mechanism)已經(jīng)是深度學習領域中一個重要的模塊[15-16],注意力機制經(jīng)常被使用在深度學習模型中以提升模型的分類、識別、預測的準確率。注意力機制是模仿人腦在進行閱讀、識圖任務時自動忽略低價值的信息,著重關注視覺內有價值的信息或是感興趣的區(qū)域,對這些區(qū)域仔細觀察,對其他區(qū)域進行模糊、忽略處理[17]。人腦利用這一機制可以高效合理地分配有限的資源,快速地從大量信息中定位有價值的目標區(qū)域,從而提升觀察的效率和準確性[18]。
圖像處理領域通常使用注意力機制完成圖像識別、圖像標注等各類任務,用于卷積網(wǎng)絡的注意力機制主要分為2種[19]:空間注意力[20](Spatial Attention)和通道注意力[21](Channel Attention)。
空間注意力機制作用于每張?zhí)卣鲌D內。傳統(tǒng)的卷積神經(jīng)網(wǎng)絡給予特征圖的所有區(qū)域同等的關注,使用空間注意力機制可以根據(jù)特征圖每個區(qū)域對分類任務效果的貢獻程度為該區(qū)域進行賦權,特征圖內各點的權重不同??臻g注意力機制不關注各通道之間的差異,同一區(qū)域在各通道上的權重相同??臻g注意力機制模型結構如圖3所示。
圖3 空間注意力機制模型
空間注意力機制下,對輸入的特征圖F先分別進行全局最大池化和全局平均池化,將兩者結果拼接成特征圖輸入卷積層進行學習,卷積層卷積核大小為7×7、步長為3,最后進入Sigmoid激活函數(shù)輸出,將激活函數(shù)輸出結果與之前輸入的F對位相乘就是生成的特征,將其記為Ms。用公式表示為:
Ms(F)=σ(f7×7([AvgPool(F);MaxPool(F)]))
(1)
其中σ表示Sigmoid函數(shù),f7×7表示卷積核大小為7×7的卷積操作,AvgPool表示全局平均池化,MaxPool表示全局最大池化。
通道間注意力機制作用于特征圖之間。在傳統(tǒng)的卷積神經(jīng)網(wǎng)絡中,卷積層、池化層等通常對所有通道的特征圖進行相同的操作而不對通道進行特殊化處理,給予所有通道相同的關注,但不同卷積核所生成的特征圖對識別任務貢獻程度不同。因此可以通過通道間注意力機制對不同通道的特征圖進行賦權,從而過濾各特征圖中包含的信息,根據(jù)貢獻程度對特征能力提取強的特征圖賦予較大的權重,反之賦予較小的權重。圖4為通道注意力機制模型結構。
圖4 通道注意力機制模型
通道注意力機制下,對輸入的特征圖F各個通道先分別進行全局最大池化和全局平均池化,之后相加進入2個全連接層,后使用激活函數(shù)Sigmoid進行輸出,將結果對位相乘加權到之前的特征通道上,更新各通道的特征權重,最終輸出結果記為Mc。用公式表示為:
Mc(F)=σ(MLP(AvgPool(F))+MLP(MaxPool(F)))
(2)
其中σ表示Sigmoid函數(shù),MLP為多層感知機,AvgPool表示全局平均池化,MaxPool表示全局最大池化。
遷移學習是利用在一個任務中學習到的知識或模型經(jīng)過簡單調整應用到一個新的任務中。遷移學習主要包含領域(Domain)和任務(Task)這2個重要概念,領域包括源域、目標域,源域指已有的知識,目標域是要學習的新知識,任務是指解決問題的學習系統(tǒng)或者模型[22]。
領域D包含特征空間χ和邊緣分布P(X),X={x1,x2,…,xn}∈χ,D={χ,P(X)},源域用DS表示,目標域用DT表示。任務T包含學習函數(shù)f(·)和標簽空間Y,T={Y,f(·)},通過對數(shù)據(jù)集{xi,yi}(xi∈χ,yi∈Y)的學習可以得到學習函數(shù)f(·),并使用f(·)預測x的標簽f(x)。
給定包含標簽的源域DS、源域任務TS、目標域DT、目標域任務TT,使用遷移學習就是借助DS、TS提高DT的學習函數(shù)f(·)對TT的學習效果,也就是提高識別、預測x的標簽f(x)的準確率。
遷移學習按學習方式分類可分為以下4類:實例遷移、特征遷移、關系遷移、模型遷移。模型遷移為模型層面上的遷移學習,其余3類均為數(shù)據(jù)層面上的遷移學習[23]。圖5為遷移學習的分類圖。
圖5 遷移學習的分類
基于模型的遷移學習通過保存訓練好的卷積神經(jīng)網(wǎng)絡模型再加上全連接層、分類器就形成新的網(wǎng)絡模型[24]。使用基于模型的遷移學習首先保證使用遷移學習的網(wǎng)絡結構與源模型一樣,模型中數(shù)據(jù)預處理方式也要一樣,這樣才可以向卷積網(wǎng)絡中載入源模型的權重偏置等參數(shù)。接著用適用于新任務的全連接層代替原本的全連接層,形成新的卷積網(wǎng)絡模型,最后用新數(shù)據(jù)集訓練新模型。
本文在ResNet中加入空間注意力機制和通道注意力機制,并將其應用在花卉識別上,使網(wǎng)絡模型在訓練過程中既關注圖像的空間信息又關注通道信息,從而提高分類識別的準確率?;A網(wǎng)絡模型使用的是34層ResNet,ResNet34的結構參數(shù)見表1。
ResNet34使用的殘差結構為圖1(a),block1、block2、block3、block4所對應的殘差塊個數(shù)為3、4、6、3,殘差單元加起來一共有32層,加上Conv1的7×7卷積層和全連接層一共34層,這里不把池化層算為一層。
本文將通道注意力機制和空間注意力機制串聯(lián)在一起,將串聯(lián)的注意力模塊應用在ResNet網(wǎng)絡中每個殘差塊之后,還在Conv1卷積層后、池化層前加入注意力模塊。加入通道和空間注意力機制的殘差塊結構如圖6所示。
表1 ResNet34網(wǎng)絡參數(shù)
圖6 加入注意力機制的殘差塊結構圖
本文使用的加入通道注意力機制和空間注意力機制的ResNet34網(wǎng)絡結構圖如圖7所示。
圖7中,虛線框內是使用不同通道數(shù)卷積層的殘差塊。每個殘差塊后都加了通道注意力和空間注意力機制,圖中表示為CA+SA。虛線框右邊為框內殘差塊的堆疊個數(shù)。
圖8所展現(xiàn)的是花卉數(shù)據(jù)在ResNet34模型中類激活圖,這種熱力圖將注意力可視化,注意力機制關注圖像中花朵區(qū)域,顏色越深表明對識別的貢獻越大。
圖7 加入注意力機制的ResNet34
圖8 原圖像與類激活圖
為了提高識別率,本文使用基于模型的遷移學習。使用加入注意力機制的ResNet34在CIFAR-100上進行訓練,保存網(wǎng)絡模型的參數(shù)權重等信息,使用花卉數(shù)據(jù)集對網(wǎng)絡進行訓練時可以加載在CIFAR-100上訓練得到的網(wǎng)絡模型參數(shù),這樣可以在迭代次數(shù)少的情況下取得不錯的訓練效果,同時提高識別率。在使用遷移學習時,要注意2個模型的預處理方式要一樣、模型結構也要一樣。遷移學習的大致過程如圖9所示。
圖9 遷移學習示意圖
遷移學習具體步驟:
1)首先將源域數(shù)據(jù)CIFAR-100送入加入通道、空間注意力機制的ResNet34模型中進行訓練,設置學習率為0.0001,批大小為16,迭代100次,設置保存網(wǎng)絡模型參數(shù)信息的文件路徑,訓練結束后便可以得到模型權重偏置等參數(shù)的文件。
2)設置目標域任務,設置訓練模型文件讀取路徑,源域任務是識別100類,目標域任務是識別5類,更改輸出類別數(shù)。
3)在花卉數(shù)據(jù)集上訓練模型,新的模型載入預訓練模型中的權重偏置等參數(shù),這些參數(shù)不包括全連接層,全連接層的參數(shù)選擇隨機初始化。
4)對目標域任務再訓練,設置學習率為0.0001,批大小為16,迭代100次,預處理方式與源域任務一致,訓練結束得到新的模型與參數(shù)。
實驗數(shù)據(jù)為5類花的3668張圖像,數(shù)據(jù)集包括5個文件夾,分別對應5類花的圖片,其中雛菊633張、蒲公英896張、玫瑰641張、向日葵699張、郁金香799張,使用腳本隨機分割從各類花中取85%作為訓練集、15%作為測試集,訓練集共有3118張圖像,測試集共有550張圖像。
本文實驗環(huán)境:Win10操作系統(tǒng),Intel i7-9750處理器,NVIDIA GeForce RTX 2060顯卡,Python版本為3.8.0,Pytorch版本為1.4.0,CUDA版本為10.2。
在參數(shù)設置方面,優(yōu)化器選擇計算高效的Adam優(yōu)化器,損失函數(shù)選擇常用的交叉熵損失函數(shù),學習率設置為0.0001,批大小設置為32,迭代次數(shù)為200次。圖像訓練前進行預處理,包括隨機裁剪、隨機水平翻轉。
先使用ResNet18、ResNet34、ResNet50在花卉數(shù)據(jù)集上進行訓練并對比,實驗結果見表2。
表2 不同層數(shù)ResNet實驗對比
通過實驗結果可以看出在本文所使用的花卉數(shù)據(jù)集上,ResNet34所取得的效果比較好。實驗中也發(fā)現(xiàn)隨著網(wǎng)絡加深,每個epoch運行的時間也會隨之變長,ResNet50每個epoch運行時間達到了80.4 s,而ResNet18只需40.1 s、ResNet34只需52.2 s。因為訓練使用的數(shù)據(jù)集較少,無法完全展現(xiàn)深層網(wǎng)絡的優(yōu)勢,所以ResNet50的效果不是很理想。
再將ResNet34與AlexNet、VGG-16、GoogLeNet等成熟的網(wǎng)絡模型進行比較,結果如圖10所示,發(fā)現(xiàn)ResNet34的準確率要明顯高于其他網(wǎng)絡。
圖10 各模型準確率對比圖
具體數(shù)值如表3所示。
表3 各模型準確率對比
AlexNet的模型較小,每個epoch訓練時間比較短,但是準確率不高;VGG-16網(wǎng)絡模型較大,訓練每個epoch平均使用了117.2 s,雖然準確率比AlexNet、GoogLeNet高,但是效果沒有ResNet34好。綜上所述,綜合考慮訓練難度和識別準確率2方面,ResNet34要優(yōu)于其余3種成熟并廣泛使用的網(wǎng)絡模型。
接下來將在ResNet34加入通道、空間注意力機制,并使用遷移學習,迭代訓練200次后,最終結果與原模型進行比較。表4為4種模型的準確率對比。
表4 加入AM的ResNet34與原模型比較
使用遷移學習訓練的網(wǎng)絡模型效果明顯要優(yōu)于原模型,實驗過程中在使用預訓練權重偏置時,訓練第一個epoch識別準確率就已經(jīng)超過90%,所以遷移學習對于網(wǎng)絡學習能力的提升很大。
圖11所展現(xiàn)的是加入通道、空間注意力機制使用遷移學習的ResNet34模型與僅使用遷移學習的ResNet34模型在訓練過程中每個epoch的準確率對比圖。從圖中可知,在epoch達到60前,兩者識別準確率相差不多,在60個epoch后,加入注意力機制的模型準確率更高。
圖11 ResNet34+AM+TL與ResNet34+TL準確率對比
為了提高花卉識別的準確率,本文將空間注意力機制和通道注意力機制加入ResNet模型中,并使用遷移學習,將在CIFAR-100數(shù)據(jù)集上訓練好的模型參數(shù)遷移到本文模型中。綜合考慮ResNet不同層數(shù)模型的分類準確率、訓練時間等因素,選擇ResNet34作為基礎模型更合適,并且在本文使用的花卉數(shù)據(jù)集上ResNet34的分類效果要比AlexNet、VGG-16、GoogLeNet好。本文提出的加入注意力機制并使用遷移學習的ResNet34模型的識別準確率比原模型提高了6.1個百分點,比僅使用遷移學習的原模型提高了1.1個百分點。
雖然準確率提高了,但是加入注意力機制會導致網(wǎng)絡訓練過程中參數(shù)的增加,因此會增加訓練時間,接下來可以研究如何改變模型降低網(wǎng)絡參數(shù),在不影響網(wǎng)絡性能的前提下,減少因增加注意力機制而增加的參數(shù)數(shù)量,也可對模型的卷積層進行改進。