图片分类

Model Gallery中,您可以选择直接部署开源的预训练图片分类模型,或针对定制化场景,使用自己的数据集对预训练模型进行微调训练,并使用微调训练模型将图片分类成定制化的类别。本文为您介绍如何使用Model Gallery执行图片分类任务。

前提条件

已创建OSS Bucket存储空间,具体操作请参见控制台创建存储空间

一、进入模型详情页面

  1. 进入快速开始页面。

    1. 登录PAI控制台

    2. 在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。

    3. 在左侧导航栏单击快速开始,进入快速开始页面。

  2. Model Gallery首页,单击计算机视觉区域下的图片分类,然后单击ViT图像分类-通用模型卡片,进入模型详情页面。

    image

    在模型列表页面,您可以看到多个来自不同开源社区的主流模型。您也可以自由选择其他适合您当前业务需求的模型。

    • 一般来说,参数量越大的模型效果会更好,但相应的微调训练所需要的数据量和模型在线服务运行时产生的费用也会更多。

    • 大多数模型会标注所使用的预训练数据集。预训练数据集和实际使用场景越接近,直接部署和微调训练效果都会越好。您可以在选择模型后的模型详情页面获得更多关于该模型预训练数据集的信息。

二、直接部署模型

Model Gallery提供的cv_vit-base_image-classification_ImageNet-labels模型来源于ModelScope提供的ViT图像分类-通用模型。它是基于Transformer ViT Base架构的图片分类模型,在ImageNet-1K数据集上完成图片分类训练,可以直接用于ImageNet-1K标签覆盖到的图片分类任务。您可以通过Model Gallery将此模型直接部署到EAS,创建一个模型服务,用于图片分类的推理任务。具体操作步骤如下:

  1. 部署服务。

    1. 在模型详情页面,单击模型部署

    2. 确认模型服务信息资源部署信息

      Model Gallery已经根据每个模型的特点预置了部署相关的计算资源与服务名称,本案例使用默认配置。您也可以根据业务需要对部署相关的配置进行更改。如何配置参数,详情请参见部署模型和调试模型

    3. 单击部署,并在计费提醒对话框中,单击确定

      页面自动跳转到服务详情页面,在基本信息区域查看模型服务部署状态。当状态变为运行中时,表明模型服务已部署成功。

  2. 调用模型服务。

    模型服务部署成功后,您即可通过HTTP API调用模型服务,发送预测请求。模型服务接收通过Base64编码的图片,并以JSON形式返回预测的结果。具体操作步骤如下。

    1. 服务详情页面的资源信息区域,单击查看调用信息

      image

    2. 调用信息对话框的公网地址调用页签中,查看公网调用的访问地址Token,并保存到本地。

    3. 使用Python Requests库调用模型服务,示例代码如下。

      import requests
      import base64
      
      image_path = "<PathToLocalImage>"
      url = "<PredictionServiceURL>"
      token = "<PredictionServiceAccessToken>"
      
      
      def encode_file_to_base64(f):
          with open(f, "rb") as file:
              encoded_string = base64.b64encode(file.read())
              base64_str = str(encoded_string, "utf-8")
              return base64_str
      
      base64_string = encode_file_to_base64(image_path)
      request_body = {
          "image": base64_string
      }
      
      headers = {"Authorization": token}
      resp = requests.post(url=url, headers=headers, json=request_body)
      
      print(resp.content.decode())
      print("status code:", resp.status_code)
      

      其中:tokenurl替换为上述步骤中查询到的Token访问地址image_path替换为本地图片路径,图片格式为.png或.jpg。

      调用成功,模型服务将返回最有可能的5个图片分类和每个分类的得分。结果示例如下。

      {
        "scores": [
          0.4078965485095978,
          0.24673610925674438,
          0.1930493414402008,
          0.0026617543771862984,
          0.0009246605914086103
        ],
        "labels": [
          "tiger cat",
          "tabby, tabby cat",
          "Egyptian cat",
          "lynx, catamount",
          "tiger, Panthera tigris"
        ]
      }

三、微调训练模型

cv_vit-base_image-classification_ImageNet-labels模型适用于ImageNet-1K覆盖标签的图片分类任务。当您需要分类的图片领域不在ImageNet-1K标签中时,可以通过提供少量相关的图片和标签,通过微调训练的方式获得对应领域的图片分类模型。您可以按照以下操作步骤完成模型的微调训练以及产出模型的部署。

  1. 准备数据。

    1. 按照以下目录结构准备数据集:

      模型支持使用OSS上的图片数据进行训练。您需要通过目录结构组织数据集,每一个目录名是一个类别,相应类别的图片都存放在类别目录的一级子目录下。例如训练数据集的输入为oss://{YourOssBucket}.{OssEndpoint}/{PathToTrainData}/,则该目录下的数据结构为:

      ├── category-1
      │   ├── image1.jpeg
      │   └── image2.jpeg
      ├── category-2
      │   ├── image3.jpeg
      │   └── image4.jpeg
      |...
      |...
      └── category-n
          ├── imagexxx.jpeg
          └── imageyyy.jpeg

      为了获得性能更好的模型,除了提供训练数据集之外,也推荐您按照以上目录结构准备一份验证数据集,用于评估模型的性能以及训练参数的优化调整。

    2. 将数据集按照上述目录结构上传到OSS存储空间。如何上传数据到OSS存储空间,请参见控制台上传文件

  2. 提交训练作业。

    1. 准备好使用的数据集后,您可以在模型详情页面单击训练,配置训练数据集验证数据集输出路径

      Model Gallery已经预先根据模型特点预置了计算资源超参数等参数,您可以使用默认参数,也可以根据业务需要进行修改。如何配置参数,请参见训练模型

      说明

      cv_vit-base_image-classification_ImageNet-labels的模型默认使用MiniImageNet-100数据集进行微调训练,方便您进行试用体验。

    2. 单击训练

      image

      页面将自动跳转至任务详情页面。您可以查看训练任务的执行进度、任务日志以及模型的评估信息。当训练任务成功运行后,训练作业生成的模型将保存在上述步骤配置的输出路径中。

      image

  3. 部署微调模型。

    训练好的模型会自动注册到AI资产-模型管理中,您可以查看或部署对应的模型,详情请参见注册及管理模型