基于深度学习的机器视觉表计识别

news2024/10/6 15:18:20

01 引言

针对仪表自动读数问题,新型数字式仪表的读数比较方便,现阶段已经有非常多成熟的方案落地,而针对传统指针式仪表自动读数的现有方案还不够成熟,存在识别不精确、易受环境干扰等问题,是亟待研究和攻克的难题。我们针对指针式仪表的读取设计了一种基于Im-YOLOv4-Tiny的表计识别算法。

02 基于Im-YOLOv4-Tiny的表计识别算法

实现表计识别算法自动识别,共有四步:仪表数据集制作与处理及迁移学习预训练、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气压表等,其中大部分为圆形仪表图像,但由于图像分辨率低,大部分图像连肉眼无法对仪表进行读数,因此仅作为迁移学习定位仪表用。

(1)损失函数改进优化

YOLO网络的损失函数主要包含三部分:正负样本的损失函数、预测种类的损失函数,以及IoU Loss。通过对IoU函数的改进新函数为GIoU,其中C表示包围两个框的最小外接矩形的面积。通过矩形大小可以反映两个框的距离,通过IoU反映相交程度,减去二者未相交部分矩形的比例,既能反映重合程度,又能对未重合的情况进行量化表示。

图片

损失函数改进

(2)学习率

学习率采用了TensorFlow中的ReduceLROnPlateau方法控制,这是一种在训练过程中逐步下降学习率的方法,使用固定学习率常常导致网络训练效果不理想,通过学习率逐步下降的方式既能在开始时损失函数收敛更快,又能在训练到尾声时损失函数能够收敛到较小处。

(3)训练策略

训练策略方面主要采用了三个策略:第一个策略是在训练开始前需要冻结网络的部分权重,训练过50个epoch之后再将权重解冻,主要是为了保持迁移学习所学习到的权重特征;第二个策略是在训练过程中加入了Dropout策略,即全连接层有一定概率断开部分连接,可以在训练时减少参数量;第三个策略则是在训练即将结束时,加入了Earlystop策略,即当损失函数在一定数量的epoch之后不再变化时就认为已经达到最好的效果,提前结束训练。

第四步:指针定位与自动读数算法

将仪表裁剪出来进行指针的识别和读数,基于霍夫圆检测和轮廓检测的指针分离算法,将指针在原图像上标识出来,并使用极坐标展开法和阈值分割法进行关键刻度线的分离以及指针读数,算法的基本流程如图所示。

图片

指针定位与自动读数算法

(1)指针定位

使用高斯滤波对裁剪后的图像进行降噪,将其转换为灰度图后采用自适应阈值二值化的方法获取仪表盘的二值化图像。

图片

图像预处理流程图

经过霍夫圆检测裁剪以后的图像四角的背景已经被剔除,仪表圆心也被定位出来了,之后使用轮廓检测算法来分离指针。为了进一步分离指针,采用了膨胀和腐蚀细化了表盘边缘,进一步突出了指针,最后采用霍夫直线检测法。

图片

表盘指针定位

(2)读数计算

读数计算通过分离刻度线来实现,通过极坐标展开的方法进行刻度线分离,将仪表盘边缘的圆环展开成一条矩形带,矩形带宽度为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采用机器学习的方式进行自动识别读数,充分展示了利用机器视觉算法对表计识别的可行性。

(3)实验验证

将算法应用于实际采集中对表计进行读数识别,对于1000 张各种状态下的仪表图像进行机器视觉识表,最终识别成功 1000 张,识别失败 0 张,识别成功率达到了100%。偏差维持在±1%以内。以下是部分典型识别结果表和识别图。

下图:实验验证结果表

图片

图片

实验验证典型图

03 后续展望

对于基于Im-YOLOv4-Tiny的仪表定位算法,仪表定位已经比较准确,速度也能满足实时性要求,使用基于轮廓检测和极坐标展开法的指针分离与读数识别方法,在表盘的识别正确率上也能满足一般工业对表计识别准确度的要求,并在项目中已得到验证。

我国工业仪表和公用事业单位表计总量超过60亿,广泛应用于石油、燃气、化工、电力、制造、水务等行业。仪表作为生产经营活动中的关键核心计量设施,在可靠性、稳定性、准确性方面要求严苛。在生产过程中产生的数据作为关键过程参数,对于保证生产安全、生产质量及效益至关重要。利用视觉算法对仪表图像进行识别和上传,就能轻松地完成所有仪表的读数和记录工作。这不仅大大简化了工作流程,节省了人力物力,还提高了工作效率,基于机器视觉的表计识别研究具有广阔的市场前景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/947236.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新能源汽车动力总成系统及技术

需要动力系统总成的请联:shbinzer 拆车邦 需要动力系统总成的请联:shbinzer 拆车邦 需要动力系统总成的请联:shbinzer 拆车邦 需要动力系统总成的请联:shbinzer 拆车邦 需要动力系统总成的请联:shbinzer …

二叉树的介绍及二叉树的链式结构的实现(C语言版)

前言 二叉树是一种特殊的树,它最大的度为2,每个节点至多只有两个子树。它是一种基础的数据结构,后面很多重要的数据结构都是依靠它来进行实现的。了解并且掌握它是很重要的。 目录 1.二叉树的介绍 1.1概念 1.2现实中的二叉树 1.3特殊的二叉…

AP5192 DC-DC降压恒流LED汽车灯 LED长条灯 汽车雾灯驱动IC

AP5192是一款PWM工作模式,高效率、外围简单、 内置功率MOS管,适用于4.5-100V输入的高精度 降压LED恒流驱动芯片。最大电流1.5A。 AP5192可实现线性调光和PWM调光,线性调光 脚有效电压范围0.55-2.6V. AP5192 工作频率可以通过RT 外部电阻编程 来设定&…

hadoop大数据集群中更换磁盘,balance的速度缓慢问题(解决)

hadoop大数据集群中更换磁盘,balance的速度缓慢问题(解决) 看现象只有4个bloucks在执行的 调整参数: 增大配置参数,观察重新负载的速度 修改配置文件 hdfs-site.xml dfs.datanode.balance.max.concurrent.moves100 …

JavaScript中的事件委托(event delegation)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ JavaScript事件委托⭐ 事件冒泡(Event Bubbling)⭐ 事件委托的优点⭐ 如何使用事件委托⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启…

什么是AJAX?如何使用原生JavaScript搭建AJAX请求?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ AJAX(Asynchronous JavaScript and XML)⭐ 原生JavaScript中的AJAX请求1. 创建XMLHttpRequest对象2. 配置请求3. 设置回调函数4. 发送请求 ⭐ 完整示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开…

RPC框架的核心是什么

文章目录 什么是 RPC封装的艺术(如何隐藏底层逻辑)协议的实现序列化和反序列化(编解码)总结 什么是 RPC 首先思考这样一个问题,假设你不知道任何框架,现在有两台机器,每台机器上有一个服务&…

由Android10适配到Android12时遇到相关编译失败问题

最近Android系统各大应用商店联合发出公告,处于个人隐私安全考虑,强制APP适配到Android 11及以上版本。下面是其中应用市场的公告(顺带提醒没适配的同学): 适配前的开发环境 名称版本Android studioGiraffe | 2022.3…

行业追踪,2023-08-29

自动复盘 2023-08-29 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

<AMBA总线篇> AXI总线协议介绍

目录 01 AXI协议简介 AXI协议特性 AXI协议传输特性 02 AXI协议架构 AXI协议架构 write transaction(写传输) read tramsaction(读传输) Interface and interconnect 典型的AXI系统拓扑 03 文章总结 大家好,这里是程序员杰克。一名平平无奇的嵌入式软件工程…

requests之post请求data传参和json传参区别

问题描述 在一次接口post测试请求传参异常的记录 print(header)rp requests.post(EvnUrlConfig.getUrl(url),headersheader,datauserDevcieParam)传输到后台服务器报了异常 原因分析: 显而易见我的请求头的content-type类型有异常了,但我明明传的是app…

(Windows )本地连接远程服务器(Linux),免密码登录设置

在使用VScode连接远程服务器时,每次打开都要输入密码,以及使用ssh登录或其它方法登录,都要本地输入密码,这大大降低了使用感受,下面总结了免密码登录的方法,用起来巴适得很,起飞。 目录 PowerSh…

CON021 9200-00006N处理器

时钟速度:时钟速度是处理器的工作频率,通常以赫兹(Hz)表示。它决定了处理器每秒钟可以执行多少个指令。较高的时钟速度通常意味着更快的性能。 核心数:现代处理器通常有多个核心,每个核心都可以独立执行任…

泊松回归和地理加权泊松回归

01 泊松回归 泊松回归(Poisson Regression)是一种广义线性模型,用于建立离散型响应变量(计数数据)与一个或多个预测变量之间的关系。它以法国数学家西蒙丹尼泊松(Simon Denis Poisson)的名字命名,适用于计算“事件发生次数”的概率,比如交通事故发生次数、产品缺陷数…

element-ui分析

目录解析 element ├── github // 存放了elementui贡献指南,issue 和 PR模板 ├── build // 存放打包相关的配置文件 ├── examples // 组件相关示例demo ├── packages // 组件源码 ├── src // 存放入口文件和一些工具辅助函数 ├── test // 单元测试…

CATIA Composer R2023安装教程

软件下载 软件:CATIA Composer版本:2023语言:简体中文大小:1.82G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.60GHz 内存8G(或更高)下载通道①百度网盘丨64位下载链接:https://pa…

第三节 函数

第三节 函数 目录 一. 函数是什么?二. C语言中函数的分类1. 库函数:2. 自定义函数 三. 函数的参数1. 实际参数(实参):2. 形式参数(形参): 四&…

【计算机视觉】YOLO 入门:训练 COCO128 数据集

一、COCO128 数据集 我们以最近大热的YOLOv8为例,回顾一下之前的安装过程: %pip install ultralytics import ultralytics ultralytics.checks()这里选择训练的数据集为:COCO128 COCO128是一个小型教程数据集,由COCOtrain2017中…

【pyqt5界面化工具开发-9】触发事件的绑定 信号-槽

目录 0x00 前言: 一、基础代码布局 二、添加逻辑代码 三、触发事件绑定逻辑代码 0x00 前言: 1.信号(signal) 事件(点击、关闭等状态发生改变的触发事件) 2.槽( slot) 捕获信号后--->执行相应的逻辑代码 3.信号-槽 链接 为实现:触发事件…

java-初识Servlet,Tomcat,JDBC

文章目录 前言一、ServletServlet 生命周期Servlet 实例Servlet 过滤器 二、TomcatJDBCJDBC连接数据库实例 总结 前言 java入门须知的重要概念/名词/技术 等 一、Servlet Servlet是Java Web开发中的一个核心组件,它是基于Java语言编写的服务器端程序,…