楊 俊, 孫葉青, 申屠南瑛, 李 青
(中國計量大學 災(zāi)害監(jiān)測技術(shù)與儀器國家地方聯(lián)合工程實驗室,浙江 杭州 310018)
在尾礦壩潰壩事故頻發(fā)的背景下[1],相關(guān)部門規(guī)定尾礦庫必須安裝在線監(jiān)測系統(tǒng)并保證正??煽窟\行。因此,研發(fā)一種在線監(jiān)測的新方法成為了當務(wù)之急。尾礦壩用于堆貯各種礦石尾料,是排出尾礦的場所;而干灘長度是指干灘頂至尾礦庫內(nèi)水線之間的最短水平距離,是決定尾礦庫能否安全可靠運作的重要指標之一,示意圖如圖1所示。
圖1 尾礦庫組成結(jié)構(gòu)Fig.1 Tailings pond structure
近年來圖像處理和視覺測量等方法[2,3]被應(yīng)用于尾礦壩干灘長度測量系統(tǒng)中,這些方法對尾礦壩實地圖片進行處理,對水線進行分割,再配合設(shè)置的標定物進行測量工作。此類方法存在著一些問題:(1) 沒有考慮水面倒影、邊界不清晰等情況下的水線難以分割性,僅限于分析理想情況下的圖片,在適用范圍上具有局限性;(2) 僅限于單類圖片的研究,無法進行在線監(jiān)測,實用性不夠;(3) 不適用于非理想天氣條件下的測量。改進的分水嶺算法[4]以及基于視覺測量的方法[5,6]都只選擇良好天氣情況下的圖片進行分析,手動剔除噪聲部分面積,將問題進行簡化,不能進行實時監(jiān)測。此外,這兩種方法都在測量過程中采用人為安放標志物的方法作為水線坐標參考物,不僅存在安全隱患,還增加了誤差來源。至少存在兩種誤差:第一,在人為安放標志物過程中產(chǎn)生的誤差,導(dǎo)致參照系不合理,并影響后續(xù)測量的真實值;第二,由于標志物在全圖中所占比例小,標志物坐標需要人為提取,會產(chǎn)生像素坐標誤差,影響測量值。
Mask R-CNN算法是CNN(卷積神經(jīng)網(wǎng)絡(luò))算法的一種,本文利用此算法訓練出能自動對監(jiān)控畫面進行水域和干灘分割的神經(jīng)網(wǎng)絡(luò)模型。在無需人工安放標志物及手工提取像素坐標值的情況下直接進行水灘分割,獲取水線輪廓及其像素坐標。將坐標輸入給擬合出的計算公式即可獲得干灘長度,從而建立起了端對端模式的干灘長度實時監(jiān)測系統(tǒng),且適用于多類圖片。
本實驗選取地點為某銅礦尾礦庫, 尾礦庫等級為Ⅲ級。
隨著自然因素變化,水際線在兩岸間的相對位置會發(fā)生變化,從而使得感興趣區(qū)域(region of interest, ROI)在不斷改變[7]。本文在尾礦庫兩岸各安裝一個攝像頭,一個安裝于離壩頂水平距離為2 m的平地上,一個安裝于對岸的山體上。當水位淺時,水位線靠近山體一側(cè),山體一側(cè)的攝像頭即可獲得高清畫面,從而輸出干灘長度值。
區(qū)別于其它安裝于尾礦壩頂處的干灘監(jiān)控系統(tǒng),本文采用2個監(jiān)控攝像頭,既不會受由于子壩堆積而產(chǎn)生的位置變化的影響又能提供高質(zhì)量圖像,安裝位置如圖2所示。
圖2 攝像頭安裝位置Fig.2 Camera installation locations
監(jiān)控畫面中包含了廢砂廢水、水面化學漂浮物、周邊山體以及植物倒影等干擾內(nèi)容。此外,尾砂的排放、季節(jié)、光照等條件的變化也是測量干擾項。為了測得干灘長度,首先需要定位干灘所在的區(qū)域,先識別出水線,從水線位置到壩岸的水平距離即是干灘長度。
目前,使用深度學習方法進行圖像處理已經(jīng)成為研究熱點。與傳統(tǒng)的分割算法相比,神經(jīng)網(wǎng)絡(luò)能夠自主學習目標特征,區(qū)別圖中的前景和背景,提高識別的準確性。本文基于水與干灘之間的特征差異以及水線自身特征(像素間梯度差異),訓練出能自動識別干灘的神經(jīng)網(wǎng)絡(luò)模型,繼而獲得水線坐標。在測量過程中,本文將干灘長度值量化為水線坐標來進行分析,直接由水線坐標來測得干灘長度,大大減小了誤差?;诖?,采用Mask R-CNN算法[8],首先準確分開水域和干灘,即可進一步測量干灘長度。方案設(shè)計如圖3所示。
圖3 方案設(shè)計框架Fig.3 Program design framework
Mask R-CNN算法以R-CNN系列,F(xiàn)PN(feature pyramid networks),F(xiàn)CIS(fully convolutional instance segmentation)等神經(jīng)網(wǎng)絡(luò)目標檢測算法為基礎(chǔ)。在Faster R-CNN[9]對每個候選區(qū)域輸出類別和邊界框(bounding boxs)進行偏移的基礎(chǔ)上,Mask R-CNN又增加了1個分支得以輸出物體掩膜(object mask)。本文中掩膜區(qū)域邊界即是水線。
3.1.1 RPN網(wǎng)絡(luò)
在Mask R-CNN網(wǎng)絡(luò)中,RPN(區(qū)域候選網(wǎng)絡(luò))與FPN相結(jié)合,RPN的特點在于通過滑動窗口的方式實現(xiàn)候選框的提取,每個滑動窗口位置生成9個不同尺度、不同寬高的候選窗口,提取對應(yīng)9個候選窗口的特征,用于目標分類和邊框回歸,與Fast R-CNN[10]類似?;诖?,目標分類需要區(qū)分候選框內(nèi)特征是否為水域,邊框回歸確定更精確的水域位置,從而能夠獲取水線,RPN網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
圖4 RPN網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.4 RPN network structure diagram
3.1.2 FPN網(wǎng)絡(luò)
對物體檢測網(wǎng)絡(luò)而言,低層的特征語義信息少,但目標位置準確;高層的特征語義信息比較豐富,但目標位置比較粗略。用FPN網(wǎng)絡(luò)結(jié)合低層高分辨率的特征,能把更抽象、語義更強的高層特征圖進行上取樣,并把該特征橫向連接(lateral connections)至前一層特征,因此高層特征得到加強。橫向連接中使用1×1的卷積核來產(chǎn)生最粗略的特征圖,3×3的卷積核對每個融合結(jié)果進行卷積,消除上采樣的混疊效應(yīng),以生成最后需要的特征圖。添加FPN網(wǎng)絡(luò)使得水域定位更為準確,F(xiàn)PN網(wǎng)絡(luò)如圖5所示。
圖5 FPN網(wǎng)絡(luò)結(jié)構(gòu)圖Fig.5 FPN network structure diagram
計算損失值之前,要設(shè)定錨(anchors)的標定方法。本文的檢測目標為水域,樣本標定規(guī)則為:
(1) 如果錨框?qū)?yīng)的參考框(reference box)與實際情況(ground truth)的比值(IOU)最大,記為正樣本。
(2) 如果IOU>0.7,標定為正樣本[11];對于一些極端情況,例如所有的IOU≤0.7,可以采用第(1)規(guī)則生成。
(3) 如果IOU<0.3,則標記為負樣本。
(4) 剩下的既不是正樣本也不是負樣本,不用于最終訓練。
訓練區(qū)域候選網(wǎng)絡(luò)(RPN)的損失值由分類損失和回歸損失按一定比重組成。計算歸一化指數(shù)函數(shù)損失(softmax loss)需要根據(jù)錨對應(yīng)的實際情況的標定結(jié)果和預(yù)測結(jié)果進行計算,計算方法如下:
tx=(x-xa)/wa,ty=(y-ya)/ha
(1)
tw=lg(w/wa),th=lg(h/ha)
(2)
(3)
(4)
(5)
L=Lcls+Lreg+Lmask
(6)
(7)
(8)
由于在實際過程中,2個損失值差距過大,用參數(shù)λ=Nreg/Ncls平衡二者。使得網(wǎng)絡(luò)損失計算過程中能夠均勻考慮。式(7)中損失函數(shù)sL1的計算公式為:
(9)
Lmask為實例分割損失,輸出大小為K·m2,其中K為類別數(shù)量,m表示RoI Align特征圖的大小。對每一個像素應(yīng)用sigmoid,然后取RoI上所有像素的交叉熵的平均值作為Lmask。在本文模型中,總損失值包括定位水域、水灘分割以及在目標區(qū)域填充掩膜時產(chǎn)生的誤差,繼而用梯度下降法降低損失,最終即可定位到準確的水域,從而獲取準確的水線坐標。
Mask R-CNN是一個兩階段的框架:在第1階段掃描圖片并且產(chǎn)生提議(proposal);第2階段是將生成的提議進行分類,并且產(chǎn)生邊界框和掩膜。整體網(wǎng)絡(luò)在系統(tǒng)中完成了3個重要步驟:(1) 目標檢測,繪制目標框;(2) 分類目標,區(qū)分物體類別[12];(3) 像素級目標分割,對于每個目標,在像素層面區(qū)分其前景和背景。網(wǎng)絡(luò)框圖如圖6所示。
圖6 Mask R-CNN算法框圖Fig.6 Mask R-CNN Algorithm block diagram
直方圖均衡化是通過拉伸像素強度分布范圍來增強圖像對比度的一種方法。本文使用直方圖均衡化操作對圖像進行預(yù)處理[13],轉(zhuǎn)化水與干灘之間像素梯度值,放大水土之間特征差異,從而能夠提升神經(jīng)網(wǎng)絡(luò)學習效率以及模型識別準確率。圖7(a)、(b)分別為處理前后結(jié)果對比圖,直方圖均衡化處理后的圖(b)比圖(a)有更好的邊緣細節(jié)捕捉能力。
圖7 處理前后對比圖Fig.7 Comparison before and after processing
Anchors大小、ROI個數(shù)、訓練圖像維度決定了算法能否捕捉細微邊界從而準確地分割圖像[14]。本文通過實驗研究,對參數(shù)進行了多次設(shè)定,最終獲得了在合理的區(qū)間內(nèi)的3項主要參數(shù)值,如表1所示。此外,訓練過程中batch-size為1,采用學習率權(quán)值衰減方法,初始值為0.001,每次衰減0.000 1,動量為0.9。取了表1中5種不同參數(shù)進行訓練,其損失值如圖8所示。
圖8 損失值Fig.8 Loss value
表1 參數(shù)設(shè)定值Tab.1 Parameter setting
結(jié)果表明:在50個訓練周期內(nèi),每個周期訓練100次的情況下可完好擬合。此時,將參數(shù)值設(shè)定為表1中的值時,損失值都為理想值,都能獲得良好的訓練結(jié)果。
為了增強模型泛化能力,本實驗挑選出不同特征的尾礦庫圖像作為數(shù)據(jù)集,每張圖大小均為2 560×1 440 像素。訓練集圖片來自不同時間,分為4種情況,其中晴朗天氣下共150張,陰暗條件下共150張,暴雨后鏡頭模糊情況下150張,雪天150張,共計600張圖片作為訓練集。部分訓練集圖片如圖9(a)~圖9(d)所示。
圖9 訓練樣本Fig.9 Training samples
每張圖片都采用手工打標簽的方式,每張圖中有水域和背景2個類別,標簽示意圖如圖10所示。
圖10 標簽示意圖Fig.10 Labeled image
本實驗的硬件環(huán)境為Intel Core CPU i7-8750,GPU為NVIDIA GTX1060,內(nèi)存6 GB。該實驗基于TensorFlow框架并使用Python實現(xiàn)。結(jié)果圖為圖11所示,在不同時間下的監(jiān)控圖片中,下部灰色區(qū)域為水域。其中雪后圖的水域識別與其他3張不同,是因為只有沙土部分全部濕潤才算作干灘,雪天時候沙土全部濕潤,是正確的識別。
圖11 識別結(jié)果Fig.11 Recognition results
在水灘分割的基礎(chǔ)上,提取水線坐標用于最終的干灘長度測量。基于此,本文使用OpenCV閾值分割及輪廓提取算法[15],對水域進行輪廓提取并自動輸出輪廓最高點坐標,得到水線在圖片上的所屬位置。由于水域面積已經(jīng)被填充為灰色,且輪廓是閉合的理想曲線,直接提取灰色區(qū)域外輪廓即可獲取水線并輸出最高點坐標。具體步驟為:將圖片進行閾值分割并獲取水線,做水線的外接矩形,矩形最高點縱坐標即為水線縱坐標。識別結(jié)果如圖12所示,輸出水線的外接矩形最高點縱坐標為1 030。
圖12 原圖及最終結(jié)果圖Fig.12 Original image and final result image
圖片上水線位置代表著實際位置,兩者同步變化,且具有強線性關(guān)系。攝像頭的位置固定,因此每張圖片的大小相同。自變量僅為水線坐標,因此只要輸出每張圖片輪廓的縱坐標并與實地測量得到的干灘長度進行對比分析,即可擬合出干灘長度測量模型。測得圖片中水線坐標以及實際測量距離,如表2所示。
表2 水線坐標-實測距離對比Tab.2 Comparison of waterline coordinates and measured distances
使用OriginPro 8軟件對數(shù)據(jù)進行分析,在經(jīng)過多種方式擬合后,得知在Polynomial Order=5時,擬合情況最佳。本文使用95%置信區(qū)間進行參數(shù)擬合,水線坐標與干灘實測值的函數(shù)繪制圖如圖13所示。
圖13 水線坐標-實測值擬合曲線Fig.13 Fitting curve of waterline coordinates and measured values
曲線擬合的自由度為14,殘差平方和為3.041 02,標準差為0.259 02,校正相關(guān)系數(shù)平方R2=0.999,擬合度高。已知此模型后,輸入水線坐標即可獲得干灘的真實長度。將有效位數(shù)展開至6位,可在一定程度上減小由高階項計算所帶來的誤差,此時得到函數(shù)表達式為:
f(x)=-1.688 70×10-2x5+9.060 95×104x4
-1.942 19×10-2x3+0.207 867×102x2
-1.110 76×104x+2.370 69×106
(11)
在Maple工具下,將圖11中反饋得到的像素坐標值1 030 dpi帶入圖13中的擬合函數(shù)f(x),得到185.262 m,與真實值185.4 m之間誤差為0.138 m,誤差小于1‰,滿足干灘長度測量精度要求。將上述20點全部帶入函數(shù)中,平均誤差僅為1.16‰。
本文將深度學習算法應(yīng)用于干灘長度的測量,算法模型分為兩部分:
(1) 訓練出能自動分割水域的神經(jīng)網(wǎng)絡(luò)模型,之后自動識別水線輪廓并輸出坐標值。
(2) 將圖像中水線輪廓坐標與實際干灘長度進行回歸分析,擬合出測量算法公式;將坐標值輸入給計算公式后,即可輸出干灘實際長度,且精度滿足實際要求。
本文方法解決了傳統(tǒng)圖像分割算法中存在的不完全分割以及過分割問題,又采用簡便的線性回歸計算即可省去復(fù)雜的模型推導(dǎo),為干灘長度測量提供了準確、實時的計算方法。