java 水表识别_一种水表数字的AI智能识别方法与流程

22556c06d2d58545cacf8678f56ed178.gif

本发明涉及模式识别与人工智能技术领域,特别涉及一种直观的水表数字的AI智能识别方法。

背景技术:

深度学习在目标检测的应用发展迅速,在YOLO(You Only Look Once)之后又出现了升级版本YOLOv2,采用的是Darknet-19作为基础网络,它并不是通过加深或加宽网络达到效果提升,反而简化了网络,不管是在召回率还是定位上都有明显优势,我们的水表数字识别就是基于YOLOv2实现的。

目前,有很多涉及模式识别与人工智能相结合的技术出现,特别是被应用于图像数据检测。现有技术中的基于YOLO的图像数据检测,其主要的检测分析过程是基于图片的识别和分析,最终得到的分析结果是带有准确率表示的图片,需要使用者再去根据准确率进行判定,或者呈现给使用者的就是系统分析出来的准确率最高的图片,需要使用者对图片进行分析,不仅不能完全实现智能化识别,而且识别检测的过程繁琐复杂,会逐渐被新的网络所取代,不能适应网络升级的需求。

技术实现要素:

本发明是针对背景技术中提及的有关现有图像识别检测方法的缺陷,提供一种简化网络、精准度高、人工智能化高的水表数据识别方法。

为实现上述目的,本发明所采用的技术方案是:一种水表数字的AI智能识别方法,所述识别方法采用的是Darknet-19作为基础网络,基于YOLOv2实现,具体包括以下步骤:

S1、数据来源:用安装在水表上的摄像头对不同类型的水表进行拍照,并对获取的大量水表图片像素进行批量处理;

S2、数据标注及格式转换:使用标注软件对水表图片进行标注,将标注并转换好的内容存于txt文件中,并将水表图片和对应的txt文件放在同一个文件夹下,最后将水表图片的路径分为训练集和测试集存放到txt文件中;

S3、新建.names文件:里面写入0-9这十个水表数字,每个数字占一行;

S4、新建.data文件:从上到下依次为水表数字的类别数量,训练集路径,测试集路径,.names文件路径和训练好的模型存放路径;

S5、修改.cfg配置文件;

S6、训练模型:将训练数据和标注并转换好的txt文件输入到YOLOv2网络中进行训练;

S7、测试模型:使用训练集以外的数据输入到训练好的网络中进行测试,训练模型对水表上的每一个数字进行识别,将测试的数据上识别出的每一个数字用红色的方框框出来,并在每个红色方框内显示识别结果;

S8、模型中每个方框内的数字最终以连续阿拉伯数字组合的形式呈现于使用界面上。

作为优选的技术方案:步骤S2中对数据进行标注时:使用标注软件对摄像机获取的水表图片进行标注,水表上的每一个数字都要进行单独标注,标注后的边框坐标、边框宽高以及对应的水表数字都将存于txt文件中,并分别用逗号隔开。

作为优选的技术方案:步骤S1中,对水表图片的像素进行批量处理,统一将宽的像素修改为750。

作为优选的技术方案:步骤S2中进行数据格式转换时:将标注好的txt文件里的内容转换成用于训练的数据格式,并将水表图片和对应的txt文件放在同一个文件夹下,最后将水表图片的路径分为训练集(42034张水表图片)和测试集(10508张水表图片)存放到txt文件夹;其中,训练集占所有数据集的80%,测试集占所有数据集的20%。

作为优选的技术方案:步骤S6中修改.cfg配置文件的具体方式是:水表数字是由0-9组成,一共10种数字;类别数classes改为10,同时filters也要按照filters=(classes+coords+1)*num改成75,其中coords=4,num=5。

作为优选的技术方案:步骤S7的模型训练中:将训练数据和标注并转换好的txt文件输入到YOLOv2网络中进行训练;

(1)训练参数设定:迭代次数iters=155000,更新步长steps= 100,25000,35000,45000,初始学习率learning_rate=0.0001,scales= 10,.1,.1,.01,batch=64,subdivisions=8,decay=0.0005;

(2)YOLOv2使用Darknet-19网络,有19个卷积层和5个最大池化层,最后用average pooling层代替全连接层进行预测;

(3)在YOLOv2中,BN层对网络每一层的输入都做了归一化;

(4)YOLOv2采用了anchor boxes去预测bounding boxes,将原网络的全连接层和最后一个pooling层去掉,网络仅采用了卷积层和池化层;

(5)采用Softmax损失函数;

(6)YOLOv2预训练分类模型采用了448x448的输入来finetune分类网络这一中间过程;

(7)YOLOv2采用不同尺寸的图片训练;

(8)YOLOv2中提出了WordTree,使用该树形结构成功的解决了不同数据集中的排斥问题。

作为优选的技术方案:步骤(7)中,YOLOv2采用了多尺度输入训练策略,具体做法是每经过10批训练(10 batches)就会随机选择新的图片尺寸,尺度定义为32的倍数,( 320,352,…,608 )。

本发明所公开的这种图像识别检测方法,其中的水表数字识别基于YOLOv2实现的,采用的是Darknet-19作为基础网络,它并不是通过加深或加宽网络达到效果提升,反而简化了网络,不管是在召回率还是定位上都有明显优势;精准度高,最终能够连续阿拉伯数字组合的形式呈现于使用界面上,实现完全人工智能化,无需使用者分析猜测,直观、方便。

附图说明

图1为本发明水表识别方法的流程图;

图2为本发明的数据采集和处理流程图;

图3发明的深度卷积神经网络结构图;

图4发明检测结果示例。

具体实施方式

下面结合附图和实施例对本发明做进一步说明。

结合附图1-4,本发明所公开的这种图像检测识别方法主要应用于水表数据检测,其识别方法采用的是Darknet-19作为基础网络,基于YOLOv2实现。

水表数字识别的实现步骤如下。

1.数据来源:用安装在水表上的摄像头对不同类型的水表进行拍照,大量的拍照,照片数量50000-60000张左右,对获取的大量水表图片像素进行批量处理,统一将水表图片的宽的像素修改为750。

2.数据标注和格式转换:使用标注软件对水表图片进行标注,每一个水表数字都要单独标注,标注后的边框坐标、边框宽高以及对应的水表数字都将存于txt文件中,并分别用逗号隔开。将标注好的txt文件里的内容转换成用于训练的数据格式,并将水表图片和对应的txt文件放在同一个文件夹下,最后将水表图片的路径分为训练集(42034张)和测试集(10508张)存放到txt文件夹,其中,训练集占所有数据集的80%,测试集占所有数据集的20%。

3.新建.names文件:里面写入0-9这十个水表数字,每个数字占一行。

4.新建.data文件:从上到下依次为水表数字的类别数量,训练集路径,测试集路径,.names文件路径和训练好的模型存放路径。

5.修改.cfg配置文件:水表数字是由0-9组成的,一共10种数字,所以类别数classes改为10,同时filters也要按照filters=(classes+coords+1)*num改成75,其中coords=4,num=5。

6.训练模型:将训练数据和标注并转换好的txt文件输入到YOLOv2网络中进行训练;

(1)训练参数设定:迭代次数iters=155000,更新步长steps= 100,25000,35000,45000,初始学习率learning_rate=0.0001,scales= 10,.1,.1,.01,batch=64,subdivisions=8,decay=0.0005;

(2)YOLOv2使用Darknet-19网络,有19个卷积层和5个最大池化层,最后用average pooling层代替全连接层进行预测,精简了网络;

(3)在YOLOv2中,BN(Batch Normalization)层对网络每一层的输入都做了归一化,在训练时收敛更快,降低模型的过拟合,另外BN可以规范模型,所以去掉了dropout层,BN层的添加直接将mAP提升了2个百分点;

(4)YOLOv2采用了anchor boxes去预测bounding boxes,将原网络的全连接层和最后一个pooling层去掉,网络仅采用了卷积层和池化层。由于大的object一般会占据图像的中心,为了使得每个特征图在划分cell的时候就只有一个center cell,用416*416大小的输入代替原来448*448,这样可以得到奇数大小宽高的特征图。 YOLOv2采用k-means的方式对训练集的bounding boxes做聚类,选用的K值为5,试图找到合适的anchor box,引入的anchor boxes使得预测的box数量超过1千,box的数量越多,目标的定位准确率越高;

(5)采用Softmax损失函数;

(6)YOLOv2预训练分类模型采用了448x448的输入来finetune分类网络这一中间过程,这可以使得模型在检测数据集上finetune之前已经适用高分辨率输入;

(7)YOLOv2可以采用不同尺寸的图片训练,提高鲁棒性。由于YOLOv2模型中只有卷积层和池化层,所以YOLOv2的输入可以不限于416x416大小的图片。为了增强模型的鲁棒性,YOLOv2采用了多尺度输入训练策略,具体做法是每经过10批训练(10 batches)就会随机选择新的图片尺寸,尺度定义为32的倍数,( 320,352,…,608 );

(8)YOLOv2中提出了WordTree,使用该树形结构成功的解决了不同数据集中的排斥问题。使用该树形结构进行分层的预测分类,在某个阈值处结束或者最终达到叶子节点处结束。

7.测试模型:使用训练集以外的数据输入到训练好的网络中进行测试,对水表上的每一个数字进行识别,不管是完整的数字还是不完整的数字,该网络都能识别,对测试数据上识别出的每一个数字用红色的方框框出来,并在每个红色方框内显示识别结果,下方文本框会依次显示类别名称在.names文件中的索引,准确率和框坐标。

在训练网络的过程中会产生多个模型,所以我们会在测试模型阶段根据识别准确率挑选出识别效果最好的一个作为最终应用的模型。

经过测试合格,选定模型之后,进行识别时呈现在用户使用界面上的是数字,即模型识别水表图像时被分别框出来的每个阿拉伯数字的组合。

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

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

相关文章

Summary Day30

1.内存管理 1.1 进程中的内存区域划分 代码区 仅仅读常理区 全局区 BSS 堆 栈 1.2 字符串存储形式之间的比較 字符指针,字符数组。字符动态内存 1.3 虚拟内存管理技术 Unix/Linux系统总的内存都是採用虚拟内存管理技术进行管理。即:每一个…

java装箱和拆箱_java自动装箱和拆箱

这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆:java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装箱,解包装称为拆箱)&a…

java 插桩 工具_一个基于Eclipse的通用Java程序插桩工具.pdf

第38卷第7期 计算机科学 V01.38NO.7Science 20112011年7月 Computer July一个基于Eclipse的通用Java程序插桩工具郑晓梅(南京中医药大学信息技术学院 南京210046)(南京大学计算机软件新技术国家重点实验室 南京210093)摘要插桩技术作为一种有效理解程序动…

【FICO 汇率】汇率

汇率存储的表位TCURR 汇率维护的事务代码为:OB08 每一种货币汇率都有很多版本,按照时间有效性管理 汇率涉及的两种货币,第一个为从,第二个为到,一般换算比率都是1,但也有不是1的情况(主要是换算…

java 新窗口跳转页面_Java web开发中页面跳转小技巧——跳转后新页面在新窗口打开...

最近学习Java web,在学习过程中想实现一个需求,就是在jsp页面跳转的时候,希望跳转后的新页面在新窗口中打开,而不是覆盖原来的页面,这个需求使我困惑了好长时间,后来通过大海捞针似的在网上寻找方法&#x…

分辨率到底是个什么概念?它和DPI之间是什么关系?

"分辨率"到底是个什么概念?它和DPI之间是什么关系? 分辨率:显示分辨率(屏幕分辨率)是屏幕图像的精密度,是指显示器所能显示的像素有多少。由于屏幕上的点、线和面都是由像素组成的,显…

mysql.w002_mysql简单例子

登陆数据库:mysql -u用户名 -p密码 -P端口 -h数据库地址‍‍‍‍‍‍修改mysql提示符:(仅本次连接有效)‍‍‍‍‍‍方法一:执行mysql -uroot -proot -prompt \h结果为:localhost方法二:进入mysql后,执行PR…

mysqli mysql的区别_phpmysqli和mysql区别详解

本文介绍下,php中有关mysqli与mysql类的一些区别,有需要的朋友,可以作个参考哦。一,PHP-MySQL 是 PHP 操作 MySQL 资料库最原始的 Extension ,PHP-MySQLi 的 i 代表 Improvement ,提更了相对进阶的功能。PD…

JQuery中的Deferred-详解和使用

首先,为什么要使用Deferred? 先来看一段AJAX的代码: 1 var data; 2 $.get(api/data, function(resp) { 3 data resp.data; 4 }); 5 doSomethingFancyWithData(data); View Code 这段代码极容易出问题,请…

ps aux grep java_linux命令ps-aux监控java进程

linux下用ps -aux可以监控java的进程情况。linux根据内核的不同对每个进程分配的最大使用内存不同,如果是32位机器,cpu最大的寻址空间是2的32次方,4G,但内核分配给每个进程最大的内存肯定是小于4G,经过重新编译的内核分…

【Eclipse】eclipse在线安装反编译插件

1.help->install new software 2.Add Name:jd-eclipse_update_site Location:http://jd.benow.ca/jd-eclipse/update 3.等待加载出来 4.持续点击下一步,直到完成。 转载于:https://www.cnblogs.com/flydkPocketMagic/p/7170283.html

java一维数组存入_java一维数组

1.通过数组名进行赋值,其实质是引用比如数组array1和数组array2若执行array2array1,实际上将array1的引用传递给array2,array1和array2 最后都指向同一个数组,array2原来引用的数组被回收。例如:int [] array1{1,2,3};…

Spring Boot 系列(一)快速入门

简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应…

python代码编码成jni_python 设置文件编码格式的实现方法

如果要在python2的py文件里面写中文,则必须要添加一行声明文件编码的注释,否则python2会默认使用ASCII编码。(python3已经没有这个问题了,python3默认的文件编码是UTF-8)必须将编码注释放在第一行或者第二行,一般来说,Python文件的…

Entity Framework context per request

原文发布时间为:2011-09-24 —— 来源于本人的百度文章 [由搬家工具导入]http://www.blog.cyberkinetx.com/2011/05/15/entity-framework-context-per-request/Are you still using the?1234using(DBContext context newDBContext()){ ..}way of accessing the d…

Java commit()_Java XAResource.commit方法代码示例

import javax.transaction.xa.XAResource; //导入方法依赖的package包/类public void testSuspendableTx() throws Exception {if (!versionMeetsMinimum(5, 0)) {return;}Connection conn1 null;MysqlXADataSource suspXaDs new MysqlXADataSource();suspXaDs.setUrl(BaseTe…

python如何优雅判断类型

http://note.youdao.com/noteshare?id6f3a7963efc57b5d0b1c712654d100c6转载于:https://www.cnblogs.com/taiyang-li/p/7190195.html

java网络io_彻底搞懂Java的网络IO

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼java.io包基于流模型实现,提供File抽象、输入输出流等IO的功能。交互方式是同步、阻塞的方式,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞。java.io包的好处是…

1. 在虚拟机中 添加内容

步骤: 1. 找到要添加的内容,按住 ctrl c 复制 ,例如:复制 飞秋 2. 打开 虚拟机,找到 要复制文件的位置。 3. 将 复制的文件添加到 共享文件夹下面。 4. 打开虚拟机,安装飞秋 5, 最后就完成了…

JavaScript设计模式-10.工厂模式实例xhr

1 <!DOCTYPE html>2 <html>3 <head>4 <meta charset"UTF-8">5 <title>Javascript高级语法10-工厂模式实例xhr</title>6 </head>7 <body>8 <script>9 //接口…