鐘梅嘉,李 寧,2,石 林,2,袁寶華,2,莊麗華,2,徐守坤,2+
(1.常州大學 計算機與人工智能學院 阿里云大數(shù)據(jù)學院 軟件學院,江蘇 常州 213164; 2.常州大學 江蘇省石油化工過程關(guān)鍵設(shè)備數(shù)字孿生技術(shù)工程研究中心,江蘇 常州 213164)
人工裂縫檢測方法完全依賴于檢測人員的經(jīng)驗,存在效率低、評估結(jié)果不客觀、成本高、危險性高的缺點。因此,有必要實現(xiàn)道路裂縫的自動化檢測。近年來隨著人工智能的發(fā)展,深度學習方法開始應(yīng)用到道路裂縫檢測任務(wù)中,文獻[1,2]將分割網(wǎng)絡(luò)UNet、SegNet引入裂縫檢測任務(wù)中,有效提高了檢測的準確性。Zou等[3]提出基于SegNet的道路裂縫檢測網(wǎng)絡(luò)DeepCrack,將編碼層和解碼層輸出的相同尺度特征進行成對融合,再將所有融合圖串聯(lián)融合,作為網(wǎng)絡(luò)的輸出。Fan等[4]通過設(shè)計多層擴展模塊和分層特征學習模塊來提高檢測的準確率。Ren等[5]提出了一種由擴展卷積、空間金字塔池和跳躍連接模塊組成的網(wǎng)絡(luò)。以上幾種方法利用多尺度特征融合的思想有效提高了裂縫檢測性能,但易受噪聲影響,存在漏檢問題。為解決噪聲對裂縫檢測造成的影響,Lau等[6]采用殘差網(wǎng)絡(luò)提取裂縫特征,并引入SCSE[7]模塊抑制噪聲。為解決裂縫與背景對比度低的問題,Li等[8]引入通道注意力機制,以增強網(wǎng)絡(luò)提取裂縫特征信息的能力。
雖然上述方法與人工方法相比提高了分割精度,但仍存在一些不足,一方面,裂縫分布雜亂無規(guī)律,形狀、尺寸不固定,目前的裂縫檢測方法很難保證裂縫的連續(xù)性;另一方面,裂縫的拓撲結(jié)構(gòu)復(fù)雜,細小裂縫多,容易受噪聲影響,造成漏檢的現(xiàn)象。
基于此,本文提出一種基于注意力機制和多尺度特征融合的裂縫檢測方法EAFNet。在編碼部分使用殘差網(wǎng)絡(luò)和通道注意力機制設(shè)計邊緣細化模塊來提高對于裂縫細節(jié)信息的提取能力;設(shè)計了基于注意力機制的多尺度特征融合模塊,將多尺度特征融合與注意力機制相結(jié)合,解決裂縫檢測任務(wù)中的連續(xù)性問題;在解碼部分設(shè)計融合優(yōu)化模塊,在利用注意力機制提取裂縫細節(jié)信息的同時,采用空洞卷積來擴大感受野,兼顧了細小裂縫的檢測和裂縫檢測的連續(xù)性。
Ronneberger等提出的UNet是基于全卷積神經(jīng)網(wǎng)絡(luò)的分割網(wǎng)絡(luò),由編碼器、解碼器和跳躍連接構(gòu)成,在解碼器部分圖像經(jīng)過多次的卷積和池化操作,得到低分辨率的抽象特征圖,該特征圖像輸入解碼器經(jīng)過相同次數(shù)的卷積上采樣進行還原,跳躍連接就是將以上兩部分中同尺度的特征圖拼接在一起。
Gao等[9]提出的Res2 Net是在ResNet的基礎(chǔ)上進行改進,用一組卷積代替原本的單一卷積核的結(jié)構(gòu),在單個殘差塊內(nèi)增加多個殘差結(jié)構(gòu),這種類殘差結(jié)構(gòu)能夠獲取不同數(shù)量和感受野大小的特征組合,增加每層網(wǎng)絡(luò)感受野,獲取更豐富的上下文信息。
注意力機制是一種信息選擇機制,通過自動學習的方式獲取信息的重要程度,即權(quán)重,根據(jù)權(quán)重篩選有用信息并抑制與任務(wù)不相關(guān)的信息。
Wang等[10]在ECANet中提出了一種通道注意力模塊,在SE模塊[11]的基礎(chǔ)上采用了局部跨通道交互策略,使用一維卷積來代替原來的FC層,大大降低參數(shù)量的同時加強特征通道間的聯(lián)系。
Fu等[12]提出了一個雙注意力網(wǎng)絡(luò)(DANet)來自適應(yīng)地集成局部特征與其全局依賴關(guān)系,其位置注意力模塊和通道注意力模塊分別對空間和通道維度的語義相互依賴關(guān)系進行建模。
由于在裂縫檢測任務(wù)中,圖像中包含光線、水漬和陰影等干擾因素,背景噪聲會對檢測產(chǎn)生干擾,混淆背景和裂縫,因此本文通過引入注意力機制來抑制噪聲,更多地提取裂縫信息,提高裂縫檢測性能。
Li等[13]提出將Bce loss和Dice loss進行組合來解決分割任務(wù)中前后景不平衡的問題。組合損失函數(shù)能使模型訓練更加穩(wěn)定,同時能解決圖像中前后景像素分配不均的問題,從而提高分割精度。
本文提出一種道路裂縫檢測方法EAFNet(ER-AFF-FO-Net),此方法基于UNet的編碼器-解碼器結(jié)構(gòu),整體網(wǎng)絡(luò)架構(gòu)如圖1所示,在編碼部分對Res2 Net進行改進,增加注意力機制來增強提取有效特征的能力,使用改進后的邊緣細化模塊(edge refinement,ER)替換傳統(tǒng)的雙層卷積運算,編碼器包括5層,每層包含3個ER模塊;為了解決裂縫分割任務(wù)完整性和連續(xù)性的問題,本文在網(wǎng)絡(luò)中間層設(shè)計了基于注意力機制的多尺度特征融合模塊(attention-based multi-scale feature fusion module,AMFF),將前兩層和最后一層編碼層的輸出特征融合后經(jīng)過位置注意模塊,通過所有位置的特征的加權(quán)和來選擇性地聚合每個位置的特征,相似的特征將相互關(guān)聯(lián);在解碼器部分將上采樣和對應(yīng)編碼層的特征通過我們設(shè)計的融合優(yōu)化模塊(fusion optimization,F(xiàn)O),在利用注意力機制保留裂縫細節(jié)信息的同時,采用空洞卷積來擴大感受野,兼顧了裂縫檢測的完整性和連續(xù)性。
圖1 EAFNet網(wǎng)絡(luò)結(jié)構(gòu)
裂縫邊緣拓撲結(jié)構(gòu)復(fù)雜、細小裂縫多,在特征提取階段,卷積模塊中的雙層傳統(tǒng)卷積層結(jié)構(gòu)提取出的特征有限,并且隨著網(wǎng)絡(luò)加深,多次的卷積和池化的操作導(dǎo)致提取圖像特征過程中會損失圖像的細節(jié)信息。為了提高網(wǎng)絡(luò)對裂縫細節(jié)信息的提取能力,本文設(shè)計了ER模塊提高特征的提取能力。邊緣細化模塊的結(jié)構(gòu)如圖2所示。
圖2 邊緣細化模塊
輸入ER模塊的特征x∈RH×W×C在經(jīng)過1×1卷積后被均勻分為n個特征子集xk, 其中k∈{1,2,…,n}, 每個子集xk通道數(shù)均為C/n。 當k≠1時,xk有對應(yīng)的3×3卷積,每個特征子集xk經(jīng)過卷積后的輸出為yk
(1)
式中:Conv3(·) 表示進行卷積核為3×3的卷積操作,將所有輸出yk拼接后通過1×1的卷積恢復(fù)為原始通道數(shù)。輸出的特征y∈RH×W×C再經(jīng)過通道注意力CAM模塊(channel attention module)。在CAM中,特征首先通過全局平均池化聚合全局特征,然后卷積運算調(diào)整通道權(quán)重,最后將權(quán)重值與輸入特征映射y相乘
(2)
式中:yi,j∈RC是全通道特征。然后,在相同維度的條件下進行大小為k的一維卷積,k代表局部跨通道交互的覆蓋范圍,決定了交互的覆蓋范圍,通過卷積后用Sigmoid函數(shù)計算激活值,得到權(quán)重W∈R1×1×C表示每個通道的相關(guān)性和重要性
W=σ(Con′(yavg))
(3)
式中:Con′(·) 代表大小為k的一維卷積,σ代表Sigmoid激活函數(shù),將權(quán)重W與輸入特征y相乘,完成每個通道特征的重新編碼,從而為重要特征分配較大的權(quán)重,對非任務(wù)信息分配較小的權(quán)重來抑制。最后,通過殘差連接將原始輸入特征進行融合
x=W·y+x
(4)
在裂縫檢測任務(wù)中的特征金字塔結(jié)構(gòu)主要分為兩類,文獻[3]將相同尺度的編-解碼器上的特征圖進行融合,再將所有尺度的融合圖再次融合后輸出,這增加了參數(shù)量,降低了效率。文獻[4]利用編碼器最后一層的特征通過不同擴張率的空洞卷積來構(gòu)造特征金字塔,但是最后一層的特征信息在經(jīng)歷了多次卷積池化后丟失了很多的裂縫細節(jié)信息,所以這種方法在一定程度上缺乏解決裂縫邊緣信息丟失的能力。因此,本文提出了一種多層輸出特征融合的金字塔結(jié)構(gòu),將指定編碼層輸出的特征進行融合,并通過注意力模塊學習特征點間的位置關(guān)系,既可以充分利用不同層特征,減少裂縫邊緣信息的丟失,又保證裂縫信息的連續(xù)性?;谧⒁饬C制的多尺度特征融合模塊結(jié)構(gòu)如圖3所示。
圖3 基于注意力機制的多尺度特征融合模塊
在AMFF中,根據(jù)編碼器部分輸出的特征圖尺度大小,將編碼層劃分為5層,可表示為Ei, 其中i∈{1,2,…,5}, 每個編碼層輸出的特征大小是原圖的1/2i, 本文中輸入圖像大小為320×320,則每層編碼層輸出特征大小分別為 {160,80,40,20,10}。 低層特征信息包含了裂縫的輪廓、邊緣信息,高層特征信息包含了圖像的空間信息。本文將前兩層編碼層輸出的含有大量細節(jié)的低層語義信息與最后一層編碼層輸出的高層全局語義信息融合,由于特征圖的尺度和通道數(shù)不相同,不能直接進行融合,前兩層特征經(jīng)過1×1卷積操作變換通道后通過池化得到相同尺度特征圖
f′1=w(f(f1))
(5)
f′2=w(f(f2))
(6)
f12=Cat(f′1,f′2)
(7)
其中,f1,f2分別表示編碼層E1,E2的輸出,f(·) 表示用1×1的卷積核進行卷積操作,w(·) 表示池化操作,Cat(·) 表示特征在通道維度上的疊加。融合后與最后一層編碼器輸出的特征圖融合,最后輸出特征圖f∈RH×W×C
f=Cat(f12,f5)
(8)
式中:f5表示編碼層E5的輸出。將高層語義信息與低層語義信息融合雖然能夠保證裂縫檢測的完整性,但是缺乏裂縫像素之間的關(guān)聯(lián)性。因此,很難維持裂縫分割的連通性,并可能導(dǎo)致斷裂。于是在輸出特征圖后加入位置注意力模塊,通過位置注意模塊來學習特征的空間相關(guān)性,將輸出的多尺度融合特征圖分別經(jīng)過卷積得到f?、fφ、fγ, 其維度均為RH×W×C, 然后將f?、fφ、fγ都進行reshape操作
f?=flat(W?(f))
(9)
fφ=flat(Wφ(f))
(10)
fγ=flat(Wγ(f))
(11)
其中,W?,Wφ,Wγ為3個卷積操作,flat(·) 表示將圖像特征分別重塑成將f?,φ,γ∈RC×N,N=H×W。 將f?轉(zhuǎn)置后與fφ相乘得到矩陣,對矩陣進行softmax得到空間注意力特征S∈RN×N
(12)
式中:σ表示Softmax激活函數(shù)。S與fγ相乘后重塑為RC×H×W, 與輸入特征圖f進行融合得到最終的解碼器輸入特征圖fZ
fZ=σ(flat(fγ·S))+f
(13)
通過聚合不同區(qū)域的上下文信息,從全局角度提取裂縫信息,并提取每個特征像素點之間的相關(guān)性增強了路面裂縫檢測的完整性和連續(xù)性。
本文提出的融合優(yōu)化模塊如圖4所示。本文利用pixel-shuffle、空洞卷積和注意力機制設(shè)計了特征融合優(yōu)化模塊?,F(xiàn)有的網(wǎng)絡(luò)主要采用補零或雙線性插值的方法進行上采樣,由于裂縫分割是像素級別的分類任務(wù),使用這些上采樣方法容易使特征像素點受到周圍像素點的干擾,影響最終的檢測結(jié)果。Pixel-shuffle主要功能是將低分辨的特征圖,通過卷積和多通道間的重組得到高分辨率的特征圖,Pixel-shuffle是常用在超分辨率重建問題研究的上采樣方法,與常規(guī)的上采樣方法相比,能夠減少信息損失,檢測精度更高。本文方法中主要使用Pixel-shuffle進行上采樣,特征圖經(jīng)過Pixel-shuffle上采樣后通過空洞卷積,在不降低特征圖分辨率情況下實現(xiàn)感受野的增長,讓每個卷積的輸出都包含更大范圍的信息;特征圖經(jīng)過空洞卷積后再通過位置注意力模塊PAM捕獲更多的裂縫位置關(guān)系,防止裂縫斷裂;跳躍連接過程中加入了通道注意力模塊CAM來篩選信息,凸顯更多的裂縫細節(jié)信息。最后將通過PAM和CAM的特征融合后經(jīng)過卷積后輸出。
圖4 融合優(yōu)化模塊
(14)
(15)
式中:Conv(·) 代表卷積核大小為3的卷積操作。
(1)CRACK500:CRACK500的數(shù)據(jù)集由Yang等[14]建立,共3368張裂縫圖片,其中1896張用作訓練,348張用作驗證集,1124張作為測試集。
(2)DeepCrack:DeepCrack是由Liu等[15]建立的一個多尺度、多場景的裂縫公共基準數(shù)據(jù)集,它包含537幅大小為544×384像素的路面裂縫圖像。由于數(shù)據(jù)量過小,此數(shù)據(jù)集作為測試集進行泛化性實驗。
本文實驗的硬件環(huán)境為Intel(R)Xeon(R)Gold 5117 CPU,Tesla V100 GPU;軟件環(huán)境為Ubuntu 16.4操作系統(tǒng),Python3.7,Pytorch1.4,CUDA11.2,以及相關(guān)的神經(jīng)網(wǎng)絡(luò)Python庫。由于裂縫分割任務(wù)中背景和前景類別不平衡,本文使Bce+Dice的組合loss解決像素不平衡的問題。使用Adam優(yōu)化器訓練40輪,學習率初始化為0.0002,訓練批次大小設(shè)置為20。
為定量評估各模型的性能,本文采用以下指標進行分割準確性評估:精確率(Precision)、召回率(Recall)、F1分數(shù)(F1-score)和交并比(IoU)。其中Precision是指查準率,表示模型預(yù)測為裂縫的像素里,實際為裂縫的比例;Recall是指查全率,表明正確預(yù)測為裂縫的像素在所有裂縫像素中所占的比例;F1-score同時考慮了精確性和召回率,用于平衡精確率和召回率的結(jié)果;IoU是衡量檢測結(jié)果與標簽的重合程度,即模型檢測出的裂縫與標簽中裂縫的重疊率。各評價指標的計算如式(16)~式(19)
(16)
(17)
(18)
(19)
其中,TP表示真正值,即將裂縫像素預(yù)測為裂縫的像素數(shù);FP表示假正值,即將背景像素誤檢為裂縫的像素數(shù);FN表示假負值,即將裂縫像素預(yù)測為背景像素的像素數(shù)。
為驗證本文方法的有效性,實驗分為以下3個部分。①消融實驗:使用去除各模塊的模型在CRACK500上進行相關(guān)實驗,來驗證各模塊的有效性;②方法對比實驗:在CRACK500訓練集上對各方法模型進行訓練,然后在CRACK500測試集上進行測試,對比各模型的精確率等指標;③將各方法在CRACK500上得到的效果最好的模型直接在DeepCrack數(shù)據(jù)集上進行測試,評估各模型的泛化能力。
為了驗證本文提出的ER、AMFF和FO這3個模塊的有效性,本文在CRACK500數(shù)據(jù)集上設(shè)計了消融實驗,消融實驗共為4組,第一組為UNet;第二組在解碼器中使用FO模塊;第三組是使用ER模塊代替?zhèn)鹘y(tǒng)雙層卷積來提取特征,并加入AMFF模塊增加像素點之間的聯(lián)系;第四組是以UNet的編解碼器結(jié)構(gòu)為基礎(chǔ)的同時加入ER、AMFF、FO這3個模塊。
CRACK500上的消融實驗結(jié)果見表1,經(jīng)比較得出添加FO模塊的網(wǎng)絡(luò)模型加強了對裂縫局部特征提取的同時,還能通過增大感受域來獲取裂縫的全局特征,從而提高網(wǎng)絡(luò)性能,整體裂縫區(qū)域分割效果優(yōu)于UNet,其中IoU為53.42%,F(xiàn)1分數(shù)為67.74%;在UNet中添加ER模塊和AMFF模塊,提高了對裂縫邊緣細小裂縫的特征提取能力,并保證了裂縫檢測的連續(xù)性,網(wǎng)絡(luò)模型的IoU為53.24%,F(xiàn)1分數(shù)為67.81%;同時使用3個模塊的網(wǎng)絡(luò)模型在各個指標上都很大程度地超過了UNet,其中IoU為54.47%,F(xiàn)1分數(shù)為69.01%,說明使用融合優(yōu)化模塊提高了細小裂縫檢測能力并提高了裂縫檢測的完整性。由實驗可知,與單獨使用一個模塊或兩個模塊的網(wǎng)絡(luò)模型相比,同時使用3個模塊的效果和連續(xù)性更好,細節(jié)更豐富。
表1 在CRACK500上的消融實驗結(jié)果
為驗證本文提出方法的有效性,與基線方法UNet和現(xiàn)有的部分裂縫檢測方法進行對比實驗,所有對比方法均基于深度學習。
(1)SegNet:通過依次使用編碼器網(wǎng)絡(luò)和解碼器網(wǎng)絡(luò)來實現(xiàn)端到端的學習和分割,通過池化索引來進行非線性上采樣。
(2)UNet:基于編解碼結(jié)構(gòu)的分割網(wǎng)絡(luò),廣泛用于圖像分割,由編碼器、解碼器、跳躍連接三部分構(gòu)成,結(jié)構(gòu)簡單但有效,在小數(shù)據(jù)集上有著卓越的性能。
(3)CrackSeg:Song等[16]提出的一種用于路面裂縫檢測的端到端可訓練深度卷積神經(jīng)網(wǎng)絡(luò),設(shè)計的多尺度空洞卷積模塊可以在控制計算成本的同時,融合多尺度語義信息以獲得豐富特征,在上采樣階段,融合淺層網(wǎng)絡(luò)的高空間分辨率特征,提高分割精度。
(4)文獻[17]方法:Qu等[17]提出了一種用于道路裂縫檢測的深度監(jiān)督卷積神經(jīng)網(wǎng)絡(luò),通過一種新穎的多尺度卷積特征融合模塊進行裂紋檢測。
各模型在公共數(shù)據(jù)集CRACK500上測試結(jié)果對比見表2,本文方法的loU、Recall和F1-Score更高,IoU和F1分別達到了54.52%和69.01%,相比CrackSeg方法F1提高了1.65%,IoU提高了1.7%;與文獻[17]的方法相比,F(xiàn)1提高了1.51%,IoU提高了1.39%。UNet方法雖然Precision雖然高,但是Recall值最低,這種現(xiàn)象說明UNet雖然檢測出裂縫的輪廓,卻將大量裂縫像素錯誤的分類為背景,分割粗糙。
表2 CRACK500上各模型的對比實驗結(jié)果
不同模型在CRACK500數(shù)據(jù)集上的檢測效果對比如圖5所示。與圖5(c)~圖5(f)裂縫檢測方法的結(jié)果相比,本文算法檢測出的裂縫邊緣信息更豐富,連續(xù)性更好。圖中5種分割算法雖然都能夠獲得較為完整的裂縫形狀,但是圖5(c)~圖5(f)裂縫檢測方法較本文算法丟失了很多裂縫細節(jié)信息,且更容易受到噪音的影響。如第一張圖片上的左上角和第三張圖片中部裂縫周圍深色的背景,被識別為大塊裂縫;并錯誤的將第二張圖片中斷裂的裂縫自動連接。
本文通過繪制CRACK500數(shù)據(jù)集上的IoU曲線圖來驗證本文算法的有效性,不同模型在CRACK500數(shù)據(jù)集上的IoU曲線如圖6所示,從圖中可以明顯看到,本文算法的IoU要高于其它模型,且更為穩(wěn)定。
將CRACK500數(shù)據(jù)集上得到的模型直接在DeepCrack數(shù)據(jù)集上進行測試,比較不同模型的泛化能力,DeepCrack上各模型的對比實驗結(jié)果見表3,本文方法IoU和F1分別達到了54.47%和67.01%,相比CrackSeg方法F1提高了2.58%,IoU提高了3.32%;與文獻[17]的方法相比,F(xiàn)1提高了5.83%,IoU提高了5.5%。
不同模型在DeepCrack數(shù)據(jù)集上的檢測效果對比如圖7所示。在第一張裂縫圖像中,除UNet和本文算法的檢測結(jié)果以外,其它的裂縫檢測方法均受到了裂縫下方噪聲的影響產(chǎn)生誤檢,且UNet和SegNet錯誤的將右上角的背景信息檢測為裂縫;第二張圖像中,除CrackSeg和本文算法外,其余算法均受到了裂縫周圍深色背景信息的影響,產(chǎn)生漏檢、錯檢的現(xiàn)象。
圖6 CRACK500上的IoU
表3 DeepCrack上各模型的對比實驗結(jié)果
本文基于編解碼器結(jié)構(gòu)提出了一種裂縫檢測方法EAFNet,在編碼器階段通過邊緣細化模塊提取更多細節(jié)的局部特征;設(shè)計基于注意力機制的多尺度模塊,通過特征金字塔和位置注意力集成不同尺度的裂縫特征來融合全局特征和局部特征提高裂縫檢測精度;解碼器設(shè)計的特征融合優(yōu)化模塊,能夠在提取裂縫細節(jié)信息的同時,捕捉裂縫特征點之間的聯(lián)系,防止裂縫檢測出現(xiàn)斷裂的情況。該算法與已有的裂縫檢測算法相比,分割精度更高,對細小裂縫的檢測效果更好,減少漏檢率。未來將對模型繼續(xù)優(yōu)化,在保證檢測精度的同時,降低計算量,使其達到實時檢測的要求。