蘇鈺桐,楊煒毅,李俊霖
(中國礦業(yè)大學(xué) 信息與控制工程學(xué)院,江蘇 徐州221008)
現(xiàn)有的研究表明巖體內(nèi)部的結(jié)構(gòu)面分布決定了巖體的穩(wěn)定性[1-2]。在煤礦生產(chǎn)過程中,為了評價巷道圍巖穩(wěn)定性,常采用煤巖體鉆孔窺視的方法了解圍巖裂隙發(fā)育狀況[3-4],目前鉆孔圖像的裂隙識別、分類等工作多采用人工的方式。由于鉆孔圖像數(shù)量較多,工作量大,容易由于人為差別造成漏識別或識別誤差[5]。采用機(jī)器智能識別可以有效減少誤差,提高工作效率。
煤巖體鉆孔裂隙機(jī)器識別的核心任務(wù)是確實裂隙分布的位置和大小,針對該問題,王川嬰[6]通過觀察鉆孔圖像上裂隙的產(chǎn)狀,將正弦函數(shù)作為特征函數(shù),提出了一種鉆孔圖像結(jié)構(gòu)面識別方法,可以有效識別產(chǎn)狀為正弦曲線的裂隙。夏丁[7]等首先對鉆孔圖像進(jìn)行預(yù)處理,獲取目標(biāo)區(qū)域,采用低精度Hough變換快速檢測和聚類算法計算出結(jié)構(gòu)面的傾向、傾角等信息。對于破碎的巷道圍巖,其圍巖內(nèi)部裂隙并不都是呈正弦曲線狀,以上方法不能有效的識別非正弦曲線裂隙。為了解決這個問題,鄒先堅[8]為了識別鉆孔圖像非正弦曲線特征裂隙,提出一種針對全景鉆孔圖像的結(jié)構(gòu)面全自動識別方法,把非正弦曲線裂隙劃分到距離最近正弦曲線裂隙中,以保證識別的完整性。針對非正弦結(jié)構(gòu)狀裂隙,李立[9]等基于自適應(yīng)HSV 顏色空間模型,提出了鉆孔圖像中溶隙結(jié)構(gòu)識別方法,此方法能對鉆孔圖像上的溶隙和土質(zhì)層進(jìn)行定位和識別。針對鉆孔錄像橫向截圖,鄧兆鵬[10]等提出了一種基于改進(jìn)的區(qū)域生長和Hough變換的鉆孔孔壁圖像水平裂隙識別算法,該裂隙識別算法對于不同的水平裂隙和離層圖像都可以準(zhǔn)確、自動地檢測出裂隙。目前采用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行鉆孔圖像裂隙識別鮮有報道。
卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Networks,CNN)是一種深度學(xué)習(xí)模型或類似于人工神經(jīng)網(wǎng)絡(luò)的多層感知器,在圖像處理領(lǐng)域應(yīng)用廣泛,它可以將大數(shù)據(jù)量的圖片降維成小數(shù)據(jù)量,并保留圖片特征,符合圖片處理的原則[11]。相比通用的目標(biāo)檢測任務(wù),煤礦井下鉆孔孔壁展開圖像質(zhì)量低,裂隙辨識度低,特別是煤體裂隙,需要將裂隙準(zhǔn)確檢測出來,這對目標(biāo)檢測算法的準(zhǔn)確度提出了更高的要求。綜合考慮,采用同時兼顧速度和檢測精度的YOLO v3 算法,并建立煤巖體鉆孔圖像裂隙智能識別模型[12]。
鉆孔圖像裂隙檢測過程如圖1。
YOLO v3 算法采用一個單獨的卷積神經(jīng)網(wǎng)絡(luò)模型實現(xiàn)end-to-end 的目標(biāo)檢測,先將圖片分成S×S個網(wǎng)格單元(gird cell)進(jìn)行圖像特征提取。每個單元格會預(yù)測B 個邊界框(bounding box)以及邊界框的置信度C(confidence score)。每個邊界框包含x、y、w、h 和置信度C 共5 個值,其中:x、y 為邊界框中心點的置;w、h 為邊界框的寬度和高度。置信度包含2個方面:①這個框中目標(biāo)存在的可能性大小Pr(obj),若框中沒有裂隙,則Pr(obj)=0,若含有裂隙則Pr(obj)=1;②這個邊界框的位置準(zhǔn)確度,采用IOU(交并比)的方法判斷邊界框的位置的準(zhǔn)確度,即預(yù)測的框與真實框(ground truth)合并面積交并比記做IOU(intersection over union),IOU 計算示意圖如圖2。置信度為這個方面取值的乘積,置信度用來評判預(yù)測最準(zhǔn)確的邊界框。當(dāng)多個邊界框檢測到同一目標(biāo)時,通過非極大值抑制(NMS)來選擇最終的結(jié)果,NMS 就是通過打分來選出最好的結(jié)果,與這個結(jié)果重疊的對象去掉,是一個不斷迭代的過程。
圖2 IOU 計算示意圖Fig.2 IOU calculation diagram
YOLO v3 目標(biāo)邊界框坐標(biāo)的預(yù)測過程如圖3,圖中σ 函數(shù)是sigmoid 函數(shù),其目的是將預(yù)測偏移量縮放到0 到1 之間。假設(shè)1 個網(wǎng)格相對于圖像左上角的偏移量是cx和cy,邊框的寬度和高度分別為pw和ph。圖中虛線矩形框為錨框(anchor box),實線矩形框為通過網(wǎng)絡(luò)預(yù)測的偏移量計算得到的預(yù)測邊界框(bounding box),錨框與預(yù)測邊界框的對應(yīng)關(guān)系如圖中公式所示。預(yù)測偏移量(offsets)用tx、ty、tw、th表示,其中tx、ty是預(yù)測的坐標(biāo)偏移值,tw、th是尺度縮放。偏移量根據(jù)原圖尺寸進(jìn)行歸一化處理,可以有效的確保目標(biāo)中心處于執(zhí)行預(yù)測的網(wǎng)格單元中,防止偏移過多。
圖3 目標(biāo)邊界框位置的預(yù)測過程Fig.3 Prediction process of target bounding box position
YOLOv3 架構(gòu)圖如圖4。YOLO v3 調(diào)整了網(wǎng)絡(luò)結(jié)構(gòu),圖像特征提取采用的是Darknet-53 的網(wǎng)絡(luò)結(jié)構(gòu),含有53 個卷積層,并借鑒了殘差網(wǎng)絡(luò)的做法,在一些層之間設(shè)置了快捷鏈路(shortcut connections),并增加了跳層的殘差模塊。YOLO v3 利用多尺度特征進(jìn)行對象檢測,網(wǎng)絡(luò)在3 個不同尺度特征圖中(82、94、106 層)進(jìn)行對象檢測。同時在每個尺度的特征圖的每個網(wǎng)格設(shè)置3 個先驗框。使用Logistic 取代Softmax 進(jìn)行對象分類,支持多標(biāo)簽對象。YOLO v3進(jìn)行5 次下采樣提取特征,輸出3 個不同尺寸的特征圖。然后在85 層進(jìn)行上采樣,同樣的操作在98層。
圖4 YOLO v3 架構(gòu)圖Fig.4 The architecture diagram of YOLO v3
YOLO v3 的損失函數(shù)置信度損失和分類損失為二值交叉熵?fù)p失,其能刻畫2 個概率分布之間的距離,也就是說,交叉熵值越小,2 個概率分布越接近,同時利用sigmoid 將神經(jīng)網(wǎng)絡(luò)的輸出映射到一個(0,1)區(qū)間[13]。YOLO v3 的損失函數(shù)定義如下:
挑選不同煤礦井下頂板300 張鉆孔圖像作為樣本,采用開源工具LabelImg 軟件綠色矩形框?qū)︺@孔圖像的裂隙進(jìn)行人工標(biāo)記、注釋和編號,制作VOC 2007 數(shù)據(jù)集,將xml 格式文件全部放入Annotations文件夾,將所JPEG 格式圖片文件放入JPEGImg 文件夾中,然后將文件夾中20%的圖片作為驗證集,80%圖片作為訓(xùn)練集,其中1 號孔~6 號孔鉆孔圖像裂隙分布數(shù)據(jù)集如圖5。
圖5 鉆孔圖像裂隙分布數(shù)據(jù)集Fig.5 Fractures distribution data sets of borehole image
在目標(biāo)檢測中xml 格式訓(xùn)練數(shù)據(jù)的標(biāo)簽通常是基于絕對坐標(biāo)的表示方式的,而在訓(xùn)練的過程中通常會有尺度大小的變換,這就需要將邊框坐標(biāo)轉(zhuǎn)換為歸一化后的形式,即txt 格式數(shù)據(jù),轉(zhuǎn)換如式(2),通過編寫Python 小程序轉(zhuǎn)后的txt 格式文件分別包含類別序列(label),標(biāo)注邊界框(ground truth)中心點x 方向坐標(biāo),目標(biāo)中心點y 方向坐標(biāo)y,標(biāo)注框?qū)抴,標(biāo)注框高h(yuǎn)。
式中:xmax、ymax為邊框右下角坐;xmin、ymin為邊框左上角坐標(biāo);a、b 分別為圖像寬和高。
基于TensorFlow 及Keras 框架搭建神經(jīng)網(wǎng)絡(luò),試驗采用DarkNet53 深度學(xué)習(xí)框架。計算機(jī)配置為Intel Core i7-8700H CPU,2.20 GHz 6 核12 線程,顯卡為NVIDIA Quadro P1000 4GB 獨立顯卡,32 G 內(nèi)存,所有程序均在Windows 10 系統(tǒng)下用Python 3 語言編寫,圖像顯示處理調(diào)用OpenCV 庫、數(shù)據(jù)計算調(diào)用CUDA、CuDNN 等。
采用k-means 算法對訓(xùn)練集上的預(yù)測框(boudnding box)尺度做聚類,圖像轉(zhuǎn)換為416×416 像素,以適于YOLO v3 的輸入。然后再分成13×13 像素的網(wǎng)格單元,以便于輸入網(wǎng)絡(luò)進(jìn)行訓(xùn)練。以1 幅圖像為1 個批次,每訓(xùn)練1 批圖像,更新1 次權(quán)值參數(shù)。權(quán)值的衰減速率(decay)設(shè)為0.000 5,學(xué)習(xí)率調(diào)整策略采用steps,動量因子(momentum)設(shè)為0.9,最大訓(xùn)練次數(shù)設(shè)置為50 020,初始學(xué)習(xí)率(learning rate)設(shè)為0.000 1。在開始訓(xùn)練時設(shè)置burn_in 參數(shù)用于穩(wěn)定模型,burn_in 設(shè)置為1 000 在迭代次數(shù)為40 000和45 000 時,學(xué)習(xí)率降低為初值的10%和1%,使模型在訓(xùn)練后期振蕩減小,從而更加接近最優(yōu)解。
在訓(xùn)練過程中,通過繪制模型損失曲線觀察訓(xùn)練動態(tài)過程,損失函數(shù)的輸出結(jié)果如圖6。由圖6 可看出,模型在前期迭代中損失值快速縮減,模型快速擬合,第1 個循環(huán)結(jié)束損失值下降至53,第11 次循環(huán)時,損失值收斂至35 時,不在變化,結(jié)束訓(xùn)練。
圖6 損失函數(shù)的輸出結(jié)果Fig.6 Output results of loss function
訓(xùn)練完成后,將測試集分別輸入到訓(xùn)練好的網(wǎng)絡(luò)模型中進(jìn)行測試驗證,得到目標(biāo)檢測算法對測試集中鉆孔圖像裂隙的檢測結(jié)果,識別速度為2 s 左右,裂隙識別結(jié)果如圖7(圖7 中橫坐標(biāo)為x 像素坐標(biāo),縱坐標(biāo)為y 像素坐標(biāo)),裂隙識別位置信息見表1。
圖7 裂隙識別結(jié)果Fig.7 Recognition results of fractures
表1 裂隙識別位置信息Table 1 Location information of fracture recognition
由圖7 可以看出,鉆孔圖像上的裂隙基本被識別出并進(jìn)行了標(biāo)記。從圖7(a)可以看出,不僅橫向裂隙別識別出來,縱向裂隙也被識別出;從圖7(b)可以看出,對于裂隙分布比較密集的鉆孔圖像,所有裂隙均被識別出來,識別精度較高;從圖7(c)可以看出,對于裂隙分布不明顯的圖像,不明顯裂隙均被識別出;從圖7(d)可以看出,由于鉆孔設(shè)備造成的類似裂隙痕跡的完整鉆孔圖像,識別結(jié)果為無裂隙,表明網(wǎng)絡(luò)模型具有一定的抗干擾能力。表1為程序自動生成的裂隙坐標(biāo)位置與裂隙率,可以大概估計裂隙數(shù)量和裂隙分布面積,有助于評價巖體穩(wěn)定性。
為了實現(xiàn)煤巖體中各種特征裂隙智能快速識別,提出了基于深度神經(jīng)網(wǎng)絡(luò)YOLO v3 算法的裂隙檢測方法。方法采用最新Darknet-53 網(wǎng)絡(luò)模型,增加跳層的殘差模塊以改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu),同時融合多維度特征。試驗結(jié)果表明YOLO v3 算法可以快速識別鉆孔圖像不同發(fā)育特征裂隙,滿足煤巖體裂隙檢測的要求。