文档首页/ AI开发平台ModelArts/ API参考/ 应用示例/ 创建图像分类数据集并进行标注任务
更新时间:2024-05-30 GMT+08:00
分享

创建图像分类数据集并进行标注任务

本节通过调用一系列API,以创建图像分类数据集并进行标注任务为例介绍ModelArts API的使用流程。

概述

创建数据集并进行标注的流程如下:

  1. 调用认证鉴权接口获取用户Token,在后续的请求中需要将Token放到请求消息头中作为认证。
  2. 调用创建数据集接口创建一个图像分类类型的数据集。
  3. 调用查询数据集详情接口根据数据集ID查询数据集的详情。
  4. 调用查询样本列表接口根据数据集ID获取数据集的样本详情。
  5. 调用批量更新样本标签接口根据数据集ID和样本ID给样本添加标签进行人工标注。
  6. 调用查询数据集的统计信息接口查看数据集的标注统计信息。
  7. 当数据集使用完成或不再使用时,调用删除数据集接口删除数据集。

前提条件

  • 已经准备好数据源,例如存放在OBS的“/test-obs/classify/input/cat-dog/”目录下。
  • 已经准备好数据集的输出位置,用于存放输出的标注信息等文件,例如“/test-obs/classify/output/”

操作步骤

  1. 调用认证鉴权接口获取用户的Token。
    1. 请求消息体:

      URI格式:POST https://{iam_endpoint}/v3/auth/tokens

      请求消息头:Content-Type →application/json

      请求Body:
      {
        "auth": {
          "identity": {
            "methods": ["password"],
            "password": {
              "user": {
                "name": "user_name", 
                "password": "user_password",
                "domain": {
                  "name": "domain_name"  
                }
              }
            }
          },
          "scope": {
            "project": {
              "name": "cn-north-1"  
            }
          }
        }
      }
      其中,加粗的斜体字段需要根据实际值填写:
      • iam_endpoint为IAM的终端节点。
      • user_name为IAM用户名。
      • user_password为用户登录密码。
      • domain_name为用户所属的账号名。
      • cn-north-1为项目名,代表服务的部署区域。
    2. 返回状态码“201 Created”,在响应Header中获取“X-Subject-Token”的值即为Token,如下所示:
      x-subject-token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX...
  2. 调用创建数据集接口创建一个图像分类类型的数据集。
    1. 请求消息体:

      URI格式:POST https://{ma_endpoint}/v2/{project_id}/datasets

      请求消息头:
      • X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX...
      • Content-Type →application/json

      请求body:

      {
        "workspace_id" : "0",
        "dataset_name" : "dataset-f9e8",
        "dataset_type" : 0,
        "data_sources" : [ {
          "data_type" : 0,
          "data_path" : "/test-obs/classify/input/cat-dog/"
        } ],
        "description" : "",
        "work_path" : "/test-obs/classify/output/",
        "work_path_type" : 0,
        "labels" : [ {
          "name" : "Cat",
          "type" : 0,
          "property" : {
            "@modelarts:color" : "#3399ff"
          }
        }, {
          "name" : "Dog",
          "type" : 0,
          "property" : {
            "@modelarts:color" : "#3399ff"
          }
        } ]
      }

      其中,加粗的斜体字段需要根据实际值填写:

      • ma_endpoint为ModelArts的终端节点。
      • project_id为用户的项目ID。
      • X-auth-Token的值为获取到的Token值。
      • “dataset_name”为创建的数据集名称。
      • “dataset_type”“0”表示数据集类型为图像分类。
      • “data_path”为数据源所在的存储路径。
      • “work_path”为数据集输出位置。
      • “labels”为数据集的标签列表,填写标签信息。
    2. 返回状态码为“201 Created”,响应Body如下:
      {
          "dataset_id": "2MCIopOFu0bOmSxFkZ4"
      }

      “dataset_id”为新建的数据集ID,记录该值用于后续步骤。

  3. 调用查询数据集详情接口根据数据集ID查询数据集的详情。
    1. 请求消息体:

      URI格式:GET https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}

      请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX...

      其中,加粗的斜体字段需要根据实际值填写,dataset_id为上一步记录的数据集ID。

    2. 返回状态码为“200 OK”,响应Body如下所示:
      {
        "dataset_id" : "DINKm5SUIDhhGb1eWm3",
        "dataset_name" : "dataset-f9e8",
        "dataset_type" : 0,
        "data_format" : "Default",
        "next_version_num" : 4,
        "status" : 1,
        "data_sources" : [ {
          "data_type" : 0,
          "data_path" : "/test-obs/classify/input/cat-dog/"
        } ],
        "create_time" : 1605690595404,
        "update_time" : 1605690595404,
        "description" : "",
        "current_version_id" : "54IXbeJhfttGpL46lbv",
        "current_version_name" : "V003",
        "total_sample_count" : 10,
        "annotated_sample_count" : 10,
        "unconfirmed_sample_count" : 0,
        "work_path" : "/test-obs/classify/output/",
        "inner_work_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/",
        "inner_annotation_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/annotation/",
        "inner_data_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/data/",
        "inner_log_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/logs/",
        "inner_temp_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/temp/",
        "inner_task_path" : "/test-obs/classify/output/dataset-f9e8-DINKm5SUIDhhGb1eWm3/task/",
        "work_path_type" : 0,
        "workspace_id" : "0",
        "enterprise_project_id" : "0",
        "workforce_task_count" : 0,
        "feature_supports" : [ "0" ],
        "managed" : false,
        "import_data" : false,
        "ai_project" : "default-ai-project",
        "label_task_count" : 1,
        "dataset_format" : 0,
        "dataset_version_count" : 3,
        "dataset_version" : "v1",
        "content_labeling" : true,
        "labels" : [ {
          "name" : "Cat",
          "type" : 0,
          "property" : {
            "@modelarts:color" : "#3399ff"
          }
        }, {
          "name" : "Dog",
          "type" : 0,
          "property" : {
            "@modelarts:color" : "#3399ff"
          }
        } ]
      }

      根据响应可以了解数据集详情,其中“status”“1”表示数据集创建成功且状态正常。

  4. 调用查询样本列表接口根据数据集ID获取数据集的样本详情。
    1. 请求消息体:

      URI格式:GET https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}/data-annotations/samples

      请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX...

      其中,加粗的斜体字段需要根据实际值填写。

    2. 返回状态码为“200 OK”,响应Body如下所示:
      {
        "sample_count" : 2,
        "samples" : [ 
              {
                  "sample_id": "012f99f3cf405860130b6ed2350c2228",
                  "sample_type": 0,
                  "labels": [],
                  "source": "https://test-obs.obs.{ma_endpoint}.com:443/classify/input/cat-dog/36502.jpg......",
                  "preview": "https://test-obs.obs.{ma_endpoint}.com:443/classify/input/cat-dog/36502.jpg......",
                  "metadata": {
                      "@modelarts:source_image_info": "https://test-obs.obs.{ma_endpoint}.com:443/classify/input/cat-dog/36502.jpg......",
                      "@modelarts:import_origin": 0
                  },
                  "sample_time": 1623914750831,
                  "sample_status": "UN_ANNOTATION"
              },
              {
                  "sample_id": "0192f3acfb000666033a0f85c21577c7",
                  "sample_type": 0,
                  "labels": [],
                  "source": "https://test-obs.obs.xxx.com:443/classify/input/cat-dog/36139.jpg......",
                  "preview": "https://test-obs.obs.xxx.com:443/classify/input/cat-dog/36139.jpg......",
                  "metadata": {
                      "@modelarts:source_image_info": "https://test-obs.obs.xxx.com:443/classify/input/cat-dog/36139.jpg......",
                      "@modelarts:import_origin": 0
                  },
                  "sample_time": 1623914751076,
                  "sample_status": "UN_ANNOTATION"
              }
          ]
      }

      根据响应可以了解数据集的样本数量,以及每个样本的详细信息,其中“sample_count”“2”表示该数据集共有2个样本,记录“sample_id”(样本ID)用于后续人工标注。

  5. 调用批量更新样本标签接口根据数据集ID和样本ID给样本添加标签进行人工标注。
    1. 请求消息体:

      URI格式:PUT https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}/data-annotations/samples

      请求消息头:

      • X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX...
      • Content-Type →application/json
      请求body:
      {
        "samples" : [ {
          "sample_id" : "012f99f3cf405860130b6ed2350c2228",
          "labels" : [ {
            "name" : "Cat"
          } ]
        }, {
          "sample_id" : "0192f3acfb000666033a0f85c21577c7",
          "labels" : [ {
            "name" : "Dog"
          } ]
        } ]
      }

      其中,加粗的字段需要根据实际值填写:

      • “sample_id”为要标注的样本ID,为上一步记录的值。
      • “labels”为样本需要标注的标签。
    2. 返回状态码为“200 OK”表示标注成功,响应Body如下所示:
      {
        "success" : true
      }
  6. 调用查询数据集的统计信息接口查看数据集的标注统计信息。
    1. 消息请求体:

      URI格式:GET https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}/data-annotations/stats

      请求消息头:X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX...

      其中,加粗的斜体字段需要根据实际值填写。

    2. 返回状态码为“200 OK”,响应Body如下所示:
      {
          "label_stats": [
              {
                  "name": "Cat",
                  "type": 0,
                  "property": {
                      "@modelarts:color": "#3399ff"
                  },
                  "count": 5,
                  "sample_count": 2
              },
              {
                  "name": "Dog",
                  "type": 0,
                  "property": {
                      "@modelarts:color": "",
                      "@modelarts:shortcut": ""
                  },
                  "count": 4,
                  "sample_count": 3
              }
          ],
          "sample_stats": {
              "un_annotation": 10,
              "all": 15,
              "total": 15,
              "deleted": 0,
              "manual_annotation": 5,
              "auto_annotation": 0,
              "lefted": 15
          },
          "key_sample_stats": {
              "total": 15,
              "non_key_sample": 15,
              "key_sample": 0
          },
          "deletion_stats": {},
          "metadata_stats": {},
          "data_spliting_enable": true
      }

      根据响应可以了解数据集的标签统计信息、样本状态统计信息等。

  7. 当数据集使用完成或不再使用时,调用删除数据集接口删除数据集。
    1. 请求消息体:

      URI格式:DELETE https://{ma_endpoint}/v2/{project_id}/datasets/{dataset_id}

      请求消息头:

      • X-auth-Token →MIIZmgYJKoZIhvcNAQcCoIIZizCCGYcCAQExDTALBglghkgBZQMEAgEwgXXXXXX...
      • Content-Type →application/json

      其中,加粗的斜体字段需要根据实际值填写。

    2. 返回状态码“204 No Content”表示数据集删除成功。

相关文档