Prepara datos de entrenamiento de video para el reconocimiento de acciones

En esta página, se describe cómo preparar datos de entrenamiento de video para usarlos en un conjunto de datos de Vertex AI a fin de entrenar un modelo de reconocimiento de acciones de video.

En las siguientes secciones, se proporciona información sobre los requisitos de datos, los archivos de esquema y el formato de los archivos de importación de datos (JSON y CSV) que define el esquema.

Como alternativa, puedes importar videos que no se anotaron y anotarlos más tarde con la consola de Google Cloud (consulta Etiqueta con la consola de Google Cloud).

Requisitos de los datos

Los siguientes requisitos se aplican a los conjuntos de datos usados para entrenar modelos de AutoML o modelos personalizados.

  • Vertex AI admite los siguientes formatos de video para entrenar tu modelo o solicitar una predicción (anotar un video).

    • MOV
    • .MPEG4
    • .MP4
    • .AVI
  • Para ver el contenido del video en la consola web o anotar un video, el video debe estar en un formato compatible con tu navegador de forma nativa. Debido a que no todos los navegadores administran contenido .MOV o .AVI de forma nativa, la recomendación es usar el formato de video .MPEG4 o .MP4.

  • El tamaño máximo del archivo es de 50 GB (hasta 3 horas de duración). No se admiten archivos de video individuales con marcas de tiempo incorrectas o con formato incorrecto en el contenedor.

  • La cantidad máxima de etiquetas en cada conjunto de datos está limitada a 1,000.

  • Puedes asignar etiquetas “ML_USE” a los videos en los archivos de importación. En el entrenamiento, puedes usar esas etiquetas para dividir los videos y sus anotaciones correspondientes en conjuntos de “entrenamiento” o “prueba”. Para el reconocimiento de acciones, existe una limitación en el uso de la consola de etiquetado VAR. Esto significa que, si quieres usar esta herramienta para etiquetar acciones, debes hacerlo con todas las acciones de ese video.

Prácticas recomendadas para los datos de video que se usan a fin de entrenar los modelos de AutoML

Los siguientes requisitos se aplican a los conjuntos de datos que se usan para entrenar modelos de AutoML.

  • Los datos de entrenamiento deben ser lo más parecidos posible a los datos sobre los que se harán las predicciones. Por ejemplo, si tu caso práctico incluye videos borrosos y de baja resolución (como los de una cámara de seguridad), los datos de entrenamiento deben estar compuestos por videos borrosos y de baja resolución. En general, también deberías tratar de proporcionar videos de entrenamiento con múltiples ángulos, resoluciones y fondos.

  • Por lo general, los modelos de Vertex AI no pueden predecir las etiquetas que las personas no pueden asignar. Por lo tanto, si no se puede entrenar a una persona para que asigne etiquetas con tan solo mirar el video durante 1 o 2 segundos, es probable que tampoco se pueda entrenar al modelo para que lo haga.

  • El modelo funciona mejor cuando hay como máximo 100 veces más videos para la etiqueta más común que para la etiqueta menos común. Recomendamos quitar etiquetas de baja frecuencia. Para el reconocimiento de acciones, ten en cuenta lo siguiente:

    • Se recomiendan 100 fotogramas de video de entrenamiento o más por etiqueta.
    • En una resolución de fotogramas de video mucho más grande que 1,024 píxeles por 1,024 píxeles, puede perderse cierta calidad de la imagen durante el proceso de normalización de fotogramas que usa Vertex AI.

Archivos de esquema

  • Usa el siguiente archivo de esquema de acceso público cuando crees el archivo de jsonl para importar anotaciones. Este archivo de esquema dicta el formato de los archivos de entrada de datos. La estructura del archivo sigue la prueba de esquema de OpenAPI.

    Archivo de esquema de reconocimiento de acciones:

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

    Archivo del esquema completo

    
    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

Archivos de entrada

El formato de los datos de entrenamiento para el reconocimiento de acciones en video es el siguiente.

Para importar tus datos, crea un archivo JSONL o CSV.

JSONL

JSON en cada línea:
Consulta el archivo YAML de reconocimiento de acciones para obtener más información.
Nota: En esta sección, los segmentos de tiempo se usan para calcular las marcas de tiempo de las acciones. startTime y endTime de timeSegmentAnnotations pueden ser iguales y corresponde al marco de clave de la acción.


{
  "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"
  }
}

Reconocimiento de acciones de video (JSONL de ejemplo):


{"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

Lista de columnas
  1. Datos de validación. (Opcional) TRAINING, especificación TEST.
  2. El contenido que clasificar o anotar. Este campo contiene un URI de Cloud Storage para el video. Los URI de Cloud Storage distinguen mayúsculas de minúsculas.
  3. Una etiqueta que identifica cómo se categoriza el video. Las etiquetas deben comenzar con una letra y solo deben contener letras, números y guiones bajos. Si quieres especificar múltiples etiquetas para un video, agrega múltiples filas en el archivo CSV que identifiquen el mismo segmento de video con una etiqueta diferente para cada fila.
  4. Hora de inicio y de finalización del segmento de video. Estos dos campos separados por comas identifican la hora de inicio y de finalización del segmento de video que se analizará, en segundos. La hora de inicio debe ser menor que la de finalización. Ambos valores no deben ser negativos y deben estar dentro del intervalo de tiempo del video. Por ejemplo, 0.09845,1.3600555, donde el primer valor (0.09845) es la hora de inicio y el segundo valor (1.3600555) es la hora de finalización del segmento de video que deseas etiquetar. Para usar todo el contenido del video, especifica una hora de inicio de 0 y una hora de finalización de la duración total del video o “inf”. Por ejemplo, 0,inf.
  5. Annotation. Annotation es una etiqueta con marca de tiempo de fotogramas o segmento de tiempo.

Cada fila debe ser una de las siguientes opciones:

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

Estos son algunos ejemplos

Etiqueta dos acciones en diferentes momentos:

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

No hay ninguna acción de interés dentro de los dos intervalos de tiempo. Nota: La última fila significa que el segmento completamente etiquetado no puede contener ninguna acción.

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

Tus datos de entrenamiento deben tener al menos una etiqueta y un segmento completamente etiquetado.


Nuevamente, no necesitas especificar los datos de validación para verificar los resultados de tu modelo entrenado. Vertex AI divide automáticamente las filas identificadas para el entrenamiento en datos de entrenamiento y de validación. Un 80% corresponde a los datos de entrenamiento y un 20% a los de validación.

Guarda el contenido como un archivo CSV en tu bucket de Cloud Storage.