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". Para rastreamento de objetos em vídeo, lembre-se disto:
- O número máximo de frames de vídeo rotulados em cada conjunto de dados é limitado a 150.000.
- O número máximo de caixas delimitadoras anotadas totais em cada conjunto de dados é limitado a 1.000.000.
- O número máximo de rótulos em cada conjunto de anotações é limitado a 1.000.
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 rastreamento de objetos:
- O tamanho mínimo da caixa delimitadora é 10 px por 10 px.
- Para uma resolução de frame de vídeo muito maior do que 1024 pixels por 1024 pixels, talvez haja uma perda na qualidade da imagem durante o processo de normalização do frame usado pelo rastreamento de objetos do AutoML
- Cada rótulo exclusivo deve estar presente em pelo menos três frames de vídeo distintos. Além disso, cada rótulo também precisa ter no mínimo dez anotações.
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 do rastreamento de objetos:
gs://google-cloud-aiplatform/schema/dataset/ioformat/object_tracking_io_format_1.0.0.yaml
Arquivo de esquema completo
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
Arquivos de entrada
Veja a seguir o formato dos dados de treinamento para o rastreamento de objetos em vídeo.
Para importar os dados, crie um arquivo JSONL ou CSV.
JSONL
JSON em cada linha:
Veja o arquivo YAML de rastreamento de objetos para mais detalhes.
{ "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" } }
Exemplo de JSONL: rastreamento de objeto de vídeo:
{'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
Formato de uma linha no arquivo CSV:
[ML_USE,]VIDEO_URI,LABEL,[INSTANCE_ID],TIME_OFFSET,BOUNDING_BOX
Lista de colunas
ML_USE
(Opcional). Para fins de divisão de dados ao treinar um modelo. Use TREINAMENTO ou TESTE.VIDEO_URI
Esse campo contém o URI do Cloud Storage para o vídeo Esses URIs diferenciam maiúsculas de minúsculas.LABEL
. Os rótulos precisam começar com uma letra e conter apenas letras, números e sublinhado. É 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.INSTANCE_ID
(Opcional). Um código que identifica a instância do objeto em frames de um vídeo. Se for fornecido, o rastreamento de objetos do AutoML os usará para ajuste, treinamento e avaliação de rastreamento de objetos. As caixas delimitadoras da mesma instância de objeto presente em frames de vídeo diferentes são rotuladas como o mesmo código de instância. O código da instância é único em cada vídeo, mas não no conjunto de dados. Por exemplo, se dois objetos de dois vídeos diferentes tiverem o mesmo código de instância, isso não significa que eles são a mesma instância de objeto.TIME_OFFSET
O frame de vídeo que indica o deslocamento de duração desde o início do vídeo. O ajuste de horário é um número flutuante e as unidades estão em segundos.BOUNDING_BOX
Uma caixa delimitadora para um objeto no frame de vídeo. Especificar uma caixa delimitadora envolve mais de uma coluna.
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
Cada vertex é especificado por valores de coordenadas x, y. Essas coordenadas precisam ser um float no intervalo de 0 a 1, em que 0 representa o valor mínimo de x ou y e 1 representa o maior valor de x ou y.
Por exemplo, (0,0) representa o canto superior esquerdo e (1,1) representa o canto inferior direito. Uma caixa delimitadora da imagem inteira é expressa como (0,0,,,1,1,,) ou (0,0,1,0,1,1,0,1).
O rastreamento de objetos do AutoML não requer uma ordem de vértice específica. Além disso, se os quatro vértices especificados não formarem um retângulo paralelo às bordas da imagem, a Vertex AI especifica os vértices que formam esse retângulo.
A caixa delimitadora de um objeto pode ser especificada de duas maneiras:- Dois vértices especificados que consistem em um conjunto de coordenadas x,y,
se forem pontos diagonalmente opostos do retângulo:
A.x_relative_min
,y_relative_min
C.x_relative_max
,y_relative_max
como mostrado neste exemplo:
x_relative_min, y_relative_min,,,x_relative_max,y_relative_max,,
- Todos os quatro vértices especificados conforme mostrado em:
x_relative_min,y_relative_min, x_relative_max,y_relative_min, x_relative_max,y_relative_max, x_relative_min,y_relative_max,
Se os quatro vértices especificados não formarem um retângulo paralelo às bordas da imagem, a Vertex AI especifica os vértices que formam um retângulo.
- Dois vértices especificados que consistem em um conjunto de coordenadas x,y,
se forem pontos diagonalmente opostos do retângulo:
Exemplos de linhas em arquivos de conjunto de dados
As linhas a seguir demonstram como especificar dados em um conjunto de dados. O
exemplo inclui um caminho para um vídeo no Cloud Storage, um rótulo para o
objeto, um ajuste de horário para começar o rastreamento e dois vértices diagonal.
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,,
em que,
- VIDEO_URI é
gs://folder/video1.avi
, - LABEL é
car
, - INSTANCE_ID , (não especificado)
- TIME_OFFSET é
12.90
, - x_relative_min,y_relative_min são
0.8,0.2
, - x_relative_max,y_relative_min não especificado,
- x_relative_max,y_relative_max são
0.9,0.3
, - x_relative_min,y_relative_max não são especificados
Conforme mencionado anteriormente, também é possível especificar as caixas delimitadoras fornecendo todos os quatro vértices, conforme mostrado nos exemplos a seguir.
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
Exemplo de CSV sem rótulos:
Também é possível fornecer vídeos no arquivo de dados CSV sem especificar rótulos. Em seguida, use o Console do Google Cloud para aplicar rótulos aos dados antes de treinar o modelo. Para isso, basta fornecer o URI do Cloud Storage para o vídeo seguido por 11 vírgulas, conforme mostrado no exemplo a seguir.
Exemplo sem atribuição de ml_use:
gs://folder/video1.avi ...
Exemplo com ml_use atribuído:
TRAINING,gs://folder/video1.avi TEST,gs://folder/video2.avi ...