在生产制造过程中,为了提升缺陷检测效率,PAI提供了工业质检解决方案。该解决方案借助人工智能算法,帮助您快速构建端到端的质检服务。本文为您介绍该解决方案的使用流程。
背景信息
缺陷检测是生产制造过程中必不可少的一步,广泛应用于各个工业领域,包括3C、电子、汽车、化工及轻工等领域。虽然人工智能和机器视觉等检测技术逐渐成熟,但人工目视的方法仍占据较大比重,导致了生产自动化程度低、生产效率低、难以形成精益化生产等问题。针对该问题,阿里云PAI借助人工智能算法,提出了如下解决方案。
解决方案
基于智能标注(iTAG)平台和PAI数据集管理,对目标场景的数据进行快捷标注和样本管理。
基于PAI提供的模型和算法,针对自己的数据,在DSW平台上进行模型Fine-Tune,从而构建具体场景的质检模型。
将模型进行EAS在线部署,形成完整的端到端流程,通过访问服务自动识别图片中的缺陷。
使用流程
基于阿里云PAI,构建工业质检解决方案的使用流程如下。
使用PAI提供的示例iTAG数据,或基于智能标注(iTAG)进行原始数据标注。导出标注结果上传到OSS,用于后续的模型训练。
在DSW平台,参考DSW Gallery提供的案例,构建模型。
通过模型在线服务EAS,您可以将训练好的模型部署为在线服务,并在实际的生产环境中调用,从而进行推理。
前提条件
在开始执行操作前,请确认您已完成以下准备工作。
已开通PAI(DSW、EAS)后付费,并创建默认工作空间,详情请参见开通并创建默认工作空间。
已创建OSS存储空间(Bucket),用于存储原始图像和训练获得的模型文件。关于如何创建存储空间,详情请参见控制台创建存储空间。
已创建DSW实例,建议镜像选择modelscope:tf1.15torch1.11-gpu-py37-cu113-ubuntu20.04,GPU机型为P100或V100,内存大于32 GB,详情请参见创建DSW实例。
准备数据
您可以使用DSW Gallery中PAI提供的示例iTAG数据,也可以使用iTAG标注的自定义数据集。如果数据未标注,可基于智能标注(iTAG)对原始数据进行标注。iTAG标注流程如下,更详细的操作流程,详情请参见iTAG使用文档。
将待标注的图像数据上传到OSS,具体操作,请参见控制台上传文件。
创建数据集。
在PAI的数据集管理模块,通过扫描文件夹创建数据集的方式,将上传到OSS的图像文件创建为数据集,具体操作,请参见创建及管理数据集。
创建打标任务并完成打标任务处理。
通过智能标注(iTAG)管理员控制台,创建标注任务,详情请参见创建标注任务。
通过智能标注(iTAG)标注员控制台,进行数据标注,详情请参见标注图像(打标,质检及验收)。标注示例如下。
标注完成后,导出.manifest的标注结果文件,详情请参见导出标注结果数据。
将标注结果文件、标签文件、原始图像文件按照以下目录结构,上传到DSW的Notebook,详情请参见上传与下载数据文件。
itag_det_example |--imgs |--class_list.txt |--pet_det.manifest
其中:
imgs:该目录存放原始图像文件。
class_list.txt:标签文件,按行填写数据标签,例如:
类别一 类别二
pet_det.manifest:在上述步骤中获取的标注结果文件。
基于DSW构建质检模型
进入DSW Gallery页面,详情请参见进入DSW Gallery。
在DSW Gallery页面,构建以下两种质检模型。
目标检测模型
在名称或描述文本框中输入YOLOX,然后按回车键。在右侧的基于YOLOX模型和iTAG标注数据的图像检测示例区域,单击在阿里云DSW打开,并按照控制台操作指引构建yolox目标检测模型。如果您使用的是iTAG标注的自定义数据集,请将以下数据集目录替换为准备数据中的自定义数据集目录。
语义分割模型
在名称或描述文本框中输入STDC,然后按回车键。在右侧的基于EasyCV的STDC图像语义分割示例区域,单击在阿里云DSW打开,并按照控制台操作指引构建图像语义分割模型。
说明目前只能使用DSW Gallery中PAI提供的示例数据,不能使用自定义数据集。
将训练后得到的_export.pt为后缀的模型,上传到OSS,详情请参见控制台上传文件。
部署及调用模型服务
部署模型服务的具体操作步骤如下。
进入模型在线服务(EAS)页面。
登录PAI控制台。
在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应的工作空间。
在工作空间页面的左侧导航栏选择 ,进入模型在线服务(EAS)页面。
部署模型服务。
在模型在线服务(EAS)页面,单击部署服务,在自定义模型部署区域,单击自定义部署。
在新建服务页面,配置参数,并单击部署。
将以下JSON文件内容粘贴到对应配置编辑下的文本框中。
{ "name": "easycv_yolox_example", "processor": "easycv", "model_path": "oss://examplebucket/epoch_10_export.pt", "model_config": {"type":"YoloXPredictor"}, "metadata": { "instance": 1 }, "cloud": { "computing": { "instance_type": "ecs.gn5i-c4g1.xlarge" } } }
其中:
name:需要替换为您自己的服务名称,您可以直接在控制台模型服务信息区域修改该参数。
processor:配置为easycv。EAS提供的EasyCV Processor可以加载EasyCV框架训练得到的深度学习模型,更多EasyCV processor使用说明,详情请参见预置Processor使用说明。
model_config:您可以在控制台模型服务信息区域修改模型类别。
当部署yolox目标检测模型时,该参数配置为yolox目标检测。
当部署图像语义分割模型时,该参数配置为语义分割。
查看模型服务的公网地址和访问Token。
在模型在线服务(EAS)页面,单击目标服务服务方式列下的调用信息。
在调用信息对话框的公网地址调用页签,查看公网调用的访问地址和Token。
使用脚本进行批量调用。
创建调用模型服务的Python脚本eas_predict.py。
import requests import base64 import json resp = requests.get('http://exmaplebucket.oss-cn-zhangjiakou.aliyuncs.com/images/000000123213.jpg') ENCODING = 'utf-8' datas = json.dumps( { "image": base64.b64encode(resp.content).decode(ENCODING) }) head = { "Authorization": "NTFmNDJlM2E4OTRjMzc3OWY0NzI3MTg5MzZmNGQ5Yj***" } for x in range(0,10): resp = requests.post("http://150231884461***.cn-hangzhou.pai-eas.aliyuncs.com/api/predict/test_easycv_yolox_example", data=datas, headers=head) print(resp.text)
其中:image:需要将图像数据编码成Base64格式。
将eas_predict.py的Python脚本上传至您的任意环境,并在脚本上传后的当前目录执行如下调用命令。
python <eas_predict.py>
其中<eas_predict.py>需要替换为实际的Python脚本名称。
监控服务指标。调用模型服务后,您可以查看模型调用的相关指标水位,包括QPS、RT、CPU、GPU及Memory。
在模型在线服务(EAS)页面,单击已调用服务服务监控列下的图标。
在服务监控页签,即可查看模型调用的指标水位。