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

Nesta página, descrevemos como preparar dados de treinamento em vídeo para usar em um conjunto de dados da Vertex AI a fim de treinar um modelo de rastreamento de objetos 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". 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.
    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
  ...