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