オブジェクト トラッキング用の動画トレーニング データを準備する

このページでは、動画オブジェクト トラッキング モデルをトレーニングするために Vertex AI データセットで使用する動画トレーニング データを準備する方法について説明します。

以降のセクションでは、データ要件、スキーマ ファイル、スキーマによって定義されるデータ インポート ファイル(JSONL と CSV)の形式について説明します。

また、アノテーションが付いていない動画をインポートして、後でコンソールを使用してアノテーションを付けることもできます(Google Cloud コンソールを使用してラベルを付けるをご覧ください)。

データ要件

AutoML またはカスタム トレーニング済みモデルのトレーニングに使用されるデータセットには、次の要件が適用されます。

  • Vertex AI は、モデルのトレーニングや予測のリクエスト(動画へのアノテーション付け)を行うため、次の動画形式をサポートしています。

    • .MOV
    • .MPEG4
    • .MP4
    • .AVI
  • ウェブ コンソールで動画コンテンツを表示する場合や、動画にアノテーションを付ける場合には、ブラウザがネイティブでサポートされている形式に動画を変換する必要があります。.MOV や .AVI のコンテンツがネイティブで扱われないブラウザもあるため、.MPEG4 または .MP4 の動画形式を使用することをおすすめします。

  • 最大ファイルサイズは 50 GB(長さは 3 時間まで)です。コンテナ内に含まれる個々の動画ファイルのうち、タイムスタンプが誤った形式または空となっている動画ファイルはサポートされません。

  • 各データセット内のラベルの最大数は 1,000 に制限されています。

  • インポート ファイル内の動画に「ML_USE」ラベルを割り当てることができます。トレーニング時に、これらのラベルを使用して、動画とそれぞれのアノテーションをトレーニング セットまたはテストセットに分割できます。 動画オブジェクト トラッキングについては、次の点に注意してください。

    • 各データセット内のラベル付きの動画フレームの最大数は、150,000 に制限されています。
    • 各データセット内のアノテーション付き境界ボックスの合計数の最大値は、1,000,000 に制限されています。
    • 各アノテーション セットに含まれるラベルの最大数は 1,000 に制限されています。

AutoML モデルのトレーニングに使用する動画データに関するベスト プラクティス

以下の方法は、AutoML モデルのトレーニングに使用されるデータセットに適用されます。

  • トレーニング用のデータは、予測を行うデータにできる限り近いものである必要があります。たとえば、低解像度のぼやけた動画(防犯カメラの動画など)で予測を行う場合は、トレーニング用のデータも低解像度のぼやけた動画で構成する必要があります。一般に、視点、解像度、背景が異なる動画をトレーニング用に準備することも検討する必要があります。

  • 一般的に、Vertex AI モデルは、人間が割り当てることができないラベルを予測することはできません。そのため、動画を 1~2 秒間見てラベルを割り当てるように人間をトレーニングすることができなければ、モデルもそのようにトレーニングすることはできません。

  • モデルは、最も一般的なラベルのドキュメント数が、最も一般的ではないラベルの動画数よりも、最大 100 倍存在する場合に最適に動作します。低い頻度のラベルは削除することをおすすめします。オブジェクト トラッキングの場合、以下にご注意ください。

    • 境界ボックスの最小サイズは 10 px x 10 px です。
    • 動画のフレーム解像度が 1,024 x 1,024 ピクセルを大幅に超える場合、AutoML オブジェクト トラッキングで使用されるフレーム正規化プロセス中に画質が低下する可能性があります。
    • 一意の各ラベルはそれぞれ少なくとも 3 つの動画フレームに存在します。また、最低でも 10 のアノテーションを含む必要があります。

スキーマ ファイル

  • アノテーションをインポートする jsonl ファイルの作成には、一般公開されている次のスキーマ ファイルを使用します。このスキーマ ファイルにより、データ入力ファイルの形式が決まります。ファイルの構造は OpenAPI Schema テストに準拠しています。

    オブジェクト トラッキング スキーマ ファイル:

    gs://google-cloud-aiplatform/schema/dataset/ioformat/object_tracking_io_format_1.0.0.yaml

    完全なスキーマ ファイル

    
    
    title: VideoObjectTracking
    version: 1.0.0
    description: >
      Import and export format for importing/exporting videos together with
      temporal bounding box annotations.
    type: object
    required:
    - videoGcsUri
    properties:
      videoGcsUri:
        type: string
        description: >
          A Cloud Storage URI pointing to a video. Up to 50 GB in size and
          up to 3 hours in duration. Supported file mime types: `video/mp4`,
          `video/avi`, `video/quicktime`.
      TemporalBoundingBoxAnnotations:
        type: array
        description: Multiple temporal bounding box annotations. Each on a frame of the video.
        items:
          type: object
          description: >
            Temporal bounding box anntoation on video. `xMin`, `xMax`, `yMin`, and
            `yMax` are relative to the video frame size, and the point 0,0 is in the
            top left of the frame.
          properties:
            displayName:
              type: string
              description: >
                It will be imported as/exported from AnnotationSpec's display name,
                i.e., the name of the label/class.
            xMin:
              description: The leftmost coordinate of the bounding box.
              type: number
              format: double
            xMax:
              description: The rightmost coordinate of the bounding box.
              type: number
              format: double
            yMin:
              description: The topmost coordinate of the bounding box.
              type: number
              format: double
            yMax:
              description: The bottommost coordinate of the bounding box.
              type: number
              format: double
            timeOffset:
              type: string
              description: >
                A time offset of a video in which the object has been detected.
                Expressed as a number of seconds as measured from the
                start of the video, with fractions up to a microsecond precision, and
                with "s" appended at the end.
            instanceId:
              type: number
              format: integer
              description: >
                The instance of the object, expressed as a positive integer. Used to
                tell apart objects of the same type when multiple are present on a
                single video.
            annotationResourceLabels:
              description: Resource labels on the Annotation.
              type: object
              additionalProperties:
                type: string
      dataItemResourceLabels:
        description: Resource labels on the DataItem.
        type: object
        additionalProperties:
          type: string

入力ファイル

動画オブジェクト トラッキングのトレーニング データの形式は次のとおりです。

データをインポートするには、JSONL または CSV ファイルを作成します。

JSONL

各行の JSON:
詳細については、オブジェクト トラッキング YAML ファイルをご覧ください。



{
	"videoGcsUri": "gs://bucket/filename.ext",
	"TemporalBoundingBoxAnnotations": [{
		"displayName": "LABEL",
		"xMin": "leftmost_coordinate_of_the_bounding box",
		"xMax": "rightmost_coordinate_of_the_bounding box",
		"yMin": "topmost_coordinate_of_the_bounding box",
		"yMax": "bottommost_coordinate_of_the_bounding box",
		"timeOffset": "timeframe_object-detected"
                "instanceId": "instance_of_object
                "annotationResourceLabels": "resource_labels"
	}],
	"dataItemResourceLabels": {
		"aiplatform.googleapis.com/ml_use": "train|test"
	}
}

JSONL の例 - 動画オブジェクト トラッキング:



{'videoGcsUri': 'gs://demo-data/video1.mp4', 'temporal_bounding_box_annotations': [{'displayName': 'horse', 'instance_id': '-1', 'time_offset': '4.000000s', 'xMin': '0.668912', 'yMin': '0.560642', 'xMax': '1.000000', 'yMax': '1.000000'}], "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "training"}}
{'videoGcsUri': 'gs://demo-data/video2.mp4', 'temporal_bounding_box_annotations': [{'displayName': 'horse', 'instance_id': '-1', 'time_offset': '71.000000s', 'xMin': '0.679056', 'yMin': '0.070957', 'xMax': '0.801716', 'yMax': '0.290358'}], "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "test"}}
...

CSV

CSV ファイルの行の形式:

[ML_USE,]VIDEO_URI,LABEL,[INSTANCE_ID],TIME_OFFSET,BOUNDING_BOX

列のリスト

  • ML_USE(省略可)。モデルをトレーニングする場合のデータ分割用。TRAINING または TEST を使用します。
  • VIDEO_URI。このフィールドには、動画の Cloud Storage URI が含まれます。Cloud Storage URI では大文字と小文字が区別されます。
  • LABEL。ラベルは文字で始まり、文字、数字、アンダースコア以外を含まないようにする必要があります。動画に複数のラベルを指定するには、同じ動画セグメントを示す複数の行を CSV ファイルに追加し、各行に異なるラベルを指定します。
  • INSTANCE_ID(省略可)。動画の動画フレーム全体にあるオブジェクト インスタンスを識別するインスタンス ID。この ID が指定されている場合、AutoML オブジェクト トラッキングでオブジェクト トラッキングの調整、トレーニング、評価にこの ID が使用されます。異なる動画フレームに存在する同じオブジェクト インスタンスの境界ボックスには、同じインスタンス ID としてラベルが付けられます。インスタンス ID が一意であるのは、データセット内ではなく各動画の中だけです。たとえば、異なる動画にある 2 つのオブジェクトのインスタンス ID が同じであっても、それらのオブジェクトが同じオブジェクト インスタンスであるとは言えません。
  • TIME_OFFSET。動画の先頭からの時間オフセットを示す動画フレーム。時間オフセットは浮動小数点数で、単位は秒です。
  • BOUNDING_BOX。動画フレーム内のオブジェクトの境界ボックス。境界ボックスの指定には複数の列が必要です。
    境界ボックス
    A. x_relative_min,y_relative_min
    B. x_relative_max,y_relative_min
    C. x_relative_max,y_relative_max
    D. x_relative_min,y_relative_max

    それぞれの頂点は、x と y の座標値で指定します。座標は 0~1 の範囲の浮動小数点数です。0 は最小の x 値または y 値、1 は最大の x 値または y 値を表します。
    たとえば、(0,0)は左上の角、(1,1)は右下の角を表します。画像全体の境界ボックスは(0,0,,,1,1,,)または(0,0,1,0,1,1,0,1)として表します。
    AutoML オブジェクト トラッキングでは、頂点を特定の順序で指定する必要はありません。また、指定された 4 つの頂点で画像の端と平行になる四角形が形成されない場合、Vertex AI はその四角形を形成する頂点を指定します。
    オブジェクトの境界ボックスは、次のいずれかの方法で指定できます。
    1. 長方形の対角線上にある場合、x,y 座標のセットで構成された 2 つの頂点を指定します。
      A. x_relative_min,y_relative_min
      C. x_relative_max,y_relative_max
      この例:
      x_relative_min, y_relative_min,,,x_relative_max,y_relative_max,,
    2. 以下に示す 4 つの頂点をすべて指定します。
      x_relative_min,y_relative_min, x_relative_max,y_relative_min, x_relative_max,y_relative_max, x_relative_min,y_relative_max,
      指定された 4 つの頂点では画像の縁に平行に沿う四角形が形成されない場合、Vertex AI は、このような四角形を形成する頂点を指定します。

データセット ファイル内の行の例

次の行は、データセット内のデータを指定する方法を示しています。この例には、Cloud Storage 内の動画へのパス、オブジェクトのラベル、トラッキングを開始する時間オフセット、2 つの対角点が含まれています。VIDEO_URI.,LABEL,INSTANCE_ID,TIME_OFFSET,x_relative_min,y_relative_min,x_relative_max,y_relative_min,x_relative_max,y_relative_max,x_relative_min,y_relative_max

gs://folder/video1.avi,car,,12.90,0.8,0.2,,,0.9,0.3,,
gs://folder/video1.avi,bike,,12.50,0.45,0.45,,,0.55,0.55,,
ここで

  • VIDEO_URIgs://folder/video1.avi です。
  • LABELcar です。
  • INSTANCE_ID、(指定なし)
  • TIME_OFFSET12.90 です。
  • x_relative_min,y_relative_min0.8,0.2 です。
  • x_relative_max,y_relative_min は指定されていません。
  • x_relative_max,y_relative_max0.9,0.3 です。
  • x_relative_min,y_relative_max は指定されていません。

前に説明したとおり、次の例のように 4 つの頂点すべてを指定して境界ボックスを指定することもできます。

gs://folder/video1.avi,car,,12.10,0.8,0.8,0.9,0.8,0.9,0.9,0.8,0.9 gs://folder/video1.avi,car,,12.90,0.4,0.8,0.5,0.8,0.5,0.9,0.4,0.9 gs://folder/video1.avi,car,,12.10,0.4,0.2,0.5,0.2,0.5,0.3,0.4,0.3

CSV の例 - ラベルなし:

ラベルを指定することなく、データファイルに動画を指定することもできます。この場合、モデルをトレーニングする前に、Google Cloud コンソールを使用してデータにラベルを適用する必要があります。それには、動画の Cloud Storage URI の後に 11 個のカンマを続ければよいだけです。以下に例を示します。

ml_use が割り当てられていない場合の例:

  gs://folder/video1.avi
  ...
  

ml_use が割り当てられた場合の例:

  TRAINING,gs://folder/video1.avi
  TEST,gs://folder/video2.avi
  ...