李小玄,董 雷,2
(1.武漢郵電科學研究院,湖北武漢 430000;2.武漢理工光科股份有限公司,湖北武漢 430000)
近年來,城市中的安全隱患日益增多,各類災害事故呈現出風險高、危害大的特點。安全隱患日益增多的主要原因是城市規模不斷擴大導致的人口大量聚集,因此社會公共安全需求日益倍增。隨著城市化進程的持續進行,城市高層、地下、商業綜合體、地鐵、隧道等建筑發展迅猛,導致公安消防局現役防滅火力量嚴重不足,消防官兵長期疲勞作戰,火災防控壓力巨大。國務院《促進大數據發展行動綱要》(2015)中指出要推動智慧消防城市救援平臺的建設和發展。“要深入推進消防信息化建設,積極建設‘智慧消防’”是2017 年1 月全國消防工作會議上中央政法委書記郭聲琨強調的重點。在此背景下智慧消防城市救援平臺項目應運而生,利用圖像識別技術對建筑圖紙上的消防器材圖標進行定位識別,能更好地發揮智慧消防城市救援平臺的作用。
目前國內圖像識別的研究方向大多是關于數字識別的,如對數字儀表[1]、試卷答題卡[2]、手寫試卷分數的識別;射頻指紋識別的研究[3];人臉識別算法如正交人臉特征學習算法[4]、二階段性別分類算法[5];車牌識別如依賴邊緣特征的車牌識別[6],算法如色彩遷移與正則化約束去霧算法[7];農產品蟲害如玉米螟蟲害的圖像識別方法[8],圖像識別中儲糧害蟲的特征提取[9];缺陷檢測如游樂設施焊縫缺陷檢測[10],鈑金件表面缺陷檢測[11]以及醫用病理如腹膜腔脫落細胞病理圖像識別[12]等方面,但對于消防方面深度學習的應用較少。應用方向多是對于依賴卷積神經網絡的煙霧識別來識別森林火災[13],通過讀取視頻圖像來進行煙霧識別[14],識別方法上多是對于生成對抗網絡和卷積神經網絡[15]、顏色統計特征和小波變換方法[16]的對比研究,用在建筑圖紙上消防器材的處理與識別目前較少。
YOLO 算法的基本思想可以通過一個例子來理解。例如輸入一張64×64的圖片,YOLO 算法會將輸入的圖片用網格分成64×64的單元格,如果單元格和真實檢測框中目標的中心坐標重合,就由這個單元格來預測目標。YOLOv3 算法中每個目標都擁有3 個對應的邊界框來定位,YOLOv3 算法就是使用邏輯回歸的辦法來確定在三個邊界框的回歸框。所以說YOLO 是一種end to end的目標檢測模型。
池化層和全連接層不包含于YOLOv3的整個結構中。Darknet-53 網絡是YOLOv3 主干結構,同時全卷積的結構是YOLOv3所有預測支路所采用的結構。
通過圖1 可以看出YOLOv3的基本組件是DBL。Batch Normalization(BN)和Leaky Relu Darknet緊跟在Darknet的卷積層后。在YOLOv3 中除最后一層卷積層外,最小組件由BN 和Leaky Relu 共同構成,而最小組件已經是卷積層不可分離的一部分。5 個resn結構分別為res1、res2、…、res8,其組成了YOLOv3的主干網絡。resn結構中的n代表數字,表示由n個res_unit 組成了res_block,YOLOv3的大組件就由resn結構組成。YOLOv3 和YOLOv2的區別在于后者沒有殘差結構,YOLOv3 借鑒了ResNet的殘差結構使得YOLOv2的Darknet-19 改進為YOLOv3的Darknet-53。YOLOv3 網絡結構更深,就是因為使用了這種殘差結構。從圖1 最下方可以清楚地看到DBL,它也是構成res_block的基本組件。

圖1 YOLOv3的整體結構
YOLOv3 算法使用的特征提取網絡是一個由殘差單元疊加而成的53 層的卷積網絡。Joseph Redmon的實驗證實了,YOLOv3 算法中的Darknet-53 模型很好地平衡了識別目標物體的效率和準確度。YOLOv3追求精度的同時保證了實時性(fps>60),而不是盲目的追求效率。從圖2 可以看出,YOLOv3算法要進行5 次尺寸變換。

圖2 Darknet-53骨干結構
損失函數(Loss Function)是掌握YOLO的重要關鍵。YOLO 系列文獻里面只有YOLOv1 明確提到了損失函數的公式,所用的損失函數并沒有在YOLOv3的文獻里明確提出。sum-square error的損失計算方法是YOLO 系列文獻中唯一提到損失函數公式。畫出Loss Function 曲線需要獲取(xi,yi)、(wi,hi)、class、Confidence 這四個參數。損失函數應該由四類不同的關鍵信息各自確定。Loss Function 因此可以作為衡量模型訓練成果的標準。


步驟一,權重下載。
從官方網站上下載權重數據放到YOLOv3 算法程序的主目錄下,然后使用主目錄下的conver.py 文件進行轉換,命令如下:

就能得到權重文件。最后權重文件放在model_data 文件夾里。
步驟二,生成訓練文件。
訓練文件每一行對應著一個樣本圖片,代碼的開頭是圖片的路徑,后面是對應目標的4個參數坐標。
步驟三,修改YOLOv3.cfg。
有三處需要修改的代碼,Classes 對應的YOLOv3.cfg 是數據集的類別,filters的數值需要通過計算公式filters=(5+classes)*3 來計算。
步驟四,利用k-means.py 生成一個先驗框。
先驗框的作用就是在沒開始訓練之前決定模型需要檢測的物體的大小,然后模型可以再利用邊界框對回歸框進行調整。
步驟五,修改yolo_classes.txt 文件。
這個yolo_classes.txt 上顯示的就是項目要識別的類別和對應的名稱。本項目有4 種需要識別的器材,分別為煙感、溫感、手報(手動報警裝置)、消報(消火栓),因為預訓權重練文件只能識別英文,所以該文用yangan、wengan、shoubao、xiaobao的拼音來代表4 種不同的消防器材。
步驟六,訓練模型。
把train.py中的一些相關路徑設定好,如圖3所示。

圖3 相關路徑設置
步驟七,繪制loss 曲線。訓練完成后,可以通過日志文件來畫訓練日志圖,文中一共訓練了3 次數據集,數據集圖片的數量分別為500、750、1 000 張,訓練過程一共生成了3 張loss 曲線圖,圖中的val_loss 代表驗證集的損失值,train_loss 代表的是訓練集的誤差值,從圖4 中可以看出train loss 曲線在隨著test loss 曲線不斷下降,這說明模型的訓練過程非常順利。隨著訓練集數據的增多,loss 曲線下降的趨勢在逐漸變快,這說明模型識別目標物體的準確度與數據集圖片的數量有關,數據集的數據越多,模型在訓練集上的表現就越好。第三次訓練完成后,模型對目標物體進行識別的準確率達到了99%。

圖4 loss曲線圖
使用Python 調用經過以上的步驟訓練出來的權重文件,對建筑圖紙上的四類消防器材圖標分別進行識別。識別圖像結果及其位置輸出分別如圖5 和圖6 所示。

圖5 消防圖標識別圖

圖6 消防圖標位置輸出圖
圖5 和圖6 說明了消防器材的自動識別研究方案能夠準確地識別建筑圖紙上的消防圖標并輸出位置坐標。本次實驗說明了,利用YOLOv3 算法進行自訓練的方法來實現消防器材的自動識別是切實可行的,模型識別效果良好,達成了該文的研究目的,能提高智慧消防城市救援平臺數據錄入工作的效率。
為完成建筑圖紙上消防器材圖標的識別工作,文中使用了深度學習方面的相關知識。基于Python語言,使用基于Darknet 框架中的YOLOv3 算法對數據集的多次訓練,使得該文的研究方案能同時識別4 種不同的建筑圖標,識別結果在準確性和高效性方面顯得極為突出。調用訓練好的權重文件對建筑圖紙上的消防器材圖標進行識別,并輸出其位置坐標,最終實現了對建筑器材消防圖紙上消防器材圖標的自動識別研究,為后續城市智慧安防平臺的建筑圖紙信息錄入工作,指揮調度系統在火災消防行動中開展精準的指揮工作奠定了基礎。