Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

一刻AI作者

工业党福利:使用PaddleX高效实现指针型表计读取(一)

【飞桨开发者说】李康宇,PPDE飞桨开发者技术专家,工作于机械科学研究总院,视觉研发工程师

最近在做一个工业巡检的项目,主要涉及的内容是指针型表计的读取。本系列文章主要介绍实现表计读取的全流程开发。其中主要使用的工具为飞桨全流程开发工具PaddleX和Visual Studio 2019。

工业质检和工业巡检是深度学习技术在工业领域应用比较广泛的两个场景,而其实现流程是类似的,可以由图1大致展示:
图1 工业质检及巡检实现流程
本系列文章的内容包含了上述流程的全部内容,主要内容如下:
  • 高效语义分割基于PaddleX图形化开发界面(Demo),零代码快速实现表计分割

  • 工业场景适配:Windows下PaddleX的C++编译并生成dll

  • 表计读取实战:基于C#的识别界面开发和dll文件调用

正文开始前再说一句,各位兄弟姐妹快去GitHub给PaddleX点star啊。点star,不白嫖!链接如下:
https://github.com/PaddlePaddle/PaddleX

高效语义分割基于PaddleX

零代码快速实现表计分割

PaddleX是什么?

在PaddleX的官网上有其详细的介绍,我这里把它们摘录出来:
PaddleX是基于飞桨开发的一款全流程开发套件,以低代码、甚至零代码的形式支持开发者快速实现产业实际项目落地。

PaddleX中集成了飞桨智能视觉领域图像分类目标检测语义分割实例分割任务能力,将深度学习开发全流程从数据准备、模型训练与优化到多端部署端到端打通,并提供统一任务API接口及图形化开发界面(Demo)。开发者无需分别安装不同套件,以低代码的形式即可快速完成飞桨全流程开发。

PaddleX 经过质检、安防、巡检、遥感、零售、医疗等十多个行业实际应用场景验证,沉淀产业实际经验,并提供丰富的案例实践教程,全程助力开发者产业实践落地。
一句话概括优势:极大降低开发成本、缩短开发周期、降低开发难度。

工业党们最在意的效率和成本,PaddleX都解决了。PaddleX提供了两种开发模型:Python函数库开发模式和 PaddleX图形化开发模式。

(1)Python函数库模式:这种模式与我们平时比较熟悉的深度学习开发模式差不多,不过PaddleX提供了众多简洁、全面、集成度较高的API,这使得我们仅仅需要非常少量的的代码量,就可以实现图像分类、检测、分割等任务,并快速进行模型部署。

(2)“丧心病狂”的图形化开发模式:当我第一次看到PaddleX图形化开发界面的时候,我就知道,调参党的日子要不好过了,以及工业党的福利来了。之所以这么说,是因为使用PaddleX图形化开发界面,零代码就可以实现数据准备、模型训练、模型调优、模型部署全流程的开发。并且,这款工具竟然是免费的。如图2所示,它将深度学习开发中的调参转化为点选式的选择,无需代码就可以便捷、高效地调整模型类型、backbone、模型参数和训练参数。相信经过做项目验证、做方案的工业党们都明白这意味着什么。从我的经验来看,使用PaddleX 图形化开发界面,能够改进低效流程,将项目验证的效率提升10倍以上,极大缩短开发周期。

如果大家希望自己开发一个企业或者行业专用版本的图形化开发界面,PaddleX也是个很好的参照。
图2 PaddleX 图形化开发界面
如何使用PaddleX实现

压力表的语义分割

废话不多说,下面将以压力表的语义分割为例,边介绍边实战。飞桨提供了官方使用教程文档,链接为:
https://paddlex.readthedocs.io/zh_CN/develop/gui/how_to_use.html

与命令行模式的深度学习开发类似,使用PaddleX图形化开发界面完成压力表的语义分割也需要按照如图3所示的流程进行。
图3 使用PaddleX 图形化开发界面实现语义分割流程示意图
(1)数据准备

如图4所示,在安装完PaddleX图形化开发界面之后,打开软件。首先选择数据集管理;然后点击新建数据集,创建语义分割数据集。
图4 创建数据集
点击创建数据集后,如图5所示,首先按照数据集导入规则,将原始图像和标注图像分别放在JPEGImages和Annotations文件夹中;然后选择数据集路径,确认导入。这里需要注意一下,labelme标注出的分割标注格式为json文件,需要首先转换为label.png文件(要注意自己的标注是一个标签还是多标签)。正如图6中展示的那样,导入后,将数据集切分为训练集、验证集和测试集。一般按照默认比例即可。
图5 数据导入
图6 数据切分
( 2)创建项目

进行模型训练点击我的项目,新建语义分割项目后,进入到项目开发界面。
数据选择:如图7所示,选择数据准备中创建的压力表数据集。
图7 数据选择
参数配置:如图8所示,在参数配置中,大家可以根据自己的需求来配置。我所使用的模型为DeepLabv3+该模型在语义分割有更好的效果。backbone选择MobileNetV2_x0.5。迭代轮数为200,学习率0.005,batch size为1(为控制训练中的振荡幅度,学习率和batch size要相匹配的调整,减小batch size一般需等倍数减小学习率)。
图8 模型及训练参数配置
训练过程中的模型可视化:如图9及图10所示,通过PaddleX界面查看看到当前的训练轮数,训练集损失值和验证集的各项参数。除此之外,PaddleX中集成了Visual DL,可以查看模型训练过程参数变化、日志详情,及当前最优的训练集和验证集训练指标。
图9 模型训练可视化
图10 VisualDL训练可视化
模型裁剪:训练结束后,可选择进入模型裁剪,也可直接进行模型评估。

(3)模型评估

参数评估:如图11所示,在模型评估页面,可查看训练后的模型效果。评估方法包括混淆矩阵、精度、召回率等。

图11 模型评估
分割测试:如图12所示,可以更加直观地进行测试集图片测试,或者单张图片测试,来评估模型的性能。并可将训练后的模型保存为预训练模型。

图12 模型测试
我们来看一下使用PaddleX训练后,压力表分割的效果如图13所示:
图13 压力表分割效果
放大之后:
图14 压力表分割放大
本次训练仅使用了60多张压力表的图像数据,数据量比较小。但是可以看出,最终实现的分割效果还是相当不错的。

(4)模型发布

在得到一个性能较好的模型后,我们最终的目的是将模型部署至服务器端或者移动端。在做工业质检或巡检时,我们一般都部署在服务器端。PaddleX的模型发布界面如图15所示:

图15 模型发布
发布的文件主要有两部分:推理代码和模型。如图16所示,模型保存在inference_model文件夹内,在使用时,我们只需要加载该模型即可。
图16 推理代码和模型
发布的文件如下图所示:
图17模型文件

项目小结及下节预告

在本文中,我介绍了一款非常好用的深度学习开发工具PaddleX,特别以压力表分割为例,阐述了PaddleX 图形化开发界面的使用方法。这一部分的内容比较简单,欢迎大家下载亲自动手试一试。下载链接:
https://www.paddlepaddle.org.cn/paddlex/userinfo

下节预告:在工业应用中,生成一个性能不错的模型只是第一步。由于工业场景需要使用C#开发界面,因此需要将该模型转换成C#可调用的dll,下节将介绍如何将飞桨的C++预测代码生成为Visual Studio下的解决方案,以及最关键的,如何将C++预测代码生成为可调用的动态链接库dll,打通真正可以工业实战的开发流程。都看到这里了,还不点个赞,关注一下,谢谢大家!最后,再一次欢迎大家给这款好用的工具点个star!PaddleX Github链接:
https://github.com/PaddlePaddle/PaddleX

飞桨PaddlePaddle
飞桨PaddlePaddle

飞桨(PaddlePaddle)是中国首个自主研发、功能完备、开源开放的产业级深度学习平台。

https://www.paddlepaddle.org
专栏二维码
工程PaddleX
1
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

混淆矩阵技术

混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。具体评价指标有总体精度、制图精度、用户精度等,这些精度指标从不同的侧面反映了图像分类的精度。在人工智能中,混淆矩阵(confusion matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵。矩阵的每一行表示预测类中的实例,而每一列表示实际类中的实例(反之亦然)。 这个名字源于这样一个事实,即很容易看出系统是否混淆了两个类。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

学习率技术

在使用不同优化器(例如随机梯度下降,Adam)神经网络相关训练中,学习速率作为一个超参数控制了权重更新的幅度,以及训练的速度和精度。学习速率太大容易导致目标(代价)函数波动较大从而难以找到最优,而弱学习速率设置太小,则会导致收敛过慢耗时太长

验证集技术

验证数据集是用于调整分类器超参数(即模型结构)的一组数据集,它有时也被称为开发集(dev set)。

遥感技术

遥感(remote sensing)是指非接触的、远距离的探测技术。一般指运用传感器/遥感器探测物体的电磁波辐射、反射特性。遥感通过遥感器这类对电磁波敏感的仪器,在远离目标和非接触目标物体条件下探测目标。

语义分割技术

语义分割,简单来说就是给定一张图片,对图片中的每一个像素点进行分类。图像语义分割是AI领域中一个重要的分支,是机器视觉技术中关于图像理解的重要一环。

图像分类技术

图像分类,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,以代替人的视觉判读。

实例分割技术

实例分割是检测和描绘出现在图像中的每个不同目标物体的任务。

目标检测技术

一般目标检测(generic object detection)的目标是根据大量预定义的类别在自然图像中确定目标实例的位置,这是计算机视觉领域最基本和最有挑战性的问题之一。近些年兴起的深度学习技术是一种可从数据中直接学习特征表示的强大方法,并已经为一般目标检测领域带来了显著的突破性进展。

推荐文章
暂无评论
暂无评论~