为了解决端侧模型开发和部署的问题,PAI提供了通用端视觉解决方案。该解决方案提供端侧模型训练和部署套件,经过模型训练、模型剪枝和模型量化,最终导出可供部署到端侧产品的模型,并将模型部署到端侧,服务于下游推荐或其他应用场景。本文为您介绍通用端视觉的解决方案。

前提条件

在开始执行操作之前,请确认您已经完成以下准备工作:
  • 已开通PAI(Designer、DSW、EAS)后付费,详情请参见开通
  • 已开通并创建工作空间,且添加了DLC计算资源,详情请参见开通并创建默认工作空间
  • 已创建OSS存储空间(Bucket),用于存储原始数据、标签列表文件及训练获得的模型文件。关于如何创建存储空间,详情请参见创建存储空间

使用流程

基于阿里云机器学习PAI平台,端视觉解决方案的流程如下。使用流程
  1. 步骤一:准备数据

    将训练集、测试集、数据类别列表等数据上传到OSS存储空间,用于后续的模型训练。若数据未标注可基于智能标注(iTAG)进行原始数据标注,详情请参见智能标注(ITAG)

  2. 步骤二:构建端侧视觉检测模型、压缩模型和导出模型

    在可视化建模平台PAI-Designer上,根据上传的图像数据,构建ev-torch框架下的YOLOX_EDGE检测模型。通过PAI-Designer平台提供的模型剪枝和模型量化组件,对ev-torch框架模型进行模型压缩,并导出pt模型。

  3. 步骤三:部署模型服务

    您可以将输出的pt模型部署到端侧,用于下游推荐或其他应用场景。

步骤一:准备数据

首先您需要根据选择的模型准备对应类型的数据。以检测模型yolovx为例,您可以准备COCO类型的数据,并将数据上传到OSS。需要上传的数据包括:训练数据、训练数据标签、验证数据、验证数据标签、数据类别列表。

您也可以基于智能标注(ITAG)进行原始数据标注,并将获得的训练集和测试集数据上传到OSS,用于后续的模型训练,详情请参见智能标注(ITAG)

步骤二:构建端侧视觉检测模型、压缩模型和导出模型

  1. 进入PAI-Designer页面,并创建空白工作流,具体操作请参见创建工作流:空白工作流
  2. 在工作流列表,选择已创建的空白工作流,单击进入工作流
  3. 在工作流页面,分别拖入以下组件,并配置组件参数。
    您可以按照以下任意一种方式,通过连线将节点组织构建为模型工作流。
    • 使用图像检测训练组件获得的模型文件,分别进行模型剪枝和模型量化。实验1
    • 使用图像检测训练组件获得的模型文件,先经过模型剪枝,再进行模型量化。实验2
    区域 描述
    配置图像检测训练的参数。图像检测训练组件的配置详情请参见表 1
    配置模型剪枝组件参数。模型剪枝组件的配置详情请参见表 1
    配置模型量化组件参数。模型量化组件的配置详情请参见表 1
    配置实验的训练数据集,即配置读OSS数据-1组件的OSS数据路径为存放训练数据文件的OSS路径。
    配置实验的测试数据集,即配置读OSS数据-2组件的OSS数据路径为存放测试数据文件的OSS路径。
    配置实验的数据类别列表文件,即配置读OSS数据-3组件的OSS数据路径为存放数据类别列表文件的OSS路径。
    配置实验的训练数据集,即配置读OSS数据-4组件的OSS数据路径为存放训练数据文件的OSS路径。
    配置实验的测试数据集,即配置读OSS数据-5组件的OSS数据路径为存放测试数据文件的OSS路径。
    配置实验的数据类别列表文件,即配置读OSS数据-6组件的OSS数据路径为存放数据类别列表文件的OSS路径。
    配置实验的训练数据集,即配置读OSS数据-7组件的OSS数据路径为存放训练数据文件的OSS路径。
    配置实验的测试数据集,即配置读OSS数据-8组件的OSS数据路径为存放测试数据文件的OSS路径。
    配置实验的数据类别列表文件,即配置读OSS数据-9组件的OSS数据路径为存放数据类别列表文件的OSS路径。
    表 1. 配置组件参数
    页签 参数 描述 本案例使用的示例值
    字段设置 训练模型类型 训练模型的类型。

    图像检测训练支持以下模型类型:

    • SSD
    • FasterRCNN
    • RFCN
    • YOLOV5
    • YOLOX
    • YOLOX_EDGE
    模型剪枝模型量化支持以下模型类型:
    • YOLOX
    • YOLOX_EDGE
    YOLOX_EDGE
    训练所用oss目录 训练过程中模型和Log保存的OSS路径。 oss://examplebucket-cn-shanghai-internal.aliyuncs.com/test/test_model_compression_3-8/
    说明 需要修改为您使用的OSS路径,且图像检测训练模型剪枝模型量化三个组件配置的路径不同。
    训练数据oss路径 存放训练数据文件的OSS路径,如果您使用读OSS数据组件作为上游节点,则该参数无需设置。 无需填写
    训练集标注结果文件路径 存放训练集标注结果文件的OSS路径。 oss://examplebucket-cn-shanghai.aliyuncs.com/data/model_compression/annotations/instances_train2017_sub.json
    说明 需要修改为您使用的OSS路径。
    评估数据oss路径 存放测试数据文件的OSS路径,如果您使用读OSS数据组件作为上游节点,则该参数无需设置。 无需填写
    测试集标注结果文件路径 存放测试集标注结果文件的OSS路径。 oss://examplebucket-cn-shanghai.aliyuncs.com/data/model_compression/annotations/instances_train2017_sub.json
    说明 需要修改为您使用的OSS路径。
    类别列表文件oss路径 存放数据类别列表文件的OSS路径,如果您使用读OSS数据组件作为上游节点,则该参数无需设置。 oss://examplebucket-cn-shanghai.aliyuncs.com/data/model_compression/label.list
    说明 需要修改为您使用的OSS路径。
    YOLOX数据源格式 数据的处理格式,取值如下:
    • COCO格式
    • PAI标注格式
    COCO格式
    预训练模型oss路径 存放预训练模型的OSS路径,导入预训练模型的权重文件。非必填。 无需填写
    参数设置 YOLOX端检测模型类型 字段设置训练模型类型选择YOLOX_EDGE时,需要配置该参数。

    YOLOX端检测的模型类别,预置不同的模型结构。

    yolox-customized
    剪枝算法类型 模型剪枝组件需要配置该参数。

    剪枝算法类型,默认为AGP。

    AGP
    剪枝算法 模型剪枝组件需要配置该参数。

    剪枝算法,默认为taylorfo。

    taylorfo
    yolox端模型depth 字段设置训练模型类型选择YOLOX_EDGE时,需要配置该参数。

    yolox端模型depth,浮点型。范围为[0.01,1.0]。

    1.0
    yolox端模型width 字段设置训练模型类型选择YOLOX_EDGE时,需要配置该参数。

    yolox端模型width,浮点型。范围为[0.01,1.0]。

    1.0
    yolox端模型parameters size 图像检测训练组件训练模型类型选择YOLOX_EDGE时,才需要配置该参数。

    yolox端模型parameters size,限制最大模型参数,浮点型。-1表示不做限制。

    -1
    yolox端模型Gflops 图像检测训练组件训练模型类型选择YOLOX_EDGE时,才需要配置该参数。

    yolox端模型Gflops,限制最大模型Gflops,浮点型。-1表示不做限制。

    -1
    YOLOX端检测模型激活函数类型 字段设置训练模型类型选择YOLOX_EDGE时,需要配置该参数。
    YOLOX端检测模型激活函数类型,取值如下:
    • relu
    • lrelu
    • silu
    • hsilu
    relu
    测试置信度:[0.01,1.0] 字段设置训练模型类型选择YOLOX_EDGE时,需要配置该参数。

    测试置信度,浮点型。范围为[0.01,1.0]。

    0.01
    nms阈值:[0.01,1.0] 字段设置训练模型类型选择YOLOX_EDGE时,需要配置该参数。

    nms阈值,浮点型。范围为[0.01,1.0]。

    0.65
    检测类别数目 检测类别数目。 1
    图像尺度 用于yolox,图片缩放后的尺度,分别表示高和宽。 256 256
    初始学习率 模型训练的初始学习率,浮点型。 0.01
    训练batch_size 训练batch_size。 8
    评估batch_size 评估batch_size。 8
    总的训练迭代epoch轮数 总的训练迭代epoch轮数。 20
    warmup epochs 采用warmup学习策略时的迭代轮数。 5
    最后稳定lr的epochs 采用warmup学习策略lr稳定后继续训练的迭代轮数。 5
    保存checkpoint的频率 保存模型的迭代轮数。 5
    执行调优 读取训练数据线程数 读取训练数据的线程数。 4
    evtorch model 开启半精度 图像检测训练组件需要配置该参数。

    evtorch model是否开启半精度。

    不选中
    单机或分布式(MaxCompute/DLC) 组件运行的引擎。系统会根据您设置的训练模型类型,自动匹配。 分布式DLC
    worker个数 采用分布式训练时的机器数量。 1
    cpu机型选择 图像检测训练组件的训练模型类型选择YOLOV5、YOLOX、YOLOX_EDGE时,需要配置该参数。

    选择运行的CPU规格。

    32vCPU+128GB Mem-ecs.g6.8xlarge
    gpu机型选择 选择运行的GPU规格。 28vCPU+112GB Mem+1xp100-ecs.gn5-c28g1.7xlarge
  4. 单击画布上方的运行
    运行
  5. 实验运行成功后,您可以在训练所用OSS目录配置的OSS路径,下载压缩后的pt模型文件。
    后续您可以使用下载的模型文件部署模型服务。

步骤三:部署模型服务

实验运行成功后,您可以在训练所用OSS目录配置的OSS路径下载prune_model.pt和quantize_model.pt的TorchScript模型文件,并将模型文件部署到CPU机器上,服务于下游推荐或其他应用场景。