文章目录
一、概述
数字式仪表是指以数字的形式呈现仪表读数的仪表类型,其特点是读数比较直观,如下图为配电房常用数字式仪表
对于数字仪表的读数识别实质上就是0-9十个数字字符的识别,可以把它当成一个具有10个类别的目标检测任务来实现,由于当前目标检测算法比较成熟,因此算法方面不是难点,最关键的是训练数据集的搜集和准备。目前仅有70张来自实际配电房场景的数字仪表相关图片,这显然无法满足目标检测算法的训练要求,因此还需要想各种办法增加或扩充训练数据。本文主要介绍配电房数字式仪表读数识别算法的开发过程,其中重点阐述训练数据的扩充过程。
二、训练数据准备
由于来自实际场景的图片很难搜集,因此主要通过以下两种方式对训练数据进行扩充,一是根据图片特点,自动生成相关训练图片;二是利用爬虫技术从互联网爬取相关图片。
2.1 自动生成图片
由于数字仪表中的数字读数部分是一种数码管字体,因此可以考虑利用相应的数码管字体产生相应的数字字符串,然后将这些数字字符串叠加到背景图片中,从而达到自动生成数字字符训练图片的目的,由于生成过程是通过程序控制的,因此在生成图片的同时,还能够同步获取这些数字字符在图片中的坐标信息,从而可以生成这些图片对应的标注文件,这样就能够节省大量的数据标注工作,可以无限量地自动生成训练图片及其对应的标注文件。
为了能够更加贴合实际场景,背景图片选择实际配电房场景的图片。
为了增加数据的丰富性,生成的数字字符串的颜色、大小和放置位置都在一定范围内随机产生,且不同字符串之间不重叠。
以下为代码自动生成的图片示例
2.2 爬虫搜集图片
上一步中利用代码可以自动生成无限量的训练图片及其标注文件,但为了防止过拟合,还需要一些其他来源的训练数据,为此,可以借助爬虫技术从网络中爬取一些相关的图片,作为训练集的补充。
利用爬虫脚本,分别以"数字表计"、"数字仪表"、"数码管仪表"等为关键词,从百度图片网址爬取下载图片,共获得1500多张图片,经过清洗筛选,得到 **452 **张可用于训练的数字表计图片,如下图所示:
可以看到,网上爬取的图片五花八门,虽与配电房场景不太匹配,但在已有大量生成图片的基础上,可以作为训练集的补充和完善,进一步丰富数据的来源,防止过拟合的发生。
三、模型训练及测试
3.1 数据集组成
上述第二步描述了训练数据的自动生成方法,理论上可以生成无限量的训练图片,但由于生成图片毕竟与实际图片有些不同,如果生成图片数量过多,会导致过拟合的发生。因此,经过综合考虑和衡量,决定生成3000张图片用于训练,然后再将利用爬虫得到的452张图片,以及来自实际场景的70张图片合并到一起,组成一个3522张图片的数据集,然后再将该数据集按照6:2:2的比例随机划分为训练集、验证集、测试集。数据集组成如下表所示
图片类别 | 生成图片 | 网络爬取图片 | 实际场景图片 | 合计 | 训练集图片 | 验证集图片 | 测试集图片 |
---|---|---|---|---|---|---|---|
数量 | 3000 | 452 | 70 | 3522 | 2113 | 704 | 705 |
3.2 模型训练及评价
准备好数据集后,利用yolov8目标检测算法对数据集进行训练,经过200轮的训练,得到的yolov8模型在测试集上进行测试,最终的精确率、召回率如下表所示
测试集图片 | 精确率P | 召回率R |
---|---|---|
705 | 0.993 | 0.983 |
3.3 预测结果可视化
训练得到模型后,对测试集图片进行推理预测,得到的可视化结果如下所示
四、小结
本文主要介绍了配电房数字式仪表读数识别算法的开发过程,在严重缺乏实际场景图片的情况下,采用了两种数据扩增方法,一种是利用代码自动生成大量图片,另一种是利用爬虫技术从网络爬取相关图片,然后将所有数据组成一个数据集,并进行模型训练,所得模型在测试集的精确率、召回率分别达到0.993、0.983,同时从可视化预测结果来看,模型也具有很好的识别效果,与预期相符,表明了本文提出的数据生成方法及读数识别算法的有效性。