王 林,趙 紅
(西安理工大學 自動化與信息工程學院,西安 710048)
火災(zāi)比其它自然災(zāi)害更為常見,一旦發(fā)生,不僅會造成嚴重的人員傷亡和財產(chǎn)損失,還會產(chǎn)生有毒氣體污染環(huán)境[1].2019年3月四川涼山火災(zāi)事件導致31 人遇難,大面積的森林土地丟失.若能及時發(fā)現(xiàn)火情并報警,則能減少損失[2].隨著科學技術(shù)的發(fā)展,基于傳感器的設(shè)備被用于火災(zāi)檢測,但探測范圍有限,對場地空闊的林火等大空間來說安裝成本高很難做到均勻覆蓋,且對物理量的觀測很容易受環(huán)境因素的干擾.隨著計算機視覺和圖像處理技術(shù)的發(fā)展及監(jiān)控的普及,基于視頻圖像的火災(zāi)檢測出現(xiàn)[3].李紅娣等人[4]將圖像特征金字塔的紋理特征和邊緣特征組合,用機器學習方法支持向量機訓練達到94%以上的檢測率和3.0%以下的誤報率.Kim 等人[5]通過火焰的RGB 顏色模型檢測火災(zāi)但是檢測的準確率不高.李巨虎等人[6]提出了基于顏色和紋理特征的森林火災(zāi)圖像識別,通過提取不同空間的紋理特征,將得到的特征向量送入SVM 分類器,獲得了94.55%的準確率.但傳統(tǒng)的視頻火災(zāi)檢測大都基于人工提取火焰和煙霧的靜態(tài)特征及運動區(qū)域的動態(tài)特征來研究的,人工提取特征容易造成檢測的精度較低.
2012年,深度學習的出現(xiàn)促使人工智能飛速發(fā)展,為目標檢測注入新的活力,Krizhevsky等人[7]提出Alexnet 并將它用在圖片分類中,將錯誤率從25.8 %降到了16.4 %,2014年Girshick 等人[8]提出將具有CNN特征的區(qū)域(RCNN)用于目標檢測,開啟了目標檢測的新時代.此后,目標檢測在計算機視覺[9]語音識別[10,11]多個領(lǐng)域表現(xiàn)出了良好的效果.2015年,相關(guān)學者提出具有歷史意義的一步檢測YOLO(you only look once),可以達到每秒45 幀的速度,Redmon 等人[12,13]前后提出了將YOLO1、YOLO2 用于火災(zāi)檢測,精度和速度逐漸提高.杜晨錫等人[14]提出了基于YOLOv2 網(wǎng)絡(luò)的火焰檢測方法,但模型可應(yīng)用的場景簡單.楊劍等人[15]提出了基于圖像處理技術(shù)的煙霧檢測在家庭火災(zāi)防范中應(yīng)用,實驗取得了較高的準確率,但對小區(qū)域煙霧存在漏檢情況.針對以上問題.本文提出了一種改進YOLOv3[16]算法的火焰和煙霧檢測,通過網(wǎng)絡(luò)爬蟲、視頻截取等手段獲得場景復雜,數(shù)量較多的火焰和煙霧的數(shù)據(jù)集,人工標注區(qū)域的位置信息和類別信息.針對YOLOv3 算法對小目標區(qū)域檢測精度低的問題做出改進,實驗表明,本文的改進相比原來的YOLOv3 算法準確率和誤檢率有了較大幅度的提升,能夠在火災(zāi)初始階段及時發(fā)現(xiàn)并報警.
為避免模型優(yōu)化中網(wǎng)絡(luò)加深出現(xiàn)退化的問題[17],YOLOv3的作者借鑒了殘差塊(Residual block)的思想形成了Darknet-53 網(wǎng)絡(luò)結(jié)構(gòu)[18].如圖1所示,網(wǎng)絡(luò)由3 部分組成,特征提取網(wǎng)絡(luò)Darknet-53 和多尺度預(yù)測FPN 及檢測網(wǎng)絡(luò)YOLO Head.其中,Darknet-53 沒有使用池化層,而是借鑒殘差網(wǎng)絡(luò)(residual network,ResNet)的結(jié)構(gòu)形成跳躍連接對輸入的圖片特征提取,YOLOv3 算法的卷積塊大多采用卷積層(convolution layers)后跟批標準化層(batch normalization,BN)和激活函數(shù)(leaky ReLU)的模式來加速收斂避免梯度消失.輸入圖像經(jīng)過一個普通卷積模塊(Conv2D+BN+Leaky_relu)后,使用步長為2 大小為3×3 卷積進行5次下采樣,如圖1 中(a)部分所示,保留每次卷積后的layer,且分別在每一次下采樣后使用1×1 和3×3 大小的卷積核再次進行卷積操作.將此次連續(xù)卷積后的結(jié)果和保留的layer 相加.5 次下采樣后圖片的高和寬不斷壓縮變成13×13,通道數(shù)不斷擴張變成1024×1024,這5 次下采樣使用殘差塊的結(jié)構(gòu)堆疊起來,殘差塊結(jié)構(gòu)如圖1 中的(b)所示,每個殘差塊的拼接次數(shù)依次是1、2、8、8、4.
圖1 YOLOv3 網(wǎng)絡(luò)結(jié)構(gòu)
為了檢測出不同尺寸的物體,YOLOv3 借鑒SSD的特征金字塔(feature pyramid network,FPN)結(jié)構(gòu)進行多尺度檢測,選取后面3 個32 倍、16 倍、8 倍(13×13、26×26、52×52)的特征層預(yù)測物體,為了更好的利用深層語義特征信息,將最后一個特征尺度(13×13)用線性插值的方式上采樣與前面一個特征層進行拼接,這樣可以在較低層特征上獲得深層特征的信息檢測尺寸較小的物體,保證檢測的效果.依次如此,直到和52×52大小的特征層拼接.
盡管YOLOv3 是一個經(jīng)典、高效的網(wǎng)絡(luò),在目標檢測領(lǐng)域有良好的表現(xiàn)力,但火災(zāi)檢測的公開數(shù)據(jù)集較少,且相對形狀固定的目標來說火焰和煙霧具有運動性、復雜性,特別是針對小火焰區(qū)域和復雜背景下的火焰和煙霧,YOLOv3 容易發(fā)生漏檢的情況,失去了火災(zāi)預(yù)警的意義.本文針對這一問題對YOLOv3 算法進行改進,并將改進后的算法與YOLOv3 原算法進行比較,通過對比驗證了本文算法在火災(zāi)檢測方面的可行性.
YOLOv3 網(wǎng)絡(luò)通過基本的卷積組件和一系列殘差塊對火焰和煙霧的圖片特征提取,使用8 倍、16 倍、32 倍后輸出的3 種特征圖進行多尺度預(yù)測,13×13 的尺度提取深層語義信息,用來預(yù)測尺寸較大的物體,26×26 尺度的特征圖預(yù)測尺寸相當?shù)奈矬w,同理,52×52 的特征尺度因網(wǎng)格劃分較細提取淺層位置信息,用來對較小尺度目標預(yù)測.但經(jīng)8 倍下采樣得到的特征圖和原始416×416 的輸入圖像來說依然不夠精細,當對更小尺度目標檢測時會出現(xiàn)效果不佳的問題.除非13×13 尺度的特征圖能夠給它提供更多的深層特征信息以供它檢測小目標.但YOLOv3 網(wǎng)絡(luò)對輸入圖像經(jīng)過5 次下采樣后并沒有其它操作.
本文決定改進YOLOv3 網(wǎng)絡(luò)的Darknet-53 結(jié)構(gòu),在其后添加一個SPP(spatial pyramid pooling)模塊來加大網(wǎng)絡(luò)的特征接受范圍,以充分利用上下文特征信息,增大感受野(receptive field),提升對小尺度目標的檢測效果.SPP 由He 等[19]提出,解決了卷積神經(jīng)網(wǎng)絡(luò)(CNNs)輸入圖像尺寸限制的問題.對圖像進行一次特征映射來避免特征重復提取,加快目標檢測速度.如圖2所示.對13×13 尺度特征圖繼續(xù)處理,首先對此特征圖做3 次卷積(Conv2D+BN+Leaky_relu),分別是512×1×1、1024×3×3、512×1×1.然后將得到的結(jié)果用1×1、5×5、9×9、13×13 四個不同尺寸的池化核進行最大池化操作(max-pooling),且并聯(lián)一個輸入到輸出的直連操作.最后將得到的特征圖堆疊(concat),將不同尺度下提取的特征匯聚在一起.最大池化核的尺寸和特征圖尺寸一樣,保證融合了圖片的局部特征信息和全局特征信息.
圖2 加了SPP 模塊的網(wǎng)絡(luò)結(jié)構(gòu)
相比基于區(qū)域的兩階段(two stage)目標檢測算法,YOLOv3 網(wǎng)絡(luò)將輸入圖像直接送入一個深度卷積神經(jīng)網(wǎng)絡(luò),一次性的進行目標的類別和位置的判斷.將原始圖片劃分為大小一樣、互不重復的小網(wǎng)格,通過Darknet-53 網(wǎng)絡(luò)得到3 個不同尺度的特征圖.每個特征點代表原始圖片的一小塊元素,當真實目標物體的中心落在這個網(wǎng)格內(nèi)時,則由這個網(wǎng)格負責檢測該物體,如圖3所示.
圖3 網(wǎng)格預(yù)測示意圖
YOLOv3 網(wǎng)絡(luò)沿用YOLOv2 采用anchor boxes 機制,給每個特征點預(yù)設(shè)一組面積不同,寬高比大小不同的初始先驗框,這些先驗框是通過K-means 聚類算法得到的框.對于目標檢測算法來說,一組合適的先驗框?qū)p少網(wǎng)絡(luò)的調(diào)整使之更快的獲得預(yù)測框.為了實現(xiàn)快速、準確的火焰和煙霧檢測,需要對YOLOv3 本身的先驗框優(yōu)化使之適合自己的數(shù)據(jù)集.本文決定通過改進的K-means 聚類算法對標注火焰和煙霧的真實框(true box)分析,使先驗框的尺寸更符合本文火焰和煙霧數(shù)據(jù)集的尺寸.聚類的個數(shù)K即為要選取的先驗框的個數(shù),聚類中心框的寬和高即為先驗框的寬和高.
傳統(tǒng)的K-means 聚類算法采用歐式距離計算,但當聚類不是用于點的聚類而是用于邊框的聚類時會產(chǎn)生誤差.邊框的尺寸越大產(chǎn)生的誤差也會越大,因此本文決定用改進的交并比(intersection over union,IoU)[20]來進行K-means 聚類.聚類開始時隨機選取k個真實框(bounding box)作為初始錨框(anchor box),計算每個bounding box 與每個anchor box 的IoU,IoU 越大時誤差越小.依次將每個bounding box 分配給誤差最小的那個anchor box.最后,將每個anchor box 中所有的bounding box 求寬高中值大小作為新的anchor box.重復迭代更新,直至所有的真實框所屬的anchor box 和上一次分配的一樣,停止更新.保存最后得到的anchor box 作為聚類后的先驗框.計算樣本中bounding box與k個anchor box 的平均IoU(AvgIoU),得到的結(jié)果如圖4所示.當 值越來越大時,AvgIoU 的值先快速增加后平緩增加.考慮到檢測模型的計算精度和速度,選取聚類個數(shù)k=9.
圖4 先驗框個數(shù)k 與AvgIoU 關(guān)系圖
聚類后的聚類中心坐標和先驗框尺寸如表1所示,其中坐標是相對于圖像大小的比例,將其與輸入尺寸相乘得到先驗框尺寸.
表1 改進K-means 聚類得到中心坐標和先驗框尺寸
沿用YOLOv3的做法,將9 種寬高比不同的先驗框平均分配到3 種不同尺度的特征圖上,經(jīng)32 倍下采樣后的13×13 特征圖感受野最大,用來檢測尺寸最大的火焰和煙霧,將141×237,236×150,312×283 分配給它;26×26 特征圖感受野一般,將62×57,74×150,127×91 分配給它;然后將剩余的13×23,24×44,35×99 分配給感受野最小的52×52 特征圖,用來檢測小火焰煙霧目標.
損失函數(shù)衡量的是真實值和預(yù)測值的誤差.神經(jīng)網(wǎng)絡(luò)反向傳播的訓練是通過計算損失函數(shù)對梯度的偏導來更新權(quán)重和參數(shù),因此損失函數(shù)的定義直接影響到模型訓練的好壞.YOLOv3 算法的損失函數(shù)[21]由3 部分組成:坐標損失(coord loss)、類別損失(class loss)和置信度損失(confidence loss),損失函數(shù)表達式如下:
其中,網(wǎng)格中存在物體 為1,否則是0,r為物體的種類,如火焰或煙霧,其中x,y為物體的中心坐標,w,h為物體的寬高.
YOLOv3 在計算坐標誤差時將中心和寬高坐標作為單獨的變量去計算,忽視了兩者的相關(guān)性.考慮用真實框和預(yù)測框的重合程度 去計算坐標損失,但當兩個框之間沒有重合或尺寸相差較大時無法計算,為加快損失函數(shù)的收斂,采用CIoU(Complete-IoU)[22]作為位置坐標的損失函數(shù).計算公式如下:
本文所用的深度學習框架為PyTorch 1.2.0 版本,實驗基于Anaconda 虛擬環(huán)境,編輯器為VScode,編程語言為Python 3.5.2,操作系統(tǒng)是Windows 10,GPU 為GTX1080Ti,CPU 是Inter i7-6700,電腦內(nèi)存為128 GB,GPU 加速庫cuDNN 的版本是7.4.1.5,配套的CUDA的版本是10.0.實驗程序?qū)⒃驾斎雸D像尺寸統(tǒng)一調(diào)整為416×416.
目前基于深度學習的火災(zāi)檢測公開的數(shù)據(jù)集較少且場景單一,本文所用的實驗數(shù)據(jù)集是通過網(wǎng)絡(luò)爬蟲和數(shù)據(jù)截取方式獲得的,選取了10 825 張不同場景下的火焰和煙霧圖像,其中有山地、田野、森林、室內(nèi)等場景,也有白天和夜晚情景下的圖像,有3 123 張火焰圖像,有2 987 張煙霧圖像,4 715 張火焰和煙霧混合圖像.本文將數(shù)據(jù)集按照8:1:1 比例分別用作訓練、驗證和測試.數(shù)據(jù)集的部分展示如圖5所示.
圖5 火災(zāi)數(shù)據(jù)集部分圖像
本文使用LabelImg 軟件來對數(shù)據(jù)集進行標注,標注的種類為火焰fire 和煙霧smoke 兩類.注意標注時要完全框柱目標物體,不能缺少或超過以影響火災(zāi)檢測的準確率.將圖像中標注物體的種類信息和位置信息保存至XML 格式文件中,然后通過程序?qū)⑦@些信息轉(zhuǎn)換為VOC 格式進行訓練.
為了提升模型的魯棒性,本文對訓練的數(shù)據(jù)集使用Mosaic 在線數(shù)據(jù)增強[23].此方法將4 張圖片進行拼接,它的一個巨大優(yōu)點是豐富待檢測物體的背景,且批量標準化計算的時一次性計算出4 張圖片的數(shù)據(jù).過程如圖6所示.
圖6 Mosaic 數(shù)據(jù)增強示例
實驗采用小批量梯度下降方法優(yōu)化模型,批尺寸(batch size)設(shè)置為20,動量因子(momentum)設(shè)置為0.9,使用Mosaic 進行在線數(shù)據(jù)增強.整個訓練過程有100 輪(epoch),前50 次epoch 是初始學習率為0.001的凍結(jié)訓練,后50 次epoch 在凍結(jié)訓練的基礎(chǔ)上進行初始學習率為0.000 1 的訓練.模型所有的迭代次數(shù)為39 000 次.每次迭代訓練結(jié)束后將得到的訓練權(quán)重以及整體loss 和驗證集loss 值保存在日志中,模型訓練初期根據(jù)loss 值收斂程度調(diào)整參數(shù),最終將網(wǎng)絡(luò)參數(shù)調(diào)整至合適大小,并將loss 值收斂效果最好的一次的權(quán)重作為最終權(quán)重進行預(yù)測.損失函數(shù)隨著迭代次數(shù)的變化如圖7所示,為了更加準確的觀察loss 的變化趨勢,將第300 次到第20 000 次的迭代放大并置于圖中,可以看到模型的收斂速度和收斂效果均較好,可以看出,在第15 000 次迭代后,模型的loss 值趨于穩(wěn)定.
圖7 訓練模型損失函數(shù)曲線圖
每次迭代預(yù)測框與真實框的平均IoU 如圖8所示,可以看到,隨著迭代次數(shù)的增加,IoU 值上升并趨于穩(wěn)定.
圖8 訓練模型IoU 曲線圖
本文使用mAP 作為模型的評價指標,下面是計算過程.TP是被模型分到正樣本且分對了的個數(shù),TN是被模型分到負樣本且分對了的個數(shù),FP是被模型分到正樣本且分錯了的個數(shù),FN是被模型分到負樣本且分錯了的個數(shù).那么模型的準確率(precision,P)計算公式為:
模型的召回率(recall,R)計算公式為:
當取不同的置信度時可以得到不同的P和R,由此,得到平均準確率AP的計算公式為:
檢測目標火焰和煙霧對應(yīng)的P-R(Precision-Recall)曲線如圖9所示.其中火焰的AP為97.71%,煙霧的AP為94.32%,當分類個數(shù)超過一個時,便引入了mAP,mAP的計算公式為:
圖9 火焰和煙霧P-R 曲線圖
其中,n為分類的種類數(shù),本文中有火焰和煙霧,因此n= 2,則本文改進后模型的mAP為96.02%.
3.5.1 訓練loss 圖對比
兩個模型的損失函數(shù)如圖10所示,可以看到,由于遷移學習YOLOv3 初始權(quán)重,模型一開始的整體損失較少,隨著迭代次數(shù)的增多,改進后模型loss 的收斂速度和最終收斂效果均比YOLOv3 模型要好.
圖10 模型訓練Loss 收斂對比圖
3.5.2mAP對比
兩個模型的準確率(precision)、召回率(recall)、精度(AP)、平均精度(mAP)對比如表2所示.
表2 模型訓練結(jié)果參數(shù)對比(%)
YOLOv3的mAP為88.05%,改進后模型的mAP為96.02%.可見改進后模型的AP和mAP表現(xiàn)均較好.
3.5.3 測試集檢測結(jié)果對比
為了測試兩個模型對復雜背景的檢測效果以及小目標的檢測效果,選取了測試集中幾種有代表性的圖像進行對比,檢測結(jié)果如圖11所示.
從圖11 的檢測結(jié)果可以看到,改進后的模型在小目標檢測方面比YOLOv3 有更大的優(yōu)勢,對于圖11(a)中未檢測出來的小火焰區(qū)域,改進后的模型均能極好的檢測出來,且對復雜背景下的煙霧來說因其運動不規(guī)律易受背景影響,從圖11(c)、圖11(e)、圖11(g)可以看出,YOLOv3 存在多次漏檢現(xiàn)象,但改進后的模型能很好的檢測出復雜背景下的大小煙霧區(qū)域.因此,本文的改進是效果顯著的,對小目標的查全率及復雜背景下目標的檢測精度均比YOLOv3 要好.
圖11 實際檢測效果對比圖
3.5.4 公開數(shù)據(jù)集檢測結(jié)果對比
為了檢驗改進后算法的魯棒性,本文在公開的火災(zāi)數(shù)據(jù)集上與其它算法進行對比檢測.公開數(shù)據(jù)集來自于Research Webpage about Smoke Detection for Fire Alarm(http://signal.ee.bilkent.edu.tr/VisiFire/Demo/SampleClips.html),本文對其中的視頻進行截圖后得到不同狀態(tài)下的火焰和煙霧圖片,部分圖片如圖12所示.
圖12 公開數(shù)據(jù)集部分圖片
分別使用算法Faster RCNN、SDD、文獻[24]、YOLOv3 及本文算法對公開數(shù)據(jù)集進行檢測,并計算檢測結(jié)果,算法的檢測結(jié)果對比見表3.
表3 公開數(shù)據(jù)集檢測結(jié)果對比
通過對比可知,本文算法在精度和速度方面均表現(xiàn)更好,可以更好的應(yīng)用于火災(zāi)檢測.其中,Faster RCNN 的mAP 比YOLOv3 好,但由于其在候選區(qū)處理時需要很大時間,所以檢測時間較長.而火災(zāi)檢測對實時性的要求比對精度的要求優(yōu)先級更高,因此,改進后的本文算法更適用于火災(zāi)檢測.
3.5.5 消融實驗對比
本文的算法改進有:在主干特征提取網(wǎng)絡(luò)中加入SPP模塊、使用CIoU 計算新的損失函數(shù)、使用Mosaic 進行數(shù)據(jù)增強.為深入了解這些改進對于算法性能提升的程度,將本文算法拆分為4 組實驗,實驗結(jié)果如表4所示.
從表4 可以看出,在只加入SPP 模塊的模型2 中,由于提升了網(wǎng)絡(luò)的感受野,融合了圖片的局部特征信息和全局特征信息,使得mAP提升了2.84 個百分點.在加入了SPP 模塊和CIoU 改進損失函數(shù)的模型3 中,由于計算坐標誤差時考慮了中心和寬高坐標兩者的相關(guān)性,加快了損失函數(shù)的收斂,使得mAP提升了3.67個百分點.在模型4 中,增加了Mosaic 數(shù)據(jù)增強,豐富待檢測物體的背景,使得mAP提升了1.46 個百分點.因此,本文的改進方法均可以提升火災(zāi)檢測效果,其中,引入CIoU 改進損失函數(shù)的改進效果最顯著.
表4 消融實驗對比結(jié)果
針對深度學習方法在火災(zāi)檢測應(yīng)用上的不足,本文提出了改進YOLOv3的視頻圖像火災(zāi)檢測算法,通過特征提取網(wǎng)絡(luò)的改進、先驗框的優(yōu)化、損失函數(shù)的改進和數(shù)據(jù)增強等一系列措施提升了火災(zāi)檢測的精度和速度.
在自行標注的Fire-Smoke-Detection-Dataset 上進行了實驗.實驗結(jié)果顯示,本文改進的模型在火災(zāi)檢測方面有更好的魯棒性、更高的準確率,尤其是在復雜背景下的檢測和對小目標的檢測效果更優(yōu)異.其中,對火焰的檢測率從94%提升至98%,對煙霧的檢測率從82%提升至94%,mAP從88.05%提升至96.02%,平均檢測速度從31 fps 加快到43 fps.之后的工作里,將繼續(xù)對網(wǎng)絡(luò)進行優(yōu)化改進,進一步改善檢測效果和算法優(yōu)化效果,增加對煙霧這一復雜對象的詳細分析.