張耿城,梁爾祝,魏少華,閆大洋,耿圖禺
(1.鞍鋼礦業(yè)爆破有限公司,遼寧 鞍山 114046;2.北京科技大學 自動化學院,北京 100083)
佩戴安全帽是爆破作業(yè)施工人員為有效保護自身安全,減少事故發(fā)生的有效防護措施之一。但目前對爆破工人是否佩戴安全帽的檢測方式耗時耗力,多是通過管理人員巡檢,或者人為觀察監(jiān)控視頻,存在監(jiān)督性弱和監(jiān)督效率較低等問題。同時,硅膠單點傳感器和壓力傳感器結合ZigBee定位技術的傳感器識別方法存在可行性和適用性差等缺點,因此文中不予考慮。
近年來,隨著圖像處理技術的飛速發(fā)展,國內外研究學者在安全帽自動化識別上做了諸多創(chuàng)新性研究。基于圖像處理算法,現(xiàn)有的安全帽檢測方法主要分為兩大類:一類是基于傳統(tǒng)圖像處理算法,如劉曉慧等通過人臉膚色定位,之后利用SVM檢測安全帽;何慧敏等使用卷積神經網絡檢測行人,對行人部分做HSV空間變換,得到安全顏色的區(qū)域,再對圖像做圓Hough變換,檢測到的圓形物體即為安全帽;賈峻蘇等將方向梯度直方圖、顏色特征和基于塊的局部二值模式直方圖結合成特征向量,再使用SVM檢測安全帽。另一類則是基于深度學習算法,此類算法又分為兩種,一種是“two-stage”算法,稱為兩階段檢測模型,其先生成候選框,再對候選框做進一步的邊框回歸和分類預測,如R-CNN系列、R-FCN等;第二種是“one-stage”算法,這是一種端對端的深度學習算法,直接進行回歸并分類生成檢測結果,如YOLO、SSD等算法??傮w而言,一階段的算法速度較快,但精度相比兩階段的算法低。
針對工程爆破現(xiàn)場的特殊環(huán)境和使用要求,本文設計了基于YOLOv3的爆破現(xiàn)場安全帽佩戴檢測算法并應用到爆破現(xiàn)場實時監(jiān)控中。首先,利用礦山開采爆破現(xiàn)場的視頻數據和若干張爆破現(xiàn)場拍攝的圖片,對其進行進一步處理,再通過圖片爬蟲獲得部分圖片,將兩部分結合,制作安全帽佩戴檢測數據集;其次,綜合one-stage和two-stage方法的特點及性能,選擇YOLOv3為算法主體,將YOLOv3模型應用到爆破現(xiàn)場安全帽檢測數據集,訓練和調參后應用到爆破現(xiàn)場視頻流安全帽檢測中。實驗結果表明,所提算法在保持較高精度的基礎上提高了檢測速率,能實時有效的進行安全帽佩戴檢測。
利用爆破現(xiàn)場視頻數據和拍攝的圖片,對礦山開采中的爆破場景進行分析,該場景下安全帽識別的特性可以簡單概括如下:
(1)安全帽在整體畫面中是一個很小的目標,當目標對象所屬的檢測框距離拍攝點很遠時,其對象框的寬高只在其中占極少像素;
(2)礦山開采過程中爆破場景的檢測背景非常復雜,目標對象特征和采礦相關的物品、建筑機械部件等存在相似性,導致經常出現(xiàn)誤檢。
通過對爆破場景進行分析,在設計爆破場景下安全帽的檢測系統(tǒng)時,采用目標檢測中常用的一步檢測方法,即無需生成候選框,直接采用端到端的學習算法進行分類和回歸,直接檢測出是否佩戴安全帽?;诖耍疚囊员片F(xiàn)場人員的頭部和佩戴的安全帽作為目標對象框,從兩點進行考慮:將頭部信息和人體信息進行替換;由于爆破現(xiàn)場檢測的復雜性,相比頭部,人體更容易出現(xiàn)遮擋,且人體因活動可能出現(xiàn)各種各樣的姿態(tài)變換,增加了檢測模型對人體的識別難度,使得模型對人體的檢測精度降低,而頭部區(qū)域包含的背景噪音較少,受人體柔性影響較少。因此,本文目標對象框含有兩個類別,分別是爆破場景下未佩戴安全帽人員頭部和已佩戴安全帽的爆破工人頭部,對這兩類目標建立數據集,將其作為卷積神經網絡模型的訓練集,得到用于對爆破現(xiàn)場人員進行安全帽佩戴識別的模型,以同時檢測佩戴安全帽的爆破工人和未佩戴安全帽的工人。
選擇檢測模型時,需要考慮性能和檢測效率,而YOLOv3模型同時滿足這兩個條件,其檢測性能和檢測效率都相對較高,因此本文選擇的檢測模型為YOLOv3。
YOLO的核心思想就是把目標檢測轉換為一個回歸問題,利用整張圖作為網絡的輸入,通過神經網絡得到邊界框(bounding box)的位置及所屬類別。隨著深度學習目標識別算法在各領域的不斷發(fā)展,其均具有良好的應用價值和效果。在一系列深度學習算法中,F(xiàn)aster-RCNN算法、YOLO算法、SSD算法應用最為廣泛。對于識別算法而言,其準確率、識別速度、召回率往往難以兼顧,在提高準確率的同時,算法的識別時間相對較長。本文基于以上三種算法,通過三種評價指標對其進行比較和總結,見表1所列。
表1 Faster-RCNN、YOLO、SSD算法對比
從表1可以看出,YOLOv3的識別速度最快,主要原因是將目標區(qū)域預測和類別預測整合于一個神經網絡中,在確保較高準確率的情況下,識別速度更快。
從YOLOv1到YOLOv3,每一代算法性能的提升都與骨干網絡的改進密切相關,從YOLOv1的GoogleLeNet到YOLOv2的DarkNet-19,再到YOLOv3的DarkNet-53,backbone的改進都使得算法性能得到進一步提升。
設計的DarkNet-53網絡由53個DBL卷積單元構成,每個卷積單元由1×1和3×3的卷積層構成,為防止過擬合,又在卷積層后加入了一個批量歸一化層和一個Leaky ReLU。與YOLOv2中的DarkNet-19對比,發(fā)現(xiàn)DarkNet-53主要做了如下改進:
(1)未采用最大池化層,用stride=2的卷積層進行下采樣;
(2)為防止過擬合,在每個卷積層后加入BN層和1個Leaky ReLU;
(3)引入殘差網絡,提取更深層的特征,避免梯度爆炸或消失;
(4)將網絡的中間層和后面某一層的上采樣進行張量拼接,達到多尺度特征融合的目的。
YOLOv3的網絡結構模型如圖1所示。
圖1 YOLOv3網絡結構
為了進行多尺度對象檢測,YOLOv3基于金字塔特征圖與FPN中特征融合的思想,利用小特征圖識別尺寸相對較大的物體,利用大特征圖識別尺寸相對較小的物體,從而達到多個尺度信息位置坐標的分類和預測。
輸出尺度特征圖的數量和尺度的變化(先驗框的尺寸需要相應調整)。YOLOv2采用維度聚類的思想,通過k-means聚類得到先驗框的尺寸。YOLOv3同樣采用了這種方法,對數據集中每種下采樣尺度預定了3種不同的先驗框,共得到9個不同大小的先驗框。其最終獲得的先驗框數量比YOLOv2多,特征提取效果更好。
在YOLOv3中,基于COCO數據集得到的先驗框分別是:(10,13),(16,30),(33,23),(30,61),(62,45),(59,119),(116,90),(156,198),(373,326)。但在本文場景下,其先驗框并不適用于礦山開采過程中爆破場景下建立的安全帽檢測數據集。在此場景下,使用k-means聚類分析算法對自制的爆破作業(yè)安全帽檢測數據集重新進行聚類分析,得到 9 組先驗框,分別為:(5,5),(6,7),(7,9),(10,11),(13,15),(19,21),(27,31),(43,50),(79,93)。
在分類預測過程中,對每個標簽使用BCE Loss進行類別預測;在邊界框預測過程中,無需使用softmax對每個目標框進行分類;使用邏輯回歸預測每個邊界框的物體置信度。
深度學習是典型的數據驅動方法,模型最終的檢測性能極大程度依賴于訓練集的質量和數量。本文針對爆破作業(yè)中工人安全帽檢測這一問題,制作了本項目的數據集。
3.1.1 數據獲取
數據來源主要有兩部分:網絡數據,通過百度、Google圖片爬蟲得到;爆破現(xiàn)場拍攝的照片或者視頻錄像。本文首先通過爬蟲方法獲取部分圖片,對其進行數據清洗后,去掉非ROI和相似圖片,將其作為輔助數據;然后把從現(xiàn)場獲取的視頻錄像按照一定的幀率將視頻分幀,保存為原始的爆破工人安全帽檢測圖像(主要來源)。兩部分樣本數據的選擇主要從以下幾方面進行:
(1)獲取多種尺度的目標對象,增加小樣本對象的比重;
(2)視頻角度多樣,采取不同視角,包括俯視、側視、仰視等;
(3)目標對象的多樣性,多姿態(tài)的目標對象,比如屈姿、蹲姿等;
(4)加入不同天氣情況下的目標樣本,如雨天、晴天,以及不同光照環(huán)境下的目標對象樣本。
圖2所示為本文在礦山開采過程中建立的爆破作業(yè)場景下的現(xiàn)場人員安全帽檢測數據集。
圖2 安全帽檢測樣本圖樣示例
3.1.2 數據預處理
對爆破作業(yè)場景下的現(xiàn)場人員安全帽檢測數據集進行數據預處理,包括數據的歸一化處理、數據格式轉換及數據增強。
由于數據集的主要來源是從視頻中截取,所以需要借助OpenCV開發(fā)庫將視頻格式文件轉化為圖片PNG格式。又因為數據的來源不同,網上爬取得到的數據和從視頻中得到的圖片分辨率不相同,因此首先需要對上述兩種數據進行轉化,得到分辨率一致的數據。
針對檢測對象多尺度問題,在訓練過程中應該加入多種尺度的目標對象樣本以提高YOLOv3模型對多尺度對象檢測的魯棒性;針對視頻拍攝的角度問題、環(huán)境影響等因素對數據進行增強處理,如隨機的色彩抖動數據增強策略,或者對訓練樣本加入噪聲擾動,來提高訓練的魯棒性。圖3所示為加入椒鹽噪聲的預處理圖像。
圖3 加入椒鹽噪聲的預處理圖像
3.1.3 數據篩選
由于爬取得到的數據和從視頻中截取的圖片存在大量重復,且不包含感興趣區(qū)域的圖片(ROI),即存在不包含爆破現(xiàn)場工人(或者行人)以及安全帽等主要部分,再或者背景區(qū)域極大,目標主體基本消失,為避免增加訓練量,需要過濾這部分數據。本文主要應用以下3種方法進行數據清洗:
(1)用已經成熟的檢測算法,如Faster R-CNN算法進行初步篩選,過濾大部分非感興趣區(qū)域圖片;
(2)采用深度學習模型,如ImageNet預訓練模型進行特征提取,去掉重復率極高的圖片;
(3)手動篩選,對于剩下的部分圖片進行手動剔除。
3.1.4 數據標注
本文數據集標注工具采用開源工具LabelImg,使用該工具對爆破作業(yè)場景下的數據集進行標注和分類,將標注數據中的目標對象分為兩個類別:佩戴安全帽的目標樣本標注為safety-hat類別;未佩戴安全帽的目標對象標注為person類別。標注界面如圖4所示。標注完成后,生成XML文件,用以保存每個目標對象GT框標注信息,包括圖片尺寸、目標位置和類別信息等。
圖4 LabelImg標注界面
因為數據量過大,手動標注費時費力,因此采用數據回灌的方法。利用標注好的一部分數據訓練一個比較粗糙的檢測模型,精度雖然不高,但可以定位目標的大致區(qū)域,然后手動調整bounding box位置,可大大提高標注效率,同時還能減少在標注過程中出現(xiàn)手抖造成的小圈問題。
本文使用服務器作為實驗設備,服務器搭載2塊NVIDIA GeForce RTX 2080Ti顯卡,每塊的顯存容量為11 GB;服務器運行Ubuntu 18.04.2 LTS操作系統(tǒng);主要編程語言為Python;深度學習框架采用tensorflow1.6.0;相關輔助工具包為numpy、OpenCV等。
本文選用YOLOv3算法官網提供的DarkNet預訓練權重為初始化參數,然后使用本文制作的爆破工人安全帽數據集進行參數微調,得到模型訓練準確率最高的參數模型,用其對圖片進行檢測。本文部分實驗參數設置見表2所列。
表2 實驗部分參數設定
經過500輪的迭代訓練,模型達到收斂,此時得到最佳訓練效果,其mAP達到90.2%。利用得到的模型對未經過訓練的圖像進行預測。預測分為兩部分:一是隨機選取測試數據集中的圖片對爆破作業(yè)人員和安全帽在不同背景環(huán)境下進行檢測結果分析,檢測結果如圖5所示;二是對爆破現(xiàn)場拍攝的視頻進行檢測,檢測結果如圖6所示。
圖5 預測結果示例
圖6 視頻流檢測結果
出于對爆破行業(yè)中礦山開采工作人員安全性的考慮,同時提升安全監(jiān)督效率,本文基于YOLOv3深度學習算法對其進行安全帽佩戴檢測。根據現(xiàn)場的實際情況,使用爆破現(xiàn)場錄制的視頻或者圖片作為主要數據集,利用YOLOv3模型,采用k-means算法得到適應的先驗框對其進行檢測。實驗結果表明,基于YOLOv3模型的mAP達到了90.2%,在隨機選取的現(xiàn)場圖像或者錄制視頻進行測試都得到了較好的檢測效果,表明了模型訓練的有效性。該方法能為礦山開采過程中檢測工作人員是否佩戴安全帽提供可靠的監(jiān)督信息,既可有效避免事故,又可提高安全管理的時效性。