令雅莉,楊桂芹,張又元,王小鵬
(蘭州交通大學電子與信息工程學院,蘭州 730070)
鐵路運輸安全直接關系到人民的生命安全與社會的經濟發(fā)展。裂紋作為主要的軌枕損傷,當細小裂紋的出現(xiàn)未及時發(fā)現(xiàn)時,細小裂紋會擴大成裂縫,繼而發(fā)展為軌枕失效,對行車安全造成威脅。因而,定期對軌枕進行檢測,在裂紋較小的時候,及時發(fā)現(xiàn)并解決,能夠降低維修成本,提高鐵路的基礎設施本體設備安全。當前,鐵路軌枕主要以人工巡檢配合機器輔助的檢測方法。在檢測過程中,這種方式主要存在人力耗費大、長時間巡檢容易導致巡檢人員疲勞,造成錯檢和漏檢、裂紋的信息需要手動輸入,無法實現(xiàn)軌枕的自動化檢測,速度太慢,效率低下。基于以上原因,非常有必要實現(xiàn)混凝土軌枕裂紋自動化檢測。
目前,實現(xiàn)自動化檢測混凝土軌枕裂紋的研究方法主要有兩大類,第一類是以RCNN[1]、Faster-RCNN[2]等為代表的雙階段檢測算法。該算法一般將目標檢測分為兩步,第一步主要是在圖片上獲得候選區(qū)域(滑動窗口),從而實現(xiàn)候選區(qū)域特征向量的提取。第二步是分類和位置預測候選區(qū)域。雙階段檢測算法雖然可以提高檢測準確率,但由于擴大算法模型導致計算量增加,檢測速度減慢,無法滿足實時性檢測的需求。第二類是以SSD[3]、YOLO[4-6]為代表的單階段檢測算法,該類算法省略了候選區(qū)域生成階段,徑直得到目標分類和位置信息,極大提升了目標檢測的速度。雖然這兩類算法都有相應的優(yōu)點,但檢測速度慢與檢測精度低的缺點導致其不適用于鐵路混凝土軌枕裂紋檢測。
考慮到雙階段算法檢測速度難以提升。因此,本文選擇單階段算法YOLOv5為基礎,提出了一種基于改進YOLOv5m[7]的鐵路軌枕裂紋檢測方法。該方法在骨干網中嵌入SE[8]注意力機制模塊對主干網絡進行調整,獲取更多淺層特征從而得到更多的圖片紋理信息。文獻[9]通過熱力圖證明最大池化很容易使裂紋信息丟失,因此,將SPP模塊中的最大池化層更換為平均池化層來保留更多裂紋信息。設計出一種新的多尺度檢測結構,在保留速度的前提下,減少微小裂紋的漏檢情況,提高裂紋的檢測精度。考慮裂紋的尺度變化范圍過大會影響單階段算法的檢測精度,所以采用分治標簽的方法人為降低裂紋尺度變化范圍,減少微小裂紋的漏檢,從而提高檢測精度。
YOLOv5是一種單階段目標檢測算法,與YOLOv4[6]對比來看,其具有均值權重文件更小,訓練時間和推理速度更短的優(yōu)勢,YOLOv5一共有4個版本, 按照網絡深度大小和特征圖寬度大小分為YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x?;趯ψR別精度、檢測速度以及權重文件大小等因素的綜合考慮,選擇檢測速度較快、識別精度較高的YOLOv5m進行研究與改進,其權重文件也相對較小,適合部署在嵌入式設備中,具有很高的實用性。YOLOv5m模型主要由Input、Backbone和Head這3個部分組成。如圖1所示。
圖1 YOLOv5網絡結構Fig.1 YOLOv5 Network structure
Input主要包括自適應縮放圖片、Mosaic數據增強以及自適應錨框計算。因為不同的圖片有不同的尺寸,所以采用自適應縮放圖片可以將原始圖片統(tǒng)一縮放到一個符合模型需求的標準尺寸,然后送入檢測模型中訓練,本文的輸入圖片尺寸為640×640像素;Mosaic數據增強是利用了4張圖片,對這四張圖片進行拼接后得到一張新的圖片,通過增加小目標的方式極大提升小物體的識別能力,使數據更加充足;自適應錨框計算將開始設定的錨框作為基礎從而輸出預測框,接著和真實框進行對比分析,采用K均值和遺傳算法對自定義數據集實行計算,算出其中的差別后進行反向變換,最后一直輪換參數得到最恰當的錨框值。
雖然YOLOv5模型具有識別速度快、檢測精度高的特點,但利用既有的YOLOv5模型對混凝土軌枕裂紋進行專有化檢測,存在以下不足。
(1)混凝土軌枕中存在大量微小裂紋,通常在提取的過程中,小目標物體憑借淺層特征更多一點,因此極易遺失小目標物體信息。
(2)最大池化容易導致裂紋特征信息丟失,也是導致微小裂紋漏檢的主要原因。
(3)當輸入圖像尺寸為640×640像素時,在原始模型中,檢測分別使用8倍、16倍、32倍下采樣相應得到尺寸大小分別為80×80、40×40、20×20像素的檢測層,分別可以檢測大小在8×8、16×16、32×32像素以上的目標,但是對于軌枕裂紋檢測而言,其存在大量的微小裂紋,而且采用分治標簽的方法也會使裂紋分為若干段的小裂紋去檢測。因此,裂紋目標物都變?yōu)樾〕叽缒繕恕T跈z測小于8×8像素的微小裂紋時會變?yōu)槿舾啥蔚男×鸭y去檢測。因此,裂紋目標物都變?yōu)樾〕叽缒繕恕T跈z測小于8×8像素的微小裂紋時會變得困難,過大的檢測層也變得多余。
2.2.1 骨干網改進
由于混凝土軌枕的表面情況相比一些典型應用場景更為復雜,且大量早期裂紋的邊緣相較一般物體與背景更難區(qū)別。原始YOLOv5模型在進行卷積下采樣時容易使小目標的特征信息丟失,因此在骨干網絡中引入SE注意力機制來強調更為重要的裂紋信息,抑制不太重要的背景信息,尤其對于小裂紋和密集裂紋來說,使模型更加精準地定位和識別裂紋區(qū)域。
SENet是Huetal于2017年所提出的融合通道注意力與空間注意力所得到的網絡結構,具體結構如圖2所示,其中W,W′,H,H′為特征圖寬高;C,C′為通道數;Fsp為壓縮操作,即進行全局平均池化;Fex為激勵操作,即為減少通道個數從而降低計算量;Fscale是通道權重相乘,輸入特征圖大小為W′×H′×C′,最后輸出特征圖大小為W×H×C。
圖2 SE(Squeeze-And-Excitation)模塊Fig.2 Squeeze-And-Excitation module
從圖2中可以看出,SE模塊主要包括Squeeze和Excitation兩部分,并通過這兩部分來處理全局信息。卷積會得到Feature map,首先對Feature map進行處理,處理后可以得到一個與通道數量相同的一維向量,這個一維向量可以成為每個通道的評價指標,接著將指標分配到對應的通道上,得到最終結果。為使網絡能夠更好地擬合通道之間的相關性,獲取更重要的通道特征的信息,在YOLOv5主干網中加入SE-Net通道注意力模塊,即在主干網絡結尾C3模塊之后,添加SENet模塊,并與之后的Head層相連。通過建立特征映射關系,使網絡充分利用得到的全局信息,將裂紋目標的通道特征信息賦予更高的權重。從而更好地擬合裂紋目標通道間的相關特征信息,抑制無用的信息,最終會使模型更專注于檢測裂紋這一指定類別。其模型構建流程如圖3所示。
圖3 SE-ResNet流程Fig.3 SE ResNet process
2.2.2 基于平均池化的SPP模塊
原始的SPP模塊主要通過5×5、9×9、13×13像素的最大池化和填充操作與未池化數據進行concat拼接來增大感受野,提取出最重要的多方面特征。最大池化在典型場景下會有更好的效果,但對于裂紋目標來說,卻會使得特征信息丟失。因此,本文將SPP模塊中的最大池化替換為平均池化,在具備增大感受野和提取多方面特征的優(yōu)勢下,來保留更多裂紋特征。改進前后分別如圖4、圖5所示。
圖4 基于最大池化的SPP模塊Fig.4 SPP module based on maximum pooling
圖5 基于平均池化的SPP模塊Fig.5 SPP module based on average pooling
2.2.3 檢測結構改進
YOLOv5采用了3種尺度對不同大小的目標進行檢測。分別通過8倍、16倍以及32倍下采樣特征圖對小型、中型以及大型目標進行檢測[10-11]。原有多尺度檢測結構對細小裂紋目標容易造成漏檢,且分治標簽的方法縮小了裂紋尺度變化范圍,使大段裂紋目標變?yōu)樾《瘟鸭y目標檢測。因此,針對該問題,改進了原有的檢測結構。
首先,刪除原始模型中32倍下采樣所得到的尺寸為20×20像素較大物體的檢測尺度;增加一個大小為160×160像素的特征圖。具體操作如下:在增加了SE注意力機制后的網絡結構中第18層之后繼續(xù)對特征圖進行上采樣操作,持續(xù)增加特征圖,在第21層時,將160×160像素的特征圖與骨干網絡中第2層特征圖進行張量拼接融合,從而通過新的特征融合獲取到更大的特征融合,對小目標進行檢測。在第22層增加小目標檢測層。upsample為上采樣模塊,經過上采樣操作會擴大特征圖。改進后的網絡結構如圖6所示。
圖6 改進后的YOLOv5網絡結構Fig.6 Improved YOLOv5 network structure
本文采用文獻[9]中采集的數據集,從中選取2 086張高質量的裂紋圖片整理為本次實驗的數據集,數據集樣例如圖7所示。按照8∶2的比例將其劃分為訓練集和測試集,其中訓練集有1 669張,測試集有417張。
圖7 部分數據集樣例Fig.7 Example of part dataset
常規(guī)標注方式有3點不足:(1)會使得目標框尺度變化過大,難以收斂;(2)容易使微小裂紋漏檢;(3)通過預選錨框與真實標簽的交并比計算容易將正確的標注框歸類于負樣本。因此,針對以上常規(guī)標注方式的不足之處,本文采用分治標簽的方式并使用Labelimg對裂紋進行標注,具體標注方式如圖8所示。
圖8 數據集標注Fig.8 Dataset annotation
分治標簽使用了適合裂紋尺度的目標框,將裂紋被漏檢的風險降到最低。圖9為數據集的可視化結果,其中圖9(a)為數據集目標類別的分布與目標的數量,圖9(b)為數據集目標中心點位置分布,圖9(c)為數據集目標大小分布,橫縱坐標分別代表目標的寬和長。
圖9 數據集可視化結果Fig.9 Dataset visualization results
(1)
常用的目標框回歸損失函數有GIoU[12]或CIoU[13]。GIoU能同時關注到真實框與預測框的重疊面積和其他的非重疊區(qū)域,所以GIoU與原始的IoU相比可以更好地反映兩者之間的重合度。但考慮GIoU始終只能注意到真實框與預測框之間重疊率這一個因素,無法更好地描述目標框的回歸問題,采用CIoU_loss作為全文檢測任務的回歸損失函數。CIoU_loss[14-15]可以關注預測框與目標框之間的重疊面積和中心點距離,同時也考慮預測框與目標框的長寬比,使模型回歸效果更好,CIoU_Loss計算公式如式(1)所示。
式中,ρ2(b,bgt)為預測框與實際框兩個中心點之間的距離;c為最小閉合區(qū)域的對角線距離;α為權重函數;υ為用來度量檢測框和真實框之間的比例的相似性。α和υ分別如式(2)、式(3)所示。
(2)
(3)
式中,hgt為目標框的長;wgt為目標框的寬;h為預測框的長;w為預測框的寬。
本文實驗的操作系統(tǒng)為Windows10,運行內存為12GB,CPU型號為I5,GPU為GeForce RTX 2080 Ti,顯存大小為11GB,實驗基于Pytorch1.7.1深度學習框架,編程語言為Python3.8,版本為CUDA 11.2。
訓練采用SGD優(yōu)化算法,初始學習率為0.01,采用余弦退火策略動態(tài)降低學習率,動量因子為0.937,權重衰減系數為0.0005,Batch size為16,Epochs為100,將前3次Epoch做為模型預熱。
本文采用通用評價指標,即精確率(Precision)、召回率(Recall)、平均精度均值(mean Average Precision,mAP)以及幀率(Frames Per Second,FPS)對網絡模型進行評價[16]。
通常在二分類問題中,常用混淆矩陣(Confusion Matrix)來表示樣本預測值的正負與樣本真實值的正負之間的關系[17],圖10表示一個混淆矩陣。
圖10 混淆矩陣Fig.10 Confusion matrix
召回率與精確率用公式表示[18],分別如式(4)、式(5)所示。
(4)
(5)
式中,FPrecision為預測裂紋中正確預測的數量占總預測裂紋數量的比例;FRecall為預測裂紋中正確預測裂紋數量占總正確預測數量的比例[19]。FTP表示將正樣本預測為正;FFP表示將負樣本預測為正;FTN表示將正樣本預測為負;FFN表示將負樣本預測為負。
FAP指PR(Precision-Recall)曲線下面積,FmAP指每個類別FAP的均值[20],分別如式(6)、式(7)所示。
(6)
(7)
式中,p(r)為不同查準率r下對應的查全率p;APi為第i類的檢測準確率;N為分類數。
檢測速度通常用FPS來衡量,表示檢測模型每秒處理圖片的數量,FPS值越高,網絡模型處理圖像的速度就越快[13]。
本文共有2組實驗。先將改進后的算法YOLOv5+與既有的YOLOv5算法對混凝土軌枕裂紋檢測進行詳細對比,然后又與Faster R-CNN、YOLOv3模型進行了性能對比。
改進算法在訓練100個迭代周期過程中損失變化情況如圖11所示,由圖可知,前期的損失值以較快的速度降低,但由于迭代次數逐步的增加,Loss值逐漸下降,處于一個平穩(wěn)的狀態(tài),改進后的網絡模型收斂速度很快。
圖11 Loss變化曲線Fig.11 Loss variation curve
本文算法與原始YOLOv5算法平均精度均值、精確率和召回率的變化曲線對比分別如圖12~圖14所示,詳細數據對比如表1所示。在訓練過程中,改進后的YOLOv5模型與原始模型都采用同一個數據集和相同的參數設置,從圖中和表中可以看出,改進后P(r)的模型在平均精度均值、精確率和召回率的對比中,均優(yōu)于原始模型,且損失值變化更加平穩(wěn)。改進后的模型檢測速率比原始模型更快的同時模型參數量也更少,YOLOv5中為21 037 638,本文算法為17 600 742。
表1 模型改進前后參數詳細對比 %Tab.1 Detailed comparison of parameters before and after model improvement
圖12 改進前后mAP對比Fig.12 Comparison of mAP before and after improvement
圖13 改進前后Precision對比Fig.13 Comparison of Precision before and after improvement
圖14 改進前后Recall對比Fig.14 Comparison of Recall before and after improvement
為能夠進一步對比本文改進算法的檢測性能,將本文改進后使用的YOLOv5+算法與普遍使用的目標檢測模型Faster R-CNN、YOLOv3算法進行實驗對比分析,采用Precision、Recall和mAP三項指標分別進行評估與對比,對比實驗結果如表2所示。
表2 不同算法性能對比結果Tab.2 Performance comparison results of different algorithms
由表1、表2可知,本文算法Precision比Faster R-CNN、YOLOv3與YOLOv5算法分別高出15.8%、7.98%、6.5%,Recall與這3種算法相比差不多,但從mAP來看,本文算法均高于其他算法,且比典型雙階段算法Faster R-CNN高出近20%,比YOLOv3高出了近10%,比YOLOv5高出了8%,而且從表2可以看出FPS有所提高。
經綜合比較,在Recall相差不多的情況下,本文無論從Precision還是mAP,都有顯著的優(yōu)越性,而且實時性比YOLOv5更高,故本文算法相較于其他算法更適合混凝土軌枕裂紋檢測任務。
為能夠更進一步考證改進模型的切實性,從測試集中選擇一些圖片進行測試,圖15為原始YOLOv5模型與改進后模型在不同條件下的檢測結果對比。
圖15 改進前后檢測效果對比Fig.15 Comparison of detection effects before and after improvement
由圖15(a)可知,在光線較亮、裂紋特征較明顯的條件下,YOLOv5算法與本文改進算法均取得良好的檢測效果,但YOLOv5算法仍存在小部分裂紋漏檢的情況。由圖15(b)和圖15(c)可知,在小段細微裂紋的檢測中,YOLOv5算法對微小裂紋的漏檢情況較為明顯,而本文改進算法對特征不明顯的裂紋檢測效果會好很多。由圖15(d)可知,原算法在對破碎裂紋檢測時,存在大量漏檢,而改進后算法對破碎裂紋的檢測效果良好。由圖15(e)可知,在光線暗的條件下,原算法未檢測出單個微小裂紋,而改進后算法成功檢測出了軌枕所存在的微小裂紋。由圖15(f)可知,在軌枕表面條件相對比較繁瑣的情況下,在進行裂紋檢測時,原算法受到一定干擾,存在多處漏檢情況,改進后算法檢測效果優(yōu)異。
在已有的YOLOv5算法對混凝土軌枕裂紋檢測效率不高,容易造成細小裂紋漏檢的基礎上,基于改進算法YOLOv5+的混凝土軌枕裂紋檢測針對微小裂紋檢測效果更好?,F(xiàn)階段采用的深度學習目標檢測算法對軌枕裂紋檢測效果不理想,尤其是檢測微小裂紋時容易出現(xiàn)漏檢現(xiàn)象,因此,本文提出了一種改進算法,該改進算法主要基于YOLOv5模型,改進部分主要是通過在YOLOv5的主干提取網絡中加入SELayer注意力機制模塊、更換最大池化層為平均池化層、構建新的多尺度檢測結構來提高對軌枕裂紋檢測的能力并減少對微小裂紋漏檢的情況。并選用分治標簽的方法對混凝土軌枕裂紋進行標注,從而縮小裂紋尺度變化范圍,加快模型收斂,增大裂紋的實際占比并提高對微小裂紋的檢測效果。實驗與檢測結果表明,本文改進方法無論在檢測精度還是速度上都優(yōu)于YOLOv5原算法,且參數量更少,較好地滿足實時性檢測要求,總體性能也高于Faster R-CNN、YOLOv3等目標檢測模型。