视觉模型训练插件支持视觉领域常用模型的标注、训练及发布,并针对移动端场景进行了模型深度优化,您可以通过手机扫码快速体验模型效果,也可以将模型部署在移动设备上。本文介绍使用视觉模型训练插件进行图像分类的详细流程。
前提条件
- 已完成OSS授权,详情请参见OSS授权。
- 已创建图像分类实例,详情请参见创建实例。
- 已将训练图像上传至OSS,且满足OCR识别的数据集要求和规范,详情请参见使用限制。建议使用图形化管理工具ossbrowser批量上传图片数据,详情请参见快速使用ossbrowser。重要 训练图像上传的OSS路径和图像分类实例需要归属于同一个地域,否则您在创建数据集时,将不能正确选择到数据集所属的OSS路径。
背景信息
测试数据:下载图像分类的DEMO数据。
使用限制
进行图像分类的数据集需要满足以下要求及规范:
- 数据集要求
- 图像质量:无损坏图像。系统支持JPG、JPEG及PNG格式。
- 数据均衡:建议训练数据集每类图像均大于20张,且不同种类的数据保持均衡。
- 数据分布:训练样本与实际场景相似。
- 泛化能力:选择实际场景的多角度样本进行训练。
- 数据集规范
存储在OSS中的训练图片必须满足上述格式要求。其中your_image_dir表示保存图片的文件夹,该文件夹下可以存在多个子文件夹,分别存储不同类别的图片。例如,your_image_dir/label_1表示类别为label_1的图片。对于未确定类别的图片,也可以存储在your_image_dir目录下。例如,your_image_dir/test_1.png表示test_1.png 图片尚未标注。|-- your_image_dir / |-- label_1 / | -- a.jpg | -- b.png | -- label_2 / | -- c.jpg | -- d.png |-- test_1.png ...
重要 子文件夹名称(label_1,label_2,……)仅支持英文,即标签仅支持英文。
操作流程
使用视觉模型训练插件进行图像分类的流程如下:
- 步骤一:创建数据集
创建用于图像分类的训练数据集。
- 步骤二:标注数据
如果有未标注的数据,可以在线标注。
- 步骤三:创建任务
创建模型训练任务。
- 步骤四:查看训练详情
训练过程中,您可以查看节点训练进度、节点详情信息及训练日志。
- 步骤五:客户端预览模型
您可以通过手机支付宝扫描二维码。快速体验模型效果。
- 步骤六:服务端部署
视觉模型训练插件与PAI-EAS高效对接,您可以一键将模型部署为RESTful服务。
步骤一:创建数据集
- 进入视觉模型平台页面。
- 登录PAI控制台。
- 在左侧导航栏,选择 。
- 在视觉模型训练页面,单击目标实例操作列下的打开。
- 在数据准备配置向导页面,单击创建数据集。
- 在创建数据集面板,配置参数。
参数 描述 数据集名称 长度为1~30个字符,以大写字母、小写字母、数字或中文开头,可以包含下划线(_)或中划线(-)。 描述 数据集的简要说明,便于区分各数据集。 存储类型 系统默认OSS,不支持修改。 OSS路径 选择OSS存储训练图片的路径。 - 单击确认。视觉模型训练插件会对图像及标注信息进行索引(不会转存图像,只对数据进行索引,模型训练时才会授权访问图像),您可以在数据集列表区域,查看数据集信息。当数据集的状态从数据导入中变为待人工标注或标注完成,表示数据集已创建完成。
步骤二:标注数据
如果数据集中有尚未标注的图像,可以在线标注。
- 在数据准备配置向导页面的数据集列表区域,单击目标数据集操作列下的标注。
- 在标注页签,对每张图像进行标注(选择对应的标签),并单击提交。
- 单击预览页签,可以查看标注结果。
步骤三:创建任务
- 在数据准备配置向导页面,单击页面上方的训练任务配置向导。
- 在训练任务配置向导页面,单击创建任务。
- 在创建任务面板,配置参数。
区域 参数 描述 基本信息 任务名称 长度为1~30个字符,以大写字母、小写字母、数字或中文开头,可以包含下划线(_)或中划线(-)。 描述 任务的简要说明,便于区分各任务。 数据集 选择数据集 选择已创建的数据集作为训练数据集。 选择标签 至少选择两项分类标签。 算法与训练 选择算法 根据实际需要选择以下算法: - 分类-高性能:兼顾客户端与云端推理性能,预测速度快。
- 分类-高精度:预测速度低于高性能算法,但准确率更高。
资源配置 选择训练任务使用的GPU数量及GPU类型。 显示高级设置 单击显示高级设置,可以自定义模型训练过程中涉及的算法参数,详情请参见下面的高级参数。如果没有设置高级参数,则使用默认参数。 表 1. 高级参数 参数 描述 默认值 数据增强 系统支持以下数据增强方法: - Rotate:旋转
- Blur:模糊
- Noise:加噪音
- Shear:错切
- FlipLR:左右翻转
- FlipUD:上下翻转
Rotate、Noise、Shear及FlipLR 模型宽度 系统支持0.35、0.5、0.75及1共四种模型宽度。 1 训练Epoch 训练的Epoch数量。 10 优化器 系统支持以下优化器: - Adam
- RmsProp
- Momentum
Adam 初始化学习率 训练时,初始的学习率。 0.001 量化压缩 是否进行量化压缩。 是 - 单击开始训练。
步骤四:查看训练详情
- 在训练任务配置向导页面,单击操作下的训练详情。
- 在训练详情页面,您可以进行如下操作。
操作 描述 查看训练进度 在训练过程页签,查看训练进度及训练基本信息。 终止任务 在训练过程页签,单击终止任务。 查看节点训练信息 - 在训练过程页签,单击节点图标。
- 在节点信息面板,查看节点运行进度、基本信息及步骤信息。
查看训练日志 - 在训练过程页签,单击节点图标。
- 在节点信息面板,单击日志页签。
步骤五:客户端预览模型
- 训练完成后,在训练详情页面,单击右侧的体验及发布。
- 在体验及发布配置向导页面,使用支付宝扫描生成的二维码。
- 使用客户端识别物体,体验实时预测效果。
步骤六:服务端部署
- 在体验及发布配置向导页面,单击前往PAI-EAS部署。
- 配置模型参数。
- 在模型配置面板,输入自定义模型名称,并选择资源种类,其他参数系统自动代入。
- 单击下一步。
- 在部署详情及配置确认面板,配置参数。
参数 描述 实例数 单击 或
图标调整资源数量。
Quota 仅资源种类为CPU时配置。1 Quota等于1核、4 GB内存。 单实例运行的机器资源 仅资源种类为GPU时配置,表示GPU服务器的规格。 - 单击部署。进入PAI EAS模型在线服务页面。如果模型状态变为运行中,则模型部署成功。
- 调用模型。API调用说明
- 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 置信度 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":"hua","conf":0.8}, {"label":"feihua","conf":0.2} ] } ], "meta":{ "height":1920, "width":1080 } } }
- 请求错误的返回示例。 如果请求错误,返回结果包含以下参数:
- errorCode:错误码。
- errorMsg:错误描述信息。
{ "success":false, "errorCode":"1001", "errorMsg":"INPUT_FORMAT_ERROR" }