王少韓,劉淼
(201620 上海市 上海工程技術大學 機械與汽車工程學院)
大多數火災都是從局部火災開始的,并造成各種損害,例如人身和財產損失等,快速準確地檢測和響應局部初始火災在減少損失方面發揮了重要作用。當前的火災探測系統基于照相機和諸如煙霧、火焰、熱的檢測傳感器的圖像處理分類,這類系統的準確性非常低。由于煙霧滅菌、垃圾焚燒、煙霧、氣味、滅火器、警報故障等原因,置信水平為95%時,每年平均發生48 371±5 763 例,這比滅火的概率高出1.2 倍。
目前,隨著圖像識別的發展,基于深度學習的算法分為Two-stage 算法和One-stage 算法,前者主要以 Faster R-CNN[1]網絡為代表,后者主要以SSD[2]、YOLO[3-4]系列等網絡為代表。另外,兩種算法的優勢不同,One-stage 算法檢測速度通常快于Two-stage 算法,但檢測精度低于后者;而作為One-stage 算法的代表網絡,YOLO(You Only Look Once)算法的檢測速度特別快,適于實時目標檢測以及在許多工業現場中應用。相比于其它目標檢測算法,YOLO 算法不僅速度優勢明顯,而且模型體積小,方便部署于嵌入式設備中。目前較新的版本為YOLOv5 網絡,它在YOLOv3[3]、YOLOv4[4]的基礎上使用更多訓練技巧提升模型的檢測精度,具備更強大的檢測能力,但網絡的訓練依賴于大量有標記數據集,在訓練樣本受限的條件下,該方法的性能有待提高。
本文識別的是火災,并且要在微型計算機樹莓派上實現,相對于準確率,對識別速度的要求比較高,故使用了YOLOv5 算法,同時,把PC端訓練的模型移植到樹莓派上,最后測試得到實驗結果。
YOLOv5 算法直接以源碼的方式發放出來,更適合工業化。YOLOv5 有4 個模型:YOLOv5s[5]、YOLOv5m、YOLOv5l、YOLOv5x。因為本文最后要在計算能力較弱的樹莓派實現,根據圖1 所示的4個模型的算法性能圖,選擇了v5s 版本。v5s 模型更小且速度更快,并且是寬度和深度最小的模型,所以進行深度學習需要的計算量比較少。

圖1 模型算法性能圖Fig.1 Model algorithm performance chart
圖2 是YOLOv5s 的網絡結構,以coco 數據集為基準。YOLOv5s 模型的網絡結構由4 部分組成:輸入端,Backbone,Neck,Prediction(輸出端)。除此之外,又包含5 個基本組件:CBL 模塊、Res unit 模塊、CSPX 模塊、SPP 模塊、Focus 模塊。其它基礎操作包括張量拼接和張量相加。

圖2 YOLOv5s 的網絡結構Fig.2 Network structure of YOLOv5s
YOLOv5 輸入端較之前版本改進之處是使用的Mosaic 參考了2019 年底提出的CutMix[6]目標增強方式。CutMix 目標增強只能使2 張圖進行拼接,而v5 模型可以指定幾張圖片進行拼接,通過設置參數實現,而且數據是隨機縮放、裁剪、排布的。除了數據增強,還使用了自適應圖片縮放,v5 模型可以自動將圖片進行縮放轉換。
1.4.1 Focus 結構
Focus 結構是v5 模型的創新點,該結構里最重要的就是slice(切片操作),圖3 為slice 操作示意圖,圖像經過切片后變成不同維度的特征圖。

圖3 Slice 操作Fig.3 Slice operation
1.4.2 CSP 結構
YOLOv5 模型含有2 種CSP 結構,圖2 中有詳細描述,其中CSP1_X 結構應用于Backbone 主干網絡中,CSP2_X 結構則應用于Neck 中。主干網絡中采用CSP 組件的優點:增強卷積網絡的學習能力;兼顧速度和準確率、降低計算瓶頸;降低內存成本。
YOLOv5 的Neck 結構和v4 版本的一樣,都是FPN+PAN 的結構。在v5 剛問世時,只采用FPN結構,后來不斷改進增加了PAN 結構,此外網絡中其他結構也在不停地調整。網絡結構如圖2 所示。v5 版本Neck 中的創新之處是將v4 版本Neck 中的普通卷積換成了CSP 結構,這樣做的目的是為了加強特征融合能力。
1.6.1 Bounding box 損失函數
YOLO 算法目標檢測的損失函數一般由分類損失函數和候選框回歸損失函數2 部分組成。在YOLO 算法中,候選框回歸損失函數在不斷改進,改進歷程為:Smooth L1 損失函數→ IOU 損失函數(2016)→GIOU 損失函數(2019)→ DIOU 損失函數(2020)→CIOU 損失函數(2020)。好的損失函數應該考慮以下3 個重要影響因素:重疊面積、中心點距離、長寬比。v5 版本采用的就是最新的候選框損失函數CIOU 損失函數。
1.6.2 nms 非極大值抑制
在目標檢測的后期處理中,針對很多目標框的篩選,通常需要nms 操作,簡言之,通過設置閾值,篩選最像目標的候選框。YOLOv5 采用的是DIOU+nms 的方式,由圖4 可見,v5 版本使用加權后的nms 后,物體識別時會有明顯的加強效果,圖4(b)箭頭所指,原本被遮擋的目標也可以檢出。

圖4 NMS 和DIOU+NMSFig.4 NMS and DIoU +NMS
火災數據集比較少,所以通過coco 數據和網頁爬取一部分數據自建了含有1 000 多張圖片的數據集。對數據集的操作:(1)標注數據。使用的是labelme 標注工具,標注好的數據會保存為json類型的文件;(2)修改v5s 配置文件。YOLOv5目錄下的model 文件夾是模型的配置文件,找到YOLOv5s 配置文件,將配置文件中的nc 改寫成1;(3)轉換標注數據格式。在YOLO 算法中,json文件的信息是識別不出來的,因為json 文件的標注框是絕對位置,YOLO 算法中能識別的是相對位置,所以需要轉換;(4)數據集的配置。該步驟需要在YOLOv5 目錄下的data 文件下創建一個fire.yaml 文本,將自建的訓練集和驗證集以及自建類別的名稱和代號寫到該文件中。
訓練開始之前,在train.py 文件中要修改幾個參數:(1)epochs:訓練過程中整個數據集將被迭代的次數,本次實驗調到1 000,確保訓練的穩定性;(2)batch-size:一次看完多少張圖片才進行權重更新,由于設備問題,將其設置成8。(3)cfg:存儲模型結構的配置文件,就是YOLOv5s.yaml 文件。(4)data:存儲訓練、測試數據的文件,也就是上文中的fire.yaml 文件。(5)weights:本文使用的權重文件是其他模型產生的權重文件,根據遷移學習。如果從0 開始訓練,自建的1 000 張照片的數據集訓練的模型效果不好或不佳,所以使用其他模型的權重文件進行訓練,這樣既能加快訓練速度,又能保證模型精度。
2.3.1 實驗平臺
實驗硬件環境為英特爾酷睿i7-9750H 處理器,英偉達GTX1650 顯卡,16 G 內存;軟件環境為Win10 系統,Python3.7,所使用的深度學習框架為PyTorch。
2.3.2 訓練數據結果和分析
首先得到的是訓練集的精確率變化曲線,如圖5 表示。從圖5 可以看出,訓練集通過1 000個epoch 后,精確率穩定在0.7 左右。平均精度值mAP 值在閾值0.5 情況下的曲線變化如圖6 所示,1 000 個epoch 后穩定在0.6。通過這2 個評價指標,可以看出模型的性能是比較穩定的。

圖5 訓練集精確率變化曲線圖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
標簽和訓練效果的對比如圖7 所示。從訓練效果圖中可以看出,火災的置信度在0.8 以上,除個別圖片未被召回外,其訓練效果良好。

圖7 標簽圖和訓練效果圖Fig.7 Label picture and training effect picture
本文研究對象用的是樹莓派4B[7]開發板,硬件和板載接口如圖8 所示。

圖8 樹莓派4B 開發板硬件部分和板載接口圖Fig.8 Hardware part and on-board interface diagram of Raspberry Pie 4B development board
在Windows10 環境下使用PyTorch 深度學習框架實現算法的改進與訓練,獲得訓練好的模型權重后,將算法與模型權重部署到樹莓派上。由模型部署到移動端TFLite 上需要模型的轉換,思路為:pt →ONXX →CoreML →tflite,然后將轉換后的文件放入樹莓派中指定的文件中。
完成環境配置與模型移植后,可以進行實時監測實驗。如圖9 的監測結果所示,樹莓派能正確無誤地把火識別出來,并且實時性能指標FPS 為5.47,可以進行實時監測。

圖9 實時監測結果Fig.9 Real-time monitoring results
本文通過將YOLOv5 算法與基于Raspberry Pi設計的監控攝像頭結合檢測火災。在PC 端得到火災的訓練模型,精度達到0.7,然后將算法移植到樹莓派上,識別出了火災,FPS 為5 左右,并能實時檢測。該檢測系統穩定可靠,成本低,較為流暢,具有廣闊的應用場景。