针对仪表自动读数问题,新型数字式仪表的读数比较方便,现阶段已经有非常多成熟的方案落地,而针对传统指针式仪表自动读数的现有方案还不够成熟,存在识别不精确、易受环境干扰等问题,是亟待研究和攻克的难题。我们针对指针式仪表的读取设计了一种基于Im-YOLOv4-Tiny的表计识别算法。
实现表计识别算法自动识别,共有四步:仪表数据集制作与处理及迁移学习预训练、Im-YOLOv4-Tiny网络模型构建、网络训练策略及超参数设定、指针定位与自动识数。
在“变电站巡检”项目中,存在大量的表计图像,深度学习模型可以提取图片中的特征信息,结合项目中能获取的大量图片去持续优化深度学习模型可以帮助模型学习表计相关的特征信息,从图像中获取到有效且普遍的特征则需要大量的数据集。同时在训练过程中采用了数据扩增,在提升训练数据的多样性的同时,提升模型的泛化能力。
表盘在使用的过程中可能受到时间、角度、光照、焦距等影响存在磨损、倾斜、反光模糊等问题。所以在样本选择时,加入上述异常状态样本进行训练。
异常状态样本图片数据集
Im-YOLOv4-Tiny模型的搭建由:由骨干特征提取网络、特征金字塔和YoloHead三部分组成。网络的第一部分骨干特征提取网络主要用于输入图片前期的特征提取,在图像输入时会将图像进行resize,将图像处理成尺寸为416×416×3的输入图像,之后放入后续网络提取特征,骨干网络由卷积模块和残差模块组成。卷积模块中除了包含普通的卷积操作,还包含标准化和激活函数,为了避免梯度方向锯齿问题、使用了LeakyReLU作为激活函数。改进模型结构如下:
Im-YOLOv4-Tiny网络模型
网络的第二部分特征金字塔是对骨干特征提取网络的输出进行加强特征提取,从骨干网络的上层和下层分别取出两个维度为(26,26,256)和(13,13,512)的特征层进行特征提取,并将不同维度的特征层经过卷积和采样进行特征融合,通过不同尺度的特征结合来提取出更有利的特征。最后将两个融合后的特征图放入YoloHead进行预测。
由于制作的训练集规模较小,为了进一步丰富数据集,引入了实时Mosaic数据增强。每一次训练前,从训练集中取出一个batch的图片,从这个batch中随机取出4张图片进行裁剪拼接,重复batchsize次后生成新的一个batch的图片放入网络进行训练。通过这种图像随机组合拼接的方式,丰富检测物体的背景,增加数据集各尺度的目标数量。其流程如下:
数据增强流程
利用“迁移学习”算法将设计好的网络在其他数据集中进行特征学习,之后将学习到特征的网络进行部分网络结构冻结以保留学习到的特征,再将冻结部分结构的网络以目标任务的数据集进行预训练,预训练结束以后再将网络解冻作为初始权重网络。在迁移学习的数据集中包含了变电站的各类电表,如电压表、电流表、功率表、SF6气压表等,其中大部分为圆形仪表图像,但由于图像分辨率低,大部分图像连肉眼无法对仪表进行读数,因此仅作为迁移学习定位仪表用。
YOLO网络的损失函数主要包含三部分:正负样本的损失函数、预测种类的损失函数,以及IoU Loss。通过对IoU函数的改进新函数为GIoU,其中C表示包围两个框的最小外接矩形的面积。通过矩形大小可以反映两个框的距离,通过IoU反映相交程度,减去二者未相交部分矩形的比例,既能反映重合程度,又能对未重合的情况进行量化表示。
损失函数改进
学习率采用了TensorFlow中的ReduceLROnPlateau方法控制,这是一种在训练过程中逐步下降学习率的方法,使用固定学习率常常导致网络训练效果不理想,通过学习率逐步下降的方式既能在开始时损失函数收敛更快,又能在训练到尾声时损失函数能够收敛到较小处。
训练策略方面主要采用了三个策略:第一个策略是在训练开始前需要冻结网络的部分权重,训练过50个epoch之后再将权重解冻,主要是为了保持迁移学习所学习到的权重特征;第二个策略是在训练过程中加入了Dropout策略,即全连接层有一定概率断开部分连接,可以在训练时减少参数量;第三个策略则是在训练即将结束时,加入了Earlystop策略,即当损失函数在一定数量的epoch之后不再变化时就认为已经达到最好的效果,提前结束训练。
将仪表裁剪出来进行指针的识别和读数,基于霍夫圆检测和轮廓检测的指针分离算法,将指针在原图像上标识出来,并使用极坐标展开法和阈值分割法进行关键刻度线的分离以及指针读数,算法的基本流程如图所示。
指针定位与自动读数算法
使用高斯滤波对裁剪后的图像进行降噪,将其转换为灰度图后采用自适应阈值二值化的方法获取仪表盘的二值化图像。
图像预处理流程图
经过霍夫圆检测裁剪以后的图像四角的背景已经被剔除,仪表圆心也被定位出来了,之后使用轮廓检测算法来分离指针。为了进一步分离指针,采用了膨胀和腐蚀细化了表盘边缘,进一步突出了指针,最后采用霍夫直线检测法。
表盘指针定位
读数计算通过分离刻度线来实现,通过极坐标展开的方法进行刻度线分离,将仪表盘边缘的圆环展开成一条矩形带,矩形带宽度为2/5r,长度为2πr,将圆环上的点记为(x,y)和原图的坐标记为(X,Y),加入补偿以后其对应关系如公式中w为圆环长度2πr,r为表盘半径,W、H为原图的宽和高。
表盘拉伸对应关系式
展开之后如极坐标展开图所示。将圆环带进行二值化并经过一次膨胀和腐蚀操 作去除部分噪点干扰,如圆环带二值化图所示。之后使用一条纵向直线对圆环带进行 横向扫描,筛选出可能存在刻度线的位置,可以看到图像中存在刻度线的位置, 其有效像素会超过一定的阈值,通过多次试验求得最佳阈值为 4/9 的圆环带宽度, 扫描并记录下被认定为是刻度线的 X 坐标数组,并在圆环图上以红线标记。因为指针的存在,在横向扫描时也会将指针所在位置判定为刻度线位置,可以利用极坐标展开图中最下方像素即指针位置标绿来排除指针对于刻度线定位的影响, 同时也将刻度线所在直线标红。最终标记后圆环图如关键刻度线分离图所示。
刻度线分离流程图
实际刻度线在圆环带上存在一定宽度,因此在X坐标数组中每处刻度线可能存在一簇连续的横坐标被记录,因此需要对这些连续的X坐标求平均作为该刻度线所在位置的坐标。除此之外,还需考虑当指针与关键刻度线重合,此时求平均后处理完的X坐标数组会少一个关键刻度信息,此时可以根据指针与左右两侧刻度线数量的关系求出指针所指向刻度的值。而当指针并未与关键刻度线重合时,记平均后的关键刻度线数组为[X1,X2,,X3…Xn],刻度线对应数值记为[V1,V2,,V3…Vn],指针位置为T,利用位置关系与比例法公式计算读数。
读数计算公式
至此,整个基于深度学习的机器视觉表计识别过程就已经结束了通过对样本图像数据的收集,样本扩充,算法模型搭建、训练,刻度线分离以及利用位置关系与比例法公式计算读数。
“Im-YOLOv4-Tiny 的表计识别算法”与“传统的表计识别算法”相比,由于检测的指针式仪表种类、量程等各不相同,传统的图像处理后在进行表计识别的两段式识别不同的是,Im-YOLOv4-Tiny采用机器学习的方式进行自动识别读数,充分展示了利用机器视觉算法对表计识别的可行性。
将算法应用于实际采集中对表计进行读数识别,对于1000 张各种状态下的仪表图像进行机器视觉识表,最终识别成功 1000 张,识别失败 0 张,识别成功率达到了100%。偏差维持在±1%以内。以下是部分典型识别结果表和识别图。
下图:实验验证结果表
实验验证典型图
对于基于Im-YOLOv4-Tiny的仪表定位算法,仪表定位已经比较准确,速度也能满足实时性要求,使用基于轮廓检测和极坐标展开法的指针分离与读数识别方法,在表盘的识别正确率上也能满足一般工业对表计识别准确度的要求,并在项目中已得到验证。
我国工业仪表和公用事业单位表计总量超过60亿,广泛应用于石油、燃气、化工、电力、制造、水务等行业。仪表作为生产经营活动中的关键核心计量设施,在可靠性、稳定性、准确性方面要求严苛。在生产过程中产生的数据作为关键过程参数,对于保证生产安全、生产质量及效益至关重要。利用视觉算法对仪表图像进行识别和上传,就能轻松地完成所有仪表的读数和记录工作。这不仅大大简化了工作流程,节省了人力物力,还提高了工作效率,基于机器视觉的表计识别研究具有广阔的市场前景。