韋春桃,朱旭陽,張冬梅
(重慶交通大學 土木工程學院,重慶 400074)
20世紀中葉以來,隨著橋梁建設的規模越來越大,對橋梁的安全性、耐久性進行周期性檢測顯得尤為關鍵[1]。橋梁裂縫的出現會造成橋梁結構承載能力下降,引發諸多橋梁病害。因此,橋梁裂縫檢測已成為橋梁養護的重要研究課題之一。
隨著計算機視覺技術的發展,基于圖像的無損檢測技術已經成為國內外橋梁裂縫檢測的研究熱點。常用的數字圖像處理方法有最小代價路徑搜索法[2]、三維多特征檢驗法[3]、K-means聚類分割法[4]等。上述方法能彌補傳統人工檢測主觀性強、勞動密度大的缺點[5],但需要人工設計特征,模型泛化性能不佳。
深度學習的興起進一步推進了橋梁裂縫無損檢測技術的發展。蔡逢煌等[6]提出基于YOLOv3的橋梁表面裂痕檢測算法。吳向東等[7]提出基于神經網絡與條件隨機場的裂縫檢測算法。近年來,許多優秀的目標檢測模型[8-10]在實際場景的應用中取得了良好的效果,但是橋梁裂縫圖像紋理復雜多樣、分布無規律,目標檢測模型的先驗框選取策略無法滿足所有裂縫圖像的尺寸要求,導致檢測結果存在嚴重的漏檢和誤檢現象,并且此類模型的參數量巨大難以部署到移動設備中,不利于實際的工程應用。
針對上述問題,本文設計了一種基于深度分類的輕量級格網橋梁裂縫檢測技術。通過格網化處理方法配合深度分類模型實現對橋梁裂縫圖像的高精度檢測。采用全局平均池化與基于批歸一化層的通道減枝技術對深度分類模型進行輕量化改進,為基于深度學習的橋梁裂縫檢測系統進行邊緣部署提供了思路。
當前主流的目標檢測模型,均采用預先設定先驗框的方法對目標進行識別檢測,該方法應用于一般場景的目標檢測任務時具有良好的檢測效果。但是,如圖1所示,不同于一般檢測目標,橋梁裂縫圖像紋理復雜多樣,分布無規律,通過設定有限個先驗框尺寸無法較好包含所有的橋梁裂縫目標,雖然預測框會根據損失函數進行調整,但是仍然會存在嚴重的漏檢和誤檢現象。

圖1 橋梁裂縫圖像、先驗框設定以及目標檢測模型的檢測效果
文獻[11]的研究表明,橋梁裂縫圖像局部的語義信息不會因為圖像被分割而發生改變,分割后每個含有裂縫的子圖像中依然保留有原始且完整的裂縫語義信息,能夠被深度學習模型學習與識別。根據這一特點,本文設計了格網化處理方法,通過將裂縫圖像劃分到大小相同的網格內,規范圖像中橋梁裂縫的位置分布,以此來解決目標檢測模型應用于橋梁裂縫檢測時存在的漏檢和誤檢問題。
格網化處理方法,首先對原始圖像進行重采樣,將原始圖像變換為長寬相等的圖像,以便于劃分的格網能夠完整包含整幅圖像。然后,將變換后圖像劃分為n×n長寬相等的網格,并賦予每一網格位置信息Pij,其中i,j分別為網格的橫向坐標,縱向坐標 (i,j∈n,n∈N*), 規范橋梁裂縫在圖像中的位置分布。最后,將格網化后的圖像輸入分類模型,對識別為裂縫圖像的網格根據位置信息進行標注實現對橋梁裂縫的檢測。
格網劃分在不同數據集中最優的n取值可能不同,為了能夠客觀確定n的取值,使模型達到最佳的檢測效果,通過遍歷正整數區間選取最佳取值。由于n取值過小時,無法區別裂縫區域與背景區域達到對裂縫位置的詳細定位。而n取值過大時,會存在模型計算量過大的問題。故遍歷的正整數區間設置為(5≤n≤10)。在遍歷過程中引入準確率Sn評價不同n取值時的模型性能來選擇最優的n取值。準確率Sn的表達式如式(1)所示
(1)
其中,n×n是格網化處理所劃分的網格個數,n的取值范圍是 (5≤n≤10,n∈N*),T表示模型正確識別為裂縫圖像與背景圖像的個數。
本文結合1.1節所設計的格網化處理方法與深度分類模型提出了一種格網橋梁裂縫檢測技術,具體實現流程如圖2所示。首先對輸入的原始圖像進行格網化處理,劃分為n×n個邊長相等的網格,規范裂縫圖像的位置分布并分配給每個網格位置信息。然后將分屬于不同網格的圖像輸入深度分類模型,通過卷積層、池化層以及非線性激活函數對輸入圖像進行特征提取并根據提取得到的特征識別橋梁裂縫圖像與背景圖像。最后根據預先分配的位置信息將識別為裂縫的圖像在原始圖像中標注出來實現橋梁裂縫檢測。

圖2 網格化橋梁裂縫檢測技術

圖3 VGG網絡結構及參數分布
VGG網絡是牛津大學和谷歌共同開發的一種深度卷積神經網絡,結構如圖3所示,由5個卷積模塊構成,每個卷積模塊中包含了卷積層(convolutional layer,Conv)和最大池化層(maxpooling layer,MaxPool),最后連接三層全連接層(fully connected layer,FC)實現對目標的識別分類。VGG模型在多個遷移學習任務中的表現要優于GoogLeNet,擁有更好的魯棒性且模型結構簡單更適合部署于實際的工程項目中。相比于AlexNet,VGG模型采用多個3×3的卷積核代替AlexNet中較大卷積核(11×11,7×7,5×5),在保證具有相同感受野的條件下,減少模型參數,提升網絡深度和識別精度[12]。基于上述原因,本文選擇VGG11模型作為分類模型,但是該模型不能直接應用于實際的橋梁表面裂縫檢測,主要原因是VGG11模型的參數量巨大,對硬件存儲空間的要求高,而實際的橋梁裂縫檢測工程大多需要將模型部署到邊緣計算設備、嵌入式設備、移動設備等硬件資源受限的設備上。故本文通過分析VGG11模型的參數分布,使用全局平均池化和基于批歸一化層的通道剪枝技術對模型進行輕量化改進使模型更適合實際的工程應用。
由圖3的VGG11網絡參數分布可知,模型的參數主要集中在全連接模塊(FC Block)的前兩層FC中,故使用全局平均池化(golbal average pooling,GAP)替換這兩層FC以減少模型參數。如圖4所示,不同于FC需要將當前層的每一個節點與上一層的每個節點相連綜合前一層的特征,GAP將Conv輸出的特征圖以自身為單位進行映射,映射結果為一個特征點。
假設最后一次卷積得到的特征圖大小為D×D×M,展開(Flatten)后便擁有D×D×M個節點,其中D表示特征圖的長和寬,M表示特征圖的通道數,當前全連接層有N個節點時,FC的參數量為D×D×M×N。而GAP是以自身為單位進行映射,故不需要計入參數量可以起到大幅減少參數量的目的,并且保留了原有的語義信息可以保證模型的正確識別。

圖4 全連接層(左),全局平均池化(右)
本文只需對橋梁裂縫和背景區域兩種類別進行分類,故模型在應用過程中,會存在大量參數冗余。通道剪枝是一種有效的模型壓縮方法,通過對不重要的神經元、濾波器或者通道進行剪枝,有效壓縮模型的參數量和計算量。因而本文采用通道剪枝技術對模型進行輕量化改進。該方法主要包含3個步驟:①對模型進行稀疏訓練,獲得權值稀疏的神經網絡模型;②根據權值重要性對模型進行剪枝,剔除權值重要性程度低的通道;③微調剪枝后模型恢復模型分類精度[13]。
2.2.1 稀疏化訓練
對模型進行剪枝操作前,需要通過稀疏化訓練使網絡中作為重要性指標的參數在訓練后趨向于0或者等于0,增大重要性指標之間的差異性,以便于模型剪枝時對卷積通道的篩選。
傳統剪枝算法僅依靠參數自身的信息,難以客觀判斷其重要性,容易造成參數誤剪,影響模型性能。批歸一化(batch normalization,BN)可以將輸入數據的分布情況統一為均值為0,方差為1的標準正態分布,加速網絡收斂和改進模型泛化性能,其中的縮放因子更是額外引入的可學習變量能夠作為重要性指標客觀評價通道的重要性程度[14],故在VGG11模型的每一層Conv后添加一層BN層,并將其中的縮放因子作為通道重要性指標衡量卷積通道的重要性。BN層的計算公式如式(2)所示
(2)

(3)
在訓練期間,通過在損失函數L中增加一個關于γ(k)的L1正則項,對模型進行稀疏化。引入正則化系數S增大縮放因子γ(k)之間的差異性,以便更好篩選出重要性較低的通道進行剪枝處理。損失函數公式如式(4)所示

(4)
g(γ)=|γ|
(5)
其中,x,y表示訓練數據和標簽,W表示模型權重,S表示正則化系數,S越大約束力度越大,g(γ) 表示對縮放因子γ(k)進行L1正則化處理,計算過程如式(5)所示。
2.2.2 剪枝與微調
如圖5所示,在完成稀疏訓練之后,BN層中的縮放因子分布差異明顯,重要性程度低的通道縮放因子趨近于0。通過設定全局閾值th對縮放因子小于該值的通道進行剪枝,th=sortp(N), 其中sortp(.)表示對集合N中的元素進行排序并取P位置的數值,P表示需要剪枝的通道數的百分比,N表示所有縮放因子γ的集合 {γ(1),γ(2),…,γ(k)}。

圖5 基于BN層的通道剪枝
最后,將剪枝后的模型進行微調再訓練,恢復模型準確率。
本文數據集由大疆精靈4自帶的相機在重慶馬桑溪長江大橋采集,控制無人機在橋梁裂縫的附近懸停,調整相機鏡頭與橋梁裂縫表面平行,并懸停于橋梁裂縫表面30 cm,讓無人機沿裂縫方向平穩飛行,連續拍照。通過上述方法得到500張高分辨率橋梁裂縫圖像,然后通過滑動窗口法[15]分割采集到的數據集得到10 000張裂縫圖像作為原始數據集。分別使用圖像標注工具Labelimg對原始數據集進行人工標注作為目標檢測模型訓練和測試的數據集;按數據集圖像中是否含有裂縫圖像劃分為裂縫圖像和背景圖像作為分類模型的數據集。圖6為橋梁裂縫數據集的部分樣本圖像及無人機圖像。

圖6 橋梁裂縫數據集的部分樣本圖像及無人機圖像
實驗的硬件環境為:Intel Core i7-9750 h CPU,NVIDIA GeForce GTX 1660Ti GPU;軟件環境為:Windows 10操作系統,CUDA 10.0,cuDNN 7.6.4,Visual Studio 2019,OpenCV 3.4,python 3.6.5,pytorch 1.7.1。
本實驗研究基于深度分類的輕量級格網橋梁裂縫檢測技術的優越性。采用精確度P、召回率R、F1得分以及模型參數量等多個指標進行衡量。精確度P和召回率R的計算公式如下
(6)
(7)
其中,TP表示正確識別出正確樣本的個數,FP表示將錯誤的樣本識別為正確樣本的個數,FN表示將正確的樣本識別為錯誤樣本的個數。
為了全面評估模型,本文綜合精確度和召回率使用F1得分對模型進行更加客觀的評價。F1得分計算公式如下
(8)
將VGG11模型最后FC Block中的前兩層FC替換為GAP,設置初始學習率為0.0002,訓練和測試時每個批次中訓練樣本的數量(Batch size)為32,使用Adam優化器,迭代次數(Epoch)設置為50。在此條件下分別訓練原始VGG11模型和改進后模型VGG-GAP。在精確度,模型參數量兩個方面進行對比。結果見表1,將模型的FC替換為GAP后,模型參數量得到大幅縮減,為原始模型的15%。在識別精確度方面,比原始模型提升了0.3%,這說明GAP在減少模型參數量的同時可以在一定程度上抑制模型的過擬合,提高了模型的準確率和魯棒性。

表1 全局平均池化對模型性能的影響
本文采用基于BN層的剪枝技術壓縮模型。該技術主要分為3個步驟:①利用L1正則化對模型進行稀疏訓練,獲得權值稀疏的神經網絡模型;②將BN層中的縮放因子γ作為衡量卷積通道重要性的指標對模型進行剪枝,剔除重要性程度低的通道;③微調剪枝后模型恢復模型精度。其中正則化系數S和剪枝率(Percent)是影響剪枝結果的兩個重要因素。故對這兩個參數的設置進行實驗,分別研究不同正則化系數、不同剪枝率對模型性能的影響,選取最佳參數構建模型。
3.4.1 不同正則化系數對模型影響
在模型訓練過程中,正則化系數S會影響對縮放因子的約束力度,會給模型訓練的結果帶來不同程度的影響。為考察其影響程度,本實驗在不同正則化系數下對模型進行訓練。
設置正則化系數S分別為:0、0.001、0.0001、0.000 01,對模型的損失函數和精確度的變化情況進行統計,設置初始學習率為0.0002,迭代次數(Epoch)設置為50。實驗結果如圖7所示,當正則化系數S為0.001時,訓練結束后模型精確度比其它條件下低了3個百分點,模型的損失函數波動巨大,收斂速度緩慢,收斂后比其它條件下的損失函數高了0.05。由此可得,正則化系數S過高時,對縮放因子γ約束過大,不利于模型的訓練導致模型的精確度下降,訓練收斂后損失函數變大。在正則化系數S設置為0.0001和0.000 01時,模型性能與正常訓練時效果相近,故在保證性能相近和縮放因子(γ)分布稀疏化明顯的情況下,選擇正則化系數S為0.0001對模型進行稀疏化訓練。

圖7 不同正則化系數對模型性能的影響
3.4.2 不同剪枝率對模型影響
在正則化系數S為0.0001的條件下,本實驗設置0~90%十組不同剪枝率對經過稀疏化訓練后得到的模型進行剪枝處理,研究不同剪枝率情況下的模型性能以選取減枝效果最佳的剪枝率。實驗結果見表2,隨著剪枝率的提升,模型的參數量得到有效的縮減。甚至在剪枝率為20%~40%時,由于模型參數量減少,抑制模型過擬合,微調再訓練后的模型精度超過了未剪枝的模型。當剪枝率設置為90%時,模型參數量僅有0.34 MB,遠小于原始模型,模型識別的精確度卻僅比原始模型降低了0.47%仍然可以滿足對橋梁裂縫的高精度識別。綜合考慮模型參數量和模型精確度,最終選用剪枝率為90%對模型進行減枝。

表2 不同剪枝率下模型的測試結果
為了驗證基于卷積神經網絡的輕量級格網橋梁裂縫檢測技術的優越性,使用改進后的輕量級格網化橋梁裂縫檢測模型(M_model)與兩階段目標檢測模型Faster rcnn,單階段目標檢測模型YOLOv4以及基于原始VGG11的格網化橋梁裂縫檢測模型(M_model-VGG11),在橋梁裂縫檢測應用中的檢測效果進行對比測試。分別使用預先標注的目標檢測數據集和目標分類數據集對目標檢測模型和本文方法進行訓練。訓練時,迭代次數設置為50,初始學習率設置為0.0002。使用本文方法時,考慮到雖然格網化處理方法劃分的n取值越大劃分的結果越詳細但是網格內的裂縫圖像包含的特征越少會影響模型的精確度并且會增大計算量,而n的取值過小時,無法較好的區別裂縫區域與背景區域達到對裂縫位置詳細定位的效果,綜合考慮這兩個因素并結合1.1節中的評價標準,設置M_model 中的n取值為10進行實驗。訓練完成后各模型測試后的性能統計結果見表3。

表3 不同模型的橋梁裂縫檢測效果對比
由表3可知,本文方法精確度P和召回率R的綜合評價指標F1得分達到了0.97,比Faster rcnn模型提高了0.3,更是比YOLOv4模型提高了0.51。在模型參數量方面,相比于原始模型M_model-VGG11的255 MB,Faster rcnn的523 MB以及YOLOv4的244 MB,本文所用模型僅有0.34 MB遠小于上述所有模型。由此可得,本文所提方法在橋梁裂縫檢測場景任務中檢測精度更高,模型參數量更小。
結合圖8的檢測效果圖做進一步分析可知,單階段目標檢測模型YOLOv4在應用于橋梁裂縫檢測時雖然檢測的精確度較高,檢測出的裂縫位置基本正確,但是由于先驗框選取策略不適用于紋理復雜,分布無規律的橋梁裂縫檢測場景,所以存在有嚴重的裂縫目標漏檢現象。兩階段目標檢測模型Faster rcnn將檢測過程分為兩部分,首先通過區域生成網絡(region proposal network,RPN)生成大量的先驗框(Anchor box),然后對先驗框位置區域進行調整與分類。這一過程雖然有效提高了模型應用于橋梁裂縫檢測時的召回率,能夠檢測出圖像中大部分的裂縫區域,但是仍然存在少部分裂縫目標漏檢的現象,且在第一張效果圖中錯誤的將積灰區域誤檢為裂縫區域。結合格網化處理的深度分類模型M_model-VGG11能夠正確、完整檢測出所有橋梁裂縫圖像中的裂縫區域且檢測結果更加詳細,標注框定更加規范。本文所用模型M_model的檢測效果與M_model-VGG11基本相同。綜上所述,本文設計的基于深度分類的輕量級格網橋梁裂縫檢測技術在橋梁裂縫檢測場景中擁有良好的檢測效果,為基于深度學習的橋梁裂縫檢測系統進行邊緣部署提供了思路。

圖8 不同模型的橋梁裂縫檢測效果可視化
本文提出了一種基于深度學習的輕量級格網橋梁裂縫檢測技術。根據橋梁裂縫圖像的圖像特征,設計格網化處理方法,規范橋梁裂縫在圖像中的位置分布,結合高性能的深度分類模型實現對橋梁裂縫的高精度檢測。通過分析VGG11模型的參數量分布,使用GAP和基于BN層的通道剪枝對模型進行輕量化改進,顯著減少了模型的參數量,為基于深度學習的橋梁裂縫檢測系統進行邊緣部署提供了思路。實驗結果表明,本文提出的裂縫檢測技術相較于Faster rcnn,YOLOv4的F1得分分別提高了0.3和0.53,改進前后模型的參數量分別為247.2 MB和0.62 MB。