徐崇文
(湖北理工学院 电气与电子信息工程学院,湖北 黄石 435003)
铁轨检修和铁路枕木与扣件的维护对铁路安全有着非常重要的意义。对于整个铁轨而言,枕木的腐蚀与断裂会使铁轨与地面的受力面积减小,使铁轨慢慢下沉。扣件的主要作用是把铁轨牢牢固定于地面上。一旦扣件缺失部分零件,或发生损坏,铁轨将会出现变形或者歪曲等问题,形成重大的安全隐患[1]。传统的铁轨检修一般由专门的铁路检修车或者工人来完成,人工费用和车辆维护费用较大。本文提出了一种基于无人机的铁轨区域探测的铁轨检修模式。该模式由无人机拍摄铁轨图片,再由系统自动识别图像中的枕木与扣件并进行分类,既高效又经济实惠,有望替代传统的铁轨检修模式。
基于无人机的铁轨探测检修工作,首先是对铁轨进行自动探测,然后依据铁轨信息对图像进行预处理,最后将预处理的图像送入机器学习训练模型完成分类[2]。
相比于铁轨检修车拍摄,无人机拍摄的图片方向具有不确定性,即铁轨不再垂直或平行于整张图片,因此需要对原图片进行预处理[3]。
由无人机在高空约180 m处拍摄铁轨,形成图像数据。无人机拍摄的示例原图如图1所示。
图1 无人机拍摄的示例原图
由图1可以看出,每张图片中不仅包含了铁轨,还存在很多树木、草地、车和石子等干扰因素,因此要先将2条铁轨完整地从整张图片中分离出来。LSD(Line Segment Detector)是一种能够快速探测直线特征的算法[3],其整体思路如下。
1)选取1个起始点为种子点,并计算其梯度方向θregion及其在x,y方向上的分量Sx,Sy。
2)计算种子邻域内其他点的梯度方向。若邻域内点的方向diff(θ-p,θregion)<τ(τ为阈值),那么这一点为直线区域点,并重新计算2个分量。
(1)
由此得到新的直线区域梯度方向为:
θregion=arctan(Sy/Sx)
(2)
3)不断重复上述过程,直到找不到相同梯度方向的点或已经进行过上述计算过程的点。
4)直线区域选定后,由于选定的是一个个像素点,所以需要用一个矩形框将直线区域圈定。直线区域中心点作为矩形的中心,主惯性轴为矩形的方向,长度和宽度则由最边缘点决定。
5)验证直线分割。LSD算法相比于原有的直线分割算法更加高效准确[4],整个图像上不论是背景或是铁轨本身都会有返回值,其所返回的直线在实际情况下是一条条长短不一的线段。因此,需要从众多的线段中选出铁轨上的线段,并将其合并、延伸。每一条线段的返回值包括起点坐标(xori,yori)和终点坐标(xend,yend),以及整个线段宽度。由此可以计算出每一条线段的角度为:
(3)
图像起始点到该直线的距离为:
(4)
将角度和距离信息添加到已存储的线段信息中,与原线段一一对应。设定通道间隔,将角度与距离分通道排列,建立直方图,再将角度与距离直方图最大值的LSD直线特征分离出来,滤除背景中造成干扰的直线特征以后,得到剩余的大部分直线特征都属于铁轨。对于示例图,LSD算法运行结果如图2所示。由图2可以看出,整幅图像包含大量的线段,长短不一,角度也不一致,覆盖了2条铁轨的大部分区域。
图2 LSD算法运行结果
已知线段的终点和起点坐标,可计算两两相邻直线的角度差值。若小于一定的阈值,可将2条直线进行合并;若大于一定的阈值,则计算下一条直线与这2条直线的角度差值,保留差值较小的2条直线。这样就可以采用近似值将同距离同角度的直线进行合并、延伸,将铁轨从整个原图中分离[5]。
经过计算直线角度和距离原点长度等预处理之后,筛选出铁轨上的线段,将所有线段连接在一起并延长,即可得到分离铁轨(如图3所示)。分离铁轨的首要目的是将铁轨区域圈定,即将滑动窗口所需要扫描的区域圈定。由图3可以看出,算法达到了预期目标,成功地将铁轨从复杂的背景中分离出来。
图3 分离铁轨
无人机图像大小为4 608×3 456,如果对整张图片进行扫描,耗时较长,极大地浪费了数据集准备时间。相比于传统铁轨检修车上相机拍摄的图片,数据库中无人机图片都是不规则的,铁轨不再平行或者垂直于整张图片。因此,在准备数据集时更重要的是将每一张图片根据已知的铁轨角度进行旋转,使铁轨平行于图片,同时延长直线获得2条铁轨与图片的交点,将这一交点作为滑动窗口的起始点,并重新计算铁轨在旋转后图片中的起点和终点,规定滑动窗口从起点开始。对于示例图,根据铁轨角度旋转后的图片如图4所示。
图4 根据铁轨角度旋转后的图片
滑动窗口有了起始点,还需对长度、宽度和步长等参数进行设定。滑动窗口的初始值宽度lori为:
lori=lmin-5×pixel
(5)
式(5)中,lmax和lmin分别为枕木宽度最大值和最小值,且在标注数据时已知;pixel为像素。
间隔为15个像素点长度,滑动窗口截止宽度lend为:
lend=lmax+5×pixel
(6)
探测的铁轨间距固定,长度Widthsleeper设定为:
Widthsleeper=Widthtrack-2×Widthtieplate
(7)
式(7)中,Widthtrack为铁轨间宽度;2×Widthtieplate为扣件的宽度。
步长为16,依次遍历每一张图片中的铁轨部分得到的数据集,约5~6万张图片。将这些图片按照3∶1∶1的比例分为训练集、测试集和验证集。
在预处理图片的同时,需要用MATLAB软件的Image Labeler将一部分图片进行标注。对于示例图,图片标注如图5所示,蓝色方框的标注为“bad”的枕木。因为整个系统需要分辨的是损坏的扣件和腐蚀、断裂的枕木,所以标注的时候,只用将坏的部分框出,进行二分类即可。
图5 图片标注
从线性分类模型到解决实际问题的非线性模型,出现了2种代表性的方法:深度学习和支持向量机。本文用到的是深度学习分类方法,选用AlexNet训练模型。AlexNet在2012年由Hinton和他的学生AlexKrizhevsky提出,是一个基于CNN(卷积神经网络)的深层神经网络模型,主要运用于图像数据处理。
首先将训练集图片进行分类,计算每一张图片A与标注数据B的重叠部分比例Ratio:
(8)
同时,设定一个阈值,大于阈值则定义为“bad”的数据(已经腐蚀、断裂的枕木),小于阈值则定义为“good”的数据。验证集也采用同样的方式进行划分。分别保存这4个分类,送入训练模型中。启用GPU运算,大约耗费2 h,查看训练成果,当error不再下降时,保存分类器训练模型。将没有分类的测试集直接送入训练模型,通过模型输出与标注数据进行IOU计算和非极大值抑制处理得出最终的结果。
对于示例图,AlexNet枕木识别结果如图6所示,每一个保留下的枕木用红框标记出来,并在上方显示其击中概率。从图6可以看出,大部分断裂或歪斜的枕木都被识别出来,但有部分红框圈出的区域仍包含了背景(石子区域)。
图6 AlexNet枕木识别结果
整个图片数据库约有2 000 ~3 000张图片,对每一张图片都进行LSD直线特征探测,分离铁轨区域,将滑动窗口扫描到的图片送入训练模型。对于示例图,物体识别准确率如图7所示。大部分物体能够识别成功,但整个铁轨区域探测铁轨检修项目所能达到的枕木识别准确率仅为20%,没有达到预期的目标。
图7 识别准确率
造成这一结果的原因可能有:①整个数据集图片包含大量背景,目标物体区域较小;②标注过程中,有的断裂枕木包含大量石子,与背景类似,于是训练模型将石子背景区域也划分为“不好”的枕木。
基于无人机的铁轨区域探测检修模式利用基础的直线特征LSD和相关预处理算法对直线特征进行筛选,实现了将固定的铁轨区域特征从复杂背景中分离出来的目的,适用于整个数据集几万张图片,方法鲁棒性较高。由于无人机的拍摄飞行高度较高(180 m),获得的图片较为复杂,整个铁轨只占图片的一小部分,每个枕木所占的像素点较少,因此输入到机器学习训练模型中得到的最终分类识别效果较差。
对于实验结果不尽人意的情况,可以进行以下改进:①重新拍摄图片数据,将拍摄高度降低,得到尽可能清晰的图片;②尝试不同的机器学习训练模型,例如在AlexNet之后诞生的VGG16,GoogleNet等;③对不同的图片进行图像匹配以消除阴影干扰。