徐崇文
(湖北理工學(xué)院 電氣與電子信息工程學(xué)院,湖北 黃石 435003)
鐵軌檢修和鐵路枕木與扣件的維護(hù)對鐵路安全有著非常重要的意義。對于整個(gè)鐵軌而言,枕木的腐蝕與斷裂會(huì)使鐵軌與地面的受力面積減小,使鐵軌慢慢下沉??奂闹饕饔檬前谚F軌牢牢固定于地面上。一旦扣件缺失部分零件,或發(fā)生損壞,鐵軌將會(huì)出現(xiàn)變形或者歪曲等問題,形成重大的安全隱患[1]。傳統(tǒng)的鐵軌檢修一般由專門的鐵路檢修車或者工人來完成,人工費(fèi)用和車輛維護(hù)費(fèi)用較大。本文提出了一種基于無人機(jī)的鐵軌區(qū)域探測的鐵軌檢修模式。該模式由無人機(jī)拍攝鐵軌圖片,再由系統(tǒng)自動(dòng)識別圖像中的枕木與扣件并進(jìn)行分類,既高效又經(jīng)濟(jì)實(shí)惠,有望替代傳統(tǒng)的鐵軌檢修模式。
基于無人機(jī)的鐵軌探測檢修工作,首先是對鐵軌進(jìn)行自動(dòng)探測,然后依據(jù)鐵軌信息對圖像進(jìn)行預(yù)處理,最后將預(yù)處理的圖像送入機(jī)器學(xué)習(xí)訓(xùn)練模型完成分類[2]。
相比于鐵軌檢修車拍攝,無人機(jī)拍攝的圖片方向具有不確定性,即鐵軌不再垂直或平行于整張圖片,因此需要對原圖片進(jìn)行預(yù)處理[3]。
由無人機(jī)在高空約180 m處拍攝鐵軌,形成圖像數(shù)據(jù)。無人機(jī)拍攝的示例原圖如圖1所示。
圖1 無人機(jī)拍攝的示例原圖
由圖1可以看出,每張圖片中不僅包含了鐵軌,還存在很多樹木、草地、車和石子等干擾因素,因此要先將2條鐵軌完整地從整張圖片中分離出來。LSD(Line Segment Detector)是一種能夠快速探測直線特征的算法[3],其整體思路如下。
1)選取1個(gè)起始點(diǎn)為種子點(diǎn),并計(jì)算其梯度方向θregion及其在x,y方向上的分量Sx,Sy。
2)計(jì)算種子鄰域內(nèi)其他點(diǎn)的梯度方向。若鄰域內(nèi)點(diǎn)的方向diff(θ-p,θregion)<τ(τ為閾值),那么這一點(diǎn)為直線區(qū)域點(diǎn),并重新計(jì)算2個(gè)分量。
(1)
由此得到新的直線區(qū)域梯度方向?yàn)椋?/p>
θregion=arctan(Sy/Sx)
(2)
3)不斷重復(fù)上述過程,直到找不到相同梯度方向的點(diǎn)或已經(jīng)進(jìn)行過上述計(jì)算過程的點(diǎn)。
4)直線區(qū)域選定后,由于選定的是一個(gè)個(gè)像素點(diǎn),所以需要用一個(gè)矩形框?qū)⒅本€區(qū)域圈定。直線區(qū)域中心點(diǎn)作為矩形的中心,主慣性軸為矩形的方向,長度和寬度則由最邊緣點(diǎn)決定。
5)驗(yàn)證直線分割。LSD算法相比于原有的直線分割算法更加高效準(zhǔn)確[4],整個(gè)圖像上不論是背景或是鐵軌本身都會(huì)有返回值,其所返回的直線在實(shí)際情況下是一條條長短不一的線段。因此,需要從眾多的線段中選出鐵軌上的線段,并將其合并、延伸。每一條線段的返回值包括起點(diǎn)坐標(biāo)(xori,yori)和終點(diǎn)坐標(biāo)(xend,yend),以及整個(gè)線段寬度。由此可以計(jì)算出每一條線段的角度為:
(3)
圖像起始點(diǎn)到該直線的距離為:
(4)
將角度和距離信息添加到已存儲(chǔ)的線段信息中,與原線段一一對應(yīng)。設(shè)定通道間隔,將角度與距離分通道排列,建立直方圖,再將角度與距離直方圖最大值的LSD直線特征分離出來,濾除背景中造成干擾的直線特征以后,得到剩余的大部分直線特征都屬于鐵軌。對于示例圖,LSD算法運(yùn)行結(jié)果如圖2所示。由圖2可以看出,整幅圖像包含大量的線段,長短不一,角度也不一致,覆蓋了2條鐵軌的大部分區(qū)域。
圖2 LSD算法運(yùn)行結(jié)果
已知線段的終點(diǎn)和起點(diǎn)坐標(biāo),可計(jì)算兩兩相鄰直線的角度差值。若小于一定的閾值,可將2條直線進(jìn)行合并;若大于一定的閾值,則計(jì)算下一條直線與這2條直線的角度差值,保留差值較小的2條直線。這樣就可以采用近似值將同距離同角度的直線進(jìn)行合并、延伸,將鐵軌從整個(gè)原圖中分離[5]。
經(jīng)過計(jì)算直線角度和距離原點(diǎn)長度等預(yù)處理之后,篩選出鐵軌上的線段,將所有線段連接在一起并延長,即可得到分離鐵軌(如圖3所示)。分離鐵軌的首要目的是將鐵軌區(qū)域圈定,即將滑動(dòng)窗口所需要掃描的區(qū)域圈定。由圖3可以看出,算法達(dá)到了預(yù)期目標(biāo),成功地將鐵軌從復(fù)雜的背景中分離出來。
圖3 分離鐵軌
無人機(jī)圖像大小為4 608×3 456,如果對整張圖片進(jìn)行掃描,耗時(shí)較長,極大地浪費(fèi)了數(shù)據(jù)集準(zhǔn)備時(shí)間。相比于傳統(tǒng)鐵軌檢修車上相機(jī)拍攝的圖片,數(shù)據(jù)庫中無人機(jī)圖片都是不規(guī)則的,鐵軌不再平行或者垂直于整張圖片。因此,在準(zhǔn)備數(shù)據(jù)集時(shí)更重要的是將每一張圖片根據(jù)已知的鐵軌角度進(jìn)行旋轉(zhuǎn),使鐵軌平行于圖片,同時(shí)延長直線獲得2條鐵軌與圖片的交點(diǎn),將這一交點(diǎn)作為滑動(dòng)窗口的起始點(diǎn),并重新計(jì)算鐵軌在旋轉(zhuǎn)后圖片中的起點(diǎn)和終點(diǎn),規(guī)定滑動(dòng)窗口從起點(diǎn)開始。對于示例圖,根據(jù)鐵軌角度旋轉(zhuǎn)后的圖片如圖4所示。
圖4 根據(jù)鐵軌角度旋轉(zhuǎn)后的圖片
滑動(dòng)窗口有了起始點(diǎn),還需對長度、寬度和步長等參數(shù)進(jìn)行設(shè)定。滑動(dòng)窗口的初始值寬度lori為:
lori=lmin-5×pixel
(5)
式(5)中,lmax和lmin分別為枕木寬度最大值和最小值,且在標(biāo)注數(shù)據(jù)時(shí)已知;pixel為像素。
間隔為15個(gè)像素點(diǎn)長度,滑動(dòng)窗口截止寬度lend為:
lend=lmax+5×pixel
(6)
探測的鐵軌間距固定,長度Widthsleeper設(shè)定為:
Widthsleeper=Widthtrack-2×Widthtieplate
(7)
式(7)中,Widthtrack為鐵軌間寬度;2×Widthtieplate為扣件的寬度。
步長為16,依次遍歷每一張圖片中的鐵軌部分得到的數(shù)據(jù)集,約5~6萬張圖片。將這些圖片按照3∶1∶1的比例分為訓(xùn)練集、測試集和驗(yàn)證集。
在預(yù)處理圖片的同時(shí),需要用MATLAB軟件的Image Labeler將一部分圖片進(jìn)行標(biāo)注。對于示例圖,圖片標(biāo)注如圖5所示,藍(lán)色方框的標(biāo)注為“bad”的枕木。因?yàn)檎麄€(gè)系統(tǒng)需要分辨的是損壞的扣件和腐蝕、斷裂的枕木,所以標(biāo)注的時(shí)候,只用將壞的部分框出,進(jìn)行二分類即可。
圖5 圖片標(biāo)注
從線性分類模型到解決實(shí)際問題的非線性模型,出現(xiàn)了2種代表性的方法:深度學(xué)習(xí)和支持向量機(jī)。本文用到的是深度學(xué)習(xí)分類方法,選用AlexNet訓(xùn)練模型。AlexNet在2012年由Hinton和他的學(xué)生AlexKrizhevsky提出,是一個(gè)基于CNN(卷積神經(jīng)網(wǎng)絡(luò))的深層神經(jīng)網(wǎng)絡(luò)模型,主要運(yùn)用于圖像數(shù)據(jù)處理。
首先將訓(xùn)練集圖片進(jìn)行分類,計(jì)算每一張圖片A與標(biāo)注數(shù)據(jù)B的重疊部分比例Ratio:
(8)
同時(shí),設(shè)定一個(gè)閾值,大于閾值則定義為“bad”的數(shù)據(jù)(已經(jīng)腐蝕、斷裂的枕木),小于閾值則定義為“good”的數(shù)據(jù)。驗(yàn)證集也采用同樣的方式進(jìn)行劃分。分別保存這4個(gè)分類,送入訓(xùn)練模型中。啟用GPU運(yùn)算,大約耗費(fèi)2 h,查看訓(xùn)練成果,當(dāng)error不再下降時(shí),保存分類器訓(xùn)練模型。將沒有分類的測試集直接送入訓(xùn)練模型,通過模型輸出與標(biāo)注數(shù)據(jù)進(jìn)行IOU計(jì)算和非極大值抑制處理得出最終的結(jié)果。
對于示例圖,AlexNet枕木識別結(jié)果如圖6所示,每一個(gè)保留下的枕木用紅框標(biāo)記出來,并在上方顯示其擊中概率。從圖6可以看出,大部分?jǐn)嗔鸦蛲嵝钡恼砟径急蛔R別出來,但有部分紅框圈出的區(qū)域仍包含了背景(石子區(qū)域)。
圖6 AlexNet枕木識別結(jié)果
整個(gè)圖片數(shù)據(jù)庫約有2 000 ~3 000張圖片,對每一張圖片都進(jìn)行LSD直線特征探測,分離鐵軌區(qū)域,將滑動(dòng)窗口掃描到的圖片送入訓(xùn)練模型。對于示例圖,物體識別準(zhǔn)確率如圖7所示。大部分物體能夠識別成功,但整個(gè)鐵軌區(qū)域探測鐵軌檢修項(xiàng)目所能達(dá)到的枕木識別準(zhǔn)確率僅為20%,沒有達(dá)到預(yù)期的目標(biāo)。
圖7 識別準(zhǔn)確率
造成這一結(jié)果的原因可能有:①整個(gè)數(shù)據(jù)集圖片包含大量背景,目標(biāo)物體區(qū)域較??;②標(biāo)注過程中,有的斷裂枕木包含大量石子,與背景類似,于是訓(xùn)練模型將石子背景區(qū)域也劃分為“不好”的枕木。
基于無人機(jī)的鐵軌區(qū)域探測檢修模式利用基礎(chǔ)的直線特征LSD和相關(guān)預(yù)處理算法對直線特征進(jìn)行篩選,實(shí)現(xiàn)了將固定的鐵軌區(qū)域特征從復(fù)雜背景中分離出來的目的,適用于整個(gè)數(shù)據(jù)集幾萬張圖片,方法魯棒性較高。由于無人機(jī)的拍攝飛行高度較高(180 m),獲得的圖片較為復(fù)雜,整個(gè)鐵軌只占圖片的一小部分,每個(gè)枕木所占的像素點(diǎn)較少,因此輸入到機(jī)器學(xué)習(xí)訓(xùn)練模型中得到的最終分類識別效果較差。
對于實(shí)驗(yàn)結(jié)果不盡人意的情況,可以進(jìn)行以下改進(jìn):①重新拍攝圖片數(shù)據(jù),將拍攝高度降低,得到盡可能清晰的圖片;②嘗試不同的機(jī)器學(xué)習(xí)訓(xùn)練模型,例如在AlexNet之后誕生的VGG16,GoogleNet等;③對不同的圖片進(jìn)行圖像匹配以消除陰影干擾。