廖延娜,李 婉
(1. 西安郵電大學(xué) 電子工程學(xué)院,陜西 西安 710121;2.西安郵電大學(xué) 理學(xué)院,陜西 西安 710121)
造成橋體結(jié)構(gòu)產(chǎn)生裂縫的原因很多,包括荷載過重、化學(xué)反應(yīng)、施工及環(huán)境因素等[1,2]。在實(shí)際橋梁檢測中,從最初的人工檢測、橋梁檢測車,到各種結(jié)構(gòu)的無損檢測,再到現(xiàn)在的智能化檢測,都是在實(shí)踐中發(fā)現(xiàn)問題并解決問題[3]。近年來,越來越多的檢測算法被用于橋梁檢測,這些算法主要分為傳統(tǒng)圖像處理和深度學(xué)習(xí)處理兩大類[4-6]。葉琰通過采用濾波、多種閾值處理、形態(tài)學(xué)算法等基本圖像處理算法進(jìn)行橋梁裂縫檢測[7];J.Peng等設(shè)計(jì)了一種結(jié)合BP和SOM的網(wǎng)絡(luò)算法用于識別橋梁圖像表面的缺陷[8];x.JIA等提出將數(shù)字圖像處理與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合通過調(diào)整卷積神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),提高圖像分類精度[1]。盡管近年來基于橋梁裂縫檢測的算法層出不窮,但是將經(jīng)典目標(biāo)檢測網(wǎng)絡(luò)應(yīng)用到橋梁裂縫檢測中的仍為較少,且橋梁裂縫由于其地理位置和自身特征的特殊性,對檢測算法的輕便性、可移動性有一定要求。
綜合多種因素,引入檢測速度和精度較為均衡的YOLOv3目標(biāo)檢測網(wǎng)絡(luò)[9]用于橋梁裂縫檢測研究,并對YOLOv3多尺度預(yù)測模塊進(jìn)行改進(jìn),充分利用淺層特征改善小裂縫不易及檢測的問題,并使用聚類算法對自建橋梁裂縫數(shù)據(jù)集的先驗(yàn)框進(jìn)行聚類。數(shù)據(jù)集方面引入生成對抗網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)集擴(kuò)增。最后通過實(shí)驗(yàn)驗(yàn)證改進(jìn)后裂縫檢測網(wǎng)絡(luò)的檢測性能。
深度學(xué)習(xí)中,豐富的數(shù)據(jù)集是保證一個模型精確度的先決條件,一個質(zhì)量和數(shù)量可觀的數(shù)據(jù)集可以很大程度上提升模型的實(shí)際性能。由于橋梁裂縫圖像沒有相應(yīng)的公開數(shù)據(jù)集,因此人工拍攝1000張尺寸2500*1900的橋梁裂縫圖片作為原始數(shù)據(jù)集,如圖1所示。并通過旋轉(zhuǎn)、縮放、翻轉(zhuǎn)、對比度增強(qiáng)等操作進(jìn)行數(shù)據(jù)集增強(qiáng)。原始數(shù)據(jù)集尺寸較大,若直接輸入到網(wǎng)絡(luò)中會被隨機(jī)改變輸入尺寸而減小分辨率,導(dǎo)致某些細(xì)小特征丟失,故將增強(qiáng)后的數(shù)據(jù)集圖片再通過切割函數(shù)分割成多個416*416尺寸的裂縫圖片,使得盡量裁剪到裂縫,并從裁剪處理后得到的圖片中濾除不含裂縫或只含裂縫極少量特征的圖片。
圖1 原始橋梁裂縫圖像
數(shù)據(jù)是深度學(xué)習(xí)的重要組成,當(dāng)數(shù)據(jù)不足以訓(xùn)練龐大網(wǎng)絡(luò)的大量參數(shù)時,容易產(chǎn)生過擬合,影響準(zhǔn)確率[10],為使得網(wǎng)絡(luò)模型有更好的泛化能力,需要使用大量數(shù)據(jù)不斷進(jìn)行訓(xùn)練。目前所擁有的數(shù)據(jù)集數(shù)量十分有限,訓(xùn)練所得模型很容易過擬合,因此需要創(chuàng)建新的有效數(shù)據(jù)對原有數(shù)據(jù)集進(jìn)行擴(kuò)增。此處選取生成對抗網(wǎng)絡(luò)并在上一步處理好的數(shù)據(jù)集基礎(chǔ)上加以訓(xùn)練,生成有效的橋梁裂縫圖像來擴(kuò)充數(shù)據(jù)集。圖2為傳統(tǒng)生成對抗網(wǎng)絡(luò)工作流程。
圖2 生成對抗網(wǎng)絡(luò)流程
生成對抗是小數(shù)據(jù)學(xué)習(xí)面對龐大網(wǎng)絡(luò)訓(xùn)練的有效舉措,其在已擁有的少量數(shù)據(jù)基礎(chǔ)上讓機(jī)器自動生成樣本數(shù)據(jù)并不斷學(xué)習(xí)已有數(shù)據(jù)的特征來生成更大量更真實(shí)的數(shù)據(jù)。因此引入DCGAN(deep convolution generative adversarial networks)生成對抗網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)集擴(kuò)增,該網(wǎng)絡(luò)包括生成網(wǎng)絡(luò)(generator,G)和判別網(wǎng)絡(luò)(discriminator,D)兩部分,且由全為卷積層的卷積神經(jīng)網(wǎng)絡(luò)構(gòu)成[11]。DCGAN網(wǎng)絡(luò)為了生成虛假數(shù)據(jù)和真實(shí)數(shù)據(jù)很接近,一方面讓G網(wǎng)絡(luò)學(xué)習(xí)到較好的一組參數(shù),由噪音數(shù)據(jù)轉(zhuǎn)換為生成數(shù)據(jù);一方面要將生成的數(shù)據(jù)輸入D中進(jìn)行判別并且盡可能的讓D網(wǎng)絡(luò)判別不出來由G網(wǎng)絡(luò)生成的數(shù)據(jù)是真還是假,其目標(biāo)是讓G網(wǎng)絡(luò)生成的數(shù)據(jù)更真,讓D網(wǎng)絡(luò)的判別能力更強(qiáng),兩網(wǎng)絡(luò)互相促進(jìn)。D網(wǎng)絡(luò)輸入圖像,并進(jìn)行特征壓縮,輸出真假分類,整個可看作一個下采樣過程,因此D網(wǎng)絡(luò)可以學(xué)習(xí)自己的空間下采樣;G網(wǎng)絡(luò)輸入噪音向量,輸出為生成的虛假圖像,整個過程可看作是一個上采樣過程,因此D網(wǎng)絡(luò)可以學(xué)習(xí)自己的空間上采樣,從而學(xué)習(xí)到D網(wǎng)絡(luò)和G網(wǎng)絡(luò)各自最好的一組權(quán)重參數(shù),即可得到最優(yōu)的DCGAN網(wǎng)絡(luò)。D網(wǎng)絡(luò)和G網(wǎng)絡(luò)損失函數(shù)公式如下:
D網(wǎng)絡(luò)
LossD=log(D1(x))+log(1-D2(G(z)))
(1)
G網(wǎng)絡(luò)
LossG=logD2(G(z))
(2)
式中:D1(x)為對真實(shí)數(shù)據(jù)x的判別結(jié)果,D2(G(z))為對生成數(shù)據(jù)G(z)的判別結(jié)果,D網(wǎng)絡(luò)對x的判別結(jié)果應(yīng)盡可能為真實(shí)的1,即log(D1(x))=0;而對生成數(shù)據(jù)G(z)判別結(jié)果應(yīng)盡可能為虛假的0,即log(1-D2(G(z)))=0,兩部分相加結(jié)果接近為0,即可使得LossD盡可能最小,此時D網(wǎng)絡(luò)判別能力非常強(qiáng)。當(dāng)D網(wǎng)絡(luò)對G網(wǎng)絡(luò)生成的數(shù)據(jù)G(z)判斷結(jié)果越接近真實(shí)的1時,可使得LossG盡可能最小,此時G網(wǎng)絡(luò)生成的數(shù)據(jù)越真實(shí)。最終的DCGAN網(wǎng)絡(luò)損失函數(shù)如下式,其目的是最大化D網(wǎng)絡(luò)的區(qū)分度,最小化G網(wǎng)絡(luò)和原始數(shù)據(jù)集的數(shù)據(jù)分布
minGmaxDV(D,G)=Ex~Pdata(x)[logD(x)]+Ez~Pz(z)[log(1-D(G(z)))]
(3)
目前常見的卷積神經(jīng)目標(biāo)檢測網(wǎng)絡(luò)主要分為兩階段和單階段兩大類,主流的兩階段檢測器包括R-CNN系列,如:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN等[12],其基本思想是將分類和檢測當(dāng)作兩個不同的分支進(jìn)行優(yōu)化,由于網(wǎng)絡(luò)結(jié)構(gòu)繁瑣,導(dǎo)致模型復(fù)雜,訓(xùn)練速度變慢;單階段檢測器主要包括YOLO系列和SSD系列,如:YOLOv1、YOLOv2、YOLOv3、SSD等,其基本思想是實(shí)現(xiàn)端到端訓(xùn)練,采用直接回歸的方式直接計(jì)算出所需要檢測的目標(biāo)的類別和位置。由于橋梁裂縫檢測算法常用于高架橋梁等力無法到達(dá)之處,對算法的實(shí)時性、輕便性、可移動性有較高要求,同時也要保證網(wǎng)絡(luò)模型的檢測精度,當(dāng)模型體積較大時,難以進(jìn)行移動端部署。綜合以上因素,引入單階段的YOLOv3目標(biāo)檢測網(wǎng)絡(luò)進(jìn)行橋梁裂縫檢測技術(shù)研究。
YOLOv3采用主干網(wǎng)絡(luò)DarkNet-53對輸入裂縫圖像提取特征,并輸出13*13、26*26、52*52這3個不同尺寸的特征圖,再利用YOLOv3網(wǎng)絡(luò)的FPN模塊通過錨點(diǎn)(Anchor)機(jī)制在輸出的3個不同尺寸特征圖上分配對應(yīng)9個尺寸的先驗(yàn)框,用于在訓(xùn)練階段與真實(shí)值計(jì)算損失函數(shù)優(yōu)化網(wǎng)絡(luò)和在測試階段預(yù)測檢測框。由于深層特征感受野較大,提取整體特征,有利于大目標(biāo)的檢測,但同時也丟失了細(xì)節(jié)信息;而淺層特征感受野較小,有利于小目標(biāo)的檢測[13]。橋梁裂縫圖像中常有較細(xì)小的裂縫,因此對YOLOv3的FPN模塊增加104*104尺寸特征圖的預(yù)測,通過將104*104尺寸特征圖與原始FPN模塊融合來改善低分辨率下較小目標(biāo)的檢測,提高細(xì)小裂縫檢測精度。圖3為改進(jìn)前后的FPN模塊。
圖3 FPN模塊結(jié)構(gòu)
YOLOv3網(wǎng)絡(luò)原FPN模塊使用的9個Anchor尺寸依賴于COCO公開數(shù)據(jù)集,而橋梁裂縫圖像與COCO數(shù)據(jù)集中的對象有很大區(qū)別,因此使用K-means聚類算法對自建橋梁裂縫數(shù)據(jù)集進(jìn)行重新聚類。聚類分兩組進(jìn)行,一組是基于原FPN模塊得到13*13、26*26、52*52這3個不同尺寸特征圖上共9個尺寸的Anchor,平均每個尺寸特征圖分配3個不同尺寸的Anchor;另一組是基于改進(jìn)后FPN模塊得到13*13、26*26、52*52、104*104這4個不同尺寸特征圖上共12個尺寸的Anchor,同樣平均每個尺寸特征圖分配3個不同尺寸的Anchor。表1為原FPN模塊和改進(jìn)FPN模塊使用聚類算法前后不同尺寸特征圖的Anchor參數(shù)分布。
表1 Anchor參數(shù)分布
圖4為使用以上措施后改進(jìn)的YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)配置圖,其主要包括特征提取和目標(biāo)預(yù)測兩部分,主干網(wǎng)絡(luò)用于裂縫圖像特征提取,改進(jìn)FPN模塊用于目標(biāo)預(yù)測。結(jié)構(gòu)圖中,Convolutional模塊由卷積核(Conv)、批歸一化處理(batch normalization,BN)、Leaky ReLU激活函數(shù)組成[14];Convolutional Set由5個不同尺寸的Convolutional模塊組成;Up sampling為上采樣模塊,用于對13*13、26*26、52*52尺寸的特征圖進(jìn)行上采樣并與26*26、52*52、104*104尺寸的特征圖進(jìn)行特征融合,增加細(xì)粒度特征;Concatenate為連接模塊,用于連接相同尺寸、不同通道數(shù)的特征圖。由于橋梁裂縫檢測類別只有一類,因此每個尺寸特征圖在每個網(wǎng)格中輸出預(yù)測框向量的通道數(shù)為(5+1)>*3=18,其中5為預(yù)測框位置(x,y,w,h)和置信度(Confidence),1為類別數(shù),3表示每個尺度的特征圖預(yù)設(shè)的3種不同尺寸Anchor。
圖4 改進(jìn)YOLOv3的網(wǎng)絡(luò)結(jié)構(gòu)配置圖
在改進(jìn)YOLOv3網(wǎng)絡(luò)模型訓(xùn)練階段,主干網(wǎng)絡(luò)提取輸入裂縫圖像的特征,得到4個不同尺寸的特征圖,然后分別對不同尺寸特征圖上的每一點(diǎn)使用Anchor機(jī)制分別得到3個不同大小的先驗(yàn)框,并選擇與真實(shí)值交并比最大的先驗(yàn)框作為某個裂縫的預(yù)測結(jié)果,最后綜合真實(shí)值與預(yù)測框得到模型損失函數(shù),通過優(yōu)化算法對網(wǎng)絡(luò)不斷訓(xùn)練提升精度。改進(jìn)YOLOv3網(wǎng)絡(luò)的裂縫檢測流程大致分為以下3個步驟:
步驟1使用主干網(wǎng)絡(luò)對輸入裂縫圖像進(jìn)行特征提?。?/p>
步驟2通過改進(jìn)FPN模塊進(jìn)行檢測框的預(yù)測;
步驟3依據(jù)閾值處理算法和非極大值抑制濾除部分不合格預(yù)測框,最終得到裂縫圖像預(yù)測結(jié)果。
改進(jìn)YOLOv3網(wǎng)絡(luò)的損失函數(shù)由預(yù)測框坐標(biāo)誤差、置信度誤差、類別誤差3部分組成,預(yù)測框坐標(biāo)使用均方誤差損失,置信度和物體類別使用二值交叉熵?fù)p失,其設(shè)計(jì)目的是通過優(yōu)化策略使得這3部分達(dá)到平衡,損失函數(shù)盡可能小,網(wǎng)絡(luò)檢測精度盡可能高。在對模型損失函數(shù)進(jìn)行優(yōu)化時采用自適應(yīng)矩估計(jì)Adam(adaptive moment estimation)算法,Adam是一種為每一參數(shù)計(jì)算自適應(yīng)學(xué)習(xí)率的方法,其利用梯度的一階矩估計(jì)和二階矩估計(jì)對每個參數(shù)的學(xué)習(xí)率進(jìn)行動態(tài)調(diào)整,經(jīng)過偏置校正后每一次迭代學(xué)習(xí)率都有確定范圍[15,16],Adam優(yōu)化器公式如下
xt=μ*xt-1+(1-μ)*gt
(4)
(5)
(6)
(7)
(8)
本實(shí)驗(yàn)基于Python語言在GPU版Tensorflow框架下進(jìn)行。自建橋梁裂縫數(shù)據(jù)集包括采集裂縫圖像和DCGAN網(wǎng)絡(luò)生成圖像共5960張,并按照7∶2∶1的比例劃分訓(xùn)練集、驗(yàn)證機(jī)、測試集,最終得訓(xùn)練集4172張,驗(yàn)證集1192張,測試集596張。訓(xùn)練過程中采用動態(tài)學(xué)習(xí)率且初始學(xué)習(xí)率設(shè)置為0.001,模型迭代次數(shù)設(shè)置為warmup_epochs=2、first_stage_epochs=50、second_stage_epochs=3000三階段進(jìn)行。網(wǎng)絡(luò)采用多尺度訓(xùn)練(multi-scale training),訓(xùn)練時每迭代 10 次,就會隨機(jī)選擇(320,352,384,416,448,480,512,544,576,608)這幾種分辨率圖片其中之一作為網(wǎng)絡(luò)的輸入圖片尺寸。
圖5為使用DCGAN網(wǎng)絡(luò)生成的橋梁裂縫圖像,學(xué)習(xí)率設(shè)置為0.0002,優(yōu)化器使用Adam。基于生成效率的目的,設(shè)置DCGAN網(wǎng)絡(luò)相關(guān)參數(shù)使得能同時在一張生成圖像上包含16張裂縫圖像,圖5為直接生成的同時包含16張橋梁裂縫圖片的原始生成圖像,其中圖5(a)為初期生成的裂縫圖像,圖5(b)為后期DCGAN網(wǎng)絡(luò)的D模塊和G模塊損失函數(shù)最小且趨于正常波動時生成的裂縫圖像,可以看出網(wǎng)絡(luò)模型后期生成的裂縫圖像已經(jīng)十分接近正常采集的原始裂縫圖像。圖6為后期生成的原始生成圖像切割之后得到的單個橋梁裂縫圖像。
圖5 原始生成圖片
圖6 裁剪后的生成圖片
目標(biāo)檢測中,通常用精確率、召回率、誤檢率、漏檢率、準(zhǔn)確率這5個指標(biāo)來衡量不同目標(biāo)檢測算法的好壞,以下選用精確率(precision)和召回率(recall)組合的精確度(mAP)作為評價指標(biāo)對YOLOv3網(wǎng)絡(luò)改進(jìn)前后的性能進(jìn)行評價。mAP為多個類別的平均檢測精度,由于只有裂縫一個類別,因此AP等同于mAP。表2為數(shù)據(jù)集聚類Anchor、FPN模塊改進(jìn)前后YOLOv3網(wǎng)絡(luò)模型檢測精度對比??煽闯?,原YOLOv3網(wǎng)絡(luò)檢測精度低于通過數(shù)據(jù)集聚類、FPN模塊改進(jìn)之后的網(wǎng)絡(luò)精度,由于通過k-means算法對自建橋梁裂縫數(shù)據(jù)集聚類后可以得到更適用于裂縫圖像的Anchor尺寸,檢測精度提升0.0018;再在原始FPN模塊中增加104*104尺寸的特征圖并重新聚類Anchor,檢測精度比原YOLOv3提升了0.0137,驗(yàn)證兩種舉措都能有效提升YOLOv3算法對橋梁裂縫圖像的檢測精度。
表2 YOLOv3改進(jìn)前后精度對比
圖7為改進(jìn)的YOLOv3網(wǎng)絡(luò)訓(xùn)練集和驗(yàn)證集的損失函數(shù)(Loss)可視化曲線,橫坐標(biāo)為迭代次數(shù),縱坐標(biāo)為Loss。從圖中可以看出,驗(yàn)證集的Loss高于訓(xùn)練集,且偶爾會有較大波動,但訓(xùn)練集和驗(yàn)證集的Loss整體都呈下降趨勢,并且在迭代次數(shù)在3000次附近時,兩損失函數(shù)曲線整體呈平穩(wěn)波動,損失函數(shù)已經(jīng)收斂。此時停止訓(xùn)練,得到的網(wǎng)絡(luò)模型檢測精度達(dá)到0.9302。
圖7 改進(jìn)YOLOv3網(wǎng)絡(luò)訓(xùn)練集與驗(yàn)證集損失函數(shù)曲線
使用改進(jìn)的YOLOv3網(wǎng)絡(luò)對不同類型的橋梁裂縫檢測效果進(jìn)行對比,如下圖。橋梁裂縫類型分為4組,圖8為DCGAN網(wǎng)絡(luò)生成的裂縫,圖9為細(xì)小且有背景干擾的裂縫,圖10為普通裂縫,圖11為復(fù)雜分布的裂縫。(a)、(b)、(c)分別為原圖、使用原YOLOv3網(wǎng)絡(luò)、使用改進(jìn)YOLOv3網(wǎng)絡(luò)得到的檢測結(jié)果。
圖8 DCGAN網(wǎng)絡(luò)生成裂縫檢測
圖9 細(xì)小有背景干擾裂縫
圖10 普通裂縫
圖11 復(fù)雜分布裂縫
通過以上檢測結(jié)果可看出,對于圖8的生成裂縫和圖10的普通裂縫,YOLOv3網(wǎng)絡(luò)改進(jìn)前后的檢測效果十分接近,整個裂縫都可以檢測出來,沒有誤檢或漏檢的情況;對于圖9的細(xì)小且有背景干擾的裂縫,原YOLOv3網(wǎng)絡(luò)有一小部分裂縫未被檢測到,且出現(xiàn)了將非裂縫目標(biāo)檢測為裂縫的誤檢狀況,而改進(jìn)YOLOv3將該裂縫很完整地檢測了出來;對于圖11的復(fù)雜分布裂縫,使用改進(jìn)前后的YOLOv3網(wǎng)絡(luò)都有一小部分裂縫未被檢測到,即無論是使用原YOLOv3或改進(jìn)YOLOv3網(wǎng)絡(luò)都有漏檢的情況,但相比較來說,改進(jìn)YOLOv3比原YOLOv3漏檢的情況少得多。
為驗(yàn)證改進(jìn)網(wǎng)絡(luò)裂縫檢測的可靠性,采用橫向?qū)Ρ仁侄螌OLOv1、SSD、YOLOv3、改進(jìn)YOLOv3這4個網(wǎng)絡(luò)的檢測精度進(jìn)行比較。以Recall為橫坐標(biāo),Precision為縱坐標(biāo)可將算法性能用P-R曲線直觀表示出來,圖12為4種網(wǎng)絡(luò)P-R曲線圖,P-R曲線與橫縱坐標(biāo)圍城的面積即該網(wǎng)絡(luò)的mAP值,面積越大則檢測精度越高。由圖可知,YOLOv1網(wǎng)絡(luò)檢測精度最低,SSD介于YOLOv1和YOLOv3之間,而改進(jìn)YOLOv3網(wǎng)絡(luò)檢測精度最高,充分說明了改進(jìn)后的YOLOv3網(wǎng)絡(luò)性能較好,對于橋梁裂縫檢測任務(wù)有較高的實(shí)用價值。
圖12 不同網(wǎng)絡(luò)P-R曲線對比
針對橋梁裂縫自身特征因素影響和傳統(tǒng)算法裂縫檢測效果不佳的問題,實(shí)現(xiàn)了基于卷積神經(jīng)網(wǎng)絡(luò)的橋梁裂縫目標(biāo)檢測方法。引入檢測速度與精度較為均衡的YOLOv3目標(biāo)檢測網(wǎng)絡(luò),其突破了傳統(tǒng)橋檢算法。針對YOLOv3原Anchr尺寸不適應(yīng)于橋梁裂縫的問題提出通過k-means聚類算法對自建數(shù)據(jù)集進(jìn)行聚類,得到適用于橋梁裂縫的Anchr尺寸,并改進(jìn)YOLOv3網(wǎng)絡(luò)中的FPN模塊,更利于小目標(biāo)裂縫檢測,從而提升YOLOv3網(wǎng)絡(luò)整體的檢測精度。但由于復(fù)雜分布裂縫特征較為雜亂,如何提升該類裂縫的檢測精度還有待進(jìn)一步研究。