资讯 社区 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

开发者模式

开发者模式介绍

1. 开发者模式

PaddleX开发者模式,如下图所示界面:

image.png

开发者模式主体是一个VSCode集成开发环境,搭载了飞桨统一模型开发 API——UAPI,可以使用统一的 API 接口进行开发,仅需 5 行命令即可完成模型训练、推理、评估导出以及多模型组合预测。同时,在开发者模式中可以编辑工具箱模式的源码,以实现工具箱模式 DIY。

2. 基于UAPI的模型开发

2.1 开发者模式文件结构

这里主要介绍在开发者模式下可以查看和编辑的文件及其作用,关于VSCode本身的使用,请参考官方文档

下面详细说明「支持模型训练」的模型产线workspace中的文件。对于「不支持模型训练」的模型产线,文件内容相对简单,这里不再赘述。

文件夹/文件 内容及作用
base 控制工具箱模式的底层通用核心代码集合,如果对工具箱DIY有较深层次的需求,可以阅读这部分代码并自行改造。建议改造之前做好备份哦~
config 配置文件目录,包括控制工具箱模式的ui_config.yaml、记录模型训练全量配置项的model_config.yaml、示例数据集相关的example_data.yaml
data 数据目录。get_example_data.sh/get_example_data.bat脚本将下载示例数据集至data/example_data。特别注意❗:在AI Studio云端,本目录下的内容不会持久化存储,重新启动环境后将丢失新增的文件!如果有数据持久化需求,建议手动将数据集复制到外层目录!
impl 控制工具箱模式的高层具体实现代码集合,如果对工具箱DIY有需求,可以阅读这部分代码并自行改造。建议改造之前做好备份哦~
tmp 存放临时文件,一般不必关注
work AI Studio云端特有的目录,可以选择将工作文件放在此处统一管理
run_paddlex.py 使用UAPI执行数据准备、模型训练、模型评估等环节。这个脚本是工具箱模式的后台执行脚本,在开发者模式下也可以通过传入--exec_train等参数直接运行。不建议对该脚本进行修改,否则可能导致工具箱模式出错。
run_demo.py 使用UAPI执行数据校验、模型训练、模型评估等环节。与工具箱模式无关,仅需指定数据集位置即可全流程运行。
main.webui.gradio.py 工具箱模式的gradio服务启动入口。通过将dataset、train、evaluate、deploy等环节解耦,灵活地搭建前端gradio UI界面。您在必要时可以在开发者模式下修改此文件及其所引用的base、impl目录中的代码文件,保存后切换到工具箱模式,点击右上角的重新加载,即可将修改生效。
logger.webui.gradio.py 实现工具箱模式下底部的日志输出模块的gradio代码,请不要随意修改此文件,以免影响工具箱模式的正常运行❗
background_task.ipynb 在AI Studio云端,提交后台任务时所用的脚本,成功提交后台训练任务后,可关闭PaddleX项目环境,告别值守项目监控训练进度的烦恼。
main.ipynb 本PaddleX产线的具体介绍内容,也是您在PaddleX产线详情页所看到的介绍内容。

2.2 基于预置脚本的模型开发

开发者模式下,对于「支持模型训练」的模型产线,PaddleX提供了两个基于UAPI的预置脚本:run_paddlex.pyrun_demo.py

2.2.1 基于run_paddlex.py开发

run_paddlex.py是工具箱模式的底层核心脚本,接受--exec_dataset_check--exec_train--exec_evaluate等参数,分别执行数据校验、模型训练、模型评估等对应的任务。

使用run_paddlex.py脚本进行开发时,参数调整需要同时关注config/ui_config.yamlconfig/model_config.yaml两个配置文件,其中配置项优先级ui_config.yaml > model_config.yaml,即ui_config.yaml中设置的参数会覆盖model_config.yaml中设置的同名参数,这一点需要特别注意。

另外,如果您想修改run_paddlex.py,请先复制备份,再基于备份文件修改,否则可能导致工具箱模式出错。

2.2.2 基于run_demo.py开发(推荐)

在开发者模式下,推荐您使用run_demo.py脚本进行模型开发,此脚本与工具箱模式解耦,直接使用便捷的UAPI完成模型开发全流程,更加轻量。下面详细介绍run_demo.py脚本的用法。

首先,调出开发者模式下的终端,如下图所示。

image.png

然后,在终端执行python run_demo.py,即可执行针对示例数据集的数据校验、模型训练、模型评估、模型部署等操作,您可根据实际需求注释掉不相关的执行步骤。关于UAPI的使用细节,请点击这里

如果您需要使用自己的数据集,修改run_demo.py中的数据集路径即可。

image-11.png

请注意:在AI Studio云端,如果您需要长时间训练模型,强烈建议您使用后台任务功能。如果不使用后台任务,请不要关闭PaddleX开发环境页面,且保证机器不进入休眠状态,否则开发环境将在10分钟后自动关闭,训练过程将终止。

2.3 手动修改高级参数

如果您需要修改一些高级参数,而UAPI目前没有给出统一的参数更新接口,比如数据增强相关的设置,您可以按照如下方式进行修改。

2.3.1 针对工具箱模式

如果想修改UAPI未暴露的高级参数,使之对工具箱模式生效,需要您切换到开发者模式,打开config/model_config.yaml文件,找到对应的高级参数字段,修改完成并保存文件。

image.png

然后切换回工具箱模式,即可自动生效(无需重新加载)。这种修改方式同样适用于开发者模式下基于run_paddlex.py脚本的模型开发。

2.3.2 针对开发者模式

如果您在开发者模式下使用run_demo.py脚本进行开发,同时需要修改UAPI未暴露的高级参数,您可以参考下面的方法。

首先,修改run_demo.py中的UAPI config对象初始化代码,使之绑定一个具体的模型配置yaml文件。

image.png

然后,就可以手动修改绑定的yaml文件中的各种参数了,修改完成后保存yaml文件并重新执行run_demo.py脚本,即可使设置生效。

3.工具箱模式UI代码理解与DIY

Gradio 是一个基于 Python 的开源框架,可以快速构建响应式的机器学习 Web 应用程序。PaddleX工具箱模式的主体功能便是基于gradio实现的。

开发者模式中包含实现工具箱模式的所有gradio相关代码,方便开发者根据自己需要(譬如暴露必要的参数、隐藏不需要的参数等),修改代码,创建新的工具箱模式的UI界面。 想了解gradio的相关能力,可前往https://gradio.app/quickstart/ 进行初步学习。

3.1 工具箱模式UI界面代码逻辑

PaddleX工具箱模式的运行逻辑如下:

image.png

1.启动main.webui.gradio.py脚本,该脚本会渲染出前端UI主界面,共有数据准备、模型训练、模型评估、模型压缩(暂未上线)和模型部署五个主要功能模块,每个功能模块由不同的UI组件构成;

2.每个功能模块的UI组件主要支持显示和交互功能,其中交互功能包括:

  • 调整参数 调整参数交互操作主要通过输入框组件(gr.Textbox)完成:用户根据需求在功能模块内完成参数设置后,对应UI组件的回调函数会将参数更新到配置文件config/ui_config.yaml中。
  • 启动功能 启动各模块对应功能主要通过按钮组件(gr.Button)完成:用户设置完参数后,点击启动按钮,该按钮的回调函数会启动子进程运行run_paddlex.py脚本,run_paddlex.py脚本中调用RunPaddleX类对应接口。RunPaddleX类主要完成:1.解析配置文件,更新参数;2.调用UAPI对应接口。

3.2 工具箱模式UI界面DIY示例

下面以图像分割模型PP-LiteSeg-Tiny为例,说明如何在工具箱模式UI界面增加或删除功能。

示例1:UI界面增加功能

假设我们希望在工具箱模式的模型训练环节,能够调整权重衰减系数weight_decay的值。 整体包括下面几个步骤:

  1. 修改config/ui_config.yaml文件,添加对应的key-value对
  2. 修改impl/train_ui.py文件,新增UI组件和事件函数
  3. 修改run_paddlex.py文件,使配置生效
第一步:修改yaml文件
  • 修改config/ui_config.yaml,添加对应的key-value对。
train:
  advance:
    weight_decay: '3e-05'

image.png

第二步:新增UI组件和事件函数

打开impl/train_ui.py,主要是一个类的实现代码——SegTrainUI,其继承自base/train_ui中实现的类TrainUI,主要负责模型训练环节的UI组件构建。这个类有三个主要的函数,其作用分别如下:

  • ui_framework:定义UI组件,weight_decay的组件应在这里添加。
  • register_ui_events:注册事件函数,weight_decay组件的事件函数要在这里注册。
  • get_ui_mapping_dict:注册UI组件和config/ui_config.yaml中相关字段的映射表,用于在刷新页面时保持正确的组件更新。

那么,我们首先需要在ui_framework中添加weight_decay组件,如下所示:

def ui_framework(self):
    with gr.Tab('高级设置', id=1):
        with gr.Row():
            self.weight_decay = gr.Number(
                label="权重衰减系数",
                info="值越大,模型泛化性越好,越不易陷入过拟合,但同时也越难拟合训练数据",
                value=self.ui_config["train"]["advance"]["weight_decay"],
                interactive=True)

image.png

接下来,需要在register_ui_events中注册事件函数,如下所示:

def register_ui_events(self):
    self.weight_decay.blur(
        self.update_ui_config("train.advance.weight_decay"),
        inputs=self.weight_decay)

blur函数表示当鼠标离开组件编辑区域(失焦)时,触发相应的事件。

image.png

然后,在get_ui_mapping_dict中注册映射关系,如下所示:

def get_ui_mapping_dict(self):
    ...
    self.weight_decay: 
         self.ui_config["train"]["advance"]["weight_decay"],
    ...

image.png

第三步:修改run_paddlex.py文件

上面的步骤实现了新增配置项的UI组件和实时保存到yaml文件的逻辑,但是要想对应的配置在运行时生效,还需要修改run_paddlex.py文件,这里通过覆写reset_uapi_config()来实现。

def reset_uapi_config(self, config):
    """Update UAPI config"""
    if self.ui_config['train']['base'].get('num_classes'):
        config.update_num_classes(self.ui_config['train']['base'][
            'num_classes'])
    if self.ui_config['train'].get('crop_size'):
        config.update_train_crop_size(self.ui_config['train']['crop_size'])
    if self.ui_config['train']['advance'].get('weight_decay'):
        config.update({'train':{'advance':{'weight_decay': float(self.ui_config['train']['advance']['weight_decay'])}}})
    
    config.update_dataset(self.ui_config['dataset']['user_set_path'],
                          self.ui_config['dataset']['default_type'])
    return config

image.png

到此为止,我们就完成了UI界面增加功能的全部步骤,保存所有修改后的文件,切换到工具箱模式,点击右上角的「重新加载」,即可完成验证。

image.png

示例2:UI界面删除功能

目前提供的工具箱模式UI模板,主要在impl中各个环节对应的*_ui.py实现。如果要删除某个组件,在对应的代码文件中,找到相应组件,将其visible属性设置为false即可。例如,要将模型训练环节中的【高级配置-> 混合精度训练模式】去掉,可以在impl/train_ui.py中找到相关的组件代码,将其visible属性修改即可,如下所示。

def ui_framework(self):
    self.amp = gr.Radio(
        label="混合精度训练模式(AMP)",
        choices=["O1", "O2", "不开启"],
        value=amp_value,
        interactive=True,
        visible=False)

image.png

注意,此时将使用该组件的默认值执行后续操作,如需修改请到开发者模式修改config/ui_config.yaml中的对应字段。

上一篇
工具箱模式
下一篇
数据集规范