周 童 周志達 吳怡寧,3 文旭光 蒲黔輝*
(1.西南交通大學 土木工程學院,四川 成都 610031;2.廣西中國-東盟綜合交通國際聯合重點實驗室南寧學院,廣西 南寧 530000;3.浙江大學建筑設計研究院有限公司,浙江 杭州 310028)
在各種橋梁病害中,裂縫是橋梁多病害的早期表現形式之一,危害程度極大。采用傳統人工裂縫檢測存在橋下空間小、耗時長、主觀性強、效率低等缺點,難以滿足量大面廣的橋梁養(yǎng)護和維修需求。而無損檢測路面裂縫的方法,例如激光全息技術[1],具有靈敏度高且響應速度快的特點,但該技術適用于平整路面,對于橋梁這類較為復雜的結構可用性不佳,且系統結構復雜,成本高,在現階段難以推廣應用。因此,傳統的橋梁裂縫檢測方法已不能滿足需求越來越大的橋梁維保檢測任務。
近些年來,機器學習技術發(fā)展迅速,其中深度學習技術在大數據[2]的加持下更是在醫(yī)療[3]、網絡安全[4]等領域取得了顯著進展,為橋梁裂縫檢測研究提供了新方法。在2016 年,Zhang 等人[5]首次將卷積神經網絡應用于道路裂縫檢測,相比于傳統的人工特征提取方法,CNN提取特征的效率更高,并且排除了主觀性等不利因素,使得檢測的準確性和可靠性顯著提升,從而帶來顯著的經濟收益。隨后,研究人員[6-7]構建了多個基于CNN的病害識別和特征提取模型,實現了對路面病害的高效、精準識別和測量。此外,全卷積神經網絡(FCN)的使用實現了對圖像中裂縫等多種病害的像素級分割[8]。目前基于深度學習的裂縫檢測方法可以大致分為圖像分類、圖像檢測和圖像分割三類[9]。
本文基于圖像語義分割對橋梁的裂縫進行識別。圖像語義分割技術可分為兩大類:基于區(qū)域的圖像語義分割技術和基于像素的圖像語義分割技術,后者的分割精度和分割速度更好。本研究使用基于編碼器-解碼器框架的U-net模型,并對其做出改進,以解決當前針對較細微裂縫圖像檢測結果精度不高的問題,實現了自動、準確的裂縫圖像像素級分割。
U-net 模型結構如圖1 所示,包含編碼器、解碼器、跳躍連接等主要組成部分。編碼器部分由連續(xù)的卷積和池化層組成,用于逐步降低特征圖的空間分辨率,同時增加特征圖的通道數,可以捕獲圖像的全局特征,提取語義信息。解碼器部分由連續(xù)的卷積和上采樣層組成,用于逐步恢復特征圖的空間分辨率,同時減少特征圖的通道數,通過跳躍連接將編碼器中的低級特征與高級特征融合,從而保留圖像細節(jié)和局部信息。
圖1 原始U-net模型示意圖
在編碼部分,主要對輸入圖像進行卷積和池化操作,得到五個大小不同的特征圖,且每次卷積、池化操作后獲得的特征圖尺寸減少為原來的一半;在解碼部分,首先對第五次卷積之后所得到的特征圖進行上采樣,將其結果與第四次池化所得到的特征圖進行特征融合和卷積操作,之后依次對其余特征圖進行同樣的操作,直到得到最終的分割結果。
該網絡的輸入圖像將原始圖像邊緣像素進行對稱復制,增大了圖片尺寸。對于本文選取的Crack 500數據集,其像素大小為640×360,若將其作為網絡的輸出反推各階段特征圖大小,會在第二次下采樣中出現奇數。為避免這個問題,將輸出圖像周圍進行填充使其變?yōu)?44×372的大小,同時將原始圖像的邊緣像素進行復制擴充使輸入特征圖變?yōu)?28×556的大小。
1.2.1 全零填充
在圖像處理中,卷積是一種對圖像進行特征提取的操作,通過在輸入圖像上滑動卷積核來提取不同位置的特征。為了保持輸出特征圖的大小與輸入圖像相同,可以在輸入圖像的周圍加上合適數量的零像素,從而進行卷積操作而不改變特征圖的尺寸。全零填充操作有助于對各階段特征圖信息進行充分利用并傳遞。
1.2.2 空洞卷積
與傳統的卷積操作不同,空洞卷積在卷積核內部引入了固定間隔(膨脹率)的空洞,使得卷積核在輸入數據上的感受野增大,從而能夠捕捉更大范圍的特征。相比于增大卷積核的尺寸來捕獲更大感受野,空洞卷積能夠在保持卷積核尺寸不變的情況下增加感受野,從而減少了模型所需學習的參數量[10]。
如圖2 所示,在卷積核大小不變的情況下,感受野會隨著間隔的增加而提高。本文將膨脹率設置為2。
圖2 空洞卷積示意圖
改進U-net模型結構如圖3 所示,該網絡最后一個池化層的輸入行數是45,在進行2×2最大池化時會導致最后一行像素點被拋棄,因此在后續(xù)的反卷積過程中將其添加到對應位置。輸出端采用一個卷積核大小為1×1的卷積組,將圖像變?yōu)?×640×360的大小,并且采用Sigmoid激活函數將每個像素是否為裂縫的概率映射到0-1之間,若該點的值大于0.5,則認定其為裂縫,反之為背景。同時,本文對網絡層進行了增添,在各池化層之后增加一次上采樣作為特征圖,將每個階段的特征圖進行通道融合,提升了網絡的全局表達能力。
圖3 改進U-net模型示意圖
由于網絡輸入特征圖沒有經過擴充操作,因此在經過卷積操作時大大減少了訓練參數,有效提高了網絡計算效率。
本文以Crack 500公共數據集作為實驗數據進行實驗,其中包含3368張路面裂縫圖片,隨機選取3000張作為訓練集,剩余的作為測試集進行驗證。對于圖像標簽,在GitHub上找到了其他學者標記的標簽文件并用于本文模型的訓練,并利用訓練好的模型參數對橋梁混凝土裂縫進行再訓練,最終得到分割檢測的結果。對于Crack 500數據集,其圖像大小為640×360,而用于遷移訓練的橋梁混凝土裂縫圖像大小為1024×1024,為使得模型輸入尺寸一致,將橋梁裂縫進行剪裁使其變?yōu)?40×640的大小。
由于裂縫圖像主要以灰度值的變化為主,因此只需要通過單通道圖像,對灰度信息進行圖像處理,判斷該像素點是否為裂縫像素。并且相較于彩色圖像,灰度圖像占的內存更小,處理速度更快,同時將原裂縫圖像轉換為灰度圖像后,在神經網絡中訓練所需的時間復雜度也更小。
常用的獲取圖像灰度圖像算法包括:均值法;最大值法;加權平均法。本文采用的灰度處理方法是計算各個像素點三通道像素值的平均值,使其作為該點的灰度值,如公式(1)所示。
式中:Gray(x,y)——灰度值;
R(x,y)——紅色像素值;
G(x,y)——綠色像素值;
B(x,y)——藍色像素值。
本文實驗運行環(huán)境是基于Keras 框架進行的,Keras的主要優(yōu)點是模塊化程度高,支持當前提出以卷積神經網絡為框架的模型,使用Keras框架編輯的代碼可以使程序可讀性強、通俗易懂、更加簡練、靈活性更強。Keras框架與其他Python基礎框架相比是相對較為高級別的基礎框架,它以構造塊形式去封裝常用的深度學習訓練模塊及計算操作,使用者不需考慮其內部模塊結構的復雜性。其中,本研究的代碼是基于GitHub 已有程序“Road Crack Segmentation Keras”結合其他部分網絡代碼改進而來。該代碼的適配環(huán)境為Python 3.7,Tensorflow-gpu 2.2.0,Keras 2.3.1等一系列適配版本的相關插件。
2.3.1 學習率(Learning Rate)
學習率是深度學習中幾個最為重要的參數之一,它決定著模型能否快速收斂以及精確度等問題[16]。在一個神經網絡模型中,學習率過大或過小都會對網絡產生較大影響。在訓練網絡模型的時候,在開始訓練的前期,網絡需要一個較大的學習率以此快速地收斂到最優(yōu)點附近,但隨著訓練的深入,學習率則需要不斷變小,以此來靠近最優(yōu)點,此時過大的學習率會讓模型在最優(yōu)點附近來回震蕩且幅度較大。因此隨著模型訓練次數的增加,學習率應該先大后小,才可以保證網絡模型在訓練結束時達到或最大限度地靠近最優(yōu)點。本次試驗中采用余弦退火的方法自動調整學習率,如式(2)所示。
式中:lr——灰度值;
base_lr——初始學習率,本文設置為10-3;
epoch——當前的訓練輪次;
T_max——學習率退火的最大epoch 數,設置為300。
2.3.2 迭代周期(epoch)
迭代周期決定了訓練過程中數據集在神經網絡上迭代的次數,直接影響到模型的訓練效果和性能。在訓練過少的epoch后,模型可能沒有充分學習數據集,導致欠擬合;而訓練過多的epoch,模型可能會過度擬合訓練數據,而泛化能力較差。本文選取迭代次數為300輪。
2.3.3 批大小(Batch-Size)
在訓練神經網絡時,通常將數據集分成若干個小批次,每個小批次包含一定數量的樣本。Batch-Size 決定了每個小批次中包含的樣本數量。較大的Batch-Size通??梢约涌煊柧毸俣?,因為每個小批次中的樣本數增加,從而減少了參數更新的次數,這樣可以利用矩陣運算和并行計算的優(yōu)勢,提高訓練的效率;并且可以使訓練過程更加穩(wěn)定,有助于避免訓練過程中的震蕩或發(fā)散問題。
然而,較大的Batch-Size需要更多的內存來存儲參數和梯度,特別是在GPU 上進行訓練時。如果內存不足,可能需要減小Batch-Size 或使用更大的顯存設備。根據電腦的顯存,本文將批大小設置為6。
精確率從預測結果角度出發(fā),描述了二分類器預測出來的正例結果中有多少是真實正例,即該二分類器預測的正例有多少是準確的;召回率從真實結果角度出發(fā),描述了測試集中的真實正例有多少被二分類器挑選了出來,即真實的正例有多少被該二分類器召回。Precision和Recall僅適用于二分類問題,如式(3)、(4)所示。
式中:TP——預測為正類別且真實為正類別的樣本數量;
FP——預測為正類別但實際為負類別的樣本數量;
FN——預測為負類別但實際為正類別的樣本數量。
F1-Score 是精確率和召回率的調和平均值。由于精確率和召回率通常是相互牽制的,優(yōu)化其中一個指標可能會導致另一個指標下降,F1-Score可以幫助綜合考慮這兩者,從而更全面地評估分類器的性能。計算公式如式(5)所示。
式中:P——精確率;
R——召回率。
交并比可以用于評估模型預測的邊界框或分割結果與真實標注之間的重疊程度,取值范圍在0到1之間。當IOU等于1時,表示預測結果完全和真實標注一致;當IOU等于0時,表示預測結果和真實標注沒有任何重疊。計算公式如式(6)所示。
式中:Area of Intersection——預測區(qū)域和真實標注區(qū)域的交集面積;
Area of Union——預測區(qū)域和真實標注區(qū)域的并集面積。
本文首先利用Crack 500[10]公共數據集作為算例。該數據集經過處理后包含3368張裂縫圖像,其中訓練數據集3000張圖像,驗證數據集368張圖像。所有圖像均配備有像素級人工標注的裂縫真值圖像。如圖4所示,為部分Crack 500圖像的分割效果對比,將原始圖像和標記以及改進前后模型的分割二值化圖像直觀展示了出來。從圖4 中可以觀察到,采用原始U-net 網絡對測試集識別的結果會使得原本連續(xù)的裂縫出現斷裂;而本文算法對于較淺裂縫的識別較原U-net網絡更加精確,同時對裂縫形態(tài)的提取更加完整。
圖4 Crack 500效果對比圖
由于路面裂縫與橋梁混凝土裂縫的特征表現形式相同,因此使用遷移學習對較少的橋梁裂縫圖像進行快速訓練,本文設置迭代輪數為30輪。將原始圖像進行剪裁,每張圖像劃分為6個640×360大小的圖片。自數據集總共拍攝了30張圖片,經過預處理之后將180張圖片隨機抽取150張用于訓練,其余30張用于驗證,并對其手動添加標簽文件。
圖5中選取了三張剪裁后的裂縫圖像,對其原始標記和輸入模型得到的標記進行對比。從圖5中可以觀察到,由于橋梁混凝土裂縫相對與路面裂縫所含噪聲較小,最終模型預測出的裂縫形態(tài)與自制標簽裂縫形態(tài)吻合情況出色。
圖5 橋梁裂縫效果對比圖
針對不同模型在不同數據集上的精確率、召回率、F1分數以及交并比進行計算,如表1所示。
表1 模型評價
改進的U-Net在Crack 500數據集上取得了良好的分割效果,精確率為96.53%,召回率為97.29%,F1分數為96.91%,IOU 為93.42%。與原U-Net 相比,改進UNet的Precision 提升了4.42%,Recall 提升了3.75%,F1-Score 提升了4.09%,Intersection-over-Union 提升了4.85%,并在橋梁裂縫自數據集上展現出優(yōu)于Crack 500數據集的各項指標,充分體現了本文所提出的改進U-Net模型在橋梁混凝土裂縫自檢測中的實用性。
本文基于U-Net 提出了性能更優(yōu)的橋梁裂縫檢測模型,實驗結果證明其能較好地檢測混凝土橋梁裂縫。主要結論如下:
(1)通過在原始U-Net的結構中增加一次上采樣過程,使得模型能夠獲得更多的裂縫細節(jié)信息。上采樣過程則能夠恢復圖像的細節(jié)信息,這樣可以使得模型更加準確地檢測到混凝土橋梁裂縫。
(2)在卷積過程中,通過使用全零填充的方式,保護圖像邊緣不受卷積操作的影響,同時使圖像每次卷積后的規(guī)格不變,保證輸入輸出尺寸一致,這樣可以避免在卷積過程中損失圖像的邊緣信息,從而提高了模型的檢測性能。
(3)與原U-Net 相比,改進U-Net 在Crack 500 數據集中Precision提升了4.42%,Recall提升了3.75%,F1-Score 提升了4.09%,Intersection-over-Union 提升了4.85%,并在橋梁裂縫自數據上表現更佳,取得了良好的分割效果。