Preparar dados de treinamento de vídeo para rastreamento de objetos

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.
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 acompanhamento de objeto de 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". Para rastreamento de objetos de vídeo, observe o seguinte:

    • 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 de 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 rastreamento de objetos de 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.
    Caixa delimitadora
    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:
    1. 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,,
    2. 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.

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
  ...