梁雪慧,程云澤,張瑞杰,趙 菲
(1. 天津市復(fù)雜系統(tǒng)控制理論與應(yīng)用重點實驗室(天津理工大學(xué)),天津300384;2. 天津理工大學(xué)電氣電子工程學(xué)院,天津300384)
(?通信作者電子郵箱*1871545564@qq.com)
橋梁是交通設(shè)施互連的關(guān)鍵節(jié)點和樞紐項目,是國民經(jīng)濟發(fā)展和社會生活安全的重要保障。中國橋梁總數(shù)穩(wěn)居世界第一[1],橋梁的維護和管理已成為確保橋梁安全運行的關(guān)鍵。橋梁的質(zhì)量和安全與經(jīng)濟和民生息息相關(guān),橋梁上事故的發(fā)生往往是由于缺乏科學(xué)及時的病害檢測。裂縫是最主要的橋梁病害之一,如果不及時處理,很有可能造成橋毀人亡的意外。因此,選擇科學(xué)有效的檢測措施對橋梁進行定期檢查迫在眉睫。
近年來,為了準確、快速地提取橋梁裂縫,國內(nèi)外研究者開展了全面而深入的研究,并取得了顯著的成就。Aerobi EU項目已在歐洲建立,旨在開發(fā)和驗證創(chuàng)新的智能空中機器人系統(tǒng)的原型。Sanchez-Cuevas 等[2-3]設(shè)計了無人機的橋梁檢測系統(tǒng);Amhaz 等[4]針對路面裂縫的對比度低、連續(xù)性差等特點,提出了一種基于最小代價路徑搜索的路面裂縫檢測算法;王耀東等[5]針對全局圖像檢測精度低的問題,采用分塊的思想處理圖像。還有很多其他檢測算法[6-12]被提出,但這些圖像處理方法檢測裂縫大都需要手動設(shè)計特征及設(shè)定參數(shù),準確率低且周期長,不能很好地對橋梁裂縫進行檢測。
深度學(xué)習(xí)是近些年才提出的智能識別方法[13],在其他領(lǐng)域表現(xiàn)突出,但應(yīng)用到橋梁裂縫檢測上還有很大挑戰(zhàn):1)訓(xùn)練網(wǎng)絡(luò)需要大量樣本,目前裂縫標簽樣本數(shù)據(jù)匱乏;2)經(jīng)典的深度學(xué)習(xí)模型直接用于橋梁裂縫檢測時,效果不甚理想。針對這些局限性,本文提出一種基于改進GoogLeNet 網(wǎng)絡(luò)的橋梁裂縫檢測方法。該方法的主要流程如圖1 所示,主要設(shè)計內(nèi)容包括數(shù)據(jù)來源和標簽、裂縫圖像預(yù)處理、裂縫圖像分類識別及裂縫的定位和測量。
圖1 本文方法的流程Fig. 1 Flowchart of the proposed method
使用實地隨機環(huán)境下采集的800 張不同橋梁的裂縫圖像樣本,首先將其歸一化為2 048× 1024 分辨率的圖片,然后采用固定大小256 × 256的窗口進行滑動裁剪,裁剪后的圖片分為包含裂縫的裂縫圖片和不包含裂縫的背景圖片,共24 000張。從中挑選7 500張裂縫圖片組成裂縫數(shù)據(jù)集,挑選15 000張背景圖片組成背景數(shù)據(jù)集,并將其拆分成訓(xùn)練集和測試集。數(shù)據(jù)集構(gòu)建成功后,利用Jupyter Notebook 分別對訓(xùn)練集和測試集的裂縫和背景圖片構(gòu)建相應(yīng)的類別標簽,組成帶標簽的原始的數(shù)據(jù)集,如表1所示。
表1 裂縫帶標簽原始數(shù)據(jù)集Tab.1 Crack tagged original dataset
為了保證檢測方法能應(yīng)對各種復(fù)雜的情況,800 張圖片中包含若干低質(zhì)量的圖片,如霧天、陰天等特殊天氣,橋梁上建筑物遮擋導(dǎo)致的光線不足等,如圖2(a)為陰天、光照不足時的裂縫圖片。為了保證訓(xùn)練圖片的質(zhì)量,需要對裂縫圖片進行一系列特殊的處理。
圖片經(jīng)過雙邊濾波[14]和Retinex[15]圖像增強算法后圖像明顯要比原始圖像亮,達到處理特殊天氣和有建筑物遮擋光照不足的情況,效果如圖2(b)所示。拉普拉斯銳化是一種提高圖片對比度的圖像處理方法,此方法也可以提高裂縫邊緣細節(jié),效果如圖2(c)所示。為了進一步提高對比度,將銳化后的圖像進行灰度化處理后,采用直方圖均衡化(Histogram Equalization)的方法[16]提升裂縫和背景的對比度,效果如圖2(d)所示,經(jīng)過均衡化操作,與原始圖像相比清晰程度有明顯提升。
圖2 預(yù)處理效果Fig.2 Preprocessing effect diagram
將7 500 張裂縫圖片和15 000 背景圖片進行雙邊濾波、Retinex 圖像增強、拉普拉斯銳化、直方圖均衡化一系列的圖像預(yù)處理操作,命名本文預(yù)處理方法為RLH(Retinex-Laplace-Histogram Equalization),可以發(fā)現(xiàn)處理后的圖像增強了人眼觀察的視覺效果,圖片更清晰。將經(jīng)過RLH 處理的數(shù)據(jù)集命名為RLH數(shù)據(jù)集。
本文中,對訓(xùn)練集和測試集的圖片都進行預(yù)處理操作,以保證訓(xùn)練和測試的準確率。當(dāng)新圖片放入訓(xùn)練好的網(wǎng)絡(luò)中識別是否為裂縫時,雖然需要先經(jīng)過預(yù)處理操作,但也提高了分類的準確率,所以對測試集圖片進行預(yù)處理操作非常必要。
卷積神經(jīng)網(wǎng)絡(luò)[17]是人工神經(jīng)網(wǎng)絡(luò)的一種,已成為當(dāng)前語音分析和圖像識別領(lǐng)域的研究熱點。GoogLeNet[18]網(wǎng)絡(luò)模型是具有22 層的深度網(wǎng)絡(luò),該模型說明了采用更多的卷積核和更深的網(wǎng)絡(luò)可以達到更好的預(yù)測結(jié)果,而且相對于AlexNet和同年提出的VGG(Visual Geometry Group),參數(shù)數(shù)量要小得多。模型如圖3所示。
圖3 GoogLeNet網(wǎng)絡(luò)結(jié)構(gòu)Fig. 3 GoogLeNet network structure
在caffe 框架下采用GoogLeNet 網(wǎng)絡(luò)模型分別訓(xùn)練原始數(shù)據(jù)集和經(jīng)過RLH 處理的數(shù)據(jù)集,訓(xùn)練次數(shù)定為2 000 次,定義測試集準確率為被正確分類的裂縫和背景圖片與放入網(wǎng)絡(luò)的總裂縫和背景圖片的比值,測試集準確率對比如表2 所示。統(tǒng)計4次訓(xùn)練結(jié)果平均值,相對于原始數(shù)據(jù),采用RLH 處理的數(shù)據(jù)訓(xùn)練集準確率提升了1.91 個百分點,測試集準確率提升了3.07個百分點。
表2 原始數(shù)據(jù)集和RLH數(shù)據(jù)集訓(xùn)練對比 單位:%Tab. 2 Comparison of training between original data set and RLH data set unit:%
1)GoogLeNet 網(wǎng)絡(luò)各inception 層仍然使用了5× 5 的卷積核,大的卷積核不利于網(wǎng)絡(luò)提取裂縫特征,而且網(wǎng)絡(luò)的參數(shù)也會大大增加,因此對網(wǎng)絡(luò)的inception 層的卷積核進行歸一化處理,將inception 層中全部使用1× 1 的卷積核和3× 3 的卷積核,如圖4 所示,將原始的5× 5 的卷積核變成兩個3× 3 的卷積核,這樣處理原本的25(5× 5)個參數(shù)能減少到18(2 ×3× 3)個,原始的GoogLeNet網(wǎng)絡(luò)中存在9個inception 層,這樣采用歸一化的卷積核不僅可以增加網(wǎng)絡(luò)的深度,也可以減少訓(xùn)練參數(shù),提高訓(xùn)練速度。
圖4 改進inception層前后對比Fig. 4 Comparison before and after improving the inception layer
2)由圖3 可知,原始的GoogLeNet 網(wǎng)絡(luò)開頭用的也是7×7 的卷積核,因此對網(wǎng)絡(luò)開頭作3 種嘗試,具體結(jié)構(gòu)如圖5 所示。3 種結(jié)構(gòu)全部采用3× 3 卷積核,準確率和時間復(fù)雜度對比如表3 所示,數(shù)據(jù)顯示,結(jié)構(gòu)三網(wǎng)絡(luò)模型的識別裂縫的準確率比GoogLeNet 模型提升了2.06 個百分點且時間復(fù)雜度更低,表明結(jié)構(gòu)三模型識別裂縫更合適。
圖5 GoogLeNet網(wǎng)絡(luò)開頭三種方案Fig. 5 First three schemes for GoogLeNet networks
表3 三種修改方案性能對比Tab. 3 Performance comparison of three modified schemes
3)針對橋梁裂縫,在利用經(jīng)過RLH 處理數(shù)據(jù)集對改進的GoogLeNet 網(wǎng)絡(luò)進行訓(xùn)練的過程中,發(fā)現(xiàn)GoogLeNet 網(wǎng)絡(luò)中的Accuracy2、Accuracy3(具體位置見圖3)隨時間變化的數(shù)值基本一樣,Loss2、Loss3(具體位置見圖3)的數(shù)值也相差不多。對比如表4所示,考慮到在第6個inception后裂縫識別的準確率和損失值已經(jīng)達到完整網(wǎng)絡(luò)的訓(xùn)練效果,那么可以去掉七層及以后的inception 層以縮減訓(xùn)練時間。經(jīng)后期分析,出現(xiàn)上述情況的原因是GoogLeNet 模型是ILSVRC(ImageNet large Scale Recognition Challenge)競賽中針對1 000 種標簽的分類模型,其中個別類別特征細節(jié)比較難提取,所以需要更多的inception 層提取它的微小特征。裂縫紋理相對簡單,所以到第6個inception層已經(jīng)能夠提取出它的特征。
圖6 改進GoogLeNet網(wǎng)絡(luò)結(jié)構(gòu)Fig. 6 Improved GoogLeNet network structure
表4 GoogLeNet網(wǎng)絡(luò)各層測試準確率和損失值對比Tab. 4 Comparison of test accuracy and test loss value of each layer of GoogLeNet network
本實驗采用隨機梯度下降法(Stochastic Gradient Descent,SGD)[19]訓(xùn)練網(wǎng)絡(luò),分類結(jié)果采用Softmax 函數(shù)進行計算。
其中:Pi為網(wǎng)絡(luò)輸出結(jié)果為類別i 的概率;xi為網(wǎng)絡(luò)最后一層第一個節(jié)點的輸出值;n為劃分類別總數(shù)。
其中:gt為t時刻的梯度;c為衰減因子,用于控制在t時刻之前要累計多少之前的梯度信息;θt-1、θt代表更新前后參數(shù);η 為學(xué)習(xí)率;RMS[g]t為均方根;ε是為了防止分母為0。上述更新方法解決了對歷史梯度一直累加而導(dǎo)致學(xué)習(xí)率一直下降的問題,但還需要自己選擇初始的學(xué)習(xí)率,因此采用下面公式確定學(xué)習(xí)率的自適應(yīng)變化:
將η 換成一個能夠根據(jù)梯度信息自動變化的量,從而做到學(xué)習(xí)率的自適應(yīng)變化。假設(shè)需要學(xué)習(xí)的函數(shù)映射在局部是光滑的,那么可以用前一次更新的參數(shù)Δθt-1近似Δθt,參數(shù)更新如式(7)所示。
通過將大卷積核變成小卷積核的操作分別修改GoogLeNet 的inception 層和網(wǎng)絡(luò)開頭,再加上裁去第7 個及以后 的inception 層,對 比 本 文 網(wǎng) 絡(luò) 與AlaxNet、GoogLeNet、improved_CNN 的測試集準確率、訓(xùn)練時間和測試集損失值,結(jié)果如表5 所示??梢园l(fā)現(xiàn)相對于原始GoogLeNet 網(wǎng)絡(luò)訓(xùn)練本文網(wǎng)絡(luò)準確率提升了3.13 個百分點,訓(xùn)練時長縮短為原來的64.6%。相對于AlaxNet、improved_CNN 本文網(wǎng)絡(luò)訓(xùn)練時間稍長,但準確率明顯更高,通過對比數(shù)據(jù)可以發(fā)現(xiàn),本文網(wǎng)絡(luò)訓(xùn)練裂縫圖片具有更好的識別效果和訓(xùn)練速度。
在caffe 框架下,采用上述4 種網(wǎng)絡(luò)模型分別訓(xùn)練原始數(shù)據(jù)集和經(jīng)過RLH 處理的數(shù)據(jù)集各3 次,測試集準確率對比如表5 所示,統(tǒng)計3 次訓(xùn)練結(jié)果平均值可以發(fā)現(xiàn),相對于原始數(shù)據(jù),采用RLH 處理的數(shù)據(jù)訓(xùn)練網(wǎng)絡(luò)四種網(wǎng)絡(luò)的測試集準確率都有所提升,本文網(wǎng)絡(luò)測試集準確率更是提升了2%,說明采用RLH數(shù)據(jù)集訓(xùn)練效果更好。
表5 本文網(wǎng)絡(luò)與其他網(wǎng)絡(luò)訓(xùn)練效果對比Tab. 5 Comparison of training effects between the proposed network and other networks
在第3 章中,將RLH 數(shù)據(jù)集放入改進的GoogLeNet 網(wǎng)絡(luò)進行訓(xùn)練,得到訓(xùn)練好的分類識別裂縫模型,即后綴名為caffemodel 的文件。接下來,準備100 張新采集并歸一化為2 048× 1024 分辨率的圖片,同樣采用滑動窗口大小為256 ×256對裂縫進行裁剪,并利用RLH 數(shù)據(jù)集訓(xùn)練好的caffe model文件預(yù)測新裁剪的大小為256 × 256的圖片,如果預(yù)測為裂縫圖片,把裁剪下來的圖片用方框標注,并進行標號。按照從左到右、從上到下的順序,從大圖片上裁剪小圖片放入分類網(wǎng)絡(luò)識別裂縫,如果是裂縫用方框標記,直到把整張大圖片裁剪完,即實現(xiàn)裂縫的定位。這樣通過滑動窗口,對于小圖片相當(dāng)于識別,對于大圖片相當(dāng)于定位,也就是說裂縫的識別和定位其實是同步的。定位圖如圖7(a)所示,可以看出,相比整張裂縫圖片定位,分塊處理定位裂縫更加準確。
圖7 定位和骨架提取Fig.7 Positioning and skeleton extraction
本文采用滑動窗口定位橋梁裂縫,與此同時,也把整張圖片分為32 張256 × 256 的小方塊,分別對每個小方塊采用最大類間方差法分割圖像,得到橋梁裂縫的二值圖像,并將連通區(qū)域像素點的個數(shù)定義為Mi,二值圖如圖7(b)所示。
本文對橋梁裂縫采用滑動窗口分塊處理,優(yōu)點如下:
1)對每個小圖片進行預(yù)處理的操作,處理更具細節(jié),能更清楚地反映圖片的紋理信息。
2)將小圖片放進網(wǎng)絡(luò)中訓(xùn)練,網(wǎng)絡(luò)更容易提取裂縫特征。
3)相比整張裂縫圖片定位,分塊處理定位裂縫更加準確。
4)把每張小圖片分開進行閾值分割,這樣能更準確地提取出裂縫邊緣信息,以便后續(xù)對裂縫長度和寬度的計算。
4.3.1 裂縫的長度
得到裂縫圖像的二值圖,再采用骨架提取算法計算裂縫的長度和寬度。遍歷整個圖像,找出所有像素值為1 且滿足周圍8 連通區(qū)域至少有一個像素為0 的點,如果這些點為Pi,其鄰域的8個點順時針分別為P2、P3、…、P9,如圖8(a)所示。
標記同時滿足式(8)~(9)條件的邊點:
其中:N(P1)為非零鄰點的個數(shù);S(P1)為以P2、P3、…、P9為序時,這些點的值從0到1變化的次數(shù)。當(dāng)對所有邊界點標記完后,將所有標記點像素值變?yōu)?。反復(fù)進行上述操作,直至沒有滿足標記條件的像素點出現(xiàn),此時剩下的點構(gòu)成本圖像區(qū)域的骨架,并將連通區(qū)域像素點的個數(shù)定義為Ni。由于本文圖片全由相機從高度為1 m 的位置拍攝,所以本文設(shè)定用0.04Ni代表裂縫的長度,單位為厘米,骨架圖如圖7(c)所示。
4.3.2 裂縫的寬度
在4.3.1 節(jié)中得到裂縫骨架圖的基礎(chǔ)上,本文提出一種基于骨架方向上的裂縫寬度計算方法。
1)由于骨架圖上的裂縫圖像是單像素圖像,即骨架線圖像,求骨架線上每一點的切線方向。設(shè)M 為骨架線上的任意一點,則其八鄰域內(nèi)有兩個點。圖8(b)為點M 的八鄰域切線示意圖,N1、N2分別為點M的八鄰域中的兩個點,則點M的切線方向等于線段MN1的切線方向與MN2切線方向的均值,即
2)在計算出裂縫各點的切線后,再計算骨架線上各點的法線,法線與裂縫左右邊界點的距離(歐氏距離)即為裂縫的寬度。裂縫的左右邊界由二值圖確定。
圖8 細化算法和切線示意圖Fig.8 Schematic diagrams of refinement algorithm and tangent
近幾年研究者提出多種檢測裂縫長寬度的方法,具有代表性的為以下兩類:1)王睿等[20]通過計算裂縫的面積和周長計算裂縫寬度,這種方法也是目前用得最多的一種方法。2)元大鵬[21]采用縱向切割裂縫取上下邊界中點,再連接中點計算長度,接著采用鄰域擴張的思想來計算裂縫的寬度,即:選取裂縫的一個內(nèi)部點,向兩側(cè)擴張直至到裂縫邊界。計算4 個寬度方向上擴張的像素點個數(shù),取所有內(nèi)部點寬度的最小值作為裂縫區(qū)域的寬度。
如圖9 所示:裂縫1 為縱向裂縫,人工測量長度為49.90 cm,寬度為1.05 cm;裂縫2 為橫向裂縫,人工測量長度為109.86 cm,寬度為0.36 cm。
圖9 裂縫圖示例Fig.9 Crack diagram examples
將本文計算裂縫1 和裂縫2 長寬度的方法與以上兩種方法對比,測量結(jié)果對比如表6~7 所示。從表6~7 可看出,文獻[20]方法由于是通過面積和周長計算裂縫寬度,只能處理紋理簡單的裂縫,對復(fù)雜的裂縫效果不好。文獻[21]中計算長度的方法準確率與本文算法相差不多,但由于文獻[21]方法是在灰度圖上計算裂縫寬度的,沒有有效地定位裂縫的邊界,這個誤差不可避免,因此本文算法精度更高;而且本文算法采用骨架線求法線的方法,考慮了裂縫走勢的情況,也是寬度計算準確的一大原因。
表6 裂縫1測量結(jié)果對比Tab. 6 Comparison of crack1 measurement results
表7 裂縫2測量結(jié)果對比Tab. 7 Comparison of crack2 measurement results
為了進一步驗證利用骨架提取算法對裂縫長度和寬度計算的精度,在100 張原圖上利用本文算法統(tǒng)計檢測結(jié)果與實際測量結(jié)果進行對比。實驗結(jié)果表明,100 張裂縫圖片長度提取平均誤差為2.87%,寬度提取平均誤差為4.29%,這表明本文算法具有理想的計算能力。
針對橋梁裂縫檢測問題,提出基于深度卷積神經(jīng)網(wǎng)絡(luò)的檢測方法對裂縫進行訓(xùn)練,最終實現(xiàn)裂縫的分類、定位和特征提取。
1)深度學(xué)習(xí)對樣本要求比較高,需要大量帶標簽的數(shù)據(jù)集,才能保證模型的識別率,還可以防止過擬合現(xiàn)象的發(fā)生,面對橋梁裂縫數(shù)據(jù)集缺失的問題,實地拍攝并制作了橋梁裂縫數(shù)據(jù)集,但目前數(shù)據(jù)還遠遠不夠,開展樣本收集整理工作將是未來主要任務(wù)之一。
2)為了保證其檢測方法能應(yīng)對各種復(fù)雜的情況,如光照的不勻、霧天等特殊天氣、橋梁上建筑物遮擋導(dǎo)致的光線不足等,本文提出了針對橋梁裂縫的一系列預(yù)處理方法,經(jīng)GoogLeNet 網(wǎng)絡(luò)驗證,訓(xùn)練集準確率提升了1.91%,測試集準確率提升了3.07%,表明橋梁裂縫預(yù)處理的必要性。
3)通過將大卷積核變成小卷積核的操作分別修改GoogLeNet的inception 層和網(wǎng)絡(luò)開頭,再加上裁去第七個及以后的inception 層,放入到原始數(shù)據(jù)集進行訓(xùn)練,網(wǎng)絡(luò)測試集準確率提升3.13 個百分點,訓(xùn)練時長縮短為原來的64.6%,表明改進GoogLeNet 訓(xùn)練裂縫圖片具有更高的準確率和更快的訓(xùn)練速度。
4)采用滑動窗口將圖片放入訓(xùn)練好模型文件,并用方框框出預(yù)測是裂縫的圖片,相對于整張圖片送入網(wǎng)絡(luò),裂縫定位更加精確。
5)采用骨架提取算法,提取裂縫骨架圖,將定位好的裂縫二值圖處理為骨架圖,并利用裂縫二值圖和骨架圖像素點的個數(shù)計算裂縫的長度和寬度。統(tǒng)計100 張圖片的計算結(jié)果,長度提取平均誤差為2.87%,寬度提取平均誤差為4.29%,這表明本文算法具有理想的計算能力。