Skip to content

Using depth neural network to read traditional meter.

Notifications You must be signed in to change notification settings

zhuyushi/MeterReader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 

Repository files navigation

项目简介

传统机械式指针表具无法将表具读数外传,需要人工进行读取,本项目使用深度学习方法实现传统机械式指针表具读数的自动读取。

本项目的深度学习算法基于百度PaddlePaddle框架实现;模型的训练使用百度PaddleModels工具完成;推理程序部署在ARM64平台上,基于PaddleLite实现。

针对模型训练,本项目提供了模型训练所需的数据集、模型训练工具的配置文件,以及训练好的模型,相关资源在“train”文件夹中。

针对推理部署,本项目提供了使用C++开发的,可以在ARM64平台、linux系统上运行程序源码,以及程序运行所需要的针对ARM平台优化过的模型文件,相关资源在“inference”文件夹中。

系统方案

第一步使用目标检测算法检测待识别表具区域,第二步使用语义分割算法分割出表具的刻度和指针,第三步计算表具读数。

image

  • 目标检测
    平衡考虑算法的推理速度和检测效果,目标检测算法采用YOLOv3模型实现。目标检测部分只做检测不对表具进行分类。

  • 语义分割
    根据目标检测的结果,从原图中裁剪出表具区域图像,做为语意分割模型的输入,考虑到刻度和指针均为细小区域,采用分割效果较好的DeepLapv3+模型实现。

  • 读数计算
    预先配置表具相关数据(单位、量程等),结合语意分割结果计算出表具最终读数。

目标检测

目标检测方案

1、目标检测算法采用YOLOv3模型实现,被检测表具基本没有很小目标的情况,所以根据经验,人工重新设计了锚框的尺寸,以便更加准确的预测目标区域。

2、目标检测部分只对表具进行检测,不进行分类识别。表具的类别、单位和量程等信息,通过配置的形式输入给推理进程,结合分割结果综合计算表具读数。

模型训练与评估

  • 数据集
    标注工具 :Labelme
    数据集格式 :coco
    数据集位置 :“MeterReader\train\detection\dataset\coco_806_901”

  • 模型训练
    训练工具 :使用百度models提供的PaddleDetection工具
    模型选择 :yolov3_darknet53
    预训练模型 :百度提供的DarkNet53_pretrained.tar
    训练配置文件 :“MeterReader\train\detection\config\yolov3_darknet_d.yml”
    训练后模型 :“MeterReader\train\detection\model”

  • 模型评估
    使用百度PaddleDetection配套的评估程序进行评估。 目标检测算法的评估结果(coco评估标准): mAP[.5:.9]为94.2%。

image

检测结果

image

image

image

语义分割

语义分割方案

1、表具刻度与指针都较为细小,采用效果较好的DeepLabv3+分割模型。

2、目标检测表具图像区域作为语义分割模型的输入。

image

模型训练与评估

  • 数据集
    标注工具 :Labelme(标注类型:line)
    数据集格式 :PaddleSeg
    数据集位置 :“MeterReader\train\segmentation\dataset\meter_paddleseg_414”

  • 模型训练
    训练工具 :使用百度models提供的PaddleSeg工具
    模型选择 : deeplabv3p_xception65
    预训练模型 :百度提供的deeplabv3p_xception65_bn_coco
    训练配置文件 :“MeterReader\train\segmentation\config\deeplabv3p_xception65_meter.yaml”
    训练后模型 :“MeterReader\train\segmentation\model”

  • 模型评估
    使用百度PaddleSeg配套的评估程序进行评估。
    DeepLabv3+语义分割算法的评估结果,刻度和指针的IOU达到了70%以上。

image

分割结果

image

读数计算

从语义分割的结果中只能获取到表具指针和刻度的像素分割区域,表具的具体读数还需要结合表具的配置信息(表具种类、单位、量程)进行专门的计算获得,本项目使用的计算方法如下。

image

模型部署

本项目目前实现了基于Paddle-Lite在ARM平台上的推理程序,代码位于“inference/arm64-RK3399”中,代码目录结构如下。

image

  • 目标平台
    RK3399开发环境 : CPU(ARMv8)

  • 软件环境
    操作系统:Ubuntu16.04
    基础软件:Paddle-Lite、OpenCV等
    开发语言:C++

About

Using depth neural network to read traditional meter.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published