趙學軍李建
中國礦業(yè)大學(北京) 機電與信息工程學院,北京 100083
煤炭是我國的主要能源,煤礦行業(yè)肩負著保障我國能源安全和民生的重任。 如何保障煤炭產(chǎn)品質(zhì)量和進一步提升煤礦的安全生產(chǎn),是煤礦行業(yè)一直備受關注的核心問題[1-2]。 從煤礦中直接開采出未經(jīng)任何處理的原煤,由于其形成過程的復雜因素,或多或少含有影響煤炭品質(zhì)的矸石。 為了提高煤炭純度、改善煤炭質(zhì)量,大多數(shù)煤礦企業(yè)會設置選煤廠分選原煤[3-4]。 在選煤廠的所有工序中,選矸是不可或缺的步驟,其主要目標就是將大塊矸石從煤塊中分選出來。 目前,國內(nèi)大部分煤礦依舊使用人工排矸的方法,而人工分選存在工作環(huán)境惡劣、工人勞動強度大、分選效率低以及安全事故頻發(fā)等問題。 人工排矸的工作方式已經(jīng)不能滿足國家倡導的建設綠色礦山、智慧礦山發(fā)展要求,急需自動化程度高、檢測效果好的煤矸石檢測方法[5]。
近年,隨著計算機技術和人工智能技術的快速發(fā)展,賦予了機器具有類似于人類的視覺分析能力,即機器視覺技術。 目前,機器視覺技術已在社會生產(chǎn)生活的各個領域得到廣泛應用,包括工業(yè)[6]、農(nóng)業(yè)[7]、醫(yī)學[8]、安防、航空航天、軍事等領域,提高了各自領域的效率。 目標檢測是機器視覺領域的四大主要任務之一,是近年備受關注的前沿研究方向。 目標檢測是將定位和識別合二為一,既要檢測出物體在圖像中的位置,還需要識別出物體的類別。 傳統(tǒng)目標檢測主要分為3 步:區(qū)域選擇、特征提取、分類回歸[9],因此存在算法上的瓶頸。例如,區(qū)域選擇策略效果差,事件復雜度高,嚴重依賴棘手的特征工程提取數(shù)據(jù)集的特征,無法針對任務進行端到端的學習[9],并且任務的泛化能力有限,制約了算法性能,在一定程度上阻礙了技術的發(fā)展與應用。
近年,深度學習得到蓬勃發(fā)展。 通過將深度學習引入到目標檢測任務中,使得目標檢測這一機器視覺領域得到了質(zhì)的飛躍,無論是在檢測精度還是算法復雜度上,都大大領先傳統(tǒng)檢測算法。 本文旨在利用目標檢測原理,通過機器視覺技術實現(xiàn)煤與矸石混合體中矸石的智能檢測,可以為選煤環(huán)節(jié)的分揀機器人提供算法支撐。 選煤廠視覺環(huán)境復雜,受光照條件制約以及煤塵粉粒等干擾,導致能夠獲取的視頻圖像質(zhì)量較差,為后續(xù)基于圖像的機器視覺分析帶來了極大的挑戰(zhàn)[10]。 傳統(tǒng)基于人工主觀設計特征工程的檢測方法,如灰度閾值檢測[11-12]或邊緣檢測[13],在此任務上的表現(xiàn)不盡人意,有很大的局限性。 基于深度學習的算法,借助卷積神經(jīng)網(wǎng)絡強大的特征提取能力和非線性學習能力,能夠在煤與矸石灰度值嚴重混疊,顏色、邊緣梯度區(qū)分不明顯等場景下,進行有效檢測。 在實際應用場景下,需要實時處理攝像頭獲取的視頻序列,對檢測算法的精度和速度都有較高要求。 為了縮減模型大小,提高運行速度和改善檢測精度,本文對YOLOv3[14]算法模型的特征提取、特征融合、損失函數(shù)設計做了必要的修改,以更好地滿足實際應用需求。
出于視頻檢測算法實時性的需求,以及邊緣設備計算能力的制約,在YOLOv3 使用的骨干網(wǎng)絡(Backbone)Darknet-53 的基礎上提出輕量高效的特征提取骨干網(wǎng)絡Darknet-Squeeze。 在Darknet-53 網(wǎng)絡中有53 個卷積層,其中有23 個殘差塊(Residual)[15]結構,每個殘差塊由1×1 和3×3 的卷積層加上跳躍連接構成。 為了進一步加快模型的推理速度和縮減模型尺寸,受到SqueezeNet 模型[16]的啟發(fā),使用其中fire module 模塊的思想取代Darknet-53 中的殘差塊。 在fire module 模塊中,首先使用一個由1 × 1 卷積構成的squeeze 層來減少輸入通道數(shù),然后將輸出結果輸入到由1 ×1 卷積和3×3 卷積混合構成的expand 層。 此外,為了進一步縮短推理時間,受MobileNets 模型[17]的啟發(fā),使用3×3 的深度可分離卷積(depth-wise separable convolution)替換原來的標準3×3 卷積。表1 展示了Darknet-53 中殘差塊與改進后Darknet-Squeeze 中fire module 模塊的比較。
表1 Darknet-53 中的殘差塊與Darknet-Squeeze 中的fire module 模塊比較Tab.1 Comparison between the residual block in Darknet-53 and the fire module in Darknet-Squeeze
通過使用fire module 模塊替換Darknet-53 中的殘差塊,其余部分遵循原來的架構,得到Darknet-Squeeze 骨干網(wǎng)絡。 Darknet-Squeeze 由23 個fire module 模塊和其間的幾個負責下采樣的卷積層構成。 相比Darknet-53 骨干網(wǎng)絡,Darknet-Squeeze在保障特征提取能力的同時,極大地縮減了模型尺寸,加快了推理速度。 Darknet-Squeeze 的總體架構如圖1 所示。
圖1 Darknet-SqueezeFig.1 Darknet-Squeeze
相較于大多數(shù)目標檢測任務,煤矸石檢測任務有其特殊性。 煤矸石檢測基本上對應的是小尺度物體,且煤與矸石在顏色、紋理、形狀等特征上差異較小,增加了檢測難度。 因此,煤矸石檢測要求檢測模型能夠有效地融合各級特征,改善小尺度物體的檢測性能。 骨干網(wǎng)絡后的特征融合neck 部分,是提升不同尺度的物體檢測性能的關鍵。 因此,一個設計良好的特征融合neck 模塊對于檢測模型的整體性能至關重要。 在YOLOv3 模型的上采樣部分,使用4×4 的轉(zhuǎn)置卷積(transpose convolution)代替原最近鄰(the nearest neighbor)的采樣。 原基于最近鄰插值的采樣方式,是一種人為設計的特征工程,然而,基于轉(zhuǎn)置卷積的上采樣方式有可學習的權重參數(shù),是通過網(wǎng)絡學習的一種較優(yōu)的上采樣方法。 空間金字塔池化(Spatial Pyramid Pooling,SPP)結構[18]最早提出解決的2 個主要問題:
(1) 有效地避免需統(tǒng)一輸入圖像尺寸對圖像區(qū)域進行剪裁、縮放操作導致的圖像物體信息丟失以及形狀扭曲失真等問題。
(2) 解決了卷積神經(jīng)網(wǎng)絡對圖像特征重復提取的問題,大大提高了產(chǎn)生候選框的速度,且節(jié)省了計算成本。
在YOLOv3 中引入SPP 結構不是為了解決上述2 個問題,而是借鑒金字塔池化的思想進行多級特征圖的信息融合。 特征圖經(jīng)過局部特征與全局特征相融合后,豐富了特征圖的表達能力,有利于煤與矸石圖像中待檢測物體之間特征差異較小、小物體偏多的情況,對于檢測的精度有明顯的提升。 跟隨文獻[19]中的設置,在檢測前引入SPP 結構,采用3 個核大小分別為5×5、9×9、 13×13 的最大池化和一個跳躍連接,將經(jīng)過池化后的特征圖重新串聯(lián)到一起。 采用的SPP結構如圖2 所示。
圖2 空間特征金字塔池化結構Fig.2 Spatial Pyramid Pooling(SPP)
目標檢測器需要執(zhí)行分類和定位兩個任務,因此在訓練工程中會整合分類損失函數(shù)和定位損失函數(shù)來指導模型收斂。 但是,如果整合的兩個任務沒有做到恰當?shù)钠胶?將會導致其中一個任務受到抑制,影響模型的整體性能[20]。 實驗數(shù)據(jù)在標注過程中難免有誤標注和漏標注的情況,產(chǎn)生難訓練樣本,進而出現(xiàn)不平衡學習。 在不平衡的學習任務中,容易訓練樣本產(chǎn)生的小梯度易被難訓練的樣本產(chǎn)生的大梯度所掩蓋,從而限制了模型性能的進一步提升。 因此,為了使得模型能夠更好地學習收斂,需要重新平衡所涉及的任務和樣本。 為了更好地平衡學習分類和定位任務,采用在文獻[21]中提到的平衡L1 損失函數(shù)(balanced L1 loss)。 由于矸石檢測是一個單分類任務,所以僅在定位任務上使用平衡L1 損失函數(shù)。 在YOLOv3 中,分類和定位任務是在多任務損失的指導下被同時求解,其總體損失可表示為
式中,Lcls、Lloc、Lconf分別為分類、定位和目標置信度損失函數(shù);p、u分別為預測值和實際值;tu為對應類u的回歸結果,u≥1;v為回歸目標。
在平衡L1 損失函數(shù)中,將損失大于等于1.0的樣本叫作離群值(outliers),其他樣本叫作內(nèi)部值(inliers)。 離群值可視作難訓練樣本,會產(chǎn)生比較大的梯度值,有損訓練過程;內(nèi)部值可視作易訓練樣本,對總體梯度貢獻較小。 具體來說,每個內(nèi)部值相比離群值只貢獻了30% 的梯度[21]。 為了解決此問題,平衡L1 損失函數(shù)采取提升來自內(nèi)部值的回歸梯度,以重新平衡相關樣本和任務,從而實現(xiàn)在分類和定位任務上的平衡訓練,同時也盡量消除數(shù)據(jù)誤標注和漏標注帶來的影響。 平衡L1 損失函數(shù)的定位損失Lloc可以表示為
式中,a為控制內(nèi)部值梯度提升的因子;r為控制整體提升量的參數(shù),用于調(diào)整回歸誤差的上界,有助于目標函數(shù)更好地平衡所涉及的任務;b為用于確保式(3)兩個分支在Lb(x=1)的情況下有相同的值。
在煤矸石檢測任務中,經(jīng)常出現(xiàn)煤與矸石、矸石與矸石之間重疊遮擋的情況,加大了精確定位待檢測物體的難度。 為進一步提升煤矸石檢測的定位精度,充分考慮待檢測物體間的位置關系,將距離交并比(Intersection over Union,IoU)作為損失函數(shù)來指導模型回歸訓練。 大多數(shù)目標檢測算法中,邊界框回歸是定位目標物體矩形框的關鍵步驟,交并比是最常用的度量回歸邊界框的指標,可表示為
式中,Bgt={xgt,ygt,wgt,hgt}為目標邊界框的實際值;B={x,y,w,h}為預測的目標邊界框;ln范數(shù)用來度量邊界框B和Bgt之間的距離[22]。
在文獻[23]中,使用基于歐式距離的ln范數(shù)損失函數(shù)的前提是假設4 個坐標變量相互獨立,但實際上它們是相互關聯(lián)的,因此不是一個合適的選擇。文中提出直接使用IoU 作為損失函數(shù),可表示為
然而,LIoU損失函數(shù)僅在兩個邊界框重疊的情況下起作用,無法優(yōu)化兩個不相交的邊界框。 為了解決LIoU損失函數(shù)存在的問題,文獻[24]中提出一個廣義的IoU 損失函數(shù)(Generalized IoU,GIoU):
式中,C為兩個框最小外接矩形面積。
GIoU 損失函數(shù)在IoU 損失函數(shù)的基礎上添加了一個懲罰項,雖然GIoU 損失函數(shù)可以處理兩個邊界框不相交的情況,但當目標邊界框完全包含預測邊界框時,GIoU 損失函數(shù)會退化為IoU 損失函數(shù),導致訓練過程收斂慢。 為了解決GIoU 損失函數(shù)存在的不足,文獻[25]提出一種距離IoU(Distance-IoU,DIoU)損失函數(shù),同時考慮兩個框的重疊面積和中心的距離兩個幾何因素來加快收斂速度和回歸精度,可表示為
式中,b、bgt分別為邊界框B和Bgt的中心點;ρ(·)為兩個中心點間的歐式距離;c為可以同時覆蓋邊界框B和Bgt的最小矩形的對角線距離。
DIoU 損失函數(shù)通過對預測框與目標框之間的歸一化距離進行建模,直接最小化兩者之間的距離,加快訓練時模型的收斂速度。 通過在模型中引入DIoU 損失函數(shù),在實驗中顯著地提高了模型預測精度,并且不會產(chǎn)生過擬合問題。
為了使實驗數(shù)據(jù)盡可能地與實際選煤廠工作環(huán)境相一致,在選煤廠實地進行數(shù)據(jù)采集。 從采集到的視頻中截取1350 張煤與矸石混合場景下的圖像,并采用labelImg 標注軟件對圖像進行詳細的人工標注,選取其中1137 張圖像用于模型訓練,其余的213 張圖像用于模型測試,所有對比模型在訓練時均使用水平翻轉(zhuǎn)和隨機裁剪等圖像增強方法。實驗環(huán)境為pytorch1.2、python3.6,使用一張GTX 1080Ti 顯卡。 實驗中用到精度(Precision,P)、召回(Recall,R)、F1 值、mAP(mean Average Precision)值、幀率(FPS)、推理時間(Latency)、FLOPs 值和Params 值等評價指標。 TP(true positives)表示真正例,FP(false positives)表示假正例,FN(false negatives)表示假反例,TN(true negatives)表示真反例。 相關評價指標計算公式為
精度值P越高,表示檢測結果的準確度越高;召回值R越高,表示檢測結果的漏檢率越低;F1 值越高,表示檢測結果越好;mAP 值越高,表示檢測結果越好;幀率越高,表示推理速度越快;推理時間Latency 越低,表示模型速度越快;FLOPs 值越低,表示計算量越小;Params 值越低,表示模型參數(shù)量越少。
為了與原YOLOv3 模型進行比較,同時訓練Darknet-53 骨干網(wǎng)絡和改進后的Darknet-Squeeze骨干網(wǎng)絡檢測模型,訓練過程中使用同樣的Adam優(yōu)化器,參數(shù)均使用默認值,2 個模型同樣訓練50個epoch,見表2。 使用Darknet-53 檢測模型最終得到66.8 的mAP 值,使用Darknet-Squeeze 的檢測模型得到67.5 的mAP 值,比修改前增加了0.7個點,推理時間和模型參數(shù)量都大幅減少。 圖像分辨率為416 像素×416 像素,推理時間Latency 和FLOPs 為在一張GTX 1080Ti 顯卡上的測試結果。
表2 Darknet-53 與Darknet-Squeeze 比較Tab.2 Comparison between Darknet-53 and Darknet-Squeeze
在骨干網(wǎng)絡Darknet-Squeeze 的基礎上,為進一步增強YOLOv3 的neck 部分的各級特征融合能力,以適應煤矸石圖像中小尺度物體較多的特點,引入SPP 結構,并采用轉(zhuǎn)置卷積進行上采樣。 在同樣的實驗環(huán)境和訓練設置下,實驗結果見表3。 其中,輸入圖像分辨率為416 像素×416 像素,推理時間Latency 和FLOPs 為在一張GTX 1080Ti 顯卡上的測試結果。 改進后的特征融合neck 模型在小幅增加模型大小的情況下,取得69.2 的mAP 值,在原來的YOLOv3 模型基礎上提升了2.4 個點,在Darknet-Squeeze 模型基礎上增加了1.7 個點,證明了該方法的有效性。
表3 精度、速度和大小比較Tab.3 Comparisons of accuracy,speed and size
為了平衡訓練過程中的各項任務,進一步增強檢測目標的定位準確性,盡量消除數(shù)據(jù)誤標注和漏標注帶來的影響,減輕難訓練樣本對最后模型精度的影響,在之前的模型基礎上加入平衡L1 損失函數(shù)和DIoU 損失函數(shù),在訓練中參數(shù)a=0.5,r=1.5。 由于引入的損失函數(shù)僅在訓練時起到優(yōu)化模型的作用,因此不會改變模型的大小和推理時間成本。 實驗結果表明,在不引入任何推理時間成本的前提下,模型檢測精度大幅增加,mAP 值達到72.7,相比原來的YOLOv3 模型提升了5.9 個點,相比實驗3.2 設置下的模型提升了3.5 個點,并改善了漏檢現(xiàn)象。 各項具體參數(shù)比較見表4,圖像分辨率為416 像素×416 像素,幀率(FPS)是在一張GTX 1080Ti 顯卡上的測試結果。 矸石檢測的可視化結果如圖3 所示,圖3(a) 對應原始的YOLOv3 模型檢測結果,圖3(b)對應改進骨干網(wǎng)絡、特征融合neck、引入平衡L1 損失函數(shù)和距離IOU 損失函數(shù)后的最終模型的檢測結果。由圖3 可見,改進后的模型在檢測結果和定位精度上明顯好于YOLOv3 基準模型。 實驗結果表明,無論是檢測精度還是推理速度,本文提出的方法都能較好地滿足實際運行需求。
圖3 矸石檢測結果Fig.3 Detection results of coal gangue
表4 最終模型的檢測結果Tab.4 Detection results of final model
(1) 通過引入fire module 模塊替代原來模型中的殘差結構,改進原來的特征提取骨干網(wǎng)絡,在同樣的實驗設置下,改進后的Darknet-Squeeze 模型在mAP 值、推理時間和模型大小上都優(yōu)于原模型。
(2) 使用轉(zhuǎn)置卷積替換最近鄰上采樣,引入空間金字塔池化SPP 模塊來改進多級特征融合機制,在相同的實驗設置下mAP 值進一步提高,達到69.2。
(3) 引入平衡損失函數(shù)和距離IoU 損失函數(shù),在沒有增加推理時間成本的情況下,改善了模型訓練過程,在相同的實驗設置下mAP 值進一步提高,達到72.7。
(4) 在一張GTX 1080Ti 顯卡下,改進后的模型檢測速度可達89 FPS,檢測mAP 值可達72.7。極大地縮減了模型尺寸,加速了模型推理,并大幅提高了模型的檢測精度。
實驗表明,該方法能夠較好地處理選煤廠中煤與矸石混合的復雜場景,具有較高的適應性和檢測準確性,能夠較好地滿足生產(chǎn)現(xiàn)場的實際需求。