视觉模型训练插件支持视觉领域常用模型的标注、训练及发布,并针对移动端场景进行了模型深度优化,您可以通过手机扫码快速体验模型效果,也可以将模型部署在移动设备上。本文介绍使用视觉模型训练插件进行目标检测的详细流程。
前提条件
- 已完成OSS授权,详情请参见OSS授权。
- 已创建目标检测实例,详情请参见创建实例。
- 已将训练图像上传至OSS,且满足OCR识别的数据集要求和规范,详情请参见使用限制。 建议使用图形化管理工具ossbrowser批量上传图片数据,详情请参见快速使用ossbrowser。
背景信息
测试数据:下载目标检测Demo数据。
使用限制
用于目标检测的图像需要满足以下数据集要求和规范:
- 数据集要求
- 图像质量:无损坏图像,且图像分辨率高于30像素。系统支持JPG及JPEG格式。
- 数据均衡:建议训练数据集每类检测目标图像均大于50张,且不同种类的数据保持均衡。
- 泛化能力:选择实际场景的多角度样本进行训练。
- 数据集规范
存储在OSS中的训练图片必须满足上述格式要求。其中your_image_dir表示存储所有训练图片的文件夹。标注结果存储为XML文件,满足PASCAL(Pattern Analysis,Statistical Modelling and Computational Learning)VOC(Visual Object Classes)XML标注格式。|-- your_image_dir / | -- a.jpg | -- a.xml | -- b.png | -- b.xml | -- c.png ...
XML标注格式的示例如下。
该示例标注了两个Object: dog和 cat。<?xml version="1.0" encoding="utf-8"?> <annotation> <size> <width>1280</width> <height>720</height> <depth>3</depth> </size> <object> <name>dog</name> <bndbox> <xmin>549</xmin> <xmax>715</xmax> <ymin>257</ymin> <ymax>289</ymax> </bndbox> <truncated>0</truncated> <difficult>0</difficult> </object> <object> <name>cat</name> <bndbox> <xmin>842</xmin> <xmax>1009</xmax> <ymin>138</ymin> <ymax>171</ymax> </bndbox> <truncated>0</truncated> <difficult>0</difficult> </object> <segmented>0</segmented> </annotation>
操作流程
使用视觉模型训练插件进行目标检测的流程如下:
- 创建数据集
创建用于目标检测的训练数据集。
- 步骤二:标注数据
如果有未标注的数据,可以在线标注。
- 步骤三:创建任务
创建模型训练任务。
- 步骤四:查看训练详情
训练过程中,您可以查看节点训练进度、节点详情信息及训练日志。
- 步骤五:客户端预览模型
您可以通过手机支付宝扫描二维码。快速体验模型效果。
- 步骤六:服务端部署
视觉模型训练插件与PAI-EAS高效对接,您可以一键将模型部署为RESTful服务。
步骤一:创建数据集
- 进入视觉模型平台页面。
- 登录PAI控制台。
- 在左侧导航栏,选择 。
- 在视觉模型训练页面,单击目标实例操作列下的打开。
- 在数据准备配置向导页面,单击创建数据集。
- 在创建数据集面板,配置参数。
参数 描述 数据集名称 长度为1~30个字符,以大写字母、小写字母、数字或中文开头,可以包含下划线(_)或中划线(-)。 描述 数据集的简要说明,便于区分各数据集。 存储类型 系统默认OSS,不支持修改。 OSS路径 选择OSS存储训练图片的路径。 - 单击确认。
视觉模型训练插件会对图像及标注信息进行索引(不会转存图像,只对数据进行索引,模型训练时才会授权访问图像),您可以在 数据集列表区域,查看数据集信息。当数据集的 状态从 数据导入中变为 待人工标注或 标注完成,表示数据集已创建完成。
步骤二:标注数据
如果数据集中有尚未标注的图像,可以在线标注。
- 在数据准备配置向导页面的数据集列表区域,单击操作列下的标注。
- 在标注页面,对每张图像进行标注,并单击提交。
- 单击预览,查看标注结果。
步骤三:创建任务
- 在数据准备配置向导页面,单击上方的训练任务。
- 在训练任务配置向导页面,单击创建任务。
- 在创建任务页面,配置参数。
区域 参数 描述 基本信息 任务名称 长度为1~30个字符,以大写字母、小写字母、数字或中文开头,可以包含下划线(_)或短划线(-)。 描述 任务的简要说明,便于区分各任务。 数据集 选择数据集 选择已创建的数据集作为训练数据集。 选择标签 选择目标标签。 算法与训练 选择算法 系统支持以下算法: - 检测-高性能:兼顾客户端与云端推理性能,预测速度快。
- 检测-高精度:预测速度低于高性能算法,但准确率更高。
资源配置 选择训练任务使用的GPU数量及GPU类型。 显示高级设置 单击显示高级设置,可以自定义模型训练过程中涉及的算法参数,详情请参见下面的高级参数。如果没有设置高级参数,则使用默认参数。 表 1. 高级参数 参数 描述 默认值 数据增强 系统支持以下数据增强方法: - Rotate:旋转
- Blur:模糊
- Noise:加噪音
- Shear:错切
- FlipLR:左右翻转
- FlipUD:上下翻转
Noise和FlipLR 模型宽度 系统支持0.35、0.5、0.75及1共四种模型宽度。 0.5 训练Epoch 训练的Epoch数量。 150 优化器 系统支持以下优化器: - Adam
- RmsProp
- Momentum
Adam 初始化学习率 训练时,初始的学习率。 0.001 量化压缩 是否进行量化压缩。 是 - 单击开始训练。
步骤四:查看训练详情
- 在训练任务配置向导页面,单击操作列下的训练详情。
- 在训练详情页面,您可以进行如下操作。
操作 描述 查看训练进度 - 在训练详情页面,单击训练过程页签。
- 在训练过程页签,查看训练进度及训练基本信息。
终止任务 在训练过程页签,单击终止任务。 查看节点训练信息 - 在训练过程页签,单击节点图标。
- 在节点信息页面,查看节点运行进度、基本信息及步骤信息。
查看训练日志 - 在训练过程页签,单击节点图标。
- 在节点信息页面,单击日志页签。
步骤五:客户端预览模型
- 训练完成后,在训练详情页面,单击体验及发布。
- 在体验及发布配置向导页面,使用支付宝扫描生成的二维码。模型指标是在验证集上计算的结果。验证集是指从总训练数据中随机抽取的部分数据,默认抽取10%的数据。
- mAP@IoU0.5:在某位置的面积交并比IoU(Intersection over Union)下,计算每类物体在某个得分阈值下的精确率和召回率。mAP@IoU0.5表示
IoU>=0.5
时,不同得分阈值的PR(Precision Recall)曲线在各类别上的指标汇总。mAP@IoU0.5越高,表示模型检测越准。 - loss:在标注真值(Groud Truth)与预测值之间,使用损失函数计算得到的损失。损失越低,表示模型效果越好。
- model_size:通过训练、量化及编码等优化方法,获得的模型大小。
- mAP@IoU0.5:在某位置的面积交并比IoU(Intersection over Union)下,计算每类物体在某个得分阈值下的精确率和召回率。mAP@IoU0.5表示
- 使用客户端识别物体,体验实时预测效果。
步骤六:服务端部署
- 在体验及发布配置向导页面,单击前往PAI-EAS部署。
- 配置模型参数。
- 在模型配置面板,输入自定义模型名称,并选择资源种类,其他参数系统自动代入。
- 单击下一步。
- 在部署详情及配置确认面板,配置参数。
参数 描述 实例数 单击 或
图标调整资源数量。
Quota 仅资源种类为CPU时配置。1 Quota等于1核、4 GB内存。 单实例运行的机器资源 仅资源种类为GPU时配置,表示GPU服务器的规格。 - 单击部署。
进入 PAI EAS模型在线服务页面。如果 模型状态变为 运行中,则模型部署成功。
- 调用模型服务。
调用说明
PAI-EAS提供了服务调用SDK,您可以结合使用习惯选择Java SDK、Python SDK或Golang SDK调用已部署的模型服务,详情请参见Java SDK使用说明、Python SDK使用说明及Golang SDK使用说明。以下展示模型服务的关键信息:
- HTTP方法:POST。
- 请求URL:服务端部署成功后,系统会自动生成公网访问地址 。您可以通过如下方式获取访问地址和Token。
- 在PAI EAS模型在线服务页面,单击服务方式下的调用信息。
- 在调用信息页面的公网地址调用页签,查看访问地址和Token。
- Body请求。
{ "dataArray":[ { "name":"image", "type":"stream", "body":"base64数据" } ] }
参数 是否必选 类型 说明 name 否 STRING 无 type 否 STRING 数据类型。系统默认stream,不支持修改。 body 是 STRING 图像数据。使用Base64编码,支持JPG、PNG及BMP等格式。 - 返回说明。
参数 类型 说明 success BOOL 调用是否成功 result OBJECT 返回结果 output ARRAY 检测结果数组 label STRING 检测类别 conf NUMBER 置信度 pos ARRAY 检测框的相对坐标(x,y),按照左上、右上、右下及左下的顺序存储。 meta OBJECT 图片信息 height NUMBER 图片高度 width NUMBER 图片宽度 - 错误码。
错误码 错误信息 描述 1001 INPUT_FORMAT_ERROR 输入格式有误。例如,缺少必要参数,请检查输入格式是否符合规范。 1002 IMAGE_DECODE_ERROR 图片解码失败(非JPG或PNG等常见图片格式),请检查图片格式。 2001 UNKNOWN_ERROR 服务器内部错误。 2002 GET_INSTANCE_ERROR 实例获取失败。通常是由于资源不足,请尝试增大CPU或内存等资源配置。 2003 MODEL_FORWARD_ERROR 服务器内部错误,模型推理失败。
调用示例- 请求示例。
需要将示例中的URL、Token及图片Base64信息替换为实际值。curl http://****.cn-shanghai.pai-eas.aliyuncs.com/api/predict/**** -H 'Authorization:****==' -d '{"dataArray": [{"body": "****", "type": "stream", "name": "image"}]}'
- 返回示例。
{ "success":true, "result":{ "output":[ { "type":"cv_common", "body":[ { "label":"car", "conf":0.64, "pos":[[0.034,0.031],[0.98,0.031],[0.98,0.97],[0.034,0.97]] } ] } ], "meta":{ "height":1920, "width":1080 } } }
- 请求错误的返回示例。
如果请求错误,返回结果包含以下参数:
- errorCode:错误码。
- errorMsg:错误描述信息。
{ "success":false, "errorCode":"1001", "errorMsg":"INPUT_FORMAT_ERROR" }