本发明涉及模式识别与人工智能技术领域,特别涉及一种直观的水表数字的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文件中的索引,准确率和框坐标。
在训练网络的过程中会产生多个模型,所以我们会在测试模型阶段根据识别准确率挑选出识别效果最好的一个作为最终应用的模型。
经过测试合格,选定模型之后,进行识别时呈现在用户使用界面上的是数字,即模型识别水表图像时被分别框出来的每个阿拉伯数字的组合。