二次开发简介

如图,PaddleX RESTful主要由数据集(dataset),项目(project),任务(task),模型(model)组成。上述模块数据保存在指定的工作空间(workspace)内,相应的结构化信息通过protobuf保存,workspace的protobuf消息定义

../../_images/framework.png

说明:后续RESTful API通过[HTTP request method] url来表示

流程介绍

对于通过RESTtful接口来进行二次开发,主要的流程如下:

  • 1):指定工作空间启动restful服务
  • 2):创建、导入并切分数据到数据集
  • 3):创建项目,绑定数据集到该项目,并根据项目类型获取训练的默认参数
  • 4):根据默认参数,在该项目下创建训练任务,调整参数(非必要),开始训练模型
  • 5):对训练好的模型进行裁剪、评估、测试(非必要)
  • 6):保存或者发布训练好的模型

工作空间

通过如下命令启动PaddleX的RESTful服务,同时会初始化工作空间,初始化工作空间主要做载入工作空间内已有的数据集、项目等模块的信息。初始化工作空间后就可以正常调用其他的RESTful API,所有新建的数据集、项目等数据都会保存在此工作空间目录下面

 paddlex_restful --start_restful --port [端口号] --workspace_dir [工作空间目录]

数据集

可以通过调用”[post] /dataset”接口创建数据集、创建数据集后会在工作空间内创建相应的文件夹,按照workspace protobuf定义的变量保存数据集信息。创建数据集后可以通过”[put] \dataset”接口导入数据集,目前仅支持从路径导入并且数据集需储存在后端服务器。目前支持图像分类、目标检测、语义分割与实例分割四种数据集,具体格式如下

图像分类

如图所示

  • 文件夹名为需要分类的类名,输入限定为英文字符,不可包含:空格、中文或特殊字符;
  • 图片格式支持png,jpg,jpeg,bmp格式

../../_images/classify_help.jpg

目标检测

如图所示

  • 图片文件名需要为”JPEGImages”,标签文件夹命名需要为”Annotations”
  • 图片格式支持png,jpg,jpeg,bmp格式;标签文件格式为.xml

../../_images/detect_help.jpg

语义分割

如图所示

  • 图片文件名需要为”JPEGImages”,标签文件夹命名需要为”Annotations”
  • 图片格式支持png,jpg,jpeg,bmp格式
  • 标注需要与图片像素严格保持一一对应,格式只可为png。每个像素值需标注为[0,255]区间从0开始依序递增整数ID,除255外,标注ID值的增加不能跳跃。其中255表示模型中需忽略的像素,0为背景类标注。
  • (可选)可以提供一份命名为”labels.txt”的包含所有标注名的清单

../../_images/seg_help.jpg

实例分割

如图所示

  • 图片文件名需要为”JPEGImages”,标签文件名需要为”annotations.json”
  • 图片格式支持png,jpg,jpeg,bmp格式;标签文件格式为.json

../../_images/ins_seg_help.jpg

项目

可以通过调用”[post] /project”接口创建项目,目前支持的项目类型有分类(classification)、检测(detection)、语义分割(segmentation)、实例分割(instance_segmentation)。对于新建的项目首先需要绑定项目类型对应的数据集,通过”[post] \workspace”可以实现;然后便可以在项目下创建任务,进行一系列任务相关的操作。

任务

在创建项目后,首先需要通过”[get] /project/task/params”获得默认的训练参数,可以通过调用”[post] /project/task”接口在项目中创建任务,创建好任务后可以通过API实现以下功能:

  • 训练(train):进行模型的训练
  • 裁剪(prune):对训练好的模型模型进行裁剪
  • 评估(eval):对训练好的模型进行评估
  • 预测(predict):用训练好的模型进行预测,目前仅支持单张图片的预测

模型

目前PaddleX RESTful API支持将训练评估后的模型保存为预训练模型、导出inference模型、导出Padlle-Lite模型、同时能支持模型的量化,可以通过调用”[post] /model接口来完成这些功能