AI开发平台MODELARTS-创建Workflow数据集标注节点:Workflow数据集标注节点代码样例

时间:2024-08-16 20:38:59

Workflow数据集标注节点代码样例

主要包含三种场景的用例:

  • 场景一:基于用户指定的数据集创建标注任务,并等待用户标注完成。

    使用场景:

    • 用户只创建了一个未标注完成的数据集,需要在工作流运行时对数据进行人工标注。
    • 可以放在数据集导入节点之后,对导入的新数据进行人工标注。
    数据准备:提前在ModelArts管理控制台创建一个数据集。
    from modelarts import workflow as wf
    # 通过LabelingStep给输入的数据集对象创建新的标注任务,并等待用户标注完成
    
    # 定义输入的数据集对象
    dataset = wf.data.DatasetPlaceholder(name="input_dataset")
    
    # 定义标注任务的名称参数
    task_name = wf.Placeholder(name="placeholder_name", placeholder_type=wf.PlaceholderType.STR)
    
    labeling = wf.steps.LabelingStep(
        name="labeling", # 数据集标注节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复
        title="数据集标注", # 标题信息,不填默认使用name值
        properties=wf.steps.LabelTaskProperties(
            task_type=wf.data.LabelTaskTypeEnum.IMAGE_CLASSIFICATION,   # 标注任务的类型,以图像分类为例
            task_name=task_name   # 该名称对应的标注任务如果不存在则创建,如果存在则直接使用该任务
        ),
        inputs=wf.steps.LabelingInput(name="input_name", data=dataset), # LabelingStep的输入,数据集对象在运行时配置;data字段也可使用wf.data.Dataset(dataset_name="fake_dataset_name")表示
        outputs=wf.steps.LabelingOutput(name="output_name"), # LabelingStep的输出
    )
    
    workflow = wf.Workflow(
        name="labeling-step-demo",
        desc="this is a demo workflow",
        steps=[labeling]
    )
  • 场景二:基于指定的标注任务进行标注。

    使用场景:

    • 用户基于数据集自主创建了一个标注任务,需要在工作流运行时对数据进行人工标注。
    • 可以放在数据集导入节点之后,对导入的新数据进行人工标注。
    数据准备:提前在ModelArts管理控制台,基于使用的数据集创建一个标注任务。
    from modelarts import workflow as wf
    # 用户输入标注任务,等待用户标注完成
    
    # 定义数据集的标注任务对象
    label_task = wf.data.LabelTaskPlaceholder(name="label_task_placeholder_name")
    
    labeling = wf.steps.LabelingStep(
        name="labeling", # 数据集标注节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复
        title="数据集标注", # 标题信息,不填默认使用name值
        inputs=wf.steps.LabelingInput(name="input_name", data=label_task), # LabelingStep的输入,标注任务对象在运行时配置;data字段也可使用wf.data.LabelTask(dataset_name="dataset_name", task_name="label_task_name")来表示
        outputs=wf.steps.LabelingOutput(name="output_name"), # LabelingStep的输出
    )
    
    workflow = wf.Workflow(
        name="labeling-step-demo",
        desc="this is a demo workflow",
        steps=[labeling]
    )
  • 场景三:基于数据集创建节点的输出创建标注任务。

    使用场景:数据集创建节点的输出作为数据集数据标注节点的输入。

    from modelarts import workflow as wf
    
    # 定义数据集输出路径参数
    dataset_output_path = wf.Placeholder(name="dataset_output_path", placeholder_type=wf.PlaceholderType.STR, placeholder_format="obs")
    
    # 定义数据集名称参数
    dataset_name = wf.Placeholder(name="dataset_name", placeholder_type=wf.PlaceholderType.STR)
    
    create_dataset = wf.steps.CreateDatasetStep(
        name="create_dataset",# 数据集创建节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复
        title="数据集创建", # 标题信息,不填默认使用name值
        inputs=wf.steps.CreateDatasetInput(name="input_name", data=wf.data.OBSPlaceholder(name="obs_placeholder_name", object_type="directory")),# CreateDatasetStep的输入,数据在运行时进行配置;data字段也可使用wf.data.OBSPath(obs_path="fake_obs_path")对象表示
        outputs=wf.steps.CreateDatasetOutput(name="create_dataset_output", config=wf.data.OBSOutputConfig(obs_path=dataset_output_path)),# CreateDatasetStep的输出
        properties=wf.steps.DatasetProperties(
            dataset_name=dataset_name, # 该名称对应的数据集如果不存在,则创建新的数据集;如果已存在,则直接使用该名称对应的数据集
            data_type=wf.data.DataTypeEnum.IMAGE, # 数据集对应的数据类型, 示例为图像
        )
    )
    
    # 定义标注任务的名称参数
    task_name = wf.Placeholder(name="placeholder_name", placeholder_type=wf.PlaceholderType.STR)
    
    labeling = wf.steps.LabelingStep(
        name="labeling", # 数据集标注节点的名称,命名规范(只能包含英文字母、数字、下划线(_)、中划线(-),并且只能以英文字母开头,长度限制为64字符),一个Workflow里的两个step名称不能重复
        title="数据集标注", # 标题信息,不填默认使用name值
        properties=wf.steps.LabelTaskProperties(
            task_type=wf.data.LabelTaskTypeEnum.IMAGE_CLASSIFICATION,   # 标注任务的类型,以图像分类为例
            task_name=task_name   # 该名称对应的标注任务如果不存在则创建,如果存在则直接使用该任务
        ),
        inputs=wf.steps.LabelingInput(name="input_name", data=create_dataset.outputs["create_dataset_output"].as_input()), # LabelingStep的输入,data数据来源为数据集创建节点的输出
        outputs=wf.steps.LabelingOutput(name="output_name"), # LabelingStep的输出
        depend_steps=create_dataset # 依赖的数据集创建节点对象
    )
    # create_dataset是 wf.steps.CreateDatasetStep的一个实例,create_dataset_output是wf.steps.CreateDatasetOutput的name字段值
    
    workflow = wf.Workflow(
        name="labeling-step-demo",
        desc="this is a demo workflow",
        steps=[create_dataset, labeling]
    )
support.huaweicloud.com/usermanual-standard-modelarts/modelarts_workflow_0368.html