王少韓,劉淼
(201620 上海市 上海工程技術(shù)大學(xué) 機(jī)械與汽車工程學(xué)院)
大多數(shù)火災(zāi)都是從局部火災(zāi)開始的,并造成各種損害,例如人身和財(cái)產(chǎn)損失等,快速準(zhǔn)確地檢測(cè)和響應(yīng)局部初始火災(zāi)在減少損失方面發(fā)揮了重要作用。當(dāng)前的火災(zāi)探測(cè)系統(tǒng)基于照相機(jī)和諸如煙霧、火焰、熱的檢測(cè)傳感器的圖像處理分類,這類系統(tǒng)的準(zhǔn)確性非常低。由于煙霧滅菌、垃圾焚燒、煙霧、氣味、滅火器、警報(bào)故障等原因,置信水平為95%時(shí),每年平均發(fā)生48 371±5 763 例,這比滅火的概率高出1.2 倍。
目前,隨著圖像識(shí)別的發(fā)展,基于深度學(xué)習(xí)的算法分為Two-stage 算法和One-stage 算法,前者主要以 Faster R-CNN[1]網(wǎng)絡(luò)為代表,后者主要以SSD[2]、YOLO[3-4]系列等網(wǎng)絡(luò)為代表。另外,兩種算法的優(yōu)勢(shì)不同,One-stage 算法檢測(cè)速度通??煊赥wo-stage 算法,但檢測(cè)精度低于后者;而作為One-stage 算法的代表網(wǎng)絡(luò),YOLO(You Only Look Once)算法的檢測(cè)速度特別快,適于實(shí)時(shí)目標(biāo)檢測(cè)以及在許多工業(yè)現(xiàn)場(chǎng)中應(yīng)用。相比于其它目標(biāo)檢測(cè)算法,YOLO 算法不僅速度優(yōu)勢(shì)明顯,而且模型體積小,方便部署于嵌入式設(shè)備中。目前較新的版本為YOLOv5 網(wǎng)絡(luò),它在YOLOv3[3]、YOLOv4[4]的基礎(chǔ)上使用更多訓(xùn)練技巧提升模型的檢測(cè)精度,具備更強(qiáng)大的檢測(cè)能力,但網(wǎng)絡(luò)的訓(xùn)練依賴于大量有標(biāo)記數(shù)據(jù)集,在訓(xùn)練樣本受限的條件下,該方法的性能有待提高。
本文識(shí)別的是火災(zāi),并且要在微型計(jì)算機(jī)樹莓派上實(shí)現(xiàn),相對(duì)于準(zhǔn)確率,對(duì)識(shí)別速度的要求比較高,故使用了YOLOv5 算法,同時(shí),把PC端訓(xùn)練的模型移植到樹莓派上,最后測(cè)試得到實(shí)驗(yàn)結(jié)果。
YOLOv5 算法直接以源碼的方式發(fā)放出來,更適合工業(yè)化。YOLOv5 有4 個(gè)模型:YOLOv5s[5]、YOLOv5m、YOLOv5l、YOLOv5x。因?yàn)楸疚淖詈笠谟?jì)算能力較弱的樹莓派實(shí)現(xiàn),根據(jù)圖1 所示的4個(gè)模型的算法性能圖,選擇了v5s 版本。v5s 模型更小且速度更快,并且是寬度和深度最小的模型,所以進(jìn)行深度學(xué)習(xí)需要的計(jì)算量比較少。
圖1 模型算法性能圖Fig.1 Model algorithm performance chart
圖2 是YOLOv5s 的網(wǎng)絡(luò)結(jié)構(gòu),以coco 數(shù)據(jù)集為基準(zhǔn)。YOLOv5s 模型的網(wǎng)絡(luò)結(jié)構(gòu)由4 部分組成:輸入端,Backbone,Neck,Prediction(輸出端)。除此之外,又包含5 個(gè)基本組件:CBL 模塊、Res unit 模塊、CSPX 模塊、SPP 模塊、Focus 模塊。其它基礎(chǔ)操作包括張量拼接和張量相加。
圖2 YOLOv5s 的網(wǎng)絡(luò)結(jié)構(gòu)Fig.2 Network structure of YOLOv5s
YOLOv5 輸入端較之前版本改進(jìn)之處是使用的Mosaic 參考了2019 年底提出的CutMix[6]目標(biāo)增強(qiáng)方式。CutMix 目標(biāo)增強(qiáng)只能使2 張圖進(jìn)行拼接,而v5 模型可以指定幾張圖片進(jìn)行拼接,通過設(shè)置參數(shù)實(shí)現(xiàn),而且數(shù)據(jù)是隨機(jī)縮放、裁剪、排布的。除了數(shù)據(jù)增強(qiáng),還使用了自適應(yīng)圖片縮放,v5 模型可以自動(dòng)將圖片進(jìn)行縮放轉(zhuǎn)換。
1.4.1 Focus 結(jié)構(gòu)
Focus 結(jié)構(gòu)是v5 模型的創(chuàng)新點(diǎn),該結(jié)構(gòu)里最重要的就是slice(切片操作),圖3 為slice 操作示意圖,圖像經(jīng)過切片后變成不同維度的特征圖。
圖3 Slice 操作Fig.3 Slice operation
1.4.2 CSP 結(jié)構(gòu)
YOLOv5 模型含有2 種CSP 結(jié)構(gòu),圖2 中有詳細(xì)描述,其中CSP1_X 結(jié)構(gòu)應(yīng)用于Backbone 主干網(wǎng)絡(luò)中,CSP2_X 結(jié)構(gòu)則應(yīng)用于Neck 中。主干網(wǎng)絡(luò)中采用CSP 組件的優(yōu)點(diǎn):增強(qiáng)卷積網(wǎng)絡(luò)的學(xué)習(xí)能力;兼顧速度和準(zhǔn)確率、降低計(jì)算瓶頸;降低內(nèi)存成本。
YOLOv5 的Neck 結(jié)構(gòu)和v4 版本的一樣,都是FPN+PAN 的結(jié)構(gòu)。在v5 剛問世時(shí),只采用FPN結(jié)構(gòu),后來不斷改進(jìn)增加了PAN 結(jié)構(gòu),此外網(wǎng)絡(luò)中其他結(jié)構(gòu)也在不停地調(diào)整。網(wǎng)絡(luò)結(jié)構(gòu)如圖2 所示。v5 版本Neck 中的創(chuàng)新之處是將v4 版本Neck 中的普通卷積換成了CSP 結(jié)構(gòu),這樣做的目的是為了加強(qiáng)特征融合能力。
1.6.1 Bounding box 損失函數(shù)
YOLO 算法目標(biāo)檢測(cè)的損失函數(shù)一般由分類損失函數(shù)和候選框回歸損失函數(shù)2 部分組成。在YOLO 算法中,候選框回歸損失函數(shù)在不斷改進(jìn),改進(jìn)歷程為:Smooth L1 損失函數(shù)→ IOU 損失函數(shù)(2016)→GIOU 損失函數(shù)(2019)→ DIOU 損失函數(shù)(2020)→CIOU 損失函數(shù)(2020)。好的損失函數(shù)應(yīng)該考慮以下3 個(gè)重要影響因素:重疊面積、中心點(diǎn)距離、長(zhǎng)寬比。v5 版本采用的就是最新的候選框損失函數(shù)CIOU 損失函數(shù)。
1.6.2 nms 非極大值抑制
在目標(biāo)檢測(cè)的后期處理中,針對(duì)很多目標(biāo)框的篩選,通常需要nms 操作,簡(jiǎn)言之,通過設(shè)置閾值,篩選最像目標(biāo)的候選框。YOLOv5 采用的是DIOU+nms 的方式,由圖4 可見,v5 版本使用加權(quán)后的nms 后,物體識(shí)別時(shí)會(huì)有明顯的加強(qiáng)效果,圖4(b)箭頭所指,原本被遮擋的目標(biāo)也可以檢出。
圖4 NMS 和DIOU+NMSFig.4 NMS and DIoU +NMS
火災(zāi)數(shù)據(jù)集比較少,所以通過coco 數(shù)據(jù)和網(wǎng)頁爬取一部分?jǐn)?shù)據(jù)自建了含有1 000 多張圖片的數(shù)據(jù)集。對(duì)數(shù)據(jù)集的操作:(1)標(biāo)注數(shù)據(jù)。使用的是labelme 標(biāo)注工具,標(biāo)注好的數(shù)據(jù)會(huì)保存為json類型的文件;(2)修改v5s 配置文件。YOLOv5目錄下的model 文件夾是模型的配置文件,找到Y(jié)OLOv5s 配置文件,將配置文件中的nc 改寫成1;(3)轉(zhuǎn)換標(biāo)注數(shù)據(jù)格式。在YOLO 算法中,json文件的信息是識(shí)別不出來的,因?yàn)閖son 文件的標(biāo)注框是絕對(duì)位置,YOLO 算法中能識(shí)別的是相對(duì)位置,所以需要轉(zhuǎn)換;(4)數(shù)據(jù)集的配置。該步驟需要在YOLOv5 目錄下的data 文件下創(chuàng)建一個(gè)fire.yaml 文本,將自建的訓(xùn)練集和驗(yàn)證集以及自建類別的名稱和代號(hào)寫到該文件中。
訓(xùn)練開始之前,在train.py 文件中要修改幾個(gè)參數(shù):(1)epochs:訓(xùn)練過程中整個(gè)數(shù)據(jù)集將被迭代的次數(shù),本次實(shí)驗(yàn)調(diào)到1 000,確保訓(xùn)練的穩(wěn)定性;(2)batch-size:一次看完多少張圖片才進(jìn)行權(quán)重更新,由于設(shè)備問題,將其設(shè)置成8。(3)cfg:存儲(chǔ)模型結(jié)構(gòu)的配置文件,就是YOLOv5s.yaml 文件。(4)data:存儲(chǔ)訓(xùn)練、測(cè)試數(shù)據(jù)的文件,也就是上文中的fire.yaml 文件。(5)weights:本文使用的權(quán)重文件是其他模型產(chǎn)生的權(quán)重文件,根據(jù)遷移學(xué)習(xí)。如果從0 開始訓(xùn)練,自建的1 000 張照片的數(shù)據(jù)集訓(xùn)練的模型效果不好或不佳,所以使用其他模型的權(quán)重文件進(jìn)行訓(xùn)練,這樣既能加快訓(xùn)練速度,又能保證模型精度。
2.3.1 實(shí)驗(yàn)平臺(tái)
實(shí)驗(yàn)硬件環(huán)境為英特爾酷睿i7-9750H 處理器,英偉達(dá)GTX1650 顯卡,16 G 內(nèi)存;軟件環(huán)境為Win10 系統(tǒng),Python3.7,所使用的深度學(xué)習(xí)框架為PyTorch。
2.3.2 訓(xùn)練數(shù)據(jù)結(jié)果和分析
首先得到的是訓(xùn)練集的精確率變化曲線,如圖5 表示。從圖5 可以看出,訓(xùn)練集通過1 000個(gè)epoch 后,精確率穩(wěn)定在0.7 左右。平均精度值mAP 值在閾值0.5 情況下的曲線變化如圖6 所示,1 000 個(gè)epoch 后穩(wěn)定在0.6。通過這2 個(gè)評(píng)價(jià)指標(biāo),可以看出模型的性能是比較穩(wěn)定的。
圖5 訓(xùn)練集精確率變化曲線圖Fig.5 Curve of accuracy rate of training set
圖6 閾值0.5 下的mAP 值變化曲線圖Fig.6 Map of mAP value under threshold value of 0.5
標(biāo)簽和訓(xùn)練效果的對(duì)比如圖7 所示。從訓(xùn)練效果圖中可以看出,火災(zāi)的置信度在0.8 以上,除個(gè)別圖片未被召回外,其訓(xùn)練效果良好。
圖7 標(biāo)簽圖和訓(xùn)練效果圖Fig.7 Label picture and training effect picture
本文研究對(duì)象用的是樹莓派4B[7]開發(fā)板,硬件和板載接口如圖8 所示。
圖8 樹莓派4B 開發(fā)板硬件部分和板載接口圖Fig.8 Hardware part and on-board interface diagram of Raspberry Pie 4B development board
在Windows10 環(huán)境下使用PyTorch 深度學(xué)習(xí)框架實(shí)現(xiàn)算法的改進(jìn)與訓(xùn)練,獲得訓(xùn)練好的模型權(quán)重后,將算法與模型權(quán)重部署到樹莓派上。由模型部署到移動(dòng)端TFLite 上需要模型的轉(zhuǎn)換,思路為:pt →ONXX →CoreML →tflite,然后將轉(zhuǎn)換后的文件放入樹莓派中指定的文件中。
完成環(huán)境配置與模型移植后,可以進(jìn)行實(shí)時(shí)監(jiān)測(cè)實(shí)驗(yàn)。如圖9 的監(jiān)測(cè)結(jié)果所示,樹莓派能正確無誤地把火識(shí)別出來,并且實(shí)時(shí)性能指標(biāo)FPS 為5.47,可以進(jìn)行實(shí)時(shí)監(jiān)測(cè)。
圖9 實(shí)時(shí)監(jiān)測(cè)結(jié)果Fig.9 Real-time monitoring results
本文通過將YOLOv5 算法與基于Raspberry Pi設(shè)計(jì)的監(jiān)控?cái)z像頭結(jié)合檢測(cè)火災(zāi)。在PC 端得到火災(zāi)的訓(xùn)練模型,精度達(dá)到0.7,然后將算法移植到樹莓派上,識(shí)別出了火災(zāi),F(xiàn)PS 為5 左右,并能實(shí)時(shí)檢測(cè)。該檢測(cè)系統(tǒng)穩(wěn)定可靠,成本低,較為流暢,具有廣闊的應(yīng)用場(chǎng)景。