朱儻,楊忠,周國興,張馳,韓家明
1. 南京航空航天大學(xué) 自動(dòng)化學(xué)院,江蘇 南京 211106 2. 南京航空航天大學(xué) 無人機(jī)研究院,江蘇 南京 211106 3. 安徽工業(yè)大學(xué) 電氣與信息工程學(xué)院,安徽 馬鞍山 243000
在各種災(zāi)害中,火災(zāi)是最經(jīng)常、最普遍地威脅公眾安全和社會(huì)發(fā)展的災(zāi)害之一?;馂?zāi)不僅奪去了人類的生命財(cái)產(chǎn),還破壞了人類賴以生存的生態(tài)環(huán)境和自然資源,嚴(yán)重地威脅著人類的生存安全[1]。因此在火災(zāi)發(fā)生早期發(fā)現(xiàn)火災(zāi)并及時(shí)預(yù)警,對(duì)保護(hù)人們的生命財(cái)產(chǎn)安全具有非常重要的意義[2]。
早期的火災(zāi)檢測(cè)主要基于各種傳感器的探測(cè),感溫型、感煙型和感光型探測(cè)器作為當(dāng)前最成熟的火災(zāi)探測(cè)技術(shù)[3],對(duì)被探測(cè)區(qū)域的透明度、光譜、溫度和煙粒濃度等進(jìn)行采樣,以確定是否發(fā)生火災(zāi)。然而,由火災(zāi)引起的煙霧濃度、溫度和其他信息的變化在空氣中傳播緩慢,且穩(wěn)定性不高,必須安裝在靠近火源的地方,且受氣流環(huán)境、探測(cè)距離、熱障效應(yīng)等因素影響,很難及時(shí)快速地捕獲火災(zāi)信號(hào),無法在惡劣的室外場(chǎng)所使用,并且無法滿足開闊大型空間場(chǎng)所的需求,導(dǎo)致傳統(tǒng)的火災(zāi)探測(cè)器不能正常有效地工作。
之后提出了傳統(tǒng)的機(jī)器視覺方法[4-6],它是基于目標(biāo)特征來識(shí)別檢測(cè)的,由人工設(shè)計(jì)與目標(biāo)相對(duì)應(yīng)特征的算法,誤檢率很高,同時(shí)準(zhǔn)確度也不算高,并且針對(duì)一些新的場(chǎng)景和突發(fā)狀況無法及時(shí)適應(yīng)。
隨著計(jì)算機(jī)算力的不斷提升,深度學(xué)習(xí)[7]得到了迅猛發(fā)展。相較于傳統(tǒng)的算法,基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法在精度和速度上都有了顯著提升[8],基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法分為onestage 和two-stage 這2 類,其中two-stage 算法指輸入圖片后生成建議區(qū)域再送入分類器分類,2 個(gè)任務(wù)由不同網(wǎng)絡(luò)完成。這類算法的代表是Faster R-CNN[9],回天等[10]通過將不同火焰的形狀特征進(jìn)行分類,提出了一種結(jié)合Faster R-CNN 的多類型火焰檢測(cè)方法,雖然有效提高了精度,但降低了檢測(cè)速度,難以滿足實(shí)時(shí)性的要求。onestage 算法則在輸入圖片后直接產(chǎn)生物體的類別概率和位置坐標(biāo),因此速度較快,這類算法的代表是一階段多框檢測(cè)(single shot multibox detector,SSD)[11]和YOLO[12-15]系列算法。劉麗娟等[16]提出了一種基于改進(jìn)SSD 的煙霧實(shí)時(shí)檢測(cè)模型,在一定程度上提升了精度和檢測(cè)速度,但SSD 網(wǎng)絡(luò)于2016 年就被提出,可提升的檢測(cè)性能極為有限。趙坤提出了一種基于YOLOv3 與核相關(guān)濾波算法(kernel correlation filter,KCF)的火災(zāi)煙霧檢測(cè)方法[17],通過KCF 良好的跟蹤性能減少了YOLOv3 算法因環(huán)境驟變而產(chǎn)生的誤檢,但在硬件平臺(tái)上的檢測(cè)速度較慢,在實(shí)際部署到開發(fā)板上時(shí)甚至只有5 f/s,無法做到實(shí)時(shí)檢測(cè)。顏洵等[18]提出了一種優(yōu)化后的YOLOv4 網(wǎng)絡(luò)對(duì)火焰和煙霧的目標(biāo)進(jìn)行了檢測(cè),取得了較高的精度,但參數(shù)量較大,檢測(cè)的幀率也不高。
YOLOv4 是目前的主流目標(biāo)檢測(cè)算法,具有較好的檢測(cè)效果。但是考慮到嵌入式設(shè)備的計(jì)算能力和存儲(chǔ)量有限,將該算法搭載于攝像頭等嵌入式設(shè)備時(shí)并不能很好地繼承其優(yōu)良性能,反而會(huì)因龐大的計(jì)算量和內(nèi)存占用導(dǎo)致設(shè)備無法達(dá)到實(shí)時(shí)檢測(cè)的效果,且檢測(cè)精度急劇下降。因此,設(shè)計(jì)一款輕量化的算法用于實(shí)際火災(zāi)煙霧檢測(cè)更實(shí)際可靠。本文在YOLOv4 算法的基礎(chǔ)上進(jìn)行改進(jìn),提出了一種輕量化的火焰煙霧檢測(cè)算法,并利用收集到的火焰煙霧圖片制作數(shù)據(jù)集,并采用數(shù)據(jù)增強(qiáng)擴(kuò)充數(shù)據(jù)集容量來訓(xùn)練該網(wǎng)絡(luò)模型。實(shí)驗(yàn)結(jié)果表明,在該火焰煙霧數(shù)據(jù)集上,優(yōu)化后的YOLOv4 算法不僅保留了原算法的高精度,還獲得了更快的檢測(cè)速度和更低的內(nèi)存占用。
如圖1 所示,輸入416×416 大小的圖片,通過主干特征提取網(wǎng)絡(luò)、加強(qiáng)特征提取網(wǎng)絡(luò)向預(yù)測(cè)層輸出13×13、26×26 和52×52 共3 種不同尺度大小的有效特征層。YOLOv4 的主干特征提取網(wǎng)絡(luò)CSPDarkNet53[19]是由YOLOv3 的DarkNet53 改進(jìn)過來的,使用了Mish 激活函數(shù),同時(shí)修改了其中的殘差模塊,殘差模塊的主干部分仍然是殘差塊的堆疊,但另外添加了一條捷徑分支從輸入直接連通到輸出,也是為了保留部分淺層特征,避免丟失太多信息,實(shí)現(xiàn)對(duì)圖片信息進(jìn)行淺層的初步提取。針對(duì)之后的加強(qiáng)特征提取網(wǎng)絡(luò),采用的是空間金字塔池化(spatial pyramid pooling,SPP)[20]結(jié)構(gòu)和路徑聚合網(wǎng)絡(luò)(path aggregation network,PANet)結(jié)構(gòu),SPP 結(jié)構(gòu)是使用不同尺寸的池化核對(duì)卷積后的輸出進(jìn)行最大池化,從而能極大地增加感受野,分離出最顯著的上下文特征。之后通過PANet 的卷積、上采樣以及堆疊和下采樣操作對(duì)3 個(gè)不同尺度的特征層進(jìn)行反復(fù)地特征提取,最終將3 個(gè)初步提取出的特征層進(jìn)行特征融合,將淺層的語義信息和深層信息堆疊在一起,獲得更豐富且更有效的特征層。最后頭部的預(yù)測(cè)網(wǎng)絡(luò)會(huì)將之前得到的有效特征層中的不同尺度的信息進(jìn)行整合,然后獲得預(yù)測(cè)結(jié)果。
圖1 YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu)
由于YOLOv4 網(wǎng)絡(luò)模型在主干特征提取網(wǎng)絡(luò)部分采用了大量的殘差塊,在特征金字塔部分又反復(fù)進(jìn)行特征提取和頻繁的特征融合,運(yùn)算參數(shù)量大,內(nèi)存占用大,且運(yùn)行速度一般,不利于部署在攝像頭等嵌入式設(shè)備上,故對(duì)該網(wǎng)絡(luò)模型提出改進(jìn),旨在盡可能保留原有精度的前提下,減少模型參數(shù)量,加快檢測(cè)速度。
輸入特征圖大小為DF,卷積核大小為Dk,M是輸入特征矩陣的通道數(shù),N是輸出特征矩陣的通道數(shù)。如圖2 所示,普通卷積的計(jì)算成本為
圖2 普通卷積
深度可分離卷積層由深度卷積層(depthwise convolution,DW) 和 逐 點(diǎn) 卷 積 層(pointwise convolution,PW) 構(gòu)成[21],如圖3 所示。我們使用深度卷積對(duì)每個(gè)輸入通道應(yīng)用單個(gè)濾波器,DW 相較于普通卷積來說效率極高,但它只負(fù)責(zé)過濾輸入通道,不產(chǎn)生新的特征層,因此需要配合PW,也就是1×1 的卷積核來改變輸出特征矩陣的通道數(shù),生成新的特征層 。
圖3 深度可分離卷積
在MobileNetV3 網(wǎng)絡(luò)中,DW 都是使用3×3 大小的卷積核,因此理論上來說使用深度可分離卷積其計(jì)算量相較于普通卷積可以縮小到原大小的1/8~1/9,精度卻只是略微下降。
普通的殘差模塊是將輸入通過一個(gè)1×1 的卷積先壓縮降維,再通過3×3 卷積提取特征,最后再通過一個(gè)1×1 卷積擴(kuò)張升維。但是特征通過其中的RELU 激活函數(shù)時(shí),由于輸入為負(fù)時(shí)輸出為0,所以會(huì)損失一部分特征信息。
而逆殘差結(jié)構(gòu)[22]則是先將輸入通過一個(gè)1×1 的卷積做升維操作,再接一個(gè)3×3 卷積提取特征,最后通過一個(gè)1×1 卷積降維。由于中間將維度升高了,通過RELU 激活函數(shù)時(shí)特征信息丟失的就會(huì)更少。
原YOLOv4 網(wǎng)絡(luò)采用的是CSPDarkNet53 作為其骨干網(wǎng)絡(luò),盡管在提取圖像特征方面具有一定優(yōu)勢(shì),考慮到該網(wǎng)絡(luò)運(yùn)算參數(shù)量大,采用輕量化的MobileNetV3[23]作為改進(jìn)后的骨干網(wǎng)絡(luò),能極大地減少運(yùn)算參數(shù)量,加快網(wǎng)絡(luò)運(yùn)行速度,更適合實(shí)際工業(yè)生產(chǎn)應(yīng)用。該骨干網(wǎng)絡(luò)結(jié)構(gòu)如表1所示。
表1 MobileNetV3 網(wǎng)絡(luò)結(jié)構(gòu)
bneck 結(jié)構(gòu)如圖4 所示,它結(jié)合了MobileNetV1的深度可分離卷積以及MobileNetV2 的逆殘差結(jié)構(gòu)。并在部分選定的層加入了壓縮和激發(fā)(squeezeand-excitation,SE)[24]注意力機(jī)制模塊,通過學(xué)習(xí)來自動(dòng)獲取到每個(gè)特征通道的重要程度,然后依照這一結(jié)果去提升有用的特征并抑制對(duì)當(dāng)前任務(wù)用處不大的特征,因此能有效提升精度。除此之外,將部分層的swish 激活函數(shù)換成了h-swish 激活函數(shù),進(jìn)一步減少了運(yùn)算量。
圖4 bneck 模塊
YOLOv4 在主干特征提取網(wǎng)絡(luò)之后連接SPP 模塊,此時(shí)輸入的特征圖尺寸為(13,13)。SPP 模 塊 是 由 尺 寸 分 別 為1×1 、5×5 、9×9 和13×13 的最大池化核組成,步長stride 均為1,填充層Ppadding大小為
式中Kkernel_size為池化核尺寸。填充層隨池化核大小改變而改變,用來保證池化操作后輸入的特征圖大小不發(fā)生改變。通過采用不同尺寸的最大池化核,達(dá)到多尺度特征融合的目的,其中1×1 最大池化核其實(shí)就是保留原特征圖尺寸,YOLOv4 采用SPP 模塊的這種方式,比單純地使用k×k最大池化的方式,更有效地增加了主干特征的接收范圍,顯著地分離了最重要的上下文特征。但是當(dāng)目標(biāo)和背景信息相似時(shí),最大池化由于只保留每個(gè)池的最大值信息,很容易誤把背景信息保留了下來而丟失了目標(biāo)信息。特別是本文針對(duì)煙霧的檢測(cè),極易將煙霧與背景天空混淆,檢測(cè)難度極大,采用最大池化很難將背景與目標(biāo)區(qū)分開,因此,本文采用平均池化替代5×5 最大池化來處理該問題。平均池化關(guān)注的是每個(gè)“池”的平均值,通過將“池”的各個(gè)值相加再取平均,面對(duì)背景與目標(biāo)相似的情況也可以保留更多的目標(biāo)信息,減少誤檢和漏檢的情況。同時(shí)再添加一組7×7 的最大池化,豐富特征融合的尺度,進(jìn)一步提升模型檢測(cè)精度。
為了使原YOLOv4 網(wǎng)絡(luò)更易部署于移動(dòng)端設(shè)備,在保留良好精度的前提下,盡可能減少運(yùn)算參數(shù)量,并提升網(wǎng)絡(luò)運(yùn)行速度,改進(jìn)的網(wǎng)絡(luò)結(jié)構(gòu)如圖5 所示。首先,將骨干特征網(wǎng)絡(luò)由原先的CSPDarkNet53 替換為MobileNetV3,輸入通道數(shù)調(diào)整為(40,112,160),保證與之后的輸出通道數(shù)匹配。參考CSPDarkNet53 對(duì)3 種不同尺度特征層的提取方式,將MobileNetV3 的(52,52,40)、(26,26,112),(13,13,160)這3 個(gè)有效特征層提取出來,分別對(duì)應(yīng)小,中,大3 種不同尺度圖片的檢測(cè)。通過骨干網(wǎng)絡(luò)的替換,減少了一部分運(yùn)算參數(shù)量。
圖5 改進(jìn)的YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu)
之后再利用深度可分離卷積代替3×3 卷積塊和5×5 卷積塊中的普通卷積的思想,將骨干網(wǎng)絡(luò)之后的加強(qiáng)特征提取網(wǎng)絡(luò)和預(yù)測(cè)層中大量出現(xiàn)的3×3 卷積塊和5×5 卷積塊中的全部3×3 普通卷積全部替換為深度可分離卷積,精度略微下降,但參數(shù)量大幅度下降,并且檢測(cè)速度得到一定提升。圖5 中含有Separable 的部分代表使用了深度可分離卷積替代普通卷積的操作。
最后改進(jìn)該網(wǎng)絡(luò)的SPP 模塊,采用5×5 平均池化替代SPP 模塊中的5×5 最大池化,再添加一組7×7 的最大池化,一方面平均池化的替換保留了更多目標(biāo)信息,減少了誤檢和漏檢的情況,另一方面再添加一組其他尺寸的池化核來豐富分離出的目標(biāo)不同尺度特征,使得模型檢測(cè)精度得到進(jìn)一定提升,最終改進(jìn)后的網(wǎng)絡(luò)超過了原網(wǎng)絡(luò)模型的檢測(cè)精度。
由于火焰煙霧無公開數(shù)據(jù)集,因此筆者通過網(wǎng)上搜索圖片自行利用labelImg 軟件進(jìn)行標(biāo)注,最終建成的數(shù)據(jù)集共計(jì)2 627 張圖片,包含火焰和煙霧兩類目標(biāo)。數(shù)據(jù)集按8∶1∶1 的比例劃分訓(xùn)練集、驗(yàn)證集和測(cè)試集。并且對(duì)數(shù)據(jù)集采用了包括隨機(jī)水平翻轉(zhuǎn)、縮放、色域變換以及YOLOv4 新增的Mosaic 數(shù)據(jù)增強(qiáng)方式在線擴(kuò)充數(shù)據(jù)量,旨在增強(qiáng)模型的泛化性,避免出現(xiàn)因樣本數(shù)量過少造成過擬合。
本文實(shí)驗(yàn)平臺(tái)的配置如下:操作系統(tǒng),Windows 10;中央處理器,Intel Core i7-8700K,3.6 GHz;內(nèi)存,32 GB;圖像處理器,NVIDIA GeForce Titan Xp,12 GB;圖像處理器加速庫,CUDA 11.1,cudnn 8.0;深度學(xué)習(xí)框架,Pytorch。
根據(jù)硬件設(shè)備性能,將網(wǎng)絡(luò)訓(xùn)練的批尺寸(batch size)設(shè)置為16,世代(epoch)設(shè)置為400,初始學(xué)習(xí)率(learning rate)設(shè)置為0.001,權(quán)重衰減率(weight decay)設(shè)置為0.000 1。
針對(duì)本數(shù)據(jù)集,使用改進(jìn)的YOLOv4 網(wǎng)絡(luò)算法分別與使用YOLOv4、YOLOv3、YOLOv4-tiny、SSD 以及Faster R-CNN 算法進(jìn)行對(duì)比實(shí)驗(yàn),對(duì)重要指標(biāo)平均精度(mean average precision,mAP)值、FPS、權(quán)重大小和參數(shù)量進(jìn)行比較,結(jié)果如表2所示。由表2 可知:在原YOLOv4 算法的基礎(chǔ)下設(shè)計(jì)的YOLOv4-tiny 也是一款改進(jìn)的輕量化網(wǎng)絡(luò),在將輸出的有效特征層由3 種尺度減少為2 種以后,大幅度減少了運(yùn)算參數(shù)量,減小了權(quán)重大小,提高了檢測(cè)速度,但是mAP 值出現(xiàn)了接近10%的損失;而本文改進(jìn)的YOLOv4 算法則采用深度可分離卷積,參數(shù)量縮小到原大小的1/6,同樣大幅減小了權(quán)重大小,F(xiàn)PS 相較于原網(wǎng)絡(luò)提升了50% 左右,并且mAP 值還有略微提升。綜合對(duì)比各算法在火災(zāi)煙霧檢測(cè)的精度、運(yùn)行速度以及內(nèi)存占等各種情況發(fā)現(xiàn),改進(jìn)的YOLOv4 輕量化網(wǎng)絡(luò)更適合實(shí)際工業(yè)場(chǎng)景應(yīng)用。
表2 不同方法性能對(duì)比
為了更加直觀地檢驗(yàn)改進(jìn)后的YOLOv4 網(wǎng)絡(luò)的有效性,本文從采集到的火災(zāi)圖片樣本庫里選取了3 張具有代表性的圖片進(jìn)行檢測(cè)效果測(cè)試。分別代表出現(xiàn)明火和煙霧的火災(zāi)場(chǎng)景、只出現(xiàn)煙霧的火災(zāi)場(chǎng)景以及存在多處火焰煙霧目標(biāo)的火災(zāi)場(chǎng)景。前2 張用于檢測(cè)算法對(duì)火焰煙霧的敏感度和對(duì)煙霧和天空背景區(qū)分的抗干擾能力,最后一張用于檢測(cè)算法對(duì)多目標(biāo)特別是小目標(biāo)的檢測(cè)效果。將圖片在YOLOv4、YOLOv4-tiny 以及改進(jìn)后的YOLOv4 模型上分別進(jìn)行檢測(cè)。其結(jié)果如圖6所示。從圖中可以發(fā)現(xiàn)改進(jìn)的YOLOv4 網(wǎng)絡(luò)能夠較好地檢測(cè)出火災(zāi)場(chǎng)景下的火焰和煙霧,在目標(biāo)與背景存在一定重合度的情況下仍能精確地識(shí)別出指定目標(biāo);改進(jìn)的YOLOv4 網(wǎng)絡(luò)相比同為輕量級(jí)的YOLOv4-tiny 網(wǎng)絡(luò),在檢測(cè)精度和檢測(cè)出的目標(biāo)數(shù)量上都具有顯著優(yōu)勢(shì)。
圖6 檢測(cè)效果對(duì)比圖
本文提出了一種改進(jìn)YOLOv4 的火焰煙霧檢測(cè)算法。通過理論分析與實(shí)驗(yàn)對(duì)比驗(yàn)證得到如下結(jié)論:
1)因?yàn)榫W(wǎng)絡(luò)上無公開的火焰煙霧檢測(cè)數(shù)據(jù)集,因此本文的數(shù)據(jù)均來自自己進(jìn)行標(biāo)注制作的共計(jì)2 627 張圖片。由于自制的火焰煙霧數(shù)據(jù)集數(shù)較小,為了增強(qiáng)算法的泛化性,采用數(shù)據(jù)增強(qiáng)擴(kuò)充數(shù)據(jù)集是十分有必要的。
2)以YOLOv4 網(wǎng)絡(luò)為基礎(chǔ),通過改變?cè)歉删W(wǎng)絡(luò)為MobileNetV3 輕量化網(wǎng)絡(luò),減少了模型參數(shù)量;并在加強(qiáng)特征提取網(wǎng)絡(luò)和預(yù)測(cè)層的多處位置將3×3 卷積塊和5×5 卷積塊中的全部3×3 普通卷積替換為深度可分離卷積,精度略微下降,但參數(shù)量大幅度下降,檢測(cè)速度得到一定提升。
3)采 用5×5 平 均 池 化 替 代SPP 模 塊 中 的5×5 最大池化,再添加一組7×7 的最大池化核,克服了背景與目標(biāo)混淆的問題,并且豐富了分離出的目標(biāo)不同尺度特征,提升了模型檢測(cè)精度。
4)通過與SSD、Faster R-CNN、YOLOv3、YOLOv4、YOLOv4-tiny 等算法相比,改進(jìn)的YOLOv4 在精度上優(yōu)于這些主流網(wǎng)絡(luò),并且改善了運(yùn)行速度不高和內(nèi)存占用大的缺點(diǎn),更適合搭載于移動(dòng)端和嵌入式設(shè)備上。