動作認識用の動画トレーニング データを準備する

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

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

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

データ要件

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

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

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

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

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

  • インポート ファイル内の動画に「ML_USE」ラベルを割り当てることができます。トレーニング時に、これらのラベルを使用して、動画とそれぞれのアノテーションをトレーニング セットまたはテストセットに分割できます。‏動作認識で VAR ラベル付けコンソールを使用する際には制限があり、ラベル付けツールを使用してアクションにラベルを付ける場合は、その動画内のすべてのアクションにラベルを付ける必要があります。

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

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

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

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

  • モデルは、最も一般的なラベルのドキュメント数が、最も一般的ではないラベルの動画数よりも、最大 100 倍存在する場合に最適に動作します。低い頻度のラベルは削除することをおすすめします。動作認識では、次の点に注意してください。

    • ラベルごとに約 100 個のトレーニング用動画のフレームをおすすめします。
    • 動画のフレーム解像度が 1,024 x 1,024 ピクセルを大幅に超える場合、Vertex AI で使用されるフレーム正規化プロセス中に画質が低下する可能性があります。

スキーマ ファイル

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

    動作認識スキーマ ファイル:

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

    完全なスキーマ ファイル

    
    title: VideoActionRecognition
    description: >
      Import and export format for importing/exporting videos together with
      action recognition annotations with time segment. Can be used in
      Dataset.import_schema_uri field.
    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`.
      timeSegments:
        type: array
        description: Multiple fully-labeled segments.
        items:
          type: object
          description: A time period inside the video.
          properties:
            startTime:
              type: string
              description: >
                The start of the time segment. Expressed as a number of seconds as
                measured from the start of the video, with "s" appended at the end.
                Fractions are allowed, up to a microsecond precision.
              default: 0s
            endTime:
              type: string
              description: >
                The end of the time segment. Expressed as a number of seconds as
                measured from the start of the video, with "s" appended at the end.
                Fractions are allowed, up to a microsecond precision, and "Infinity"
                is allowed, which corresponds to the end of the video.
              default: Infinity
      timeSegmentAnnotations:
        type: array
        description: >
          Multiple action recognition annotations. Each on a time segment of the video.
        items:
          type: object
          description: Annotation with a time segment on media (e.g., video).
          properties:
            displayName:
              type: string
              description: >
                It will be imported as/exported from AnnotationSpec's display name.
            startTime:
              type: string
              description: >
                The start of the time segment. Expressed as a number of seconds as
                measured from the start of the video, with "s" appended at the end.
                Fractions are allowed, up to a microsecond precision.
              default: 0s
            endTime:
              type: string
              description: >
                The end of the time segment. Expressed as a number of seconds as
                measured from the start of the video, with "s" appended at the end.
                Fractions are allowed, up to a microsecond precision, and "Infinity"
                is allowed, which means the end of the video.
              default: Infinity
            annotationResourceLabels:
              description: Resource labels on the Annotation.
              type: object
              additionalProperties:
                type: string
      dataItemResourceLabels:
        description: Resource labels on the DataItem. Overrides values set in
          ImportDataConfig at import time. Can set a user-defined label
          or the predefined `aiplatform.googleapis.com/ml_use` label, which is
          used to determine the data split and can be set to `training` and `test`.
        type: object
        additionalProperties:
          type: string

入力ファイル

動画動作認識のトレーニング データの形式は次のとおりです。

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

JSONL

各行の JSON:
詳細については、動作認識の YAML ファイルをご覧ください。
注: この時間セグメントは動作のタイムスタンプの算出に使用されます。timeSegmentAnnotationsstartTimeendTime は同じ場合があります。これらは、動作のキーフレームに対応します。



{
  "videoGcsUri': "gs://bucket/filename.ext",
  "timeSegments": [{
    "startTime": "start_time_of_fully_annotated_segment",
    "endTime": "end_time_of_segment"}],
  "timeSegmentAnnotations": [{
    "displayName": "LABEL",
    "startTime": "start_time_of_segment",
    "endTime": "end_time_of_segment"
  }],
  "dataItemResourceLabels": {
    "ml_use": "train|test"
  }
}

JSONL の例 - 動画の動作認識:



{"videoGcsUri": "gs://demo/video1.mp4", "timeSegmentAnnotations": [{"displayName": "cartwheel", "startTime": "1.0s", "endTime": "12.0s"}], "dataItemResourceLabels": {"ml_use": "training"}}
{"videoGcsUri": "gs://demo/video2.mp4", "timeSegmentAnnotations": [{"displayName": "swing", "startTime": "4.0s", "endTime": "9.0s"}], "dataItemResourceLabels": {"ml_use": "test"}}
...

CSV

列のリスト
  1. 検証データ。省略可TRAININGTEST の仕様。
  2. 分類またはアノテーション付けするコンテンツ。このフィールドには、動画の Google Cloud Storage URI が含まれます。Cloud Storage URI では大文字と小文字が区別されます。
  3. 動画の分類方法を表すラベル。ラベルは文字で始まり、文字、数字、アンダースコア以外を含まないようにする必要があります。動画に複数のラベルを指定するには、同じ動画セグメントを示す複数の行を CSV ファイルに追加し、各行に異なるラベルを指定します。
  4. 動画セグメントの開始時間と終了時間。この 2 つのカンマ区切りフィールドでは、分析する動画セグメントの開始時間と終了時間を秒単位で指定します。開始時間は終了時間より前にする必要があります。どちらの値も負数でなく、動画の長さの範囲内である必要があります。たとえば、0.09845,1.3600555 の場合、最初の値(0.09845)は開始時間、2 番目の値(1.3600555)はラベルを付ける動画セグメントの終了時間です。動画のコンテンツ全体を使用するには、開始時間を 0 にし、終了時間を動画の長さ全体または「inf」にします。例: 0,inf
  5. アノテーション。アノテーションは、フレーム タイムスタンプまたは時間セグメントのいずれかを含むラベルです。

各行は次のいずれかにする必要があります。

VIDEO_URI, TIME_SEGMENT_START, TIME_SEGMENT_END, LABEL, ANNOTATION_FRAME_TIMESTAMP
VIDEO_URI, , , LABEL, ANNOTATION_FRAME_TIMESTAMP
VIDEO_URI, TIME_SEGMENT_START, TIME_SEGMENT_END, LABEL, ANNOTATION_SEGMENT_START, ANNOTATION_SEGMENT_END
VIDEO_URI, , , LABEL, ANNOTATION_SEGMENT_START, ANNOTATION_SEGMENT_END

次のとおり、異なる時間で 2 つの動作にラベルを付けます。

gs://folder/video1.avi,kick,12.90,,
gs://folder/video1.avi,catch,19.65,,

2 つの期間内に特に関心のある動作はありません。注: 最後の行は、ラベル付けされたセグメントに動作が含まれていないことを意味します。

gs://folder/video1.avi,,,10.0,20.0
gs://folder/video1.avi,,,25.0,40.0

トレーニング データには、少なくとも 1 つのラベルと、1 つの完全にラベル付けされたセグメントが必要です。


ここでも、トレーニングされたモデルの結果検証用のデータを指定する必要はありません。Vertex AI では、トレーニング用として識別された行がトレーニング データと検証データに自動的に分割されます。80% がトレーニング、20% が検証に使用されます。

コンテンツを CSV ファイルとして Cloud Storage バケットに保存します。