王 翀,韓振奇 ,徐浩煜,祝永新,徐 勝,陳 夏
1.中國科學(xué)院 上海高等研究院,上海 201210
2.中國科學(xué)院大學(xué),北京 100049
3.聯(lián)想集團(tuán)研究院 上海分院,上海 201210
4.上海微小衛(wèi)星工程中心,上海 201210
裂紋檢測是指從一幅圖像中定位出裂紋所在區(qū)域。在實(shí)際應(yīng)用中,相較于簡單地判斷圖像中有無裂紋,定位出裂紋所在區(qū)域具有更重要的意義。通過定位出裂紋所在區(qū)域,能夠?qū)υO(shè)備的健康狀況進(jìn)行評估,從而對事故的發(fā)生進(jìn)行預(yù)警。裂紋檢測技術(shù)在建筑、橋梁、航空、汽車、工業(yè)設(shè)備等領(lǐng)域都具有廣泛的應(yīng)用價值。
圖像處理技術(shù)是裂紋檢測的主要方法之一,中外許多學(xué)者使用圖像處理的方法進(jìn)行裂紋檢測[1-6]。2003年,Qader等[1]比較了快速哈爾變換(FHT)、快速傅里葉變換(FFT)、Sober邊緣檢測和Canny邊緣檢測對裂紋的檢測效果,驗證了這幾種算法中快速哈爾變換效果最好。但是該算法只能夠檢測出圖像中明顯的裂紋,很容易漏檢不明顯的裂紋。2011年,賈超等[2]提出基于小波多尺度積的邊緣檢測方法進(jìn)行裂紋檢測,一定程度上解決了噪聲和壞邊的問題,提升了檢測的效果。2014年,徐歡等[3]提出一種基于改進(jìn)Canny算子的裂縫檢測技術(shù),通過結(jié)合形態(tài)學(xué)濾波進(jìn)一步提高了裂紋檢測的精度。但是該算法仍然無法很好地區(qū)分裂紋和其他的邊緣特征。2015 年,Yeum 等[4]提出了一種滑動窗口加分類的方法。該算法結(jié)合11 種類型通道的圖像邊緣特征,產(chǎn)生一個強(qiáng)分類器,對窗口區(qū)域的特征進(jìn)行判斷,能夠很好地區(qū)分近似裂紋的特征。然而基于邊緣檢測的方法容易受到亮度變化、顏色失真等噪聲的影響。2016 年,Cha 等[5]基于總變異去噪技術(shù)減少圖像中的噪聲,并增強(qiáng)圖像的邊緣可檢測性,一定程度上避免了環(huán)境噪聲的影響。但是由于實(shí)際拍攝時圖像數(shù)據(jù)差異很大,該類方法在實(shí)際應(yīng)用中仍然受到一定的限制。
基于深度學(xué)習(xí)方法雖然存在數(shù)據(jù)標(biāo)注過困難、檢測速度慢等問題,但與圖像處理方法相比往往具有更好的檢測效果。2017年,Cha等[7]提出使用滑動窗口方法,以卷積神經(jīng)網(wǎng)絡(luò)作為分類器,進(jìn)行網(wǎng)格級別的裂紋檢測。該算法的窗口大小為256×256像素,要求輸入的圖像必須具有非常大的像素,且由于每個窗口圖像都要輸入神經(jīng)網(wǎng)絡(luò)進(jìn)行裂紋非裂紋的分類,檢測速度非常慢。Chen等[8]提出卷積神經(jīng)網(wǎng)絡(luò)和樸素貝葉斯結(jié)合的方法,同樣使用滑動窗口進(jìn)行網(wǎng)格級裂紋檢測。該算法的窗口大小為120×120 像素,將窗口區(qū)域圖像輸入卷積神經(jīng)網(wǎng)絡(luò)中,分類為裂紋和非裂紋。在該方法中,使用樸素貝葉斯方法剔除被預(yù)測為裂紋的非裂紋區(qū)域,對檢測的準(zhǔn)確率有一定程度的提升。為了進(jìn)行更加細(xì)粒度的檢測,2018年,Dung 等[9-10]提出使用全卷積網(wǎng)絡(luò)(FCN)進(jìn)行裂紋檢測。該方法與之前的方法相比檢測的速度有較大的提升,且具有像素級別的檢測效果。但該方法對于細(xì)裂紋和接近邊界區(qū)域裂紋的檢測效果并不好,且需要對圖像中的裂紋進(jìn)行像素級類別標(biāo)注,該過程需要耗費(fèi)大量的時間。2019年,Zou等[11]結(jié)合SegNet的卷積-反卷積結(jié)構(gòu),提出了DeepCrack裂紋檢測網(wǎng)絡(luò),利用多尺度的裂紋特征進(jìn)行檢測。該方法具有較好的檢測效果,但是同樣需要進(jìn)行像素級標(biāo)注,且由于其網(wǎng)絡(luò)結(jié)構(gòu)比較復(fù)雜,檢測速度相對較慢。
本文針對現(xiàn)有裂紋檢測方法數(shù)據(jù)標(biāo)注困難、訓(xùn)練時間久、檢測速度慢的問題,設(shè)計了一種高效裂紋檢測算法。主要貢獻(xiàn)有以下幾點(diǎn):
(1)提出了一種基于改進(jìn)顯著圖的弱監(jiān)督裂紋檢測算法,僅需對分類任務(wù)進(jìn)行訓(xùn)練,便可實(shí)現(xiàn)像素級裂紋檢測。解決了現(xiàn)有像素級裂紋檢測算法數(shù)據(jù)標(biāo)注困難的問題。
(2)針對目標(biāo)問題設(shè)計了CrackNet 特征提取網(wǎng)絡(luò)。該網(wǎng)絡(luò)與主流網(wǎng)絡(luò)相比具有更佳的裂紋特征提取性能;且占用內(nèi)存較小,對設(shè)備的要求較低。
實(shí)驗表明,基于改進(jìn)顯著圖的高效裂紋檢測算法只需標(biāo)注圖像類別,大大減少了數(shù)據(jù)標(biāo)注時間;訓(xùn)練時間僅有23 min,更方便進(jìn)行模型迭代;在自制數(shù)據(jù)集上達(dá)到52%的平均精度,能夠從復(fù)雜背景中檢測出裂紋;且具有105 幀/s的檢測速度,是一種高效裂紋檢測算法。
基于改進(jìn)顯著圖的高效裂紋檢測算法主要由兩個部分組成:(1)特征學(xué)習(xí)部分,該部分主要是訓(xùn)練一個高效裂紋特征提取網(wǎng)絡(luò)。即構(gòu)建一個高效卷積神經(jīng)網(wǎng)絡(luò),并使用標(biāo)記好類別的數(shù)據(jù)對該網(wǎng)絡(luò)進(jìn)行訓(xùn)練,使該網(wǎng)絡(luò)能夠有效地提取出圖像中的裂紋特征;(2)裂紋檢測部分,該部分主要是基于改進(jìn)的顯著圖實(shí)現(xiàn)裂紋檢測。通過上一步訓(xùn)練好的網(wǎng)絡(luò)提取圖像中的裂紋特征,并根據(jù)這些特征計算出包含裂紋位置信息的顯著圖,從而實(shí)現(xiàn)裂紋檢測功能。該方法的整體架構(gòu)如圖1所示。
近年來,卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)不斷改進(jìn),這些網(wǎng)絡(luò)在大規(guī)模競賽取得了越來越好的成績,但是由于復(fù)雜的網(wǎng)絡(luò)訓(xùn)練較為困難,樣本不足時容易過擬合,在小樣本任務(wù)中,復(fù)雜網(wǎng)絡(luò)不一定適合。本文針對裂紋問題,設(shè)計了CrackNet卷積神經(jīng)網(wǎng)絡(luò),以提取出更有效的裂紋特征,供檢測階段使用。
圖1 方法結(jié)構(gòu)圖
圖2 CrackNet網(wǎng)絡(luò)結(jié)構(gòu)
CrackNet擁有七個卷積層和三個全連接層,其中三個卷積層后連接了最大池化層。網(wǎng)絡(luò)的輸入大小為224×224×3,經(jīng)過圖像預(yù)處理,原始圖像被歸一化到該固定尺寸輸入到網(wǎng)絡(luò)中,經(jīng)過各層神經(jīng)網(wǎng)絡(luò),分類為裂紋或非裂紋。網(wǎng)絡(luò)的具體結(jié)構(gòu)如圖2所示。
該卷積神經(jīng)網(wǎng)絡(luò)使用交叉熵?fù)p失函數(shù),具體定義如下:
其中,N表示樣本個數(shù),j表示圖像類別(j為0表示有裂紋,j為1 表示無裂紋)。pij表示第i張圖像真實(shí)類別為j的概率(真實(shí)類別為j時pij=1,否則pij=0),Sij表示第i張圖像類別為j的預(yù)測概率。λ表示 l2 正則化系數(shù),w表示網(wǎng)絡(luò)參數(shù)。
為了減小參數(shù)量,借鑒了文獻(xiàn)[12]中提出的結(jié)構(gòu),先進(jìn)行1×1的卷積,再進(jìn)行3×3的卷積。通過該結(jié)構(gòu)一方面實(shí)現(xiàn)了跨通道的交互和信息整合,增加了模型的非線性表達(dá)能力;另一方面壓縮了通道數(shù),進(jìn)行了數(shù)據(jù)降維,加快了計算速度。
為了使網(wǎng)絡(luò)更加高效,借鑒文獻(xiàn)[13]中提出的方法對網(wǎng)絡(luò)進(jìn)行了裁剪。在裁剪時考慮每一層對于裁剪的敏感程度,通過單獨(dú)裁剪每一層,查看其裁剪后的準(zhǔn)確率。對于裁剪較敏感的層,使用更小的裁剪力度,或者跳過這些層不進(jìn)行裁剪。
最終的模型占用內(nèi)存大小僅為89 MB,同時具有比主流卷積神經(jīng)網(wǎng)絡(luò)更佳的效果。具體的實(shí)驗對比將在1.3節(jié)中詳細(xì)闡述。
1.2.1 顯著圖的計算
Simonyan 等人在文獻(xiàn)[14]中提出將顯著圖用于深度學(xué)習(xí)可視化,通過計算最終的類別得分對原圖的梯度,可得到原圖中每個像素點(diǎn)對于最終結(jié)果的影響。
具體地,給定一張圖像I,圖像的類別C和卷積神經(jīng)網(wǎng)絡(luò)對于該類別的得分SC。
假定圖像I與最終的類別得分SC存在的是線性關(guān)系:
很容易得發(fā)現(xiàn)w代表了圖像中像素點(diǎn)對最終類別得分的影響。
在實(shí)際問題中,圖像與最終的類別得分當(dāng)然不是簡單的線性關(guān)系。但是一定存在函數(shù)關(guān)系使Sc=Fc(I)。由此可得圖像中像素點(diǎn)I(x,y)對于結(jié)果的影響為:
因此,通過公式(3)計算原圖中各個像素點(diǎn)對分類結(jié)果的影響,將其繪制成顯著圖,即可形象地表現(xiàn)出原圖中關(guān)鍵特征的位置。具體的效果如圖3所示。
圖3 文獻(xiàn)[12]中提出的顯著圖
1.2.2 基于改進(jìn)顯著圖的高效裂紋檢測
使用來自多種場景的裂紋圖像訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò),通過對大量不同場景進(jìn)行學(xué)習(xí),使卷積神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)到裂紋的特征,消除背景的影響。
此時卷積神經(jīng)網(wǎng)絡(luò)能夠提取出裂紋的特征,并根據(jù)這些特征判斷圖像的類別。
通過在訓(xùn)練好的卷積網(wǎng)絡(luò)各層后加入端點(diǎn),保存此處的特征。在輸出類別得分時同時對端點(diǎn)處數(shù)值進(jìn)行輸出,從而得到隱藏層特征圖Mi。
由于原圖I和第i個卷積層提取的特征圖Mi之間存在復(fù)雜的非線性關(guān)系Mi=Fi(I)。由公式(3)可知,通過
同樣可以求出原圖中各個像素點(diǎn)對特征圖Mi的影響。本研究中Mi取最后一層卷積(Conv7)特征。
具體的,存在特征圖Mi和原圖I。由1.2.1小節(jié)可知,原圖中像素點(diǎn)I(x,y)對特征圖中特征Mi,(u,v)的影響程度w(x,y,u,v)可表示為兩者的梯度關(guān)系,即:
則原圖中該像素點(diǎn)I(x,y)對Conv7 層特征圖的影響程度可表示為特征圖中所有特征對像素點(diǎn)I(x,y)的梯度之和,即
通過以上方法計算原圖中每個像素點(diǎn)對裂紋特征圖Mi的影響程度。
之后根據(jù)各個像素點(diǎn)對裂紋特征圖的影響程度計算裂紋的位置。
具體的,如果某像素點(diǎn)處的w(x,y)接近于0,代表其對裂紋特征圖幾乎沒有影響,對應(yīng)的為背景區(qū)域。
而w(x,y)的絕對值越大,代表該像素點(diǎn)對裂紋特征圖的影響較大,對應(yīng)的為裂紋區(qū)域。
由此通過判斷w(x,y)的數(shù)值,計算圖像每個像素點(diǎn)是否屬于裂紋區(qū)域:
其中,w(x,y)可通過公式(6)得出,σ取接近于0 的數(shù)值。ci代表圖像中的像素點(diǎn)。
將篩選出的裂紋像素點(diǎn)處的w(x,y)線性變換到0~255 的范圍,便可得到如圖4(b)所示的裂紋顯著圖,該顯著圖與原圖具有相同的大小。圖中白色區(qū)域即為裂紋所在位置。
圖4 裂紋顯著圖
基于改進(jìn)顯著圖的裂紋檢測依賴于卷積神經(jīng)網(wǎng)絡(luò)提取的裂紋特征。如果使用低層特征,非裂紋信息沒有得到有效地過濾,顯著圖中會包含較多的噪聲;而如果使用全連接層特征,一些不明顯的裂紋會被忽略掉,同樣影響檢測的效果。由于卷積層主要進(jìn)行局部特征的提取,全連接層進(jìn)行全局特征的整合,使用最后一層卷積(Conv7)特征,既對無關(guān)特征進(jìn)行了有效的過濾,又避免了一些裂紋特征被忽略,因此具有較為清晰完整的結(jié)果。
為了做進(jìn)一步驗證,在圖5中以可視化的形式對比了基于Conv6、Conv7、FC8層特征的裂紋顯著圖。實(shí)驗結(jié)果表明基于最后一層卷積(Conv7)特征的顯著圖與基于Conv6特征的顯著圖相比具有更少的噪聲;與基于FC8特征的顯著圖相比檢測結(jié)果更加完整。
圖5 基于不同層特征的裂紋顯著圖
1.2.3 后處理
通過上述過程,得到了初步的裂紋檢測結(jié)果,且像素點(diǎn)的亮度代表對于裂紋特征的影響程度。因此,設(shè)定一定的閾值t進(jìn)行圖像二值化,可以篩選掉圖像中影響不大的像素點(diǎn),并使影響較為顯著的像素點(diǎn)更加明顯。實(shí)驗中將t設(shè)置為12。
此時的裂紋位置以零散點(diǎn)的形式進(jìn)行顯示,為了表示出裂紋所在區(qū)域,通過核大小為3×3的膨脹操作將這些點(diǎn)連接成區(qū)域,并在之后進(jìn)行同樣核大小的腐蝕操作防止區(qū)域擴(kuò)大。
處理后的檢測結(jié)果如圖6(c)所示。圖6(d)中GT代表ground truth,是裂紋所在的真實(shí)區(qū)域,是為了驗證方法有效性所進(jìn)行的像素級標(biāo)注。
圖6 最終的裂紋檢測結(jié)果
本文實(shí)驗中使用的是自制裂紋數(shù)據(jù)集,數(shù)據(jù)集中圖像一部分由合作方提供,一部分由作者從真實(shí)環(huán)景下采集。數(shù)據(jù)集中圖像包含道路、橋梁、墻體和工業(yè)設(shè)備等多種場景,背景較為復(fù)雜,裂紋種類多樣。
其中,23.5%的圖像處于簡單場景,背景較為單調(diào),裂紋和非裂紋的對比較為明顯;55.5%的圖像處于復(fù)雜場景,圖像中有強(qiáng)烈的明暗對比干擾、其他邊緣信息的干擾或者斑點(diǎn)污漬的干擾;其余21%的圖像中背景雜亂,存在近似裂紋的邊緣特征。因此檢測該數(shù)據(jù)集中的裂紋是一項難度較大的任務(wù)。數(shù)據(jù)集中部分圖像如圖7所示。
圖7 數(shù)據(jù)集中的部分裂紋圖像
數(shù)據(jù)集中共包含1 600 張圖像,其中800 張裂紋,800張非裂紋,所有圖像的原始大小為224×224像素,均為RGB 彩色圖像。實(shí)驗中將其劃分為兩個獨(dú)立的子集,1 200張作為訓(xùn)練集,400張作為測試集,每個集合中裂紋和非裂紋圖像各占一半;并對測試集中的200張裂紋圖像進(jìn)行了像素級標(biāo)注,用作檢測階段的測試,標(biāo)注圖像如圖6(d)所示。通過對比檢測結(jié)果與標(biāo)注的裂紋位置,評估檢測的性能。數(shù)據(jù)的分布信息如表1所示。
表1 裂紋數(shù)據(jù)集分布信息
實(shí)驗在具有兩塊Tesla K80 顯卡的服務(wù)器上進(jìn)行。訓(xùn)練時使用文獻(xiàn)[15]中提出的Xavier 方法初始化權(quán)值,以小批量梯度下降法進(jìn)行參數(shù)更新,批大小設(shè)置為16,l2 正則化系數(shù)λ被設(shè)置為4E-5。在訓(xùn)練過程中,初始化學(xué)習(xí)率被設(shè)置為0.003,并通過指數(shù)衰減的方式下降,每隔兩個時期(epochs)學(xué)習(xí)率下降為原來的0.98。
訓(xùn)練過程中經(jīng)過約45epochs的模型達(dá)到收斂,訓(xùn)練時間約為23 min。訓(xùn)練過程中損失值的變化如圖8所示。
圖8 訓(xùn)練過程中的損失值變化
通過分類準(zhǔn)確率(Accuracy)可以直觀地對比各種卷積神經(jīng)網(wǎng)絡(luò)的性能。計算方法為:
同時,使用F1 分?jǐn)?shù)(F1)和平均精度(AP)進(jìn)行檢測算法的性能評估。
F1 分?jǐn)?shù)又稱平衡F 分?jǐn)?shù),是精確率(Precision)和召回率(Recall)的調(diào)和平均值,計算方法為:
AP 也是一種綜合精確率和召回率的評估指標(biāo),是召回率曲線上的點(diǎn)對應(yīng)的精確率的平均值。計算方法為:
其中,r代表不同的召回率(Recall)。
為了測試CrackNet的性能,實(shí)驗中在具有400張圖像(200張有裂紋和200張無裂紋)的測試集上直觀地對比各種卷積神經(jīng)網(wǎng)絡(luò)的分類準(zhǔn)確率(Accuracy)。在得到充分訓(xùn)練的情況下,每個網(wǎng)絡(luò)在測試集上的實(shí)驗結(jié)果如表2所示。
表2 卷積神經(jīng)網(wǎng)絡(luò)的性能對比
根據(jù)結(jié)果可以得知,本文提出的CrackNet具有更高的分類準(zhǔn)確率。同時與其他網(wǎng)絡(luò)相比占用的內(nèi)存較小,對設(shè)備的要求較低。
這里根據(jù)1.3節(jié)介紹的評價指標(biāo)測試檢測算法的性能。實(shí)驗中將提出的方法與基于改進(jìn)Canny 算子的裂紋檢測方法[2]進(jìn)行了對比,以驗證本文算法的有效性。從表3可以看出,本文提出的算法在無需對位置進(jìn)行標(biāo)注的前提下,具有52%的平均精度,而基于改進(jìn)Canny算子的裂紋檢測方法平均精度僅有20.2%。本文提出的算法基于卷積神經(jīng)網(wǎng)絡(luò)提取的特征進(jìn)行裂紋檢測,與傳統(tǒng)基于邊緣檢測的方法相比,具有更佳的性能。
表3 檢測算法的性能對比
同時,本文提出的算法具有105 幀/s 的檢測速度,能夠達(dá)到實(shí)時檢測的效果。
另外,從圖6(c)的檢測結(jié)果可以看出,本文提出的算法能夠較好地排除近似裂紋邊緣和復(fù)雜環(huán)境的干擾,較為完整地檢測出復(fù)雜場景中的裂紋。
本文提出了一種無需位置標(biāo)注的高效裂紋檢測方法,使用卷積神經(jīng)網(wǎng)絡(luò)提取出的特征,計算包含圖像中裂紋位置信息的顯著圖,從而進(jìn)行裂紋檢測。該方法與以往基于深度學(xué)習(xí)的檢測算法相比,僅需對分類任務(wù)進(jìn)行訓(xùn)練便可實(shí)現(xiàn)像素級檢測,解決了現(xiàn)有像素級檢測算法數(shù)據(jù)標(biāo)注困難的問題;同時訓(xùn)練時間短、檢測速度快;能夠排除背景的干擾,較為有效地檢測出復(fù)雜場景中的裂紋。
該算法為裂紋檢測方法提出了一種新的思路,即卷積神經(jīng)網(wǎng)絡(luò)提取的特征中已經(jīng)包含了位置信息,可以通過此特征計算裂紋位置,從而進(jìn)行檢測。優(yōu)化卷積神經(jīng)網(wǎng)絡(luò)或后處理方法能夠進(jìn)一步提升檢測的效果。