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- Dados de validação.(Opcional),
TRAINING
TEST
especificação . - 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.
- 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.
- 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 como0
e o horário de término da duração total do vídeo ou "inf". Por exemplo,0,inf
. - 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.