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

前提条件

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

背景信息

测试数据:下载OCR Demo数据

使用限制

用于OCR识别的图像需要满足如下数据集要求和规范:
  • 数据集要求
    • 图像质量:无损坏图像,且图像分辨率高于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>手机号</name>
            <bndbox>
                <xmin>549</xmin>
                <xmax>715</xmax>
                <ymin>257</ymin>
                <ymax>289</ymax>
            </bndbox>
            <truncated>0</truncated>
            <difficult>0</difficult>
        </object>
        <object>
            <name>18600000000</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>            
    该示例标注了两个文本内容: 手机号18600000000

操作流程

使用视觉模型训练插件进行OCR识别的流程如下:
  1. 创建数据集

    创建用于OCR识别的训练数据集。

  2. 步骤二:标注数据

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

  3. 步骤三:创建任务

    创建模型训练任务。

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

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

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

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

  6. 步骤六:服务端部署

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

步骤一:创建数据集

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

步骤二:标注数据

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

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

步骤三:创建任务

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

步骤四:查看训练详情

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

步骤五:客户端预览模型

  1. 训练完成后,在训练详情页面,单击体验及发布
  2. 体验及发布配置向导页面,使用支付宝扫描生成的二维码。ORC模型试用
    如下模型指标是在验证集上的结果。验证集是指从总训练数据中随机抽取的部分数据,默认抽取10%的数据。
    • loss:在标注真值(Groud Truth)与预测值之间,使用损失函数计算得到的损失。损失越低,表示模型效果越好。
    • model_size:通过训练、量化及编码等优化方法,获得的模型大小。
  3. 使用客户端识别物体,体验实时识别效果。OCR识别效果

步骤六:服务端部署

  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 OCR结果数组
      label STRING OCR识别结果
      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":"06174727742034996",
                  "conf":0.95,
                  "pos":[[468,992],[976,1012],[972,1072],[464,1052]]
                }
              ]
            }
          ],
          "meta":{
            "height":1920,
            "width":1080
          }
        }
      }
    • 请求错误的返回示例
      如果请求错误,返回结果包含以下参数:
      • errorCode:错误码。
      • errorMsg:错误描述信息。
      例如,输入参数中缺少 dataArray字段,返回结果如下。
      {
        "success":false,
        "errorCode":"1001",
        "errorMsg":"INPUT_FORMAT_ERROR"
      }