李珍輝,魯靜文,陳鏡伊,劉 鵬,龔德峰
(湖南工程學(xué)院 計(jì)算機(jī)與通信學(xué)院,湘潭 411104)
近年來,圖像識(shí)別技術(shù)飛速發(fā)展,在火災(zāi)檢測(cè)上也有了相關(guān)的應(yīng)用.隨著科學(xué)的發(fā)展,計(jì)算機(jī)視覺和人工智能技術(shù)也有了“井噴式”的發(fā)展.
在圖像識(shí)別中有很多優(yōu)秀的算法.傳統(tǒng)的圖像識(shí)別算法包括微分算子邊緣檢測(cè)算法、Canny邊緣檢測(cè)算法、角點(diǎn)檢測(cè)算法、卷積神經(jīng)網(wǎng)絡(luò)等[1].本文將以改進(jìn)的卷積神經(jīng)網(wǎng)絡(luò)來進(jìn)行森林火災(zāi)檢測(cè),該算法以原始數(shù)據(jù)圖像為輸入信息,利用卷積核對(duì)輸入的圖像進(jìn)行卷積能有效地從大量樣本中得出相應(yīng)的特征,避免了復(fù)雜的特征提取過程.
傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)目標(biāo)檢測(cè)算法需要使用大量的數(shù)據(jù)來對(duì)網(wǎng)絡(luò)參數(shù)進(jìn)行訓(xùn)練,會(huì)花費(fèi)大量的時(shí)間,并且森林火災(zāi)數(shù)據(jù)屬于小樣本數(shù)據(jù)[2].因此,傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)算法需要進(jìn)一步改進(jìn),本文通過選取更好的梯度算法和進(jìn)行模型微調(diào),對(duì)傳統(tǒng)算法進(jìn)行了改進(jìn).
傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)會(huì)選用ResNet模型、VGG模型等分類網(wǎng)絡(luò)來進(jìn)行森林火災(zāi)圖片的訓(xùn)練.卷積神經(jīng)網(wǎng)絡(luò)用于森林火災(zāi)探測(cè)的優(yōu)點(diǎn)是能從大量的樣本中有效地學(xué)習(xí)森林火災(zāi)相應(yīng)特征,其中包含了多個(gè)卷積層和池化層[3],在輸出層之前通過全連接層對(duì)網(wǎng)絡(luò)卷積池化提取出的特征在樣本空間進(jìn)行映射,通過大量的訓(xùn)練來提取森林火災(zāi)特征:
(1)網(wǎng)絡(luò)掃描輸入的真實(shí)圖像用以提取特征.卷積的作用就是提取特征,卷積層有兩個(gè)關(guān)鍵的操作,分別為局部關(guān)聯(lián)和窗口滑動(dòng).主要是通過窗口滑動(dòng)計(jì)算每一個(gè)區(qū)域的特征值,卷積操作的公式如下:
(2)激活圖以棧的形式排列,每個(gè)圖像對(duì)應(yīng)于所使用的濾波器.圖像經(jīng)過濾波器之后,輸出的就叫作激活層activation.
(3)通過下采樣對(duì)激活圖進(jìn)行壓縮[4].n代表輸入圖片的大小,M為輸出圖像的大小,S代表步長(zhǎng),F(xiàn)*F為每個(gè)卷積核的大小,P為特征圖邊緣補(bǔ)充大小.計(jì)算公式如下:
(4)對(duì)下采樣的激活圖進(jìn)行過濾,生成一組新的激活圖.
(5)全連接層為每個(gè)節(jié)點(diǎn)的輸出分配一個(gè)標(biāo)簽.對(duì)于森林火災(zāi)檢測(cè)這種二分類問題來說,只需要分配有火或無火標(biāo)簽.
遷移學(xué)習(xí)是一種機(jī)器學(xué)習(xí)方法,是指將一個(gè)訓(xùn)練好的模型運(yùn)用在一個(gè)新的任務(wù)中[5],如圖1所示.通過使用他人已經(jīng)訓(xùn)練好的權(quán)重,即使只有很小的數(shù)據(jù)集,也有可能獲得良好的表現(xiàn).其中遷移學(xué)習(xí)有三個(gè)好處,分別是更高的起點(diǎn)、更高的斜率、更高的漸進(jìn).
圖1 遷移學(xué)習(xí)原理圖
考慮到大部分?jǐn)?shù)據(jù)或任務(wù)是相關(guān)的,可以通過遷移學(xué)習(xí)的方式將學(xué)習(xí)到的模型參數(shù)以某種方式與新模型共享,從而優(yōu)化模型并加快模型的學(xué)習(xí)效率,而不是像大多數(shù)網(wǎng)絡(luò)那樣從頭開始學(xué)習(xí)[6].
刪除原來的Softmax層,并創(chuàng)建自己的Softmax單元來輸出二分類問題,用來輸出是否有林火.之前的所有層都被視為凍結(jié).對(duì)于凍結(jié)網(wǎng)絡(luò)中的所有參數(shù),只需訓(xùn)練與Softmax相關(guān)的參數(shù)即可.
在以圖像為輸入的建模預(yù)測(cè)問題中,經(jīng)常將其應(yīng)用于遷移學(xué)習(xí).本文以森林火災(zāi)圖像為輸入,進(jìn)行遷移學(xué)習(xí).圖像處理中常用的三種模型:VGG模型、ResNet模型、Inception模型.[7-9]
Keras提供的預(yù)訓(xùn)練模式的基本信息如表1所示.
表1 Keras提供的預(yù)訓(xùn)練模型
對(duì)于分類網(wǎng)絡(luò)來說不免會(huì)遇到以下三個(gè)問題,第一,參數(shù)越多,數(shù)據(jù)集有限的情況下,會(huì)導(dǎo)致過擬合的問題.第二,網(wǎng)絡(luò)越大,計(jì)算復(fù)雜度就越高.第三,網(wǎng)絡(luò)越深,梯度越容易消失.
本文實(shí)驗(yàn)使用的是InceptionV3的模型,由表1可知,其準(zhǔn)確率以及參數(shù)數(shù)目比較符合森林火災(zāi)圖像的訓(xùn)練.InceptionV3是對(duì)InceptionV2進(jìn)行了改進(jìn),主要改進(jìn)了兩個(gè)方面,首先是對(duì)Module模型進(jìn)行了優(yōu)化,在Inceotion Module的分支中添加了分支.其次是將一個(gè)大的二維卷積拆分成了兩個(gè)小的一維卷積.這種非對(duì)稱的卷積結(jié)構(gòu)拆分在處理復(fù)雜空間特征和增加特征多樣性等方面的效果比對(duì)稱卷積結(jié)構(gòu)拆分更好,還減少了計(jì)算量[10-11].InceptionV3主要有三種網(wǎng)絡(luò)結(jié)構(gòu),如圖2、圖3、圖4所示.
圖2 8*8
圖3 17*17
圖4 35*35
2014年,InceptionV1誕生,主要是將傳統(tǒng)網(wǎng)絡(luò)結(jié)構(gòu)中的全連接層替換成了全局平均池化層,極大地降低了參數(shù)量,在InceptionV3模型中,將二維卷積層拆分成兩個(gè)一維卷積層,降低了參數(shù)數(shù)量,也減少了過擬合的現(xiàn)象.
傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)采用的優(yōu)化器為最速下降法(GD),本文將采用隨機(jī)最速下降法(SGD)對(duì)算法進(jìn)行優(yōu)化.假定優(yōu)化的函數(shù)是f(x),優(yōu)化的方法就是針對(duì)訓(xùn)練樣本上的目標(biāo)函數(shù)找到其最優(yōu)解.
(1)GD算法找到其最小值的方法就是每次沿著當(dāng)前位置的導(dǎo)數(shù)方向走一小步.在t+1時(shí)刻,更新迭代公式為:
GD算法有兩個(gè)缺點(diǎn):一是運(yùn)算速度慢;二是可能會(huì)陷入鞍點(diǎn)(saddle point)并且GD算法走不出鞍點(diǎn),鞍點(diǎn)在優(yōu)化過程中正交函數(shù)求導(dǎo)為0,但是不管在任何軸上都不是一個(gè)局部最優(yōu)點(diǎn).
(2)在大規(guī)模的問題中,GD算法在每次迭代中需要很高的計(jì)算復(fù)雜度,而SGD算法在每次迭代時(shí)是隨機(jī)采取一個(gè)數(shù)據(jù)樣本來計(jì)算此時(shí)的梯度方向,SGD的計(jì)算復(fù)雜度與樣本的數(shù)量無關(guān),大大減少了計(jì)算復(fù)雜度.隨著SGD算法的隨機(jī)梯度下降,每次的權(quán)重更新只利用數(shù)據(jù)集中的一個(gè)樣本來完成,即一個(gè)epoch過程只有一次迭代和一個(gè)更新數(shù)據(jù).在t+1時(shí)刻,更新迭代計(jì)算公式為:
SGD的算法公式為:
綜上所述,使用SGD算法可以完美地解決這兩個(gè)問題,不僅速度快,也可以更好地收斂.
SGD和GD的對(duì)比結(jié)果如圖5所示.
圖5 SGD和GD對(duì)比圖
本文一部分?jǐn)?shù)據(jù)來自百度和谷歌森林火災(zāi)圖片,通過網(wǎng)絡(luò)獲得了大量的森林火災(zāi)圖片,數(shù)據(jù)來自百度AI公開數(shù)據(jù)集《森林火焰圖片》、英國Durham University的Dunnings和Andy教授課題組公開的火災(zāi)數(shù)據(jù)集,該數(shù)據(jù)集主要包含野外各種環(huán)境下的火災(zāi)圖片.由于收集的圖片尺寸大小有差別,本文通過統(tǒng)一尺寸標(biāo)準(zhǔn)化的方式將所有圖片調(diào)整成了224*224,并且整理成為一個(gè)數(shù)據(jù)集,如圖6所示.
圖6 數(shù)據(jù)樣例圖
整理出來的數(shù)據(jù)集分為兩類,分別是用于訓(xùn)練的1800張圖片和用于驗(yàn)證的200張圖片.
本文在windows10上,使用谷歌開源的tensorflow2.1.0以及tensorflow內(nèi)嵌的keras,開發(fā)語言選用python3.7.6,在pycharm中進(jìn)行實(shí)驗(yàn).
本文將采用訓(xùn)練準(zhǔn)確度(Training accuracy)、驗(yàn)證準(zhǔn)確度(Validation accuracy)、訓(xùn)練損失(Taining loss)和驗(yàn)證損失(Validation loss)來對(duì)比傳統(tǒng)算法和改進(jìn)后的算法.訓(xùn)練:輸入有標(biāo)簽的樣本到模型中,找出一組權(quán)重和偏差,使所有樣本的平均損失“更小”.損失指模型預(yù)測(cè)值與準(zhǔn)確值之間的誤差.
(1)本文對(duì)改進(jìn)前后的算法在訓(xùn)練過程中的表現(xiàn)進(jìn)行對(duì)比,如圖7、圖8、圖9、圖10所示.
圖7 傳統(tǒng)算法準(zhǔn)確度
圖8 傳統(tǒng)算法損失
圖9 改進(jìn)后算法準(zhǔn)確度
圖10 改進(jìn)后算法損失
(2)改進(jìn)算法訓(xùn)練表現(xiàn):
通過上述訓(xùn)練的表現(xiàn)得出的實(shí)驗(yàn)結(jié)果如表2所示.
表2 算法改進(jìn)前后實(shí)驗(yàn)結(jié)果對(duì)比
圖7和圖9從訓(xùn)練準(zhǔn)確度的指標(biāo)來對(duì)比.在經(jīng)過20個(gè)時(shí)期的訓(xùn)練后,得到了改進(jìn)后模型的驗(yàn)證準(zhǔn)確度高于傳統(tǒng)模型的驗(yàn)證準(zhǔn)確度.
圖8和圖10從損失的指標(biāo)來對(duì)比.可以看到,傳統(tǒng)的損失過大,損失函數(shù)主要是用來衡量神經(jīng)網(wǎng)絡(luò)輸出值Y’和真實(shí)值Y之間的差距,改進(jìn)后的模型更加接近真實(shí)值.
不難看出,改進(jìn)后的算法從準(zhǔn)確度和損失值的角度來看,都比傳統(tǒng)的算法更加準(zhǔn)確.
從數(shù)據(jù)集中隨機(jī)選取三組森林圖片,使用本文訓(xùn)練好的模型做火災(zāi)檢測(cè),如圖11、圖12、圖13所示.
圖11 第一組火災(zāi)檢測(cè)
圖12 第二組火災(zāi)檢測(cè)
圖13 第三組火災(zāi)檢測(cè)
通過實(shí)驗(yàn)發(fā)現(xiàn),使用傳統(tǒng)的CNN模型經(jīng)過20個(gè)時(shí)期的訓(xùn)練后,得到了94.83%的訓(xùn)練準(zhǔn)確度和87.50%的驗(yàn)證準(zhǔn)確度.訓(xùn)練損失和驗(yàn)證損失分別為0.169%和0.25%.而改進(jìn)后的inceptionV3經(jīng)過5個(gè)時(shí)期的訓(xùn)練,得到了96.17%的訓(xùn)練準(zhǔn)確度和94.43%的驗(yàn)證準(zhǔn)確度,以及0.108%的訓(xùn)練損失和0.110%的驗(yàn)證損失.可以看出,使用改進(jìn)后的inceptionV3模型可以得到更好的森林火災(zāi)識(shí)別效果.
時(shí)代在發(fā)展的同時(shí),圖像識(shí)別的技術(shù)也在不斷發(fā)展,以前的人工檢測(cè)林火的方法已經(jīng)過時(shí),取而代之的是用圖像檢測(cè)技術(shù)來檢測(cè)林火,通過卷積神經(jīng)網(wǎng)絡(luò)可以對(duì)輸入的林火圖片自動(dòng)提取特征.本文對(duì)傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)算法進(jìn)行了改進(jìn),使林火檢測(cè)效果得到進(jìn)一步的改善.
在卷積神經(jīng)網(wǎng)絡(luò)算法的研究中,還有很多的拓展,比如使用煙霧來判別林火,往往林火產(chǎn)生時(shí),煙霧是伴隨其產(chǎn)生的.可以綜合煙霧和火焰來進(jìn)行林火檢測(cè).未來還需要研究出更好的方法來解決和改善圖像識(shí)別中的問題.