継続評価を始める前に

継続評価を始める前に、次の 2 つのことを行う必要があります。

  • 評価用のモデル バージョンをトレーニングして、AI Platform Prediction にデプロイする。
  • 継続評価に必要な Google Cloud APIsを有効にする。

AI Platform Prediction にモデル バージョンをデプロイする

AI Platform Data Labeling Service は、AI Platform Prediction にデプロイされた機械学習モデルでのみ継続評価を行います。評価ジョブを作成するときに、ジョブを AI Platform Prediction モデル バージョンに関連付けます。各モデル バージョンに関連付けられる評価ジョブは 1 つだけです。

機械学習モデルをトレーニングして、モデル バージョンとして AI Platform Prediction にデプロイする手順については、Keras でトレーニングと予測を行うためのスタートガイドをご覧ください。

モデル バージョンの要件

継続評価は、次のタイプの機械学習モデルに対応しています。

モデルのタイプ
画像分類 入力として画像を取得し、出力として 1 つ以上のラベルを返すモデル。入力画像には、base64 エンコードの画像または Cloud Storage ファイルのパスを指定します。
テキスト分類 入力としてテキストを取得し、出力として 1 つ以上のラベルを返すモデル。
一般分類 入力として任意の配列または文字列を取得し、出力として 1 つ以上のラベルを返すモデル。

Data Labeling Service で一般分類を行う場合、正解ラベルを提供する審査担当者を割り当てることはできません。一般分類モデルで継続評価を設定する場合は、グラウンド トゥルース ラベルのタグ付けを自身で行う必要があります。
画像オブジェクト検出 入力として画像を取得し、出力として 1 つ以上のラベル付き境界ボックスを返すモデル。この境界ボックスにより、画像内のオブジェクトの位置が推測されます。

機械学習モデルが実行するタスクに応じてモデルのトレーニングを行い、オンライン予測の入力から継続評価が可能な形式で出力を生成するように設定する必要があります。

次のセクションでは、オンライン予測のリクエストと AI Platform Prediction へのレスポンスの JSON 本文の要件について説明します。現時点で、継続評価はオンライン予測のみをサンプリングします。バッチ予測のサンプリングは行いません。オンライン予測とバッチ予測の違いを確認してください。

サンプルでハイライト表示されているフィールドは、継続評価の必須フィールドです。予測の入力と出力に別のフィールドを追加することもできますが、入力に正解ラベリングの審査担当者を割り当てると、追加したフィールドは Data Labeling Service の処理で無視されます。また、評価指標の計算時にも無視されます。

ハイライト表示されたフィールド(yourDataKeyyourLabelKeyyourScoreKeyyourBoundingBoxKey)のキーは、任意の文字列に置き換えることができます。ただし、文字列に / 文字を含めることはできません。評価ジョブを作成するときに、これらの文字列の定義を指定する必要があります。

以下では、モデルのタイプ別にモデルの要件を説明します。

画像分類

入力形式

モデルは、次の形式のオンライン予測リクエストを受け取ります。

{
  "instances": [
    {
      "yourDataKey": <image input (string)>,
      <optional additional key>: <any JSON data type>,
      ...
    },
    ...
  ]
}

<image input (string)> は次のいずれかになります。

  • base64 でエンコードされた画像
  • Cloud Storage に保存されている画像の URI。Data Labeling Service に画像の読み取り権限を付与するには、評価ジョブを作成する Google Cloud プロジェクトと同じ場所に Cloud Storage バケットを配置する必要があります。
base64 エンコードの例

次の例は、base64 でエンコードされた画像を含むオンライン予測リクエストの本文です。

{
  "instances": [
    {
      "image_bytes": {
        "b64": "iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAhUlEQVR4AWOAgZeONnHvHcXiGJDBqyDTXa+dVC888oy51F9+eRdY8NdWwYz/RyT//znEsAjEt277+syt5VMJw989DM/+H2MI/L8tVBQk4d38xcWp7ctLhi97ZCZ0rXV6yLA4b6dH59sjTq3fnji1fp4AsWS5j7PXstRg+/b3gU7N351AQgA8+jkf43sjaQAAAABJRU5ErkJggg=="
      }
    }
  ]
}

この例では、入力データは image_bytes フィールドにネストされています。このような予測入力をモデルで受け入れる場合は、このネスト構造を評価ジョブの作成時に指定する必要があります。

Cloud Storage リファレンスの例

次の例は、Cloud Storage に保存されている画像を参照するオンライン予測リクエストの本文です。

{
  "instances": [
    {
      "image_path": "gs://cloud-samples-data/datalabeling/image/flower_1.jpeg"
    }
  ]
}

出力形式

モデルは、次の形式のオンライン予測を返します。

{
  "predictions": [
    {
      "YOUR_LABEL_KEY": [
        <label (string)>,
        <additional label (string)>,
        ...
      ],
      "YOUR_SCORE_KEY": [
        <score (number)>,
        <additional score (number)>,
        ...
      ],
      <optional additional key>: <any JSON data type>,
      ...
    },
    ...
  ]
}

ラベルの配列とスコアの配列は同じ長さにする必要があります。モデルで 1 つのラベルを分類する場合は、ラベルとスコアを 1 つずつ指定します。モデルで複数のラベル分類を行う場合は、ラベル配列の各ラベルが、スコア配列の同じインデックスのスコアに対応する必要があります。

スコアは必須です。これは、機械学習モデルが予測に割り当てる信頼度または確率です。モデルは通常、特定の入力に計算されたスコアを分類しきい値と比較し、ラベルを選択します。

分類の出力例

次の例は、分類のオンライン予測レスポンスの本文です。

{
  "predictions": [
    {
      "sentiments": [
        "happy"
      ],
      "confidence": [
        "0.8"
      ]
    }
  ]
}

テキスト分類

入力形式

モデルは、次の形式のオンライン予測リクエストを受け取ります。

{
  "instances": [
    {
      "yourDataKey": <text input (string)>,
      <optional additional key>: <any JSON data type>,
      ...
    },
    ...
  ]
}
テキスト入力の例

次の例は、テキストデータを含むオンライン予測リクエストの本文です。

{
  "instances": [
    {
      "text": "If music be the food of love, play on;"
    }
  ]
}

出力形式

モデルは、次の形式のオンライン予測を返します。

{
  "predictions": [
    {
      "YOUR_LABEL_KEY": [
        <label (string)>,
        <additional label (string)>,
        ...
      ],
      "YOUR_SCORE_KEY": [
        <score (number)>,
        <additional score (number)>,
        ...
      ],
      <optional additional key>: <any JSON data type>,
      ...
    },
    ...
  ]
}

ラベルの配列とスコアの配列は同じ長さにする必要があります。モデルで 1 つのラベルを分類する場合は、ラベルとスコアを 1 つずつ指定します。モデルで複数のラベル分類を行う場合は、ラベル配列の各ラベルが、スコア配列の同じインデックスのスコアに対応する必要があります。

スコアは必須です。これは、機械学習モデルが予測に割り当てる信頼度または確率です。モデルは通常、特定の入力に計算されたスコアを分類しきい値と比較し、ラベルを選択します。

分類の出力例

次の例は、分類のオンライン予測レスポンスの本文です。

{
  "predictions": [
    {
      "sentiments": [
        "happy"
      ],
      "confidence": [
        "0.8"
      ]
    }
  ]
}

一般分類

入力形式

モデルは、次の形式のオンライン予測リクエストを受け取ります。

{
  "instances": [
    {
      "yourDataKey": <input data (string or array)>,
      <optional additional key>: <any JSON data type>,
      ...
    },
    ...
  ]
}
一般分類の入力例

次の例は、入力データの配列を含むオンライン予測リクエストの例です。この配列には文字列と数値が格納されています。

{
  "instances": [
    {
      "weather": [
        "sunny",
        72,
        0.22
      ]
    }
  ]
}

出力形式

モデルは、次の形式のオンライン予測を返します。

{
  "predictions": [
    {
      "YOUR_LABEL_KEY": [
        <label (string)>,
        <additional label (string)>,
        ...
      ],
      "YOUR_SCORE_KEY": [
        <score (number)>,
        <additional score (number)>,
        ...
      ],
      <optional additional key>: <any JSON data type>,
      ...
    },
    ...
  ]
}

ラベルの配列とスコアの配列は同じ長さにする必要があります。モデルで 1 つのラベルを分類する場合は、ラベルとスコアを 1 つずつ指定します。モデルで複数のラベル分類を行う場合は、ラベル配列の各ラベルが、スコア配列の同じインデックスのスコアに対応する必要があります。

スコアは必須です。これは、機械学習モデルが予測に割り当てる信頼度または確率です。モデルは通常、特定の入力に計算されたスコアを分類しきい値と比較し、ラベルを選択します。

分類の出力例

次の例は、分類のオンライン予測レスポンスの本文です。

{
  "predictions": [
    {
      "sentiments": [
        "happy"
      ],
      "confidence": [
        "0.8"
      ]
    }
  ]
}

画像オブジェクト検出

入力形式

モデルは、次の形式のオンライン予測リクエストを受け取ります。

{
  "instances": [
    {
      "yourDataKey": <image input (string)>,
      <optional additional key>: <any JSON data type>,
      ...
    },
    ...
  ]
}

<image input (string)> は次のいずれかになります。

  • base64 でエンコードされた画像
  • Cloud Storage に保存されている画像の URI。Data Labeling Service に画像の読み取り権限を付与するには、評価ジョブを作成する Google Cloud プロジェクトと同じ場所に Cloud Storage バケットを配置する必要があります。
base64 エンコードの例

次の例は、base64 でエンコードされた画像を含むオンライン予測リクエストの本文です。

{
  "instances": [
    {
      "image_bytes": {
        "b64": "iVBORw0KGgoAAAANSUhEUgAAAAYAAAAGCAYAAADgzO9IAAAAhUlEQVR4AWOAgZeONnHvHcXiGJDBqyDTXa+dVC888oy51F9+eRdY8NdWwYz/RyT//znEsAjEt277+syt5VMJw989DM/+H2MI/L8tVBQk4d38xcWp7ctLhi97ZCZ0rXV6yLA4b6dH59sjTq3fnji1fp4AsWS5j7PXstRg+/b3gU7N351AQgA8+jkf43sjaQAAAABJRU5ErkJggg=="
      }
    }
  ]
}

この例では、入力データは image_bytes フィールドにネストされています。このような予測入力をモデルで受け入れる場合は、このネスト構造を評価ジョブの作成時に指定する必要があります。

Cloud Storage リファレンスの例

次の例は、Cloud Storage に保存されている画像を参照するオンライン予測リクエストの本文です。

{
  "instances": [
    {
      "image_path": "gs://cloud-samples-data/datalabeling/image/flower_1.jpeg"
    }
  ]
}

出力形式

モデルは、次の形式のオンライン予測を返します。

{
  "predictions": [
    {
      "yourBoundingBoxKey": [
        {
          "top_left": {
            "x": <left coordinate for first box>,
            "y": <top coordinate for first box>
          },
          "bottom_right": {
            "x": <right coordinate for first box>,
            "y": <bottom coordinate for first box>
          },
        },
        ...
      ],
      "YOUR_LABEL_KEY": [
        <label for first box>,
        ...
      ],
      "YOUR_SCORE_KEY": [
        <score for first box,
        ...
      ],
      <optional additional key>: <any JSON data type>,
      ...
    },
    ...
  ]
}

境界ボックスの配列、ラベルの配列、スコアの配列はすべて同じ長さにする必要があります。境界配列内の各項目は、ラベル配列内の同じインデックスのラベルでラベリングされ、スコア配列内の同じインデックスのスコアに対応している必要があります。たとえば、yourBoundingBoxKey[0]yourLabelKey[0] でラベル付けされ、スコアが yourScoreKey[0] になっています。

スコアは必須です。これは、機械学習モデルが予測に割り当てる信頼度または確率です。モデルは通常、特定の入力に計算されたスコアを分類しきい値と比較し、ラベルを選択します。

別の出力形式

yourBoundingBoxKey に文字列 detection_boxes を使用し、yourLabelKey に文字列 detection_classesyourScoreKey に文字列 detection_scores を使用する場合は、予測出力に標準形式ではなく、次の形式を使用できます。

{
  "predictions": [
    {
      "detection_boxes": [
        {
          "x_min": <left coordinate for first box>,
          "y_min": <top coordinate for first box>,
          "x_max": <right coordinate for first box>,
          "y_max": <bottom coordinate for first box>
        },
        ...
      ],
      "detection_classes": [
        <label for first box>,
        ...
      ],
      "detection_scores": [
        <score for first box,
        ...
      ],
      <optional additional key>: <any JSON data type>,
      ...
    },
    ...
  ]
}
オブジェクト検出の出力例

次の例は、オブジェクト検出のオンライン予測レスポンスの本文です。

{
  "predictions": [
    {
      "bird_locations": [
        {
          "top_left": {
            "x": 53,
            "y": 22
          },
          "bottom_right": {
            "x": 98,
            "y": 150
          }
        }
      ],
      "species": [
        "rufous hummingbird"
      ],
      "probability": [
        0.77
      ]
    }
  ]
}

API を有効にする

継続評価を行うには、事前にいくつかの Google Cloud APIs を有効にする必要があります。以下の手順は、AI Platform Prediction にモデル バージョンをデプロイしたときに、同じプロジェクトで AI Platform Training と Prediction API を有効にしていることを前提としています。

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Data Labeling Service and BigQuery API を有効にします。

    API を有効にする

  5. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  6. Google Cloud プロジェクトで課金が有効になっていることを確認します

  7. Data Labeling Service and BigQuery API を有効にします。

    API を有効にする

次のステップ

評価ジョブの作成ガイドを使用して継続評価を始める。