唐港庭, 尹 超, 王紹平, 郭 兵, 李仲波, 譚子永
(1 山東理工大學 建筑工程學院, 山東 淄博 255049; 2 日照城投建設集團有限公司, 山東 日照 276800)
近年來,隨著大數(shù)據(jù)和高性能硬件設備的更新發(fā)展,利用卷積神經(jīng)網(wǎng)絡(Convolutional Neural Networks,CNN)提取圖像特征,從而進行目標識別,已經(jīng)成為圖像識別領域的研究熱點之一[1-3]。 部分學者基于CNN 開展了裂縫檢測研究:Lee 等學者[4]基于CNN 開發(fā)了一種具有自編碼器結(jié)構(gòu)的路面檢測語義分割模型,并通過調(diào)整圖像亮度來提高路面裂縫檢測效率。 陳健昌等學者[5]基于ResNet 提出了一種路面裂縫檢測方法,該方法能夠大大減少前期圖像預處理工作量,并且該方法的各項性能評估指標均優(yōu)于現(xiàn)有模型。 Rajadurai 等學者[6]采用隨機梯度下降和動量優(yōu)化的方法改進AlexNet 模型,實驗結(jié)果表明,該方法對混凝土表面裂縫的識別準確率較高。
以上研究雖然取得了一定成果,但在面對復雜道路場景時裂縫圖像的識別速度以及準確率等方面仍有較大提升空間。 首先,在圖像采集過程中,設備狀態(tài)(溫度、電磁波等干擾)或操作不當?shù)仍蚨伎赡軙乐亟档筒杉瘓D像的質(zhì)量,并且道路上的光照條件、車道線、積水、陰影、油污、水漬、雜物等干擾因素,也可能會降低道路裂縫圖像的識別的準確率。此外,模型訓練需要大量樣本數(shù)據(jù)集,目前公共裂縫數(shù)據(jù)集樣本數(shù)量較少,難以滿足訓練要求[7]。 針對以上問題,本文提出一種基于改進GoogLeNet 的瀝青路面裂縫識別算法,并通過采集路面圖像構(gòu)建瀝青路面裂縫數(shù)據(jù)集,進行模型的訓練和測試。
針對目前公共裂縫數(shù)據(jù)集樣本較少的情況,本文通過自行采集瀝青路面圖像,構(gòu)建瀝青路面裂縫數(shù)據(jù)集。 選定山東省淄博市張店區(qū)內(nèi)的部分路段,包括柳泉路、西二路、美食街、新村西路以及共青團路等,分別于不同天氣、不同時段進行瀝青路面圖像采集。
圖像采集方案為:首先,通過高清行車記錄儀以及車載攝像機以1 km 為基本采集單元,駕駛汽車對瀝青路面進行視頻錄制,采集過程中設備離地高度約1.2 m,并且采集寬度不小于行車道寬度的70%。然后,通過視頻取幀篩選出滿足要求的路面圖像,并刪除重復或不滿足要求的圖像。 最后,針對目前裂縫圖像識別研究在復雜道路場景下識別效果不佳的問題,本文使用攝像機或手機以不同拍攝角度或焦距、在不同天氣狀況或不同光照條件下,對帶有陰影、積水、車道線、井蓋、油污、雜物等干擾因素的裂縫區(qū)域單獨進行細節(jié)拍攝,從而提升模型泛化能力,細節(jié)拍攝圖像類型如圖1 所示。
圖1 細節(jié)拍攝圖例Fig. 1 Detail shooting examples diagram
將采集到的圖像裁剪成像素大小為224×224且僅含單一病害類型的圖像,包括橫向裂縫、縱向裂縫、塊狀裂縫、龜裂以及無病害圖像共1 124 張,各類圖像數(shù)量見表1。
表1 各類圖像數(shù)量Tab. 1 Number of various types of images
為滿足模型訓練需要,對裁剪后的圖像進行增廣,從而擴充樣本數(shù)據(jù)集[8],本文采用的增廣方式包括旋轉(zhuǎn)變換(橫向裂縫、縱向裂縫不進行旋轉(zhuǎn))、鏡像翻轉(zhuǎn)(水平、豎直)以及亮度變換(明暗變換)。將擴展后的各類圖像按照7∶2∶1 的比例劃分為訓練集、驗證集、測試集,各類圖像具體數(shù)量見表2。
表2 增廣后的各類圖像數(shù)量Tab. 2 The number of all kinds of images after augmentation
在圖像采集過程中,極易受到光照條件、設備狀態(tài)、采集方式等因素影響,導致圖像質(zhì)量降低。 因此,需要通過圖像預處理來提升圖片質(zhì)量,從而提高模型的識別準確率。
圖像預處理過程如圖2 所示。 圖2 中,(a)為原始裂縫圖像;(b)為采用平均值法進行圖像灰度化處理的效果,減少圖像參數(shù),加快圖像處理速度;(c)為圖像直方圖均衡化的效果,提高圖像對比度;(d)為采用中值濾波法去除圖像部分噪聲的效果,改善圖像視覺效果,提升圖片質(zhì)量[9-10]。
圖2 圖像預處理過程Fig. 2 Images preprocessing process
使用LabelImg 標注軟件對數(shù)據(jù)集中的圖像進行標注,將橫向裂縫、縱向裂縫、塊狀裂縫、龜裂以及無病害圖像分別添加標簽為Transversal Cracks、Longitudinal Cracks、 Block Cracks、 Map Cracks、Normal,LabelImg 標注軟件界面如圖3 所示。
圖3 LabelImg 標注軟件界面Fig. 3 LabelImg software interface
GoogLeNet 網(wǎng)絡由3 個卷積層、9 個Inception 模塊(18 層)、2 個輔助分類器(Auxiliary Classifier)以及一個全連接層構(gòu)成[11-12],網(wǎng)絡結(jié)構(gòu)如圖4 所示。相較于經(jīng)典圖像分類模型AlexNet 和VGGNet,GoogLeNet 網(wǎng)絡模型雖然多達22 層,但參數(shù)量僅為500 萬個,分別是AlexNet 和VGGNet 參數(shù)量的1/12和1/36,對計算機硬件條件要求相對較低。
圖4 GoogLeNet 網(wǎng)絡結(jié)構(gòu)Fig. 4 GoogLeNet network structure
本文結(jié)合瀝青路面裂縫數(shù)據(jù)集特點, 在GoogLeNet 原模型的基礎上從以下方面進行改進:
(1)GoogLeNet 原始網(wǎng)絡較深,本文所采用的分類標簽數(shù)量較少且路面裂縫圖像紋理相對簡單,因此,刪除 GoogLeNet 原始模型中作用較小的LocalRespNorm 結(jié)構(gòu),并對Inception 模塊和輔助分類器數(shù)量進行刪減,在保證準確率滿足要求的基礎上,減少模型參數(shù)量和計算時間。
(2)Inception 模塊的大尺度卷積核有著大感受野的同時也帶來了更多的參數(shù),因此,本文使用3 個連續(xù)的3×3 卷積核替換第一個7×7 卷積核,并在Inception 模塊中使用2 個連續(xù)的3×3 的卷積核代替5×5 卷積核,在感受野大小不變的同時,能夠大大減少模型參數(shù)。
(3)激活函數(shù)ReLU(Rectified Linear Unit)[13]收斂速度較快,且增強了網(wǎng)絡的稀疏性,但輸入小于0 時梯度為0,該層就會“die”。 針對這個問題,誕生了Leaky ReLU[14],該函數(shù)有效改善了ReLU的“die”特性,但損失了部分稀疏性,并且增加了運算量。 因此,本文采用ReLU與Leaky ReLU組合的方式,即在普通卷積核后進行ReLU操作,在Inception 模塊中4個分支的卷積核后進行Leaky ReLU操作。
(4)在所有卷積層之后加入批量歸一化層(Batch Normalization,BN),解決梯度飽和、加快模型計算速度[15],同時在平均池化層后加入Dropout 層防止過擬合[16]。
本文實驗在Windows10 操作系統(tǒng)上完成,運行內(nèi)存16.0 GB,CPU 為ADM Ryzen 7 4800U with Radeon Graphics,8 核心16 線程,GPU 為ADM RadeonTM Graphics,Python 版本為3.8.8,Pytorch 版本1.7.1。
本文采用總耗時(訓練階段用時與測試階段用時之和)作為模型的速度評價指標,采用準確率(Accuracy) 作為模型的精度指標,其數(shù)學定義公式為:
其中,Acc表示準確率;TP表示正樣本被正確識別為正樣本的數(shù)量;TN表示負樣本被正確識別為負樣本的數(shù)量;FP表示負樣本被錯誤識別為正樣本的數(shù)量;FN表示正樣本被錯誤識別為負樣本的數(shù)量。
本文采用3 個、6 個、9 個Inception 模塊(自后向前刪減)分別對應0 個、1 個、2 個輔助分類器進行數(shù)量交叉驗證,能夠在盡量減少Inception 模塊數(shù)量的同時,最大程度減少實驗量。
GoogLeNet 原模型中,每3 個Inception 模塊會有一個輔助分類器,僅在模型訓練階段被激活,將中間層的分類結(jié)果以一定權(quán)重(本文設為0.3)作為輔助輸出添加到最終結(jié)果中,最后一個Inception 模塊直接連接模型輸出部分,無需再添加第3 個輔助分類器。 因此,3 個Inception 模塊和2 個輔助分類器的組合不存在;3 個Inception 模塊和1 個輔助分類器的組合,添加的輔助分類器與輸出部分重合;6 個Inception 模塊和2 個輔助分類器的情況,添加的第二個輔助分類器與輸出部分重合。 因此,以上3 種情況不進行試驗,交叉驗證實驗結(jié)果見表3。
表3 Inception 模塊及輔助分類器數(shù)量Tab. 3 Number of Inception modules and auxiliary classifiers
由表3 可見,相較于實驗6(原模型),實驗1 雖然耗時減少了37.9 min,但準確率大幅度下降了37.9%。實驗2 和實驗3 在耗時大幅度減少的同時,準確率分別下降了2.9%、2.3%。 實驗4 和實驗5 的準確率分別下降了1.9%、0.7%,耗時分別減少了5.9 min、2.2 min,整體變化相對較少。 實驗2 相較于實驗3,模型復雜度及耗時都減少的同時,準確率僅下降了0.6%。 綜上,本文采用實驗組2 中6 個Inception 模塊、以及不添加輔助分類器的方案。
基于以上修改方案,改進后的GoogLeNet 網(wǎng)絡結(jié)構(gòu)如圖5 所示。
為了在模型訓練效果和硬件設備條件之間取得平衡,在模型訓練階段,批尺寸設為16,迭代次數(shù)設為500,初始學習率設為0.001,損失函數(shù)采用交叉熵函數(shù),Dropout率設為0.4。
分別使用訓練好的GoogLeNet 原模型與改進模型在測試集上進行測試,結(jié)果見表4,損失值和準確率隨迭代次數(shù)的變化如圖6 所示。
由表4 可見,原始GoogLeNet 模型在測試集上的準確率為82.8%,總耗時為80.7 min,相比之下,改進GoogLeNet 模型的準確率能夠達到88.4%,提升了5.6%,總耗時為48.2 min,減少了32.5 min(40.3%);相較于不含干擾因素的圖像,GoogLeNet 原模型與改進模型對含有干擾因素圖像識別準確率分別降低了2.1%、3.6%,下降幅度在可接受范圍內(nèi)。
表4 模型測試結(jié)果Tab. 4 Model test results
由圖6 可見,模型損失值和準確率隨迭代次數(shù)增加逐漸趨于穩(wěn)定,GoogLeNet 改進模型相較于原模型,模型收斂速度和損失值下降速度都有所提升。
傳統(tǒng)圖像識別算法在面對復雜路面情況(積水、強光、陰影等)時,識別效果有較大提升空間,本文針對性地采集了存在各類干擾因素的路面圖像,構(gòu)建了瀝青路面裂縫數(shù)據(jù)集,并提出了一種基于改進GoogLeNet 的瀝青路面裂縫識別算法。 實驗結(jié)果表明,GoogLeNet 改進算法在本文所構(gòu)建的瀝青路面裂縫數(shù)據(jù)集上,準確率能達到88.4%,總耗時48.2 min,相較于GoogLeNet 原始模型,準確率提升了5.6%,總耗時減少了32.5 min(40.3%),并且模型收斂速度和損失值下降速度都明顯加快;相較于不含干擾因素的圖像,本文所構(gòu)建數(shù)據(jù)集訓練出的GoogLeNet 原模型與改進模型,對于含有干擾因素的圖像識別準確率分別降低了2.1%、3.6%,下降幅度在可接受范圍內(nèi)。 因此,本文所構(gòu)建的瀝青路面裂縫數(shù)據(jù)集以及提出的改進GoogLeNet 算法,可為道路檢測、裂縫識別、無人駕駛等研究提供幫助。