劉宇翔,佘 維,沈占峰,譚 帥
(1.鄭州大學(xué)軟件學(xué)院,河南 鄭州 450001; 2.中國科學(xué)院空天信息創(chuàng)新研究院,北京 100101)
道路裂縫是最常見的一類路面病害,早期道路裂縫主要通過人工進行檢測,然而道路裂縫在形狀上不規(guī)則,且覆蓋面積廣,延伸距離長,導(dǎo)致人工檢測的工作量大,難以兼顧效率與準確度。隨著計算機技術(shù)的發(fā)展,產(chǎn)生了多種自動檢測算法。傳統(tǒng)的方法有基于閾值分割的算法Canny算法[1]和Otsu大津法[2],然而由于路面環(huán)境和道路表面特征的復(fù)雜性以及以上算法的普適性、魯棒性不高,導(dǎo)致最終的效果不夠好。隨后產(chǎn)生了基于最小代價的路徑搜索算法[3]、基于SVM支持向量機的檢測算法[4]、CrackTree裂縫檢測算法[5]等,這些算法一定程度上解決了裂縫檢測的問題,但在應(yīng)用中仍存在路徑搜索算法非常耗時,SVM算法和CrackTree設(shè)計較為復(fù)雜的問題。后來的神經(jīng)網(wǎng)絡(luò)模型很好地平衡了速度、準確度和設(shè)計難度,越來越多的裂縫檢測開始使用神經(jīng)網(wǎng)絡(luò)模型。
神經(jīng)網(wǎng)絡(luò)在分類和檢測方面表現(xiàn)出獨特的優(yōu)勢,檢測的效果有了顯著的提升[6-8]。文獻[9-11]基于卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)了定量化信息提取。在目標檢測領(lǐng)域,最初的經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)如AlexNet[12]和VGG[13]被用于圖像識別,即一圖單目標識別,后來又產(chǎn)生了多目標檢測等諸多目標檢測算法。文獻[14-15]提出了基于卷積神經(jīng)網(wǎng)絡(luò)實現(xiàn)混凝土道路表面的裂縫病害識別的方法。裂縫檢測結(jié)果有多種形式,李巖等人[16]使用YOLO v5目標檢測算法框出裂縫,李良福等人[17]使用改進PSPNet圖像分割算法檢測橋梁裂縫得到圖片掩碼。圖像分割分為語義分割和實例分割,裂縫檢測應(yīng)用場景通常使用語義分割模型,典型的分割模型結(jié)構(gòu)包括Shelhamer等人[18]提出的全卷積網(wǎng)絡(luò)Fully Convolutional Networks(FCN)和Ronneberger等人提出的兼顧特征提取和語義分割的U形網(wǎng)絡(luò)U-Net[19-21]。
本文設(shè)計并實現(xiàn)一種基于U-Net模型改進得到的彈性殘差裂縫檢測U形網(wǎng)絡(luò)模型(Elastic Residual Crack U-shaped Network, ERCUnet)。該模型綜合了U-Net和ResNet等模型的優(yōu)點,模型結(jié)構(gòu)較為簡單,使用了U形編碼器解碼器結(jié)構(gòu)進行多尺度特征融合,提升模型的檢測效果;使用殘差結(jié)構(gòu),降低了訓(xùn)練中梯度消失的可能性,使模型訓(xùn)練更加容易。本文模型在結(jié)構(gòu)上對U-Net進行了更加適合于裂縫檢測分割任務(wù)的改進,傳統(tǒng)的U-Net在U形結(jié)構(gòu)中越靠近底層的Encoder和Decoder卷積層中卷積核數(shù)量越多,從頂層的卷積層含有64個卷積核到底層卷積層含有1024個卷積核。本文提出的ERCUnet得益于殘差結(jié)構(gòu)的特點,可以對已經(jīng)訓(xùn)練完成的網(wǎng)絡(luò)中的特定殘差塊直接進行短路,即輸出直接返回輸入結(jié)果而不進行卷積運算。最終實驗發(fā)現(xiàn),短路深層次的卷積層對結(jié)果的影響并不大,由此可以猜想深層次的卷積核存在冗余而在淺層添加更多的卷積核能提升最終效果。按照這個思路,最終設(shè)計出本文使用的彈性殘差裂縫檢測U形網(wǎng)絡(luò)模型ERCUnet。該模型中幾乎所有的殘差層均采用相同的結(jié)構(gòu),即經(jīng)過殘差塊運算后得到的特征圖層數(shù)相同。由于更加均衡和格式化的模型設(shè)計(幾乎所有卷積層都只含有128個卷積核,而不像U-Net的卷積層含有64~1024個卷積核不等),該模型還具有較好的伸縮性,可以根據(jù)需要通過統(tǒng)一修改殘差塊中卷積層的數(shù)量以及卷積層中卷積核的個數(shù)擴充或縮減模型的規(guī)模(參數(shù)量),經(jīng)過均衡格式化設(shè)計的ERCUnet模型的參數(shù)量僅僅約為U-Net模型的十分之一。最終經(jīng)過訓(xùn)練甚至達到了更好的效果。ERCUnet模型的訓(xùn)練及優(yōu)化流程見圖1。
圖1 ERCUnet模型的訓(xùn)練及優(yōu)化流程
本文實驗基于公開的道路裂縫數(shù)據(jù)集CrackForestDataset[22]。CrackForestDataset有118張帶有標注的圖片,標注中背景部分被標為0,裂縫部分被標注為1,還有部分如被裂縫環(huán)繞所形成的孤島等被標注為2及以上編號。本文的目的在于檢測裂縫,故將標注為2及以上的部分重新編號為0(背景)。由于分割數(shù)據(jù)集需要對圖片數(shù)據(jù)進行像素級別的標注,故制作此類數(shù)據(jù)集的工作量大、復(fù)雜度高,導(dǎo)致公開的路面裂縫數(shù)據(jù)集非常少,所以要對數(shù)據(jù)集進行增廣。實驗中先將數(shù)據(jù)集按照5∶1的比例劃分為訓(xùn)練集和測試集,然后對訓(xùn)練集進行增廣并用訓(xùn)練集訓(xùn)練神經(jīng)網(wǎng)絡(luò)模型,訓(xùn)練過程中隱藏測試集,最終用測試集數(shù)據(jù)評價神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練效果。
訓(xùn)練集數(shù)據(jù)的增廣采用動態(tài)的數(shù)據(jù)增廣方式,是由多種引入了隨機數(shù)的圖片處理方法組成的隨機過程,主要從以下4個方面增強數(shù)據(jù):1)數(shù)據(jù)個體的分布;2)數(shù)據(jù)總體的分布;3)特征(對象)的位置分布;4)特征在特征空間的分布。數(shù)據(jù)增廣方法及流程見圖2,數(shù)據(jù)增廣后的效果見圖3。修改數(shù)據(jù)個體分布是通過對整張圖片添加隨機高斯噪聲,改變像素點在HSV色彩空間的分布,具體體現(xiàn)為修改了色彩空間中像素點與像素點之間的位置。修改數(shù)據(jù)總體的分布是對整張圖片所有像素點進行的偏置操作。修改對象(特征)的位置分布是修改了對象(特征)在圖片中的位置以及對象(特征)與對象(特征)的相對位置。修改特征在特征空間的分布是對圖片進行隨機裁剪并拉伸與仿射變換扭曲。
圖2 訓(xùn)練集數(shù)據(jù)增廣方法及流程
圖3 同一張圖片經(jīng)過數(shù)據(jù)增廣后效果圖
輸入數(shù)據(jù)在不同特征通道上因為量綱的不同有時會存在較大的差異,具體體現(xiàn)為部分特征通道的數(shù)據(jù)范圍較小,部分特征通道的數(shù)據(jù)范圍較大。本文考慮到數(shù)據(jù)集中樣本數(shù)量較少,樣本較為單一,用樣本估計總體可能存在較大誤差,而圖片顏色通道取值范圍均為0~255,各個通道的重要性幾乎一致,故采用直接歸一化的方式對數(shù)據(jù)進行規(guī)范化。直接歸一化既壓縮了數(shù)據(jù)的取值范圍,又保留了圖片整體像素在色彩空間上的分布情況。直接歸一化見公式(1),其中xi為輸入圖像的第i個圖層,x′i為輸出圖像的第i個圖層。
x′i=xi/255
(1)
FCN是最早的全卷積神經(jīng)網(wǎng)絡(luò)圖像分割模型。FCN圖像分割神經(jīng)網(wǎng)絡(luò)模型有3大特征:1)用卷積核代替全連接層形成全卷積神經(jīng)網(wǎng)絡(luò),使模型可以適應(yīng)多種不同尺寸的輸入圖片;2)通過反卷積增大特征圖的尺寸,為特征融合做鋪墊;3)神經(jīng)網(wǎng)絡(luò)的跨層連接可實現(xiàn)不同尺度的特征融合[18]。U-Net模型更是被應(yīng)用于各種圖像分割問題中,因為其獨特的U形encoder-decoder結(jié)構(gòu)在小數(shù)據(jù)集上具有良好的表現(xiàn)[19]。ResNet模型的殘差結(jié)構(gòu)可以有效地避免深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練中梯度消失的問題[23]。ERCUnet實驗?zāi)P褪腔赨-Net模型的U型特征提取融合結(jié)構(gòu)和ResNet模型中的殘差結(jié)構(gòu)改進而來的,具體結(jié)構(gòu)如圖4所示。
圖4 ERCUnet網(wǎng)絡(luò)模型結(jié)構(gòu)
本文采用的ERCUnet模型參考了U-Net模型的encoder-decoder和多尺度特征融合的U型結(jié)構(gòu),具體的結(jié)構(gòu)采用了模塊化設(shè)計,將絕大多數(shù)卷積層合并為數(shù)個Res殘差塊,大大降低了鏈式求導(dǎo)中梯度截斷的可能性,考慮到裂縫識別任務(wù)中裂縫的語義信息不多,像素級別檢測中的重要性不是特別高,故減少了特征提取網(wǎng)絡(luò)中深層網(wǎng)絡(luò)卷積核的數(shù)量,考慮到裂縫檢測任務(wù)中裂縫的深層語義信息對于最后的檢測不是特別重要,而淺層的紋理信息對于檢測更加重要,故對U-Net深層卷積核的數(shù)量進行縮減。為了設(shè)計一個簡單而又方便擴展修改的網(wǎng)絡(luò),將所有的Res塊采用了相同的輸入層結(jié)構(gòu)和內(nèi)部結(jié)構(gòu),使整個網(wǎng)絡(luò)幾乎所有塊的連接部分的特征層數(shù)量相等,讓網(wǎng)絡(luò)的設(shè)計變得更加簡單。在InputBlock中采用5個卷積核將特征層數(shù)量從輸入的層數(shù)提升至Res塊所需的輸入數(shù)量。CatLayer中使用1個卷積核將Concat拼接得到的特征層數(shù)量規(guī)范為Res塊所需的輸入數(shù)量。最后通過Detector將維數(shù)壓縮至二分類任務(wù)所需的二維。
ERCUnet模型采用了何凱明等人提出的ResNet模型[21]中的殘差思想,有效避免了梯度消失,有利于更深的網(wǎng)絡(luò)結(jié)構(gòu)設(shè)計,如圖5是ERCUnet模型設(shè)計的殘差結(jié)構(gòu)。
圖5 ERCUnet的殘差結(jié)構(gòu)
ERCUnet模型在每次卷積后使用BatchNormal方法進行批規(guī)范化,批規(guī)范化能有效避免計算中數(shù)據(jù)過大導(dǎo)致溢出,并且批規(guī)范化能讓數(shù)據(jù)分布中心位于0附近,提升網(wǎng)絡(luò)的學(xué)習效率[24],LeakyReLU則避免了ReLU小于0時因沒有梯度導(dǎo)致網(wǎng)絡(luò)更新效率不高的問題,提高了網(wǎng)絡(luò)的學(xué)習效率[25]。
本文實驗的評價標準采用查全率(Recall)、查準率(precision)、F1分數(shù)、噪聲比(Noise)、準確率(Accuracy)。
查全率表示模型查出部分占應(yīng)查出部分的百分比,查準率表示模型查出部分中的正確部分占模型查出部分的百分比,查全率與查準率公式如下:
(2)
(3)
F1分數(shù)是查全率與查準率的調(diào)和平均數(shù),兼顧了查全率和查準率,F(xiàn)1分數(shù)公式見式(4)。
(4)
噪聲比反應(yīng)模型查出部分中錯誤的部分占模型查出部分的百分比,準確率表示模型識別正確的部分占總體的百分比,噪聲比和準確率的公式如下:
(5)
(6)
其中,TP(True Positive)表示正樣本被預(yù)測為正樣本的數(shù)量,F(xiàn)P(False Positive)表示負樣本被預(yù)測為正樣本的數(shù)量,F(xiàn)N(False Negative)表示正樣本被預(yù)測為負樣本的數(shù)量,TN(True Negative)表示負樣本被預(yù)測為負樣本的數(shù)量。
圖像分割中常用均方誤差與交叉熵損失函數(shù),其中交叉熵損失函數(shù)(Cross Entropy Loss Function)相比均方誤差(Mean Squared Error)可以用在分類任務(wù)讓梯度下降優(yōu)化過程較為平滑,交叉熵損失函數(shù)如公式(7)所示。其中x[j]表示輸入x為j類的值,x[class]即輸入x真值維度上的值。
(7)
為了提升模型的檢測效果,ERCUnet模型將F1引入損失函數(shù),F(xiàn)1與交叉熵共同組成損失函數(shù)。ERCUnet使用的損失函數(shù)如式(8)所示。
Loss=CrossEntropyLoss+(1-F1)
(8)
本文的實驗及測試是基于Python語言深度學(xué)習Pytorch框架[26]。實驗環(huán)境為:Windows10操作系統(tǒng);NVIDIA GeForce RTX 3090 GPU,專用內(nèi)存為24 GB;Intel(R) Core(TM) i9-10900K CPU @3.70 GHz。U-Net與本文ERCUnet均在經(jīng)過本文動態(tài)數(shù)據(jù)加強的數(shù)據(jù)集上進行訓(xùn)練,每個模型分別在訓(xùn)練集上各迭代50次。為了加快網(wǎng)絡(luò)的訓(xùn)練,防止局部抖動,使用mini-batch訓(xùn)練方法,每4個數(shù)據(jù)為一個mini-batch進行一次學(xué)習。采用誤差反向傳播的鏈式求導(dǎo)求整個網(wǎng)絡(luò)的梯度。采用Adam優(yōu)化方法進行梯度下降優(yōu)化網(wǎng)絡(luò),實驗表明Adam效果總是優(yōu)于SGD隨機梯度下降。
為了檢驗本文所提出的模型的效果,使用PSPNet[27]、SegNet[28]、U-Net、U-Net(BN)與本文模型ERCUnet和ERCUnet-tiny進行對比實驗。實驗中的U-Net在原始的U-Net基礎(chǔ)上對要進行卷積操作的特征圖進行0填充,卷積運算前后特征圖的尺寸相同。本文實驗中的U-Net(BN)在此基礎(chǔ)上又在卷積核后與激活函數(shù)前添加了BatchNormal層。實驗中具體學(xué)習率、各個模型學(xué)習過程中的Loss如圖6所示,由于ERCUnet與ERCUnet-tiny損失函數(shù)中添加了F1成分,導(dǎo)致訓(xùn)練過程沒有單純的交叉熵損失函數(shù)的U-Net(BN)平滑,最終所有模型在訓(xùn)練50批時都基本收斂。訓(xùn)練過程中的測試效果如圖7所示,從中可以看出訓(xùn)練50批數(shù)據(jù)時,網(wǎng)絡(luò)均基本收斂,繼續(xù)訓(xùn)練的意義不大,可以停止訓(xùn)練。
(a) 訓(xùn)練所用學(xué)習率
(a) 查全率統(tǒng)計圖
本次實驗的評價標準有查全率、查準率、F1、噪聲比、準確率。將PSPNet、SegNet、U-Net、U-Net(BN)模型與本文提出的ERCUnet算法,以及通過調(diào)整ERCUnet的參數(shù),減少殘差塊中卷積層的數(shù)量和卷積層中卷積核的數(shù)量,獲得的更小的模型ERCUnet-tiny進行對比實驗。實驗結(jié)果如表1所示,顯然ERCUnet模型有良好的伸展性,可以容易地對網(wǎng)絡(luò)結(jié)構(gòu)進行調(diào)整,以滿足不同應(yīng)用平臺的需要,同時在采用相同訓(xùn)練方法時還不會導(dǎo)致結(jié)果的大幅下降。ERCUnet在Recall、F1和Accuracy方面均超過PSPNet、SegNet、U-Net、U-Net(BN)模型,同時還擁有更小的參數(shù)規(guī)模,參數(shù)量僅約為U-Net(BN)的1/10。ERCUnet與ERCUnet-tiny模型具體結(jié)構(gòu)如表2所示,其中CBL代表卷積層、批規(guī)范化層和激活函數(shù)的組合。最終在測試集圖片上的識別效果如圖7所示。由圖8可以看出,ERCUnet的檢測結(jié)果在細節(jié)上要好于U-Net(BN)等模型,檢測結(jié)果更加接近于真實結(jié)果,ERCUnet-tiny在參數(shù)量遠遠小于U-Net(BN)等模型的情況下,檢測結(jié)果在細節(jié)上也取得了優(yōu)于U-Net(BN)等模型的效果。
圖8 6種模型的測試效果
表1 訓(xùn)練后的模型在測試集上的比較
表2 ERCUnet和ERCUnet-tiny的結(jié)構(gòu)對比
ERCUnet模型通過特征圖拼接與殘差結(jié)構(gòu)實現(xiàn)了特征融合,殘差結(jié)構(gòu)也有效避免了深層卷積神經(jīng)網(wǎng)絡(luò)梯度消失的現(xiàn)象。ERCUnet模型由于其高結(jié)構(gòu)化和可塑性,可以根據(jù)需求調(diào)整參數(shù),調(diào)節(jié)網(wǎng)絡(luò)深度與殘差塊中CBL的個數(shù)進而靈活地控制網(wǎng)絡(luò)的整體大小。ERCUnet模型調(diào)節(jié)了不同深度卷積核(特征圖)的數(shù)量,使所有深度的Res殘差塊輸出特征圖尺寸相同,相當于增加了淺層特征圖的使用,減少了深層特征圖的使用。實驗結(jié)果表明,這樣的改進一方面可以減小模型參數(shù)量,使模型更高效、結(jié)果更穩(wěn)定,另一方面使模型在邊緣細節(jié)上精度更高。ERCUnet訓(xùn)練所用的損失函數(shù)在原本的交叉熵損失函數(shù)中添加了F1部分,使模型在查全率和查準率上更加均衡。實驗使用了更加全面的數(shù)據(jù)增廣算法,使得模型在小數(shù)據(jù)集上也能取得較好的效果。實驗顯示,ERCUnet在測試集上比U-Net(BN)的Recall和F1分別提升了6.71個百分點和2.18個百分點,而參數(shù)量僅為U-Net(BN)的13.30%,ERCUnet在Recall和Precision上更為均衡。實驗中采用的ERCUnet-tiny就是通過調(diào)整殘差塊的輸入輸出和內(nèi)部結(jié)構(gòu)等參數(shù)進一步縮小了模型的參數(shù)量,在參數(shù)量僅為U-Net(BN)模型的2.39%的前提下取得了與U-Net(BN)相近的效果。