孫家豪,李丹
(四川大學錦城學院,四川成都,611371)
據應急管理部消防救援局統計2020年全國共接報火災25.2萬起,死亡1183人,受傷775人,直接財產損失40.09億元[1]。8.12天津濱海新區爆炸造成165人死亡,近兩年四川涼山州曾發生兩次森林大火分別造成19人和31人遇難。這些生命的逝去讓我們痛惜,同時讓我們思考有沒有更好的方法預防火災的發生,我們需要通過高科技的手段科學有效的預防火災。隨著近幾年機器學習和計算機硬件技術的飛速發展,在火災產生初期,火災不易被發現從而造成更大的生命財產損失的情況可以得到極為有效的改善。我們開發的YOLOX火災報警系統可以部署在各種環境下,如森林、草原、樓道等等,在火災發生初期迅速地提醒人們,避免更大的損失。本文通過介紹YOLOX的算法結構、YOLOX的改進、識別結果的正確率,以及最終在實際環境中的火災識別表現,說明YOLOX的火災報警系統。
YOLO(You Only Look Once)系列是目標檢測算法的重要組成,其中的YOLO V3[2]在現實生活中的應用是最為廣泛的,最新版本YOLOX在2021年被曠視科技公司提出。相比于以前的YOLO系列,YOLOX的檢測速度更快,檢測精確度更高,端對端部署更加靈活。
這里我們主要介紹YOLOX-Darknet53網絡結構圖。下面的圖1是YOLOX-Darknet53網絡結構圖。我們將其分解為四個板塊,分別是輸入端、Backbone骨 干 網 絡、Neck、Prediction。

圖1 YOLOX-Darknet53網絡結構圖
(1)輸入端:YOLOX采用了以前YOLO版本使用的Mosaic、Mixup兩種數據增強技術。
(2)Backbone骨干網絡:采用了Darket-53網絡。它一共有53層卷積網絡,最后一層為全連接層,其實是通過1x1卷積實現的。總共52個卷積用于當做主體網絡。
(3)Neck:采用了FPN的結構進行融合。FPN可以巧妙的將金字塔高層特征和低層特征利用,即高層高語義的特征和低層圖片高分辨率的特征,這樣更有利于提升模型的性能和小目標的檢測能力。
(4)Prediction:采用了解耦頭(Decoupled Head)、Anchor-free檢測器、標簽分配策略SimOTA(Simplified Optimal Transport Assignment)、Loss計算。
雖然YOLO系列是十分優秀的目標檢測模型,但是這個系列的模型沒有吸收最近幾年在目標檢測領域出現的Anchor-free檢測器、更為優秀的LabelAssignment技巧、端到端檢測器(NMS-free),YOLOX針對這些問題進行了優化,它主要提出了以下三個方法:
(1)將YOLO檢測器和無錨框(Anchor-free)檢測器結合;(2)加入解耦頭(Decoupled Head);(3)加入標簽分配策略SimOTA(Simplified Optimal Transport Assignment)。
1.3.1 無錨框(Anchor-free)檢測器
YOLO系列中的舊版本均未搭載Anchor-free檢測器,它們都搭載了Anchor-based檢測器,而YOLOX搭載了Anchor-free檢測器。相比于Anchor-free檢測器,Anchor-based檢測器存在一些問題。第一,在檢測前,為了實現最佳性能,我們需要分析最優錨框,這些錨框只能用于特定區域,通用性很差。第二,錨框增加了模型的復雜性和圖片的預測數量。
經過這幾年的發展,Anchor-free的檢測速度和精度已經和Anchor-based差不多,其次Anchor-free檢測器在訓練和解碼階段變得十分簡單。
作者將YOLO變成一個無錨方式。將每個位置的預測數量從3減少到1,并使它們直接預測4個參數,也就是網格左上角的兩個偏置,即預測框的高和寬。作者分配每個物體的中心點為正樣本并預先標定一個比例范圍,這樣便于指定每個物體的FPN級。這樣的修改減少了參數和檢測器的GFLOPs,使它更檢測速度快,而且準確率更高。
1.3.2 解耦頭(Decoupled Head)
解耦頭是目標識別領域是十分常見的,主要是人們目標檢測中,分類和回歸會產生沖突的問題。個人認為原因是分類和回歸的特征不一樣,分類問題需要考慮每一個樣本的差異,而回歸問題更多的考慮是物體圖像輪廓邊界特征。隨著YOLO系列的骨干網和特征金字塔不斷地發展,它們的檢測頭會產生耦合的問題。
作者通過實驗分析耦合的檢測頭對性能會產生不利影響。作者的做法是:(1)將YOLO的頭用一個解耦替代,提高了模型的收斂速度。(2)解耦頭對端到端版本的YOLO會有極其重要的影響。具體來說就是作者將YOLO檢測頭用一個輕量解耦頭替代。這個解耦頭包含一個1×1卷積層,通過這個卷積層減少通道維度,卷積層后面接著兩個帶有兩層3×3 卷積層的并行分支。
1.3.3 標簽分配策略SimOTA(Simplified Optimal Transport Assignment)
要理解SimOTA必須要了解OTA[3]。OTA[3]解決的問題是anchorassignment問題,一般我們在分配正負樣本的時候是根據gt的iou與anchor進行分配,作者認為檢測目標在不同的遮擋情況、不同的大小、不同的形狀正樣本和負樣本的分界線是不同的,同時正負樣本的分配需要考慮全局。所以我們通常把anchor assignment當成一個線性規劃中的優化傳輸問題(Optimal Transport)來處理,核心思想是建立一個代價矩陣,假設有M個gt與N個anchor,那么代價矩陣的大小就是M×N,矩陣中的每個元素就是該gt與anchor的loss值,loss越大則說明選取這對gt和anchor的代價越大,優化傳輸的目的是去選取gt與anchor的匹配對,使總體代價最小。YOLOX的作者發現用Sinkhorn-Knopp算法解決優化傳輸問題會額外花費25%的訓練時間。所以作者省去了Sinkhorn-Knopp算法過程,簡稱為動態top-k策略。
如圖2所示是我們的YOLOX火災報警系統的框架圖。這三個層面負責人機界面交互和實時的發出警報,分別是實體層、識別層和現實層。

圖2 YOLOX火災報警系統框架圖
實體層:我們可以將攝像頭放置在易發生火災的地方。攝像頭負責采集圖像資料,然后將圖像資料儲存在系統中,并將圖像實時的傳輸給模型。
識別層:識別層就是我們的圖像處理層。它負責將系統中的圖像進行處理,通過我們訓練的YOLOX網絡模型對攝像頭所處環境是否發生火災進行識別,如果識別有火災發生,就將警報發送給消防人員。
現實層:消防人員趕到模型識別有火災發生的地方,進行撲滅。這樣在火災初期就可以進行有效的應對,避免更大的損失。
我們使用了網上的火災數據集,數據集的下載地址為fire-smoke-detect-yolov4/README_EN.md at master · gengyanlei/fire-smoke-detect-yolov4 · GitHub。此數據集一共有2058張圖片,包含了各種場景下的火災,如家庭起火、商場起火、森林起火、車輛起火等等情況,這樣的好處是使得我們的YOLOX模型可以識別各種場景下的火災,適應性更好。訓練環境是CUDA 11.1 nvidia-smi 460.73.01,Python3.7.10,顯卡NVDIA Tesla P40 24GB。
第一,在配置環境的時候,程序會報錯,我們發現是因為pytorch安裝的1.9版本,cuda張量無法安裝,換成1.8版本可以運行。第二,我們將數據集轉換成COCO格式,但是模型無法讀取數據。經過我們研究發現是轉換過程中沒有嚴格按照格式進行轉換。第三,出現了顯存溢出的問題,我們將默認訓練的300 epoches改為200 epoches。
我們采用的是YOLOX-S模型,這個模型更加著重于模型的推理速度。因為火災的發展速度是刻不容緩的,需要選用識別速度更快的模型。圖3是我們通過調參訓練獲得到的loss下降圖。cls_loss表示模型的目標分類損失,conf_loss表示模型的置信度損失,iou_loss表示模型的邊框回歸損失,這里的iou_loss用的是GIOULoss,lr表示模型的學習率,優化器采用的是SGD優化器,優化策略用的是帶有 warmup 策略的余弦調度策略。COCOAP50和COCOAP50_95:驗證用的是COCO的map的計算方式,其中AP指的是準確率(Precision)和召回率(Recall)作為X,Y軸作圖圍成的面積,50指的是iou設置為0.5時的AP值, 50_95指的是iou設置為0.5~0.95,以0.05為步長計算AP的平均值。

圖3 loss下降圖
我們的訓練過程主要修改的是num_classes根據任務改為1, 采用fine-tune訓練,epoch數設置為200,batch-size設置為32,input-size默認的[640,640],關閉flip數據增強,降低mosaic和mixup數據增強,其他均采用默認。
我們的YOLOX經過訓練后對火災的識別是十分不錯的。識別結果如圖4所示,無論是汽車起火(圖四左側)、住宅起火(圖四居中)還是森林起火(圖四右側),YOLOX模型都可以得到一個很高的識別率,其中對于較小火焰(圖四居中圖片左側)也有不錯的識別率。

圖4 訓練結果
火災一直是人類社會發展的心腹大患,人們在使用火的同時一直在總結火災發生的規律,然而我們仍無法避免火災的發生,火災無時無刻的威脅著社會發展和人們的生命財產安全。美國、歐洲和中國都曾經發生過大火災,面對火災,一方面我們的消防安全意識仍然急需加強,另一方面我們需要利用高科技的手段去應對火災,如本文所應用的YOLOX目標檢測算法,它的優點是識別速度快、可以布置在各種環境中,可以全時段、全天候地檢測火災的發生。在這次研究中我們對計算機視覺有了更加深入的認識。此次研究工作也有很多不足,例如數據集不夠豐富,我們期待未來有更多性能超越YOLOX的針對火災的檢測算法。