朱蘇雅,杜建超,李云松,汪小鵬
(1.西安電子科技大學(xué) 綜合業(yè)務(wù)網(wǎng)理論及關(guān)鍵技術(shù)國家重點實驗室,陜西 西安 710071;2.西安公路研究院,陜西 西安 710065 )
截至2016年,我國在用橋梁已超過80萬座。為了確保通行安全,每座橋梁都需要定期維護檢修。橋梁的主要病害之一是構(gòu)件裂縫。目前對裂縫的檢測主要采用人工巡檢加寬度測量儀查看的方法,檢測效率低,數(shù)據(jù)難以維護。因此,采用圖像處理的方式進(jìn)行橋梁裂縫檢測成為當(dāng)前的一個研究熱點。
一些研究基于傳統(tǒng)的數(shù)字圖像處理方法,如利用裂縫區(qū)域與背景之間的灰度差采用灰度閾值分割的方法實現(xiàn)裂縫的提取[1]、利用裂縫的線性特征采用坎尼迭代的方法檢測裂縫邊緣特征[2],但這類算法只能給出裂縫的大體位置,準(zhǔn)確度不高,易受背景雜波影響,誤檢和漏檢率較高。隨著機器學(xué)習(xí)技術(shù)的興起,文獻(xiàn)[3]中采用裂縫多特征結(jié)合支持向量機(SVM)、AdaBoost、 Random Forest 3種統(tǒng)計學(xué)分類方法分別實現(xiàn)裂縫檢測,檢測效果有所提升,但該方法需要人工設(shè)計裂縫特征,導(dǎo)致算法的適應(yīng)性和擴展性較差。文獻(xiàn)[4]中利用裂縫與背景雜波的線性差異采用張量投票算法增強裂縫特征,該方法對線性裂縫檢測效果較好,但是對復(fù)雜裂縫不敏感,丟失了寬度信息。近年來,深度學(xué)習(xí)在圖像識別中表現(xiàn)出了優(yōu)異的性能[5-6],使用卷積神經(jīng)網(wǎng)絡(luò)檢測裂縫的方法明顯增多。文獻(xiàn)[7]中首先將裂縫圖像劃分為多個小圖像塊,再利用經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)將小圖像塊分為裂縫面元和非裂縫面元兩類,從而完成裂縫的提取。但由于全連接層的存在,限制了輸入圖片的大小,且基于圖像塊的檢測方法感受野受限,檢測效率低,內(nèi)存消耗大。
U-Net網(wǎng)絡(luò)是一種改進(jìn)的全卷積神經(jīng)網(wǎng)絡(luò)模型[8],網(wǎng)絡(luò)中無全連接層,能實現(xiàn)任意尺寸圖像的檢測,最早被Olaf等人提出,用于神經(jīng)元結(jié)構(gòu)的分割[9],在醫(yī)學(xué)圖像處理領(lǐng)域如肝臟CT序列分割[10]、虹膜分割[11]等應(yīng)用較為廣泛。近兩年,U-Net網(wǎng)絡(luò)也被用在其他領(lǐng)域的圖像處理場景中,如遙感圖像水體分割[12]、道路檢測[13]等領(lǐng)域,檢測性能優(yōu)良?;诖耍P者提出一種基于U-Net網(wǎng)絡(luò)的橋梁裂縫檢測方法。該方法由一個捕獲上下文信息的收縮路徑和一個可用于精準(zhǔn)定位的對稱擴展路徑組成,是一種小樣本裂縫檢測方法,不僅能夠準(zhǔn)確檢測裂縫的形態(tài),還能夠準(zhǔn)確地保留裂縫的寬度信息。
此外,在實際場景中,由于污點、雜物覆蓋、光影等因素造成檢測后的裂縫有斷裂現(xiàn)象。一些文獻(xiàn)中研究了裂縫斷裂處的連接方法,包括基于形態(tài)學(xué)的連接算法[1]以及基于prime最小生成樹算法的連接方法[14]。筆者在基于U-Net網(wǎng)絡(luò)裂縫檢測結(jié)果的基礎(chǔ)上,提出一種改進(jìn)的迪杰斯特拉(Dijkstra)連接算法來實現(xiàn)斷裂處的裂縫連接。所提算法能更加準(zhǔn)確地保留裂縫細(xì)節(jié)特征,還原裂縫真實信息,從而提高復(fù)雜背景下裂縫檢測的準(zhǔn)確性。最后,通過采用骨架圖和八方向搜索的方法,實現(xiàn)了裂縫寬度的測量。
U-Net網(wǎng)絡(luò)是一種改進(jìn)的全卷積神經(jīng)網(wǎng)絡(luò),因其網(wǎng)絡(luò)結(jié)構(gòu)酷似“U”形而得名。該網(wǎng)絡(luò)充分利用深層網(wǎng)絡(luò)獲得的抽象特征和淺層網(wǎng)絡(luò)包含的圖像上下文信息,采用復(fù)制疊加的方式進(jìn)行特征融合,能有效、準(zhǔn)確地實現(xiàn)圖像的分割。
圖1 15層U-Net網(wǎng)絡(luò)模型
U-Net網(wǎng)絡(luò)結(jié)構(gòu)的搭建是裂縫提取的關(guān)鍵步驟。筆者采用15層卷積層搭建網(wǎng)絡(luò)模型,如圖1所示。該網(wǎng)絡(luò)結(jié)構(gòu)左右對稱,左側(cè)由卷積層和池化層組成,稱為收縮路徑;右側(cè)由卷積層和反卷積層組成,稱為擴展路徑。網(wǎng)絡(luò)使用卷積層提取裂縫特征,池化過程減少網(wǎng)絡(luò)參數(shù),同時會減少裂縫特征圖的分辨率,再采用反卷積將其恢復(fù)到原始輸入圖像大小,實現(xiàn)端到端的裂縫檢測。該網(wǎng)絡(luò)巧妙地使用復(fù)制疊加的方法將底層包含大量上下文信息的特征圖加載到高層網(wǎng)絡(luò),最大程度地保留了逐層池化過程中丟失的裂縫細(xì)節(jié)。另外,該網(wǎng)絡(luò)卷積層使用3×3的卷積核,步長為1;池化層使用2×2的卷積核,步長為2。每層卷積后使用整流線性單元Relu函數(shù)作為激勵函數(shù):
Φ(x)=max{0,x} 。
(1)
相對于sigmoid和雙曲正切函數(shù),Relu函數(shù)只需要一個合理的閾值就可以得到激勵值,減少了計算的復(fù)雜度。另外,當(dāng)Relu函數(shù)處于激活狀態(tài)時,其一階導(dǎo)數(shù)處處為1,這意味著Relu函數(shù)不存在梯度消失問題,且其隨機梯度下降法收斂速度會比sigmoid和雙曲正切快很多。其導(dǎo)數(shù)表達(dá)式為
(2)
其中,x表示輸入神經(jīng)元。最后一層卷積層采用1×1的卷積核,結(jié)合softmax函數(shù)用于分類裂縫圖像。再采用交叉熵函數(shù)作為損失函數(shù)用于表征預(yù)測概率與標(biāo)簽之間的差值。最后通過反向傳播算法優(yōu)化更新網(wǎng)絡(luò)參數(shù),最小化損失函數(shù),使網(wǎng)絡(luò)模型達(dá)到最優(yōu)。
為了降低資源消耗,需要將高分辨率圖像裁剪成多個小尺寸圖像,分別輸入網(wǎng)絡(luò),完成檢測后再拼接成原始圖像大小。但由于U-Net網(wǎng)絡(luò)中存在卷積層,對圖像進(jìn)行卷積操作會丟棄輸入圖像中小于卷積核的邊緣部分圖像,使得輸出圖像尺寸變小。經(jīng)過一次卷積后,輸出圖像大小與輸入圖像大小有如下關(guān)系:
(3)
其中,nw,nh為輸出圖像的寬和高;w,h為輸入圖像的寬和高;fw,fh為卷積核的寬和高,fw=fh=3;s為滑動窗口的步幅大小,s=1。即每層卷積都將造成輸入圖像尺寸的減小,使得最終輸出圖片尺寸小于輸入圖片,拼接后的圖像會存在邊緣部分大塊留白現(xiàn)象,無法提取出完整裂縫。如圖1所示,當(dāng)輸入圖像為800×800時,輸出圖像尺寸為708×708。
針對上述問題,筆者采用Mirror-overlap-tile策略解決,即合理鏡像擴充原始大圖的邊緣像素,再對擴充后的圖像使用overlap-tile 策略[9],重疊切分原始大圖,獲得多張存在邊緣重疊的小圖作為輸入圖像,且輸入圖像尺寸大于待檢測的裂縫部分,從而實現(xiàn)輸出大圖的無縫拼接。將小尺寸圖像輸入網(wǎng)絡(luò),最終輸出圖像大小取決于卷積層的層數(shù)、池化層的層數(shù)和上采樣次數(shù),還受輸入圖像大小的影響??赏ㄟ^如下方式計算原始大圖需要鏡像擴充的邊緣大小:
每層卷積后輸出圖像尺寸大小為
nw=w-2且nh=h-2;
每層池化后輸出圖像尺寸大小為
nw=w/2且nh=h/2;
每層上采樣后輸出圖像尺寸大小為
nw=w×2且nh=h×2。
當(dāng)輸入圖像的寬和高在池化層中均能整除時,通過計算可以得到網(wǎng)絡(luò)最終輸出圖像尺寸nw=w-88,nh=h-88,此時為最大輸出尺寸;當(dāng)輸入圖像的寬和高在池化層均不能整除時,每次池化后會丟棄一個像素的寬度,網(wǎng)絡(luò)最終輸出尺寸nw=w-95,nh=h-95,此時為最小輸出尺寸。也即,15層U-Net網(wǎng)絡(luò)輸入輸出圖像尺寸差在88到95之間,則可將原始圖像周圍鏡像擴充50作為輸入數(shù)據(jù),來保證邊界像素不會丟失。
深度學(xué)習(xí)網(wǎng)絡(luò)實際是利用大量數(shù)據(jù)集以監(jiān)督的方式通過卷積運算提取和學(xué)習(xí)圖像特征,再利用反向傳播最小化訓(xùn)練集上的分類誤差,共同優(yōu)化網(wǎng)絡(luò)參數(shù),最終實現(xiàn)目標(biāo)的提取。筆者使用10 000張尺寸為160×160的裂縫樣本圖像和人工標(biāo)注的裂縫標(biāo)簽圖像投入網(wǎng)絡(luò)進(jìn)行學(xué)習(xí)和訓(xùn)練,并產(chǎn)生分割結(jié)果,再使用反向傳播算法優(yōu)化網(wǎng)絡(luò)模型;然后,對尺寸為5 760×3 840的原始圖像采用1.2節(jié)描述的填充策略處理圖像,輸入網(wǎng)絡(luò)進(jìn)行裂縫提取,結(jié)果如圖2所示??梢钥闯鲈摼W(wǎng)絡(luò)能準(zhǔn)確地實現(xiàn)裂縫的識別和提取,保留了裂縫的走勢、紋理等信息,但仍存在少量背景雜波和裂縫斷裂部分需要做進(jìn)一步的處理工作。
圖2 U-Net網(wǎng)絡(luò)測試結(jié)果圖
經(jīng)深度學(xué)習(xí)檢測后的裂縫圖像仍存在少量的背景雜波。從圖2的提取結(jié)果可以看出,雜波的長度較短,連續(xù)性差。因此,筆者基于長度進(jìn)行判斷,刪除雜波和偽裂縫。為了獲取一段裂縫的長度,首先采用文獻(xiàn)[15]中的算法將裂縫細(xì)化,生成一條單像素線性裂縫骨架,細(xì)化后的裂縫如圖3(b)所示;然后基于八方向搜索法統(tǒng)計裂縫點的像素數(shù)量作為該段裂縫的長度,通過預(yù)先設(shè)置的閾值來刪除長度較短的雜波和偽裂縫,保留較長的裂縫部分。經(jīng)過雜波去除的裂縫如圖3(c)所示,可以看出結(jié)果較好地去除了干擾,且保留了真實裂縫的信息。
麥小秋不抬頭,她俯身城區(qū),望著渺茫朦朧的葦湖,她的頭有些暈,她想從樓上栽下去,變成湖底的一條魚,沉入泥底。啪,葦湖暗了下去,可能是某個地方出現(xiàn)了故障,她聽見葦湖深處的鳥兒發(fā)出了幾聲嘶鳴。
圖3 提取結(jié)果優(yōu)化過程圖
有部分裂縫由于光照、遮擋等原因不能完整識別,造成所提取的裂縫出現(xiàn)斷裂現(xiàn)象。最小生成樹算法是一種常用的連接策略,采用廣度優(yōu)先搜索的方法解決賦權(quán)有向圖或無向圖的單源最短路徑問題,最終生成最短路徑樹。可采用最小生成樹算法對細(xì)化后的裂縫圖像進(jìn)行處理,實現(xiàn)裂縫單元之間的最短連接。常用的最小生成樹算法有兩種:prime算法和迪杰斯特拉算法。其中prime算法在迭代更新中更新的是未確定點的集合中到已確定點距離最小的點,而迪杰斯特拉算法更新的是未確定點集合中到起始點距離最小的點,后加入的點只作為中間節(jié)點,連接起始點不能直接到達(dá)的點。相對于文獻(xiàn)[14]采用prime算法將交叉的裂縫部分分割成零散的線段作為獨立的單元,取線段端點作為連接點的方法,筆者采用迪杰斯特拉算法,對交叉的裂縫部分不做處理,看成一個單元,即將不連通的零碎裂縫片段均視為一個獨立的單元,選擇一個初始單元,計算各單元直接或間接到初始單元的最小距離(歐氏距離),按照最小距離選擇邊和歸并單元實現(xiàn)其他單元到初始單元的最短路徑連接,且連接點不局限在線段端點上,連接效果如圖3(d)所示。
由于最小生成樹連接算法是針對所有裂縫單元進(jìn)行的連接,連接結(jié)果中會存在偽連接的情況。一般偽連接的裂縫相對真實裂縫較短,為了去除偽連接,可以通過判斷裂縫長度來剔除偽裂縫,處理結(jié)果如圖3(e)所示。圖3(e)是完整的、無雜波的單像素裂縫圖像,稱為裂縫骨架;圖3(f)是無斷裂的、包含寬度信息的最終裂縫提取結(jié)果。實驗證明,該方法連接效果更符合裂縫的走勢,且更好地保留了交叉處的裂縫紋理信息。
裂縫寬度是評價裂縫病害的重要數(shù)據(jù)。在得到裂縫提取結(jié)果后,采用裂縫骨架圖和八方向搜索方法來獲取裂縫寬度。首先利用單像素裂縫骨架圖(圖4(a))將每個裂縫點作為寬度測量的種子點。從種子點出發(fā),在提取的裂縫圖中(圖4(b))進(jìn)行八方向搜索。若是裂縫點,則該方向上像素數(shù)量加1,直到到達(dá)裂縫邊界,這樣可分別統(tǒng)計一個種子點所在位置在0°、45°、90°、135°、180°、225°、270°、315°方向上的裂縫像素點數(shù)量。然后將八方向上統(tǒng)計的像素點數(shù)量在四條直線方向上進(jìn)行合并,根據(jù)像素點數(shù)量最小的直線方向來計算裂縫的寬度(圖4(c))。具體計算步驟如下:
(1)根據(jù)裂縫骨架圖,確定起始種子點。
(2)在裂縫區(qū)域圖中,分別統(tǒng)計以種子點為中心的0°、45°、90°、135°、180°、225°、270°、315°方向的裂縫點數(shù)量,記為n1,n2,n3,n4,n5,n6,n7,n8。
(3)合并0°和 180°、45°和 225°、90°和270°、135°和 315°四組方向上的裂縫點數(shù)量,合并方法為d1=n1+n5,d2=21/2(n2+n6),d3=n3+n7,d4=21/2(n4+n8),取D=min{d1,d2,d3,d4},并記錄獲得D的方向。
(5)更新到下一個種子點,重復(fù)步驟(2)~(4),直至測量完所有種子點處的寬度。
圖4 寬度信息提取方法展示圖
在實驗中采用PyCharm平臺開發(fā),使用基于Python語言的Tensorflow深度學(xué)習(xí)框架搭建U-Net網(wǎng)絡(luò);基于Visual Studio 2015 、opencv3.10 平臺開發(fā),實現(xiàn)裂縫寬度的測量。為了驗證檢測效果,分別使用張量投票的方法[4]和筆者所提方法對24張尺寸為5 760×3 840的裂縫圖像進(jìn)行檢測,并對檢測后的圖像進(jìn)行切分,得到384張大小為1 440×960的裂縫局部圖像。針對裂縫位置即骨架信息提取情況做分類比較,分為無裂縫、完全檢測、部分檢測、漏檢和誤檢5種情況。無裂縫指圖中無裂縫且未檢測到裂縫,屬于正確檢測;完全檢測是指完全并且正確檢測到所有裂縫;部分檢測是指正確檢測到大部分裂縫;漏檢是指圖中含有裂縫,但未檢測到;誤檢則是圖中含有裂縫,但未正確檢測到或圖中無裂縫卻檢測到偽裂縫。分類結(jié)果如表1所示。采用準(zhǔn)確率A、漏檢率L和誤檢率E對統(tǒng)計結(jié)果進(jìn)行評估,計算公式如下:
(5)
其中,s表示裂縫樣本總數(shù),n,c,p,m,f分別表示無裂縫、完全檢測、部分檢測、漏檢和誤檢這5種情況的檢測結(jié)果總數(shù),且s=n+c+p+m+f。
從表1可以看出,筆者提出的方法可以精確地檢測到裂縫位置,且漏檢率低于3%,誤檢率低于1%,準(zhǔn)確率高于90%,遠(yuǎn)高于張量投票方法的檢測準(zhǔn)確度。圖5為兩種方法對裂縫檢測結(jié)果的對比圖,可以看出,兩種方法均能準(zhǔn)確地實現(xiàn)線性裂縫的檢測,但針對復(fù)雜裂縫和較細(xì)裂縫的檢測,張量投票方法存在誤檢和漏檢的現(xiàn)象,筆者提出的方法整體檢測效果優(yōu)于張量投票方法,且保留了裂縫走勢和形狀信息,誤檢率低。
表1 裂縫檢測情況評價
圖5 裂縫檢測結(jié)果對比圖
為了驗證寬度測量方法的性能,在不考慮實際測量裂縫時存在的系統(tǒng)誤差以及讀數(shù)誤差的情況下,實驗將使用裂縫寬度測量儀測得局部裂縫的平均寬度作為對比依據(jù)。如圖6(a)所示,用圓圈標(biāo)記待測量區(qū)域,數(shù)值表示該區(qū)域平均裂縫寬度。針對待檢測圖像進(jìn)行裂縫提取和寬度測量,圖6(b)為裂縫提取結(jié)果,圖6(c)展示了待檢測裂縫區(qū)域部分種子點的D值和D的方向。在圖6(c)上統(tǒng)計位于標(biāo)記區(qū)域的平均D值,并按照每個像素所代表的實際距離為比例尺進(jìn)行換算,從而獲得檢測到的裂縫寬度,并計算所檢測的裂縫寬度與實際測量的裂縫寬度間的差值作為檢測誤差。筆者對其中30組寬度值小于0.65 mm的裂縫樣本數(shù)據(jù)進(jìn)行測量評估,其中有16組樣本的測量誤差小于0.03 mm,占樣本總數(shù)的50%以上;有27組樣本的測量誤差小于0.05 mm,占總樣本數(shù)的90%。詳細(xì)統(tǒng)計結(jié)果如圖7所示。另外,表2給出了其中5組數(shù)據(jù)的詳細(xì)統(tǒng)計信息??梢钥闯鲈摲椒y得裂縫寬度總體誤差小于0.05 mm,測量精度較高。
圖6 裂縫寬度測量圖
數(shù)據(jù)組比例尺/(毫米·像素-1)實際測量寬度/mm 平均像素距離/像素檢測裂縫寬度/mm誤差/mm10.088 70.354.250.3770.02720.089 90.404.670.4200.02030.093 00.455.000.4650.01540.088 30.505.290.4670.03350.090 00.556.260.5630.013
圖7 測量誤差分布圖
筆者針對現(xiàn)有的橋梁裂縫檢測算法準(zhǔn)確度不高、丟失細(xì)節(jié)信息等問題,提出一種采用15層U-Net卷積神經(jīng)網(wǎng)絡(luò)的裂縫檢測方法。該方法可以實現(xiàn)像素級的圖像分割,且高效地利用淺層特征與深層特征相融合,最大程度地保留了原始圖像的諸多細(xì)節(jié)信息。針對污點、標(biāo)記、陰影等因素造成裂縫檢測結(jié)果存在部分?jǐn)嗔训那闆r,采用改進(jìn)的迪杰斯特拉最小生成樹算法實現(xiàn)斷裂處的連接,有效地去除了背景雜波,突出了裂縫主干信息;同時利用裂縫骨架信息,結(jié)合深度學(xué)習(xí)檢測結(jié)果實現(xiàn)了對裂縫寬度的測量。經(jīng)實驗驗證,所提方法能夠準(zhǔn)確實現(xiàn)裂縫的提取,準(zhǔn)確率達(dá)到90%以上,漏檢率、誤檢率低,且裂縫寬度的測量準(zhǔn)確性高。