すべてのプロダクト
Search
ドキュメントセンター

Platform For AI:画像の分類

最終更新日:Nov 19, 2024

モデルギャラリーを使用して、画像分類用に事前トレーニングされたオープンソースモデルを直接展開したり、独自のデータセットを使用して事前トレーニングされたモデルを特定のシナリオに合わせて微調整したりできます。 次に、微調整されたモデルを使用して、画像をカスタムカテゴリに分類できます。 このトピックでは、モデルギャラリーにcv_vit-base_image-classification_ImageNet-labelsモデルを展開して画像を分類する方法について説明します。

前提条件

Object Storage Service (OSS) バケットが作成されます。 詳細については、「バケットの作成」をご参照ください。

モデルの詳細ページに移動します

  1. モデルギャラリーページに移動します。

    1. PAI コンソールにログインします。

    2. 左側のナビゲーションペインで、[ワークスペース] をクリックします。 [ワークスペース] ページで、管理するワークスペースを見つけ、ワークスペースの名前をクリックします。 ワークスペースの詳細ページが表示されます。

    3. [ワークスペースの詳細] ページの左側のナビゲーションウィンドウで、[モデルギャラリー] をクリックします。

  2. モデルギャラリーページで、CVセクションの [画像分類] をクリックします。 次に、cv_vit-base_image-classification_ImageNetラベルのモデルを見つけてクリックし、モデルの詳細ページに移動します。

    image

    モデルギャラリーは、さまざまなオープンソースコミュニティからの複数の主流モデルを提供します。 ビジネス要件を満たすモデルを選択できます。

    • 一般に、パラメータの数が多いモデルほど性能は良くなるが、モデルサービスを使用するために請求される料金と、モデルを微調整するために必要なデータ量は高くなる。

    • ほとんどのモデルは、事前トレーニングデータセットに関する情報を提供します。 事前トレーニングデータセットがシナリオに関連しているほど、直接デプロイと微調整の結果が向上します。 モデルの詳細ページで、事前トレーニングデータセットに関する詳細情報を取得できます。

モデルを直接デプロイする

モデルギャラリーが提供するcv_vit-base_image-classification_ImageNetラベルモデルは、ModelScopeで利用できる一般的なVision Transformer (ViT) モデルの画像分類です。 モデルは、ViTアーキテクチャに基づく画像分類モデルである。 モデルは、ImageNet-1Kデータセットを使用してトレーニングされ、ImageNet-1Kデータセットによってカバーされるカテゴリの画像を分類するために使用できます。 モデルを画像分類のモデルサービスとしてElastic Algorithm Service (EAS) に直接デプロイできます。 そうするには、次の手順を実行します。

  1. モデルをモデルサービスとしてデプロイします。

    1. モデルの詳細ページで、右上隅の [デプロイ] をクリックします。

    2. [モデルサービス情報] および [リソースデプロイ情報] セクションのパラメーター設定を確認します。

      モデルギャラリーでは、サービス名を指定し、モデルの特性に基づいてモデルのデプロイに必要なコンピューティングリソースをプリセットします。 この例では、デフォルトのパラメータ設定が使用されます。 ビジネス要件に基づいてパラメーター設定を変更することもできます。 パラメーターの設定方法の詳細については、「モデルのデプロイとトレーニング」トピックの「モデルのデプロイとデバッグ」セクションをご参照ください。

    3. [デプロイ] をクリックします。 [課金通知] メッセージで、[OK] をクリックします。

      サービスの詳細ページが表示されます。 [サービスの詳細] タブで、[基本情報] セクションでモデルサービスのデプロイメントステータスを表示できます。 [ステータス] パラメーターの値が [稼働中] に変わると、モデルサービスがデプロイされます。

  2. モデルサービスを呼び出します。

    モデルサービスのデプロイ後、予測のためにHTTP経由でAPIリクエストを送信してモデルサービスを呼び出すことができます。 モデルサービスはBase64-encoded画像を受け入れ、予測結果をJSON形式で返します。 モデルサービスを呼び出すには、次の手順を実行します。

    1. [サービスの詳細] タブの [リソース情報] セクションで、[通話情報の表示] をクリックします。

      image

    2. [呼び出し情報] ダイアログボックスで、[パブリックネットワークアドレス呼び出し] タブの [アクセスアドレス][トークン] パラメーターを表示し、パラメーターの値を記録します。

    3. Pythonのリクエストライブラリを使用して、モデルサービスを呼び出します。 次のサンプルコードに例を示します。

      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)
      

      上記のコードのtokenおよびurlを、上記の手順で取得したTokenおよびAccess addressパラメーターの値に置き換えます。 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ラベル・モデルは、カテゴリが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. データセットを準備したら、モデルの詳細ページで [微調整] をクリックします。 [微調整] パネルで、[トレーニングデータセット][データセットの検証] 、および [出力パス] パラメーターを設定します。

      モデルギャラリーでは、モデルの特性に基づいて、コンピューティングリソースハイパーパラメータなどのセクションのパラメータをプリセットします。 デフォルトのパラメーター設定を使用したり、ビジネス要件に基づいてパラメーター設定を変更したりできます。 パラメーターの設定方法の詳細については、「モデルのデプロイとトレーニング」トピックの「モデルのデプロイとトレーニング」セクションをご参照ください。

      説明

      デフォルトでは、cv_vit-base_image-classification_ImageNet-labelsモデルは微調整にMiniImageNet-100データセットを使用します。

    2. [微調整] をクリックします。

      image

      ジョブの詳細ページが表示されます。 ジョブの詳細ページで、トレーニングジョブの進行状況、ログ、および評価結果を表示できます。 トレーニングジョブの完了後、トレーニングジョブによって生成されたモデルは、前の手順で [output path] パラメーターで指定された出力パスに保存されます。

      image

  3. 微調整されたモデルを展開します。

    トレーニング済みモデルは、AIアセット管理 > モデルに自動的に登録されます。 モデルを表示またはデプロイできます。 詳細については、「モデルの登録と管理」をご参照ください。