Preparar dados de treinamento de vídeo para reconhecimento de ações

Nesta página, descrevemos como preparar dados de treinamento de vídeo para uso em um conjunto de dados da Vertex AI para treinar um modelo de reconhecimento de ação em vídeo.

As seções a seguir fornecem informações sobre requisitos de dados, arquivos de esquema e o formato dos arquivos de importação de dados (JSONL e CSV) definidos pelo esquema.

Como alternativa, é possível importar vídeos que não foram anotados e anotados posteriormente usando o console (consulte Como rotular usando o Console do Google Cloud).

Requisitos de dados

Os requisitos a seguir se aplicam a conjuntos de dados usados para treinar o AutoML ou modelos personalizados treinados.

  • A Vertex AI é compatível com os formatos de vídeo a seguir para treinar o modelo ou solicitar uma previsão (anotação de um vídeo).

    • .MOV
    • .MPEG4
    • .MP4
    • .AVI
  • Para ver o conteúdo de vídeo no console da Web ou fazer anotações em um vídeo, ele precisa estar em um formato compatível com o seu navegador. Como nem todos os navegadores processam nativamente o conteúdo .MOV ou .AVI, a recomendação é usar o formato de vídeo .MPEG4 ou .MP4.

  • O tamanho máximo do arquivo é de 50 GB (até 3 horas de duração). Arquivos de vídeo individuais com registros de data e hora inválidos ou vazios no contêiner não são aceitos.

  • O número máximo de rótulos em cada conjunto de dados é limitado a 1.000.

  • É possível atribuir rótulos "ML_USE" aos vídeos nos arquivos importados. No momento do treinamento, é possível usar esses rótulos para dividir os vídeos e as respectivas anotações em conjuntos de "treinamento" ou "teste". Limitação: há uma limitação no uso do console de rotulagem do VAR. Isso significa que, se você quiser usar a ferramenta de rotulagem para rotular ações, será necessário rotular todas as ações nesse vídeo.

Práticas recomendadas para dados de vídeo usados para treinar modelos do AutoML

As práticas a seguir se aplicam a conjuntos de dados usados para treinar modelos do AutoML.

  • Os dados de treinamento precisam estar o mais próximo possível dos dados que serão previstos. Por exemplo, se o caso de uso incluir vídeos desfocados e de baixa resolução (como de uma câmera de segurança), seus dados de treinamento precisarão ser compostos por vídeos desfocados e de baixa resolução. Em geral, pense também em fornecer vários ângulos, resoluções e planos de fundo nos vídeos de treinamento.

  • Os modelos da Vertex AI geralmente não podem prever rótulos que pessoas não possam atribuir. Se uma pessoa não puder ser treinada para atribuir rótulos olhando o vídeo por 1 ou 2 segundos, o modelo provavelmente não poderá ser treinado para fazer isso também.

  • O modelo funciona melhor quando há no máximo 100 vezes mais vídeos para o rótulo mais comum do que para o menos comum. Recomendamos remover os rótulos de baixa frequência. Para reconhecimento de ação, observe o seguinte:

    • Recomenda-se 100 ou mais frames de vídeo de treinamento por rótulo.
    • Para resoluções de frame de vídeo muito maiores que 1024 x 1024 pixels, a qualidade de algumas imagens pode ser perdida durante o processo de normalização do frame usado pela Vertex AI.

Arquivos de esquema

  • Use o seguinte arquivo de esquema de acesso público ao criar o arquivo jsonl para importar anotações. Esse arquivo de esquema determina o formato dos arquivos de entrada de dados. A estrutura do arquivo segue o teste OpenAPI Schema.

    Arquivo de esquema de reconhecimento de ações:

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

    Arquivo de 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

Arquivos de entrada

Veja a seguir o formato dos dados de treinamento para reconhecimento de ação em vídeo.

Para importar os dados, crie um arquivo JSONL ou CSV.

JSONL

JSON em cada linha:
Consulte o arquivo YAML de reconhecimento de ações para mais detalhes.
Observação: os segmentos de tempo aqui são usados para calcular os carimbos de data/hora das ações. startTime e endTime de timeSegmentAnnotations podem ser iguais e correspondem ao frame de chave da ação.


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

Exemplo de JSONL: reconhecimento de ação de vídeo:


{"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 colunas
  1. Dados de validação.(Opcional),TRAININGTEST especificação .
  2. O conteúdo a ser categorizado ou anotado. Esse campo contém o URI do Cloud Storage para o vídeo. Esses URIs diferenciam maiúsculas de minúsculas.
  3. Um rótulo que identifica como o vídeo é categorizado. Os rótulos precisam começar com uma letra e conter apenas letras, números e sublinhado (opcional). É possível especificar vários rótulos para um vídeo adicionando muitas linhas no arquivo CSV que identificam o mesmo trecho de vídeo, com um rótulo diferente para cada linha.
  4. Horário de início e de término do trecho de vídeo. Esses dois campos separados por vírgula identificam o horário de início e de término do trecho de vídeo para análise, em segundos. O horário de início precisa ser menor que o de término. Os dois valores não podem ser negativos e precisam estar dentro do período do vídeo. Por exemplo, 0.09845,1.3600555, em que o primeiro valor (0,09845) é o horário de início e o segundo (1,3600555) é o horário de término do trecho de vídeo que você quer rotular. Para usar o conteúdo inteiro do vídeo, especifique o horário de início como 0 e o horário de término da duração total do vídeo ou "inf". Por exemplo, 0,inf.
  5. Anotação. A anotação é um rótulo com carimbo de data/hora do quadro ou segmento de tempo.

Cada linha precisa ser uma das seguintes:

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

Alguns exemplos

Marque duas ações em momentos diferentes:

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

Não há ações de interesse nos dois períodos. Observação: a última linha significa que o segmento totalmente rotulado não pode conter nenhuma ação.

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

Seus dados de treinamento precisam ter pelo menos um rótulo e um segmento totalmente rotulado.


Novamente, você não precisa especificar dados de validação para verificar os resultados do modelo treinado. A Vertex AI divide automaticamente as linhas identificadas para treinamento em dados de treinamento e validação. 80% para treinamento e 20% para validação.

Salve o conteúdo como um arquivo CSV no bucket do Cloud Storage.