视觉模型训练插件支持视觉领域常用模型的标注、训练及发布,并针对移动端场景进行了模型深度优化,您可以通过手机扫码快速体验模型效果,也可以将模型部署在移动设备上。本文介绍使用视觉模型训练插件进行目标检测的详细流程。

前提条件

  • 已完成OSS授权,详情请参见OSS授权
  • 已创建目标检测实例,详情请参见创建实例
  • 已将训练图像上传至OSS,且满足OCR识别的数据集要求和规范,详情请参见使用限制。 建议使用图形化管理工具ossbrowser批量上传图片数据,详情请参见快速使用ossbrowser

背景信息

测试数据:下载目标检测Demo数据

使用限制

用于目标检测的图像需要满足以下数据集要求和规范:
  • 数据集要求
    • 图像质量:无损坏图像,且图像分辨率高于30像素。系统支持JPG及JPEG格式。
    • 数据均衡:建议训练数据集每类检测目标图像均大于50张,且不同种类的数据保持均衡。
    • 泛化能力:选择实际场景的多角度样本进行训练。
  • 数据集规范
    |-- your_image_dir /
        | -- a.jpg
        | -- a.xml
        | -- b.png
        | -- b.xml
        | -- c.png
        ...            
    存储在OSS中的训练图片必须满足上述格式要求。其中your_image_dir表示存储所有训练图片的文件夹。标注结果存储为XML文件,满足PASCAL(Pattern Analysis,Statistical Modelling and Computational Learning)VOC(Visual Object Classes)XML标注格式。
    XML标注格式的示例如下。
    <?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>
    该示例标注了两个Object:dogcat

操作流程

使用视觉模型训练插件进行目标检测的流程如下:
  1. 创建数据集

    创建用于目标检测的训练数据集。

  2. 步骤二:标注数据

    如果有未标注的数据,可以在线标注。

  3. 步骤三:创建任务

    创建模型训练任务。

  4. 步骤四:查看训练详情

    训练过程中,您可以查看节点训练进度、节点详情信息及训练日志。

  5. 步骤五:客户端预览模型

    您可以通过手机支付宝扫描二维码。快速体验模型效果。

  6. 步骤六:服务端部署

    视觉模型训练插件与PAI-EAS高效对接,您可以一键将模型部署为RESTful服务。

步骤一:创建数据集

  1. 进入视觉模型训练页面。
    1. 登录PAI控制台
    2. 在左侧导航栏,选择AI行业插件 > 视觉模型平台插件
  2. 视觉模型训练页面,单击目标实例操作列下的打开
  3. 数据准备配置向导页面,单击创建数据集
  4. 创建数据集面板,配置参数。
    参数 描述
    数据集名称 长度为1~30个字符,以大写字母、小写字母、数字或中文开头,可以包含下划线(_)或中划线(-)。
    描述 数据集的简要说明,便于区分各数据集。
    存储类型 系统默认OSS,不支持修改。
    OSS路径 选择OSS存储训练图片的路径。
  5. 单击确认
    视觉模型训练插件会对图像及标注信息进行索引(不会转存图像,只对数据进行索引,模型训练时才会授权访问图像),您可以在数据集列表区域,查看数据集信息。当数据集的状态数据导入中变为待人工标注标注完成,表示数据集已创建完成。

步骤二:标注数据

如果数据集中有尚未标注的图像,可以在线标注。

  1. 数据准备配置向导页面的数据集列表区域,单击操作列下的标注
  2. 标注页面,对每张图像进行标注,并单击提交标注图像
  3. 单击预览,查看标注结果。目标检测标注结果

步骤三:创建任务

  1. 数据准备配置向导页面,单击上方的训练任务
  2. 训练任务配置向导页面,单击创建任务
  3. 创建任务页面,配置参数。
    区域 参数 描述
    基本信息 任务名称 长度为1~30个字符,以大写字母、小写字母、数字或中文开头,可以包含下划线(_)或短划线(-)。
    描述 任务的简要说明,便于区分各任务。
    数据集 选择数据集 选择已创建的数据集作为训练数据集。
    选择标签 选择目标标签。
    算法与训练 选择算法 系统支持以下算法:
    • 检测-高性能:兼顾客户端与云端推理性能,预测速度快。
    • 检测-高精度:预测速度低于高性能算法,但准确率更高。
    资源配置 选择训练任务使用的GPU数量GPU类型
    显示高级设置 单击显示高级设置,可以自定义模型训练过程中涉及的算法参数,详情请参见下面的表 1。如果没有设置高级参数,则使用默认参数。
    表 1. 高级参数
    参数 描述 默认值
    数据增强 系统支持以下数据增强方法:
    • Rotate:旋转
    • Blur:模糊
    • Noise:加噪音
    • Shear:错切
    • FlipLR:左右翻转
    • FlipUD:上下翻转
    NoiseFlipLR
    模型宽度 系统支持0.35、0.5、0.75及1共四种模型宽度。 0.5
    训练Epoch 训练的Epoch数量。 150
    优化器 系统支持以下优化器:
    • Adam
    • RmsProp
    • Momentum
    Adam
    初始化学习率 训练时,初始的学习率。 0.001
    量化压缩 是否进行量化压缩。
  4. 单击开始训练

步骤四:查看训练详情

  1. 训练任务配置向导页面,单击操作列下的训练详情
  2. 训练详情页面,您可以进行如下操作。
    操作 描述
    查看训练进度
    1. 训练详情页面,单击训练过程页签。
    2. 训练过程页签,查看训练进度及训练基本信息目标检测
    终止任务 训练过程页签,单击终止任务
    查看节点训练信息
    1. 训练过程页签,单击节点图标。
    2. 节点信息页面,查看节点运行进度、基本信息步骤信息
    查看训练日志
    1. 训练过程页签,单击节点图标。
    2. 节点信息页面,单击日志页签。

步骤五:客户端预览模型

  1. 训练完成后,在训练详情页面,单击体验及发布
  2. 体验及发布配置向导页面,使用支付宝扫描生成的二维码。目标检测模型试用
    模型指标是在验证集上计算的结果。验证集是指从总训练数据中随机抽取的部分数据,默认抽取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:通过训练、量化及编码等优化方法,获得的模型大小。
  3. 使用客户端识别物体,体验实时预测效果。目标检测效果

步骤六:服务端部署

  1. 体验及发布配置向导页面,单击前往PAI-EAS部署
  2. 配置模型参数。
    1. 模型配置面板,输入自定义模型名称,并选择资源种类,其他参数系统自动代入。
    2. 单击下一步
  3. 部署详情及配置确认面板,配置参数。
    参数 描述
    实例数 单击上箭头下箭头图标调整资源数量。
    Quota 资源种类CPU时配置。1 Quota等于1核、4 GB内存。
    单实例运行的机器资源 资源种类GPU时配置,表示GPU服务器的规格。
  4. 单击部署
    进入PAI EAS模型在线服务页面。如果模型状态变为运行中,则模型部署成功。
  5. 调用模型。
    API调用说明
    • HTTP方法:POST。
    • 请求URL:服务端部署成功后,系统会自动生成公网访问地址 。您可以通过如下方式获取访问地址Token
      1. PAI EAS模型在线服务页面,单击服务方式下的调用信息
      2. 调用信息页面的公网地址调用页签,查看访问地址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 服务器内部错误,模型推理失败。
    调用示例
    • 请求示例。
      curl http://****.cn-shanghai.pai-eas.aliyuncs.com/api/predict/**** -H 'Authorization:****==' -d '{"dataArray": [{"body": "****", "type": "stream", "name": "image"}]}'
      需要将示例中的URL、Token及图片Base64信息替换为实际值。
    • 返回示例。
      {
        "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:错误描述信息。
      例如,输入参数中缺少dataArray字段,返回结果如下。
      {
        "success":false,
        "errorCode":"1001",
        "errorMsg":"INPUT_FORMAT_ERROR"
      }