魏 強,白尚旺,龔大立,黨偉超,潘理虎
(1.太原科技大學 計算機科學與技術(shù)學院,太原 030024;2.精英數(shù)智科技股份有限公司,太原 030024)
采煤機采煤后,護幫板要對綜采工作面煤壁進行支護。生產(chǎn)實踐表明,如果采煤后護幫板沒有及時護幫,工作面煤壁可能因采動應力而發(fā)生片幫,造成砸死砸傷事故[1]。為了避免此類事故的發(fā)生,煤礦傳統(tǒng)做法是由液壓支架工檢測護幫板是否護幫,但液壓支架工作業(yè)時間長,容易出現(xiàn)因身體疲勞沒有檢測到液壓支架護幫板未護幫的情況。為解決液壓支架工因身體疲勞導致漏檢的問題,將目標檢測技術(shù)應用到護幫板狀態(tài)檢測是一項很有必要的研究。
現(xiàn)階段液壓支架護幫板狀態(tài)研究大多基于傳感器技術(shù)實現(xiàn),如梁海權(quán)[2]等人提出將勵磁體分別放置于護幫板和液壓支架伸縮梁上獲得電壓值,通過電壓運算電路得到液壓支架護幫板狀態(tài);黃金福[3]等人提出在護幫板上安裝壓力傳感器和傾角傳感器護幫板傳感器單元,通過傾角傳感器得到護幫板當前的伸收角度并控制每個護幫板的伸收;魏文艷[4]等人提出在液壓支架頂梁、護幫千斤頂油缸里和護幫板上安裝接近開關(guān)、壓力傳感器和行程傳感器,通過接收的傳感信息控制液壓支架護幫板的動作。徐勇智[5]通過收集安裝在護幫板和液壓支架上傳感器的數(shù)據(jù),對護幫板運動過程和傳感器數(shù)據(jù)處理及分析,從而對護幫板收放狀態(tài)進行判斷。以上方法均是接觸式測量,需安裝傳感器設(shè)備,成本較高、安裝繁瑣、維護困難,容易受到電磁干擾,導致測量結(jié)果不準確。針對以上問題,王淵[6]等人提出一種圖像識別的護幫板狀態(tài)監(jiān)測方法,通過獲取視頻某一幀圖像并進行去霧處理,然后使用機器視覺測量方法對護幫板狀態(tài)進行監(jiān)測,但該方法不能實時檢測護幫板狀態(tài)。
目標檢測技術(shù)已經(jīng)成功用于機器人導航、智能視頻監(jiān)控、工業(yè)檢測、航空航天等諸多領(lǐng)域,并取得很好的效果。目前檢測速度和精度較好的目標檢測算法是YOLOv3[7-8],但消耗的計算資源較多,在性能較高的設(shè)備上才能滿足實時檢測。而Tiny-YOLOv3是YOLOV3的簡化模型,通過降低卷積層的深度減少計算量,在低性能設(shè)備上能滿足實時檢測。同時考慮到綜采工作面環(huán)境惡劣,采集的視頻數(shù)據(jù)存在采煤時產(chǎn)生的煤塵和噴霧,導致護幫板特征提取困難。為減少塵霧對檢測任務(wù)的影響,有必要對采集的數(shù)據(jù)進行去霧處理。但傳統(tǒng)圖像去霧算法包含大量浮點型數(shù)據(jù)和矩陣運算,在CPU上去霧時間較長。因此,本文提出一種融合圖像去霧與Tiny-YOLOv3的檢測算法,并優(yōu)化圖像去霧算法的CUDA實現(xiàn),加快圖像去霧速度,提高本文算法檢測效率。
本文算法首先將煤礦井下視頻監(jiān)控圖像進行去霧處理,接著將去霧圖像輸入到Tiny-YOLOv3算法完成護幫板狀態(tài)檢測,最后將標注后的圖像幀合并成視頻輸出。算法流程圖如圖1所示。
圖1 算法流程圖
檢測算法的主要步驟:
Step1.調(diào)用cv2.VideoCapture()函數(shù)獲取視頻數(shù)據(jù);
Step2.將視頻數(shù)據(jù)用Image.fromarray()函數(shù)保存為圖片;
Step3.把圖片按橫縱比例縮放;
Step4.調(diào)用圖像去霧算法對縮放圖片進行去霧;
Step5.用yolo.detect_image()函數(shù)對圖片進行檢測;
Step6.調(diào)用np.asarray()將圖片合成視頻。
圖像去霧算法根據(jù)McCartney[9]的圖像退化模型描述有霧圖像成像原理,模型表示如式(1)所示:
H(x)=F(x)t(x)+A(1-t(x))
(1)
式中x是圖像像素的2D空間位置,H(x)是有霧圖像,F(xiàn)(x)是無霧圖像,A是全局大氣光,t(x)是透射率,描述光線通過傳輸介質(zhì)到達相機未散射的部分。場景中的霧氣越重會導致透射率越低,圖像衰減越嚴重。大氣光表示圖像因散射光導致的顏色偏移。對公式(1)變型后得到:
(2)
根據(jù)輸入圖像H(x)計算出F(x)、A和t(x),得到去霧圖像。顯然這個方程有無數(shù)解,因此,本文采用去霧效果較好的暗通道先驗[10]求解方程。
基于暗通道先驗的思想,對于任意不含有大量明亮區(qū)域的圖像,通過比較圖像RGB三通道的像素值,總存在某一個通道的像素值趨近于0.即:
(3)
式中Ω(x)表示以像素點x為中心的局部區(qū)域,c∈{r,g,b}表示RGB三通道。
考慮到煤礦圖像一般由較暗的巖石和大型機械的陰影組成,RGB三通道像素值整體較小,通道之間像素值相差不大,煤礦圖像可以用RGB任意單通道圖像代替暗通道圖像。為驗證該方法有效性,本文隨機選取500張煤礦清晰圖像,繪制單通道圖像和暗通道圖像的直方圖,通過對比發(fā)現(xiàn)圖2和圖3的像素值分布情況大致相同,驗證了任意單通道圖像代替暗通道圖像方法的有效性。
圖2 RGB三通道圖像素值分布
圖3 暗通道圖像素值分布
圖像去霧算法具體步驟如下:
a)計算暗通道圖像。用RGB任意單通道圖像代替。
b)計算全局大氣光。通過排序選取暗通道圖中亮度最大的前0.1%的像素點的均值作為全局大氣光值A(chǔ).
(4)
式中c∈{r,g,b},并將式(4)變形得到:
(5)
接著在RGB三通道求最小值得:
(6)
由式(3)可知:
(7)
結(jié)合式(6)和式(7)計算得初始透射率為:
(8)
d)精細化透射率及圖像還原。初始透射率還原的圖像會出現(xiàn)“塊效應”。為了克服這一問題,算法采用He[11]等人提出導向濾波算法精細化透射率。最后將大氣光值和精細化透射率代入式(2)即可得到去霧圖像。
首先,輸入大小為416*416*3的圖像,結(jié)合7個卷積層和最大池化層提取特征,并借鑒FPN(feature p-yramid network,F(xiàn)PN)[12]的思想,得到兩個不同尺度大小的特征圖,根據(jù)尺度不同的特征圖對目標進行檢測。其中卷積層結(jié)構(gòu)為Convolution2D+BatchNormalization+LeakyRelu結(jié)構(gòu)。圖4展示了Tiny-YOLOv3的結(jié)構(gòu)。
圖4 Tiny-YOLOv3算法結(jié)構(gòu)
訓練模型時,Tiny-YOLOv3使用的損失函數(shù)由預測框的位置(x,y),預測框的大小(w,h),預測類別和預測置信度四部分組成。公式(9)中顯示了Tiny-YOLOv3的表達式:
(9)
其中n是每批次的訓練個數(shù),公式(9)中每個因子的損失函數(shù)如下:
(10)
(11)
(12)
(13)
其中objectmask表示實際是否包含對象,(w,h)是預測框的寬度和高度,bianrycrossentropy是二進制交叉熵函數(shù),square是方差函數(shù)。truexy是目標的實際位置,predxy是預測位置;truewh是標注框的大小,predwh是預測框的大??;trueclass是目標的分類,predclass是預測的類;predmask是預測是否包含對象,ignoremask與IOU相關(guān),如果IOU的值小于設(shè)定閾值,則ignoremask為0.
為保證圖像去霧算法和Tiny-YOLOv3融合后不影響算法的實時性,本文在Xue[13]等人對暗通道去霧算法的CUDA并行處理基礎(chǔ)上優(yōu)化了圖像去霧算法的CUDA實現(xiàn),優(yōu)化過程包括以下四步:第一步用RGB任意單通道圖像代替暗通道圖像,第二步按列分組求大氣光值,第三步優(yōu)化初始透射率,第四步優(yōu)化精細化透射率的計算過程。
計算暗通道圖像是用RGB任意單通道圖像代替暗通道圖像,不涉及比較運算耗時較小。而計算全局大氣光值需將圖像保存在線程塊中,然后通過排序方式求得,但線程塊之間通信耗困難,不滿足CUDA線程并發(fā)和獨立計算的特性。
為滿足CUDA線程特性,本文提出一種簡化計算全局大氣光值的方法,該方法通過按列分組的方法計算全局大氣光值,滿足線程特性且不影響去霧效果。按列分組方法是將圖像的每列像素值放入線程塊中,獨立計算每列的局部大氣光值,然后通過歸約算法比較不同列之間的大氣光值,得到局部大氣光值最大的一列,取該列像素值的均值作為近似全局大氣光值。該方法計算的全局大氣光值接近傳統(tǒng)方法的全局大氣光值,在不影響去霧效果的前提可以有效提升并行效率。
圖5 歸約算法圖
根據(jù)1.2節(jié)可知計算初始透射率的過程為三步,需要將計算過程設(shè)計三個kernel函數(shù),第一個將局部區(qū)域 各通道像素值除以大氣光值A(chǔ),第二個計算暗通道圖像,第三個計算初始透射率,如圖6所示。但在計算初始透射率的過程中,CPU需要頻繁調(diào)用這三個kernel函數(shù),時間消耗較大。
圖6 kernel函數(shù)
為了減少kernel函數(shù)的調(diào)用次數(shù),節(jié)省時間開銷,將數(shù)據(jù)從全局存儲器中讀取到共享存儲區(qū)中進行計算,并合并kernel函數(shù),實現(xiàn)整個計算過程在GPU內(nèi)完成,減少數(shù)據(jù)重復調(diào)用和數(shù)據(jù)交互耗時。具體過程如圖7所示。
圖7 kernel函數(shù)合并
精細化透射率采用導向濾波算法,而導向濾波算法的主要計算量集中在box_filter函數(shù),因此對box_filter函數(shù)的優(yōu)化是一項重要的工作。
本文采取的box_filter函數(shù)優(yōu)化方法[14]如圖8所示。傳統(tǒng)方法存在大量重復的計算且需要多次分配內(nèi)存,而優(yōu)化方法將保留中間結(jié)果存放于共享存儲器,有效的減少重復計算,提高內(nèi)存使用效率。圖像還原的計算過程僅涉及矩陣簡單的四則運算,通過CUDA容易實現(xiàn),時間消耗較少,本文不再贅述。
圖8 并行累加
實驗運行環(huán)境的操作系統(tǒng)為Windows10,處理器主頻為3.4 GHz、系統(tǒng)內(nèi)存為16 G,GPU為NVIDIA GTX 1080Ti,圖像去霧算法CUDA實現(xiàn)的編譯語言為C++,Tiny-YOLOv3算法的編譯語言為Python.
實驗數(shù)據(jù)來自某煤礦綜采工作面時長為60 min,圖像大小為1 920×1 080的視頻。
將視頻數(shù)據(jù)每隔10幀存儲為一張圖片,共得到18 000張圖像,把得到的圖像均分為兩部分。對第一部分的9 000張圖像不做任何處理,第二部分的9 000張圖像做去霧處理,把這兩部分圖像作為未去霧處理和去霧處理的對照數(shù)據(jù)集。圖9為未處理圖像,圖10為去霧圖像。
圖9 未處理圖像
圖10 去霧圖像
將去霧圖像數(shù)據(jù)集和未處理圖像數(shù)據(jù)集按照VOC2007數(shù)據(jù)集的格式制作,采用labelImg數(shù)據(jù)標注工具對兩部分數(shù)據(jù)進行標注,生成網(wǎng)絡(luò)訓練所需的xml配置文件。標注內(nèi)容為如圖11所示。兩部分數(shù)據(jù)集是按照8∶1∶1的比例分為訓練集、驗證集和測試集,數(shù)量分別為7 200張、900張和900張。
圖11 標注內(nèi)容
本文的檢測對象是護幫板,形狀一般為長方形,大小固定,而Tiny-YOLOv3的先驗框數(shù)量和長寬不適用于本文數(shù)據(jù)集。通過K-means聚類算法獲取適合本文數(shù)據(jù)集的先驗框數(shù)量和長寬。聚類結(jié)果如圖12所示,縱坐標的平均畸變越小表明類內(nèi)的距離越小。根據(jù)肘部法則最終確定本文數(shù)據(jù)集的先驗框數(shù)量k值為6,對應的先驗框長寬為[111,215]、[126,185]、[126,211]、[137,218]、[144,248]、[155,285].
圖12 K-means聚類結(jié)果
將Tiny-YOLOv3配置文件中的檢測類別class改為1,過濾器的值改為,這樣可以在不影響檢測任務(wù)的條件下,減少算法運算量。算法的訓練迭代次數(shù)設(shè)置為5 600次,初始學習率設(shè)置為0.01.通過調(diào)整參數(shù)發(fā)現(xiàn),當?shù)謩e為4 000和5 600次時,對應的學習率分別為0.007和0.005,網(wǎng)絡(luò)具有一定的收斂性。圖13展示了整個網(wǎng)絡(luò)的訓練損失圖,從圖中可以看出,當?shù)螖?shù)為5 600時基本上收斂。
圖13 本文算法的訓練損失圖
為驗證本文圖像去霧算法能夠有效減少護幫板周圍的煤塵和噴霧,提高圖像清晰度,分別與文獻[10]、文獻[15]和文獻[16]去霧算法對煤礦圖像進行去霧實驗。圖14給出了本文去霧算法與其他去霧算法對煤礦圖像的去霧效果比較。從圖14的去霧效果可以看出,本文去霧算法與其他去霧算法相比可以有效地去除煤礦圖像中的煤塵和霧氣,處理后的圖像對比度、清晰度得到了提升,細節(jié)得到了很好的保留。
圖14 去霧效果比較
為了保證圖像去霧算法能夠?qū)崟r去霧,對后續(xù)檢測任務(wù)的實時性影響較小,實驗將輸入大小為1 920×1 080的圖片縮放成大小960×540后執(zhí)行圖像去霧操作。表1展示了本文去霧算法與Xue[13]算法在處理大小960×540的煤礦圖片的各步驟運行時間的比較。由表1的結(jié)果比較可以看出本文去霧算法在GPU上比Xue算法去霧速度提升較為明顯,對大小為960×540的煤礦圖片去霧時間僅需9 ms,比Xue算法去霧速度快了27 ms,保障后續(xù)檢測任務(wù)的實時性。
表1 不同去霧方法各步驟的運行時間
為了驗證融合圖像去霧算法對YOLOv3和Tiny-YOLOv3檢測準確率和速度的影響,本文設(shè)置了兩組對比實驗。第一組對比實驗是只采用YOLOv3和Tiny-YOLOv3進行護幫板情況的檢測;第二組對比實驗分別在兩個檢測算法中融合圖像去霧算法,比較融合后的檢測算法準確率和速度。表2展示了不同算法在測試集上準確率和速度的結(jié)果對比。
表2 不同算法檢測準確率和速度對比
通過表2的實驗結(jié)果發(fā)現(xiàn),第一組對比實驗中單純使用YOLOv3比Tiny-YOLOv3的檢測準確率提高了10.6%,檢測速度YOLOv3比Tiny-YOLOv3低22fps.結(jié)果表明,YOLOv3比Tiny-YOLOv3的檢測準確率高,但檢測速度不能滿足實時檢測的要求。在第二組對比實驗中,融合了圖像去霧算法YOLOv3算法比本文算法準確率提高了7.1%,檢測速度YOLOv3比Tiny-YOLOv3低20 fps.結(jié)果表明,本文算法在準確率比融合圖像去霧的YOLOv3算法稍有下降,但檢測速度滿足實時檢測的要求。其次,通過兩組對比實驗發(fā)現(xiàn),融合圖像去霧的檢測算法比原檢測算法的準確率有明顯提高。這意味著融合圖像去霧算法能夠提高檢測算法的檢測準確率,準確率提高的主要原因是圖像去霧算法能夠有效減少煤塵和噴霧對檢測任務(wù)的影響,使檢測算法提取的特征更接近實際值,檢測準確率提高。
最后實驗權(quán)衡檢測精度和檢測速度得出結(jié)論:融合圖像去霧算法的YOLOv3準確率雖然較高,但受限于煤礦的低性能設(shè)備,檢測速度不能滿足實時檢測的要求。為了同時滿足檢測準確率和速度的要求,本文選擇檢測準確率較高且滿足實時檢測要求的本文算法。實驗表明,本文算法比Tiny-YOLOv3準確率提升22.8%,且滿足實時檢測的要求。
表3具體展示了本文算法和Tiny-YOLOv3算法在測試集上的結(jié)果。
表3 不同算法檢測結(jié)果對比
從表3的檢測結(jié)果發(fā)現(xiàn),Tiny-YOLOv3算法與本文算法相比,使用Tiny-YOLOv3算法漏檢和錯檢的對象數(shù)量分別為224個和104,比本文算法漏檢和錯檢對象個數(shù)分別多164個和61個。通過定量分析得出本文檢測算法在檢測煤礦護幫板方面比Tiny-YOLOv3算法更準確,有效減少了漏檢和錯檢對象的個數(shù)。最后展示本文算法和Tiny-YOLOv3算法的檢測結(jié)果,如圖15-18所示。
圖15 本文算法檢測結(jié)果
圖16 本文算法漏檢結(jié)果
圖17 Tiny-YOLOv3算法錯檢結(jié)果
圖18 Tiny-YOLOv3算法漏檢結(jié)果(虛線框為漏檢對象)
本文提出一種檢測護幫板狀態(tài)的融合算法,首先將視頻分幀并進行去霧處理,然后將去霧圖像輸入到Tiny-YOLOv3算法中進行檢測,最后輸出檢測結(jié)果。實驗結(jié)果表明,在煤礦護幫板檢測場景下,與Tiny-YOLOv3算法相比,本文算法滿足實時性的同時具有更高的檢測精度,對綜采工作面安全生產(chǎn)起決定性的作用,同時也對綜采工作面無人化、自動化的發(fā)展起到了一定的促進作用。但本文算法仍存在不足,當應用在其他煤礦時,會出現(xiàn)誤識別和未識別的情況。作者將在后續(xù)工作中通過優(yōu)化Tiny-YOLOv3算法的方式,解決過擬合問題,提高本文算法的泛化能力。