基于卷积神经网络的渐进式指针表自动读数方法∗
2021-12-15孙晓朋侯立群渠怀胜
孙晓朋侯立群渠怀胜
(华北电力大学自动化系,河北 保定071003)
由于指针式仪表具有结构简单、可靠性高、价格低的优点,其在现代工业过程中仍被广泛应用。目前,指针式仪表的示值一般采用人工读取方式,该方法效率低、耗时长、实时性差,且易受读表人观察角度、疲劳等因素影响。此外,人工读数方法不适用于辐射、高温等环境。因此,研究指针式仪表的自动读数具有重要意义[1-2]。
近年来,研究者们尝试利用计算机视觉技术实现指针表自动读数。角度法和距离法是目前最常用的两种指针表自动读数方法。
施滢等人[3]利用Hough变换检测仪表中的指针,计算得到仪表圆心和指针方向,再利用角度法读数。张军国等人[4]利用加权最大类间方差法提取指针表圆弧的位置,极坐标变换后使用距离法读数。盛庆华等人[5]研究在霍夫空间计算仪表圆心,使用投影法分割图像得到指针信息,距离法获得读数。当指针表位置发生变化时,上述方法需要调整摄像头位置并重新标定。这无疑降低了上述方法的便捷性和实用性。近年来,卷积神经网络(Convolutional Neural Networks,CNN)成功应用于图像目标检测和图像分割等领域[6-7]。邢浩强[8]、Liu Yang[9]、Zuo Lin[10]等人使用不同的CNN模型完成了指针表定位,并使用角度法实现了指针表自动读数,简化了读数前设备安装与标定过程。为了提高读数精度,Lai Haowen等人[11]利用渐进霍夫变换和距离法完成了对不同形状指针表的读数识别。高会军等人[12]通过逐步确定刻度区域、刻度线和指针,最后采用距离法,实现了对汽车仪表盘的自动读数。
文献[3,8-10]采用传统的角度法读数,首先找到指针表零刻度线和最大刻度线对应的角度,再通过角度关系获得指针表读数,其读数准确性易受指针表倾斜的影响。文献[4-5,11-12]采用距离法读数,该方法假设指针拟合直线与相邻刻度线平行,算法本身存在一定误差[13]。文献[11-12]提高了自动读数的准确度,但读数过程相对复杂。
针对上述指针表自动读数方法的不足,本文提出一种基于CNN的渐进式指针表自动读数方法。该方法首先利用Faster-RCNN(Faster-Region Convolutional Neural Networks)模型检测当前视野下指针表目标的包围框位置,得到目标图像,简化读数前设备安装与标定过程;然后利用SIFT(Scale-Invariant Feature Transform)、RANSAC(Random Sample Consensus)算法和透视变换得到无倾斜、无旋转的图像,克服指针表倾斜或旋转对自动读数的影响;再利用八邻域法检测指针表表盘,大津算法(Otsu算法)提取分割阈值,区域生长法提取指针;最后利用卷积神经网络识别指针表的大刻度示值得到指针表的粗读数,利用角度法得到指针表的细读数,完成高精度自动读数。
1 渐进式指针表自动读数系统
渐进式指针表自动读数系统流程图如图1所示。该系统由仪表目标检测模块、仪表目标提取与倾斜校正模块、表盘定位模块、指针提取模块、由粗到细渐进式读数模块五部分组成。
图1 渐进式指针表自动读数系统流程图
1.1 仪表目标检测模块
Faster-RCNN目标检测流程图如图2所示。首先输入图片,使用预训练过的Alex-Net网络提取图片的底层特征,然后进入区域建议网络(Region Proposal Network,RPN)。RPN的工作机制是:首先对每一个特征图编码成一个256维的特征向量,生成锚框,同时对特征图做两个卷积操作,第一个卷积操作的目的是分类出目标和背景,第二个卷积操作的目的是回归,最后输出锚框;通过计算预测锚框与实际锚框交集与并集的比值得到并交比(Intersection over Union,IOU)的值,设置锚框IOU的阈值,当IOU大于设定阈值时为前景,IOU小于设定阈值时为后景;通过非极大值抑制(Non-Maximum Suppression)合并与真值重叠度较高的锚矩形区域;对所有的锚矩形框按置信度排序;最后对其输出的感兴趣区域(Region of Interest,ROI)筛选后,判断锚矩形框属于前景还是后景,即是不是指针表;如果分类结果是指针表,则送入全连接层进行分类和使用边框回归微调锚矩形框坐标,最后输出锚矩形框目标区域和指针表的置信度[14]。
图2 Faster-RCNN目标检测流程图
1.2 目标提取与倾斜校正模块
目标提取模块是将Faster R-CNN算法检测到目标仪表包围框的坐标区域提取出来,并将包围框的大小调整为300×300。
倾斜校正模块包括SIFT关键点匹配、RANSAC算法得到透视变换矩阵和透视变换三部分。具体的流程图如图3所示。该方法需要人为拍摄一张居中且无倾斜的指针表图像作为基准图像;将基准图像和仪表目标检测模块提取出的指针表图像各自灰度化;通过SIFT算法匹配相关点,RANSAC算法得到透视变换矩阵;最后通过透视变换实现指针表的自动倾斜校正。
图3 倾斜校正模块流程图
①SIFT关键点匹配算法
由于SIFT算子具有对图像缩放、旋转甚至仿射变换保持不变的性质[15]。本文使用SIFT算子检测实际图像和基准图像的特征点,计算特征点的大小,利用这些信息组成特征点对进行描述,然后匹配特征点。
②RANSAC算法和透视变换
基于欧氏距离的SIFT特征匹配中存在许多误匹配的点,这些误匹配点将严重影响透视变换模型参数的解算,因此需要剔除这些误匹配的点。在这里使用最为常见的RANSAC方法。该算法的原理是利用SIFT算法得到两幅图像的匹配点后,随机从这些匹配点中抽取四个样本,计算出单应性矩阵H,记为模型M;然后计算所有匹配点和模型M之间的投影误差,若小于设定的阈值,则加入匹配点中继续之前方法运算,不断和之前的模型做比较,直到找到最佳单应性矩阵(透视变换矩阵)。透视变换的本质是将图像投影到一个新的视平面,通过透视变换可以实现指针表的自动倾斜校正。
1.3 表盘定位模块
经过目标提取与倾斜校正模块后,获得了居中且无倾斜的指针表图像。然后对表盘进行定位操作,表盘定位模块由边缘检测、边缘细化、轮廓检测、计算圆心四部分组成,具体步骤描述如下:
①边缘检测
灰度化后,使用边缘检测算法寻找指针表边缘,常用边缘检测算子有Roberts算子、Sobel算子、Prewitt算子等,在综合考虑算法复杂度和边缘检测效果后,本文选用了Sobel算子。
②边缘细化
边缘检测后,输出图像的边缘比较宽,为了方便后续处理,需要进行边缘细化。本文采用Zhang[16]细化算法进行边缘细化。
③轮廓检测
细化操作后,得到了单个像素点的仪表轮廓,本文采用八邻域法进行边界跟踪,检测指针表表盘。
④计算圆心
检测出指针表的表盘后,本文使用改进的Hough变换圆检测算法[17]计算圆心坐标。
1.4 提取指针模块
指针提取模块由Otsu算法[18]计算阈值、区域生长提取指针两部分组成,具体步骤描述如下:
①Otsu算法计算阈值
使用Otsu算法求取分割阈值,将该阈值作为区域生长的相似性质判断准则。
②区域生长提取指针
指针区域的提取使用区域生长法。具体思路是基于灰度图像,根据1.3节④中得到的圆心坐标找到附近灰度值比较小的像素点作为生长种子,以本节①中的分割阈值作为相似性质判断准则,如果相邻像素灰度值小于阈值则为指针所在像素,直到没有相邻像素灰度值小于阈值时结束生长。
1.5 由粗到细读数模块
该模块由CNN粗读数和角度法细读数两部分组成,具体流程如下所述。
①CNN粗读数
由于CNN在图像分类、图像语义分割等图像相关任务表现十分优秀,所以本文采用CNN用于分类指针表的大刻度。
网络结构如图4所示,表1给出了各层的详细配置。该网络由输入层、四个卷积层(Conv1、Conv2、Conv3、Conv4)、一个最大池化层(Max pooling)、一个全连接层和一个softmax层组成。每一个卷积层后面都有一个修正线性单元。下面对各层描述如下:
表1 CNN具体参数
图4 CNN网络结构图
输入层:将预先拍摄好的2800张图片灰度化并将大小改为240×240后作为网络的输入。
卷积层:该网络包含4个卷积层(Conv1,Conv2,Conv3,Conv4),每一层卷积跟随一个修正线性单元,设置卷积核的步长为1。
池化层:四个卷积层之后,是一个最大池化层,池化层的卷积核大小为2×2、步长为1。选择最大池化层的原因是它具有平移不变性。
全连接层:全连接层连接所有池化层的输出,全连接层的卷积核大小是1×1,步长为1。
Softmax层:将全连接层的输出输入到softmax函数中进行多分类,得到对应标签的匹配概率。本文softmax输出为4×1的向量,表示对应四种示值的匹配概率,分类结果选择最大概率所对应的仪表示值。
该网络输出的是当前指针表图像中的指针属于哪一类,即指针表的大刻度值。为了便于后续描述,将分类结果命名为R。
②角度法细读数
由于1.4节②中区域生长法提取的指针较粗,为了更加准确读数,需要将提取出的指针进行细化,同时去除圆心周围细小的干扰点。细化后的指针仍不能满足读数需求,所以需要拟合一条和细化后指针重合的直线。本文采用改进的Hough变换直线检测算法拟合直线[19],通过该算法可以得到指针倾斜角度。
读数前需要人为标定大刻度对应的倾斜角度θLS,因此将θLS作为已知数据。求取精细读数的公式如(1)所示,求取最终结果的公式如(2)所示。
式中:reading为精细读数的数值,θ为当前指针的倾斜角度,θLS为大刻度对应的倾斜角度,θ1为相邻两个大刻度之间的夹角,θ2为两个大刻度的差值,result为最终读数,R为CNN输出的大刻度值。θ1、θ2、θLS是已知的。当指针位于0.4 MPa~0.8 MPa之间时,计算指针读数值的示意图如图5所示(式(2)中的“±”,如果θLS<θ,则“+”,反之,则“-”)。
图5 计算指针读数值示意图
2 实验结果及分析
2.1 仪表目标检测模块结果分析
实验仿真在MATLAB环境下完成,CPU为Intel Corei5-9300H,内存为8G,显卡为NVIDIA GeForce GTX 1650。仪表目标检测模块采用1 230张1.6 MPa量程的压力表,960张用于训练,270张用于测试,每张图片的分辨率为800×1 066。使用平均准确率、对数平均误检率两个指标来评价目标检测效果。仪表检测结果如表2所示,部分仪表检测效果图如图6所示。从表2可以看出Faster RCNN模型用于目标检测平均准确率为0.88,对数平均误检率为0.1,模型的检测效果可以满足日常需求。同时Faster RCNN模型的检测速度非常快,每张图片平均检测时间仅为0.2 s。
图6 部分仪表检测效果图
表2 仪表检测结果
2.2 倾斜校正模块结果分析
部分倾斜校正的效果图如图7所示。倾斜校正效果会直接影响后续的读数精度。对多种倾斜情况的测试结果表明,使用SIFT、RANSAC和透视变换方法能有效地校正图像倾斜。图7中间一列的图片显示了指针表倾斜90°的情况,校正结果令人满意,这是由于SIFT关键点检测的角度为[-π,π],该方法能够适应旋转、尺度缩放和亮度变化,并不易受视角变化、仿射变换和噪声的干扰。
图7 部分倾斜校正效果图
2.3 CNN分类结果分析
CNN分类结果如表3所示。CNN模型分类共有1 900个训练数据,900个测试数据,识别准确率为98.12%。准确率不能达到100%的主要原因是当样本从左右两侧接近某一刻度线时(如图8所示),容易产生误分类。为了提高CNN模型分类的准确率,我们将图8(a)和图8(b)两种情况均分类为刻度线值(0.4 MPa)。然后,比较指针倾斜角度和0.4 MPa刻度线的倾斜角度。如果0.4 MPa刻度线倾角大于指针倾角,则最终读数时用0.4 MPa减去指针倾角对应的压力值,反之则加上指针倾角对应的压力值。
表3 指针表分类结果
图8 CNN误分类示意图
2.4 指针表读数识别结果分析
本节包括无干扰环境下指针表读数识别结果分析、有干扰环境下读数识别结果分析、不同指针表读数识别结果分析、现场环境下指针表读数识别结果分析。
①无干扰环境下指针表读数识别
无干扰环境下指针表图像的处理过程如图9所示,部分识别结果见表4。
图9 无干扰情况下指针表图像的处理过程
表4 无干扰环境下部分指针表的识别结果
由表4可见,最大引用误差为0.34%,该误差值对本实验中所用压力表(1.6级)是可以接受的。
②有干扰环境下指针表读数识别
在实际工作环境中,指针表读数可能会受光斑、倾斜、污点和较暗光线等因素干扰。为了测试本文算法的稳定性,我们在实验室条件下模拟了真实环境中可能存在的干扰,并进行了实验。有干扰环境下指针表图像的处理过程如图10所示,部分读数结果见表5。
图10 有干扰情况下指针表图像的处理过程
表5 有干扰情况下部分指针表的识别结果
由表5可以看出,最大引用误差为0.39%。实验表明,该方法在一定干扰情况下仍有较好性能。对比无干扰情况,干扰环境下该方法的识别误差有所增加,其中污点和光线较暗环境下的读数误差较大。
③不同指针表的读数识别
为了评估算法的泛化能力,选择了四种不同的指针表进行识别。不同指针表图像的处理过程如图11所示,部分识别结果见表6。
图11 不同指针表图像的处理过程
表6 不同指针表部分识别结果
由表6可见,最大引用误差为0.4%。实验表明,本文所提出的方法能准确识别不同指针表。
④现场环境下指针表的读数识别
为了评估算法对工业现场指针表的读数识别能力,我们对取自工业现场的四幅指针表图像进行了读数识别。现场环境下指针表图像的处理过程如图12所示,识别结果见表7。
图12 现场环境下指针表图像的处理过程
表7 现场环境下指针表图像的识别结果
由表7可以看出,现场环境下指针表图像识别的最大引用误差为0.66%。该值虽比无干扰和有干扰环境下的最大引用误差略有增加,但仍能满足实际应用要求。
2.5 读数准确性比较
为了评估本文所提方法的准确性,我们与文献[3]的角度法和文献[5]的距离法进行了比较。比较结果如表8所示。本文方法在实验室和工业现场读数环境下的最大引用误差分别为0.4%和0.66%。文献[3]在实验室环境下的最大引用误差为0.98%,文献[5]在实验室环境下的平均引用误差为0.8%。可见,本文所提方法的读数准确性优于文献[3]和文献[5]。
表8 不同读数方法比较
3 结论
为了提高指针表自动读数方法的准确性,简化读数前设备安装与标定过程,本文提出了一种基于CNN的渐进式指针表自动读数方法。该方法首先利用Faster-RCNN检测当前视野下指针表目标,然后利用SIFT、RANSAC算法和透视变换解决指针表倾斜和旋转问题,再利用八邻域法检测指针表表盘,利用区域生长法提取指针,最后利用CNN识别指针表的大刻度示值得到指针表的粗读数,利用角度法得到指针表的细读数,完成自动读数过程。本文利用所提方法对不同指针表和多种干扰因素下的指针表进行了读数实验。实验结果表明,本文所提出的方法具有较好的准确性与抗干扰能力,读数最大误差不高于0.7%。