田 楓, 馮建臣, 劉 芳
(東北石油大學 計算機與信息技術學院, 大慶 163318)
油田作業現場的環境具有易燃易爆的特征, 煙火災害本身又具有發生快、防范難等特性, 煙火事故一旦發生, 企業就會面臨巨大的損失,使企業生產停滯, 甚至對煙火災害發生地工作人員造成傷亡. 目前油田作業現場主要采用人工巡檢的方式預防煙火災害, 費時費力且實時性較低. 隨著油田安防監控的廣泛應用, 使得視頻數據獲取變得方便快捷. 因此, 如何充分利用油田安防監控的優勢進行煙火檢測, 并在保證準確率的前提下, 實現實時性檢測, 一直都是一個熱點的研究課題.
采用對現場的視頻流實時分析來檢測煙火目標的方式, 可大大縮短預警響應時間、增大檢測范圍. 近年來, 基于圖像的煙火檢測研究取得了豐碩的研究成果.Machine learning[1]使得基于圖像識別的煙火檢測技術取得較大進步[2], 但是該方式的識別性能受到所設計的手工特征質量的影響[3]. 深度學習作為機器學習的分支, 在基于圖像的煙火識別中應用廣泛[4], 它使用具有精準標注的數據集訓練深層神經網絡,使模型在求解過程中自動學習目標的特征. 目前, 以先產生候選區再進行分類的RCNN[5]為代表的兩階段算法及直接輸出類別和定位的YOLO 系列[6]為代表的一階段算法是目標檢測主流算法. 通常,兩階段算法檢測精度高檢測幀率低. 單階段算法檢測幀率高,能夠滿足實時性的要求.基于監控視頻的油田作業現場煙火檢測, 對實時性要求較高, 所以本文選擇YOLOv4 為基礎算法.
YOLOv4 作為通用的目標檢測算法, 直接應用于油田作業現場的煙火檢測, 其檢測效果并不理想. 主要由于視野較開闊, 距離較遠導致的煙火目標在監控視頻中占比較小, 現有算法漏檢誤檢嚴重. 并且對油田復雜背景的干擾不能很好處理. 例如, 實際監控視頻中, 發生火災的區域范圍比較小, 很難從復雜背景中識別出來. 場地中具有大量類似煙火的區域, 比如黑色的油、深色的樹、紅色的工裝等, 都可能造成檢測失敗.
針對油田作業現場煙火特征, 本文在YOLOv4 深度學習算法的基礎上, 提出了改進的YOLOv4 煙火識別模型. 該算法模型改進了特征融合網絡模塊, 將骨干網提取的淺層特征進一步融合, 并使用多尺度的金字塔卷積PyConv[7]替代標準卷積, 增強對不同層細節的提取能力, 增大局部感受野[8], 增強了小目標[9]的特征描述能力, 提高了小目標的檢測精度. 同時在骨干網絡中加入通道和空間注意力機制CBAM[10], 增強網絡對重要特征的提取能力并忽略特征中的噪聲信息, 以應對復雜背景, 同時降低計算量, 增強網絡對復雜背景下煙火的識別能力, 提高分類準確率.
抽象語義在網絡淺層較少, 但紋理、坐標等信息豐富; 網絡深層含有較多的抽象語義信息, 但紋理、坐標信息則比較少. YOLOv4 中, FPN 網絡[11]將較強的語義特征自頂向下傳遞用于增強淺層類別的判定信息,PAN 模塊[12]將淺層較強的紋理、坐標信息通過自底向上的方式向上傳遞, 增強深層定位能力. 在識別小目標時,由于網絡深層小目標特征信息較少, 造成對小目標的漏識別和誤識別. 為了強化網絡對較小目標的檢測能力, 充分利用淺層信息本文重新設計了FPN+PAN層, 改進了YOLOv4 算法, 如圖1(a)中的Neck-2 部分.

圖1 YOLOv4 結構及組成單元
從Neck 部分可以看出, 本文新加入了兩個包含更多位置、紋理信息的Residual Block[13]殘差單元模塊提取的淺層特征信息層. 將淺層特征進一步和高層語義特征融合, 將包含更多位置、紋理信息的淺層特征和含有足夠語義信息的深層特征進行融合. 加強網絡對小目標的判別能力, 在具有較準確語義信息的同時,為小目標的精準定位提供更多信息依據. 讓算法能夠準確識別較小的煙火目標.
如圖2 所示, 當輸入圖片大小為608×608 時, 本文在原模型融合了19×19、38×38、76×76 的基礎上, 進一步融合了152×152 和304×304 大小的特征, 將更多的低層信息融入路徑聚合網絡.

圖2 FPN+PAN 特征融合
最后, 使用整合后的特征圖預測目標框、類別概率、置信度.
卷積層是卷積神經網絡的基礎構建模塊, 卷積構建塊的改進往往會增強特征的提取能力. 標準卷積(單一空間大小和深度的單一類型的卷積核)不具備提取多尺度特征的能力[14]. 而金字塔卷積(如圖3 所示)包含不同大小和深度的卷積核, 可以在不增加計算量的情況下, 增大局部感受野, 增強不同尺度目標的特征提取能力, 進而提高網絡性能. 因此, 為了增強局部特征的提取能力, 解決下采樣中細節信息丟失的問題. 本文在網絡特征融合模塊Neck-1、Neck-2 部分, 使用金字塔卷積替代標準卷積.

圖3 金字塔卷積PyConv
金字塔卷積PyConv(如圖3 所示), 包含一個核(kernel) 金字塔, 其中每個層涉及大小(自下而上增大)和深度(隨卷積核的增大而減小)不同的filters, 他們能夠捕獲場景中不同層的細節. PyConv 使用多尺度卷積核對輸入特征進行提取. PyConv 會將輸入特征分成多個組并進行獨立的卷積運算.

假設每層輸出特征的深度一致, 那么每層的參數量和計算復雜度會呈現出較為均勻的分布. 因此, 可以得出PyConv 與標準卷積的計算復雜度近似. 如圖1(a)所示, 在網絡的Neck 部分中的PyCBLn 模塊, 其中PyC 代表的就是金字塔卷積.
特征網絡越深, 背景噪聲越明顯, 為減少復雜背景噪聲的干擾, 并減少計算量, 本文在backbone 的每個殘差單元模塊添加通道和空間注意力CBAM (如圖4所示). 注意力機制能夠對特征圖中重要的通道和空間特征增強, 使得網絡在訓練過程中能抓住目標的重點特征進行學習. 采用CBAM 模塊可以使網絡學習到特征的每個通道的重要程度以及特征的每個空間位置的重要程度, 從而實現空間和通道的自適應調整, 優化網絡的權重, 提升網絡性能. 進一步提高識別的準確率.


圖4 CBAM 注意力結構圖


將CBAM 模塊嵌入至YOLOv4 網絡的骨干網每一個CSP 模塊的每個殘差單元的shortcut linear 融合之前(如圖5 所示). 由于CBAM 注意力模塊本身是對重要通道和空間特征進行增強, 因此將注意力嵌入到網絡的backebone 中一般可以取得很好的效果.

圖5 嵌入CBAM 注意力
為了使先驗框的大小更適合煙火數據集, 提升檢測的精度. 本文采用K-means++聚類方法[15], 根據自建煙火樣本數據集, 計算anchors 值. 步驟如下:
1)數據預處理: 異常值或噪聲數據會對平均值產生很大影響, 并導致中心偏移. 因此, 我們對數據的異常點進行處理, 篩除離群的點.
2)根據數據集中目標大小進行邊界框聚類分析.使用K-means++聚類算法對煙火數據集中目標的anchor box 進行聚類分析, 首先選取任意一個目標框的值作為初始聚類中心, 其次, 計算所有樣本與現有聚類中心之間的距離D(x), 并算出任意樣本成為下個聚類中心點的概率P(x)如式(9):

然后再使用輪盤賭選擇法找出下個聚類中心點.重復上述計算P(x)和D(x)的步驟直至得到K個錨框大小. 最后循環重復計算每個樣本點到K個聚類中心點的距離, 將該樣本點劃分給距離最小的聚類中心的類別并更新聚類中心點, 直至獲得的Anchorbox 大小不再變化.
損失函數用來評估模型的預測值和真實值的距離程度, 可通過最小化損失函數求解和評估模型. 本文模型中用到的損失函數由3 部分組成: 類別損失、置信度損失、回歸損失. 回歸損失CIoU loss 如式(10):

其中, ρ2(b,bgt)表示預測框的中心點和真實值之間的歐式距離c表示同時包含預測框和真實框的最小閉合區域的對角距離. α和v分別為式(11)和式(12):

YOLOv4 總的損失函數公式為式(13):

其中,S2表示預測特征為S×S大小的網格, 每個網格單元會對應B個Anchor, 每個Anchor 通過模型推理計算得到相應邊界框, 最后會得到S×S×B個邊界框. 若預測框中無對象(noobj), 那么只需計算預測框的置信度損失. 其置信損失使用交叉熵誤差, 并分為兩部分: 有對象(obj)和無對象(noobj). 無對象的損失添加了權重系數 λ, 相當于降低了該部分的貢獻權值. 分類損失也使用了交叉熵誤差, 當第i個特征網格的第j個Anchor負責預測某個實際目標時, 則由該錨框生成的預測框計算分類損失值.
實驗設備的操作系統為Ubuntu 18.04, i7-6700 3.4 GHz CPU、NVIDIA CTX 3080Ti GPU, 使用PyTorch 框架.
煙火數據集通過網絡爬蟲工具從網站獲取, 如表1所示, 根據“火”“濃煙”“油田”等關鍵字從百度圖片爬取的5 000 張圖片, 構成本次實驗的訓練集. 訓練集數據分為煙火圖片和非煙火圖片 (如圖6所示). 由根據相應關鍵字爬取的500 張煙火數據和250 張非煙火數據構成驗證集. 從網絡視頻庫獲取煙火視頻和非煙火視頻,進行視頻幀提取獲得5 000 張圖像, 構成本次實驗的測試集.

表1 數據集描述 (張)

圖6 訓練集部分數據
實驗使用準確率(accuracy)即正確識別煙火或非煙火的概率、誤檢率Pf即在無煙火發生時卻判定為有煙火的概率、召回率(recall)、平均精度均值(mAP)和檢測速度FPS 作為實驗結果的評價指標.召回率表示樣本中有多少正樣本被正確預測. MAP 可以全面評價實驗結果精度和查全率. 此外FPS 也是本實驗的重要評價指標之一. 準確率、誤檢率及召回率公式如下:

其中,Tp表示被模型預測為正類的正樣本數量,Tn表示被模型預測為負類的負樣本數量,Fp表示被模型預測為正類的負樣本數量,Fn表示被模型預測為負類的正樣本數量.
訓練中將模型初始學習率置為0.001, 將影響梯度下降到最優的動量因子置為0.935, 將防止過擬合的權重衰減正則系數置為0.0005, 共訓練6000 個批次. 圖7為訓練過程中的Loss 和MAP 變化曲線.

圖7 損失和MAP
為了綜合評估基于改進YOLOv4 算法的煙火識別效果, 本文利用驗證集圖像數據進行煙火識別測試, 以驗證本文模型的可靠性, 實驗結果如圖8 所示.
圖8(a)中, 在煙火目標距離較遠且目標較小時, 能夠準確檢測到目標.在圖8(b)中, 圖片包含大片暗黑色樹木等類煙區域及紅色滅火器、黃色抽油機等類火區域仍能夠準確識別煙火目標.圖8(c)為其他情況監測結果.

圖8 模型驗證結果
為了證明改進算法的有效性, 在自建煙火數據集上, 使用改進后的算法和原算法分別進行實驗, 并使用準確率、誤檢率、MAP、FPS 等指標進行比較. 其實驗結果如表2 所示.
從表2 中可以看出, 本文算法和原算法相比, Fire分類和Smoke 分類的準確率分別提高了(5.3%, 6.6%),誤檢率分別降低了(1.1%, 1.6%),MAP值均優于原算法. 本文提出的算法模型顯著提高了對于較小煙火目標的識別能力以及對于類似煙火目標的甄別能力. 能夠在復雜的油田作業現場背景下過濾類似煙火目標的干擾并準確地識別出較小的煙火目標. 本文算法以43 fps的檢測速度, 在滿足煙火檢測的實時性的要求下, 獲得了平均97%的準確率和平均1.2%的誤檢率, 實驗證明了本文算法在煙火實時檢測中的可行性.

表2 模型性能對比
為了驗證改進算法的可行性, 對本文改進的部分進行了多組消融實驗. 消融實驗均使用相同的訓練數據集和測試集, 相同的超參數設置. 消融實驗結果如表3所示.
通過消融實驗, 可得出以下幾點結論, 首先, 從表3中第2 組實驗可看出在重新設計特征融合部分后, 在模型特征融合層引入前兩個殘差塊提取的細節信息,提高了淺層信息的利用率, 使其平均精度均值有了3 個百分點的提升, 其次從第3 組實驗中可得出, 在添加CBAM 后, 評價指標MAP同樣得到了改善, 其值增加了1.72%. 說明CBAM 可以有效地抑制噪聲, 強化通道和空間中目標的信息. 最后一組實驗中, 在FPN 和PAN 網絡結構中, 使用PyConv 替代標準卷積, 減少細節特征的丟失, 增大局部感受野, 豐富了特征圖的信息,其MAP值較上組實驗提升了1.5 個百分點.

表3 消融實驗結果
針對油田作業現場復雜背景下的煙火小目標檢測難的問題. 本文基于YOLOv4 網絡模型, 并結合CBAM注意力機制、特征融合、金字塔卷積等方式進行優化和改進. 使用自建煙火數據集, 并使用K-means++聚類算法對煙火數據集進行錨框調整. 實驗結果表明, 改進后的YOLOv4 檢測模型能夠滿足實時檢測的需要, 與原模型相比, 提高了準確率、MAP, 有效地改善了油田作業現場場景中通用檢測器性能不足的問題. 本文針對油田有紅色工裝, 黑色油, 易與火和煙混淆等問題制作了針對該場景的數據集, 如果應用于其他場景, 例如學校、工廠等, 則需要對數據集做改變, 并重新訓練模型.