Prepare dados de preparação de imagens para a deteção de objetos

Esta página descreve como preparar dados de preparação de imagens para utilização num conjunto de dados do Vertex AI para preparar um modelo de deteção de objetos de imagem.

A secção de objetivos seguinte inclui informações sobre os requisitos de dados, o ficheiro de esquema de entrada/saída e o formato dos ficheiros de importação de dados (linhas JSON e CSV) definidos pelo esquema.

Autorizações

Para usar imagens de um contentor do Cloud Storage, tem de conceder ao agente de serviço do Vertex AI a função Storage Object Viewer para o contentor. O agente de serviço é uma conta de serviço gerida pela Google que a Vertex AI usa para aceder aos seus dados em seu nome. Para uma explicação mais detalhada, consulte o artigo Agentes de serviços.

Deteção de objetos

Requisitos de dados

Requisitos gerais de imagens
Tipos de ficheiros suportados
  • JPEG
  • PNG
  • GIF
  • BMP
  • ICO
Tipos de imagens

Os modelos do AutoML estão otimizados para fotografias de objetos no mundo real.

Tamanho do ficheiro de imagem de preparação (MB) Tamanho máximo de 30 MB.
Tamanho do ficheiro de imagem de previsão* (MB) Tamanho máximo de 1,5 MB.
Tamanho da imagem (píxeis)

Máximo sugerido de 1024 píxeis por 1024 píxeis.

Para imagens muito maiores do que 1024 píxeis por 1024 píxeis, pode perder alguma qualidade de imagem durante o processo de normalização de imagens da Vertex AI.

Requisitos de etiquetas e caixas delimitadoras
Os seguintes requisitos aplicam-se aos conjuntos de dados usados para preparar modelos do AutoML.
Etiquete instâncias para preparação

Mínimo de 10 anotações (instâncias).

Requisitos de anotações

Para cada etiqueta, tem de ter pelo menos 10 imagens, cada uma com pelo menos uma anotação (caixa delimitadora e a etiqueta).

No entanto, para fins de preparação do modelo, é recomendado que use cerca de 1000 anotações por etiqueta. Em geral, quanto mais imagens por etiqueta tiver, melhor será o desempenho do modelo.

Rácio de etiquetas (etiqueta mais comum para etiqueta menos comum):

O modelo funciona melhor quando existem, no máximo, 100 vezes mais imagens para a etiqueta mais comum do que para a etiqueta menos comum.

Para o desempenho do modelo, é recomendável que remova as etiquetas de frequência muito baixa.

Comprimento da aresta da caixa limitadora

Pelo menos 0,01 * comprimento de um lado de uma imagem. Por exemplo, uma imagem de 1000 * 900 píxeis requer caixas delimitadoras de, pelo menos, 10 * 9 píxeis.

Tamanho mínimo da caixa delimitadora: 8 píxeis por 8 píxeis.

Os seguintes requisitos aplicam-se aos conjuntos de dados usados para preparar modelos do AutoML ou preparados de forma personalizada.
Caixas limitadoras por imagem distinta Máximo de 500.
Caixas delimitadoras devolvidas de um pedido de previsão

100 (predefinição), 500 máximo.

Requisitos dos dados de preparação e do conjunto de dados
Os seguintes requisitos aplicam-se aos conjuntos de dados usados para preparar modelos do AutoML.
Caraterísticas das imagens de preparação

Os dados de preparação devem estar o mais próximos possível dos dados com base nos quais as previsões vão ser feitas.

Por exemplo, se o seu exemplo de utilização envolver imagens desfocadas e de baixa resolução (como as de uma câmara de segurança), os seus dados de preparação devem ser compostos por imagens desfocadas e de baixa resolução. Em geral, também deve considerar fornecer vários ângulos, resoluções e fundos para as suas imagens de preparação.

Geralmente, os modelos da Vertex AI não conseguem prever etiquetas que os humanos não conseguem atribuir. Assim, se não for possível preparar um humano para atribuir etiquetas observando a imagem durante 1 a 2 segundos, é provável que também não seja possível preparar o modelo para o fazer.

Pré-processamento interno de imagens

Depois de as imagens serem importadas, o Vertex AI realiza o pré-processamento dos dados. As imagens pré-processadas são os dados reais usados para preparar o modelo.

O pré-processamento de imagens (redimensionamento) ocorre quando o lado mais pequeno da imagem é superior a 1024 píxeis. No caso em que o lado mais pequeno da imagem for superior a 1024 píxeis, esse lado mais pequeno é reduzido para 1024 píxeis. O lado maior e as caixas delimitadoras especificadas são reduzidas na mesma proporção que o lado menor. Consequentemente, todas as anotações reduzidas (caixas delimitadoras e etiquetas) são removidas se tiverem menos de 8 píxeis por 8 píxeis.

As imagens com um lado inferior ou igual a 1024 píxeis não estão sujeitas ao redimensionamento de pré-processamento.

Os seguintes requisitos aplicam-se aos conjuntos de dados usados para preparar modelos do AutoML ou preparados de forma personalizada.
Imagens em cada conjunto de dados Máximo de 150 000
Total de caixas delimitadoras anotadas em cada conjunto de dados Máximo de 1 000 000
Número de etiquetas em cada conjunto de dados Mínimo de 1, máximo de 1000

Ficheiro de esquema YAML

Use o seguinte ficheiro de esquema acessível publicamente para importar anotações de deteção de objetos de imagem (caixas de limite e etiquetas). Este ficheiro de esquema determina o formato dos ficheiros de entrada de dados. A estrutura deste ficheiro segue o esquema OpenAPI.

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

Ficheiro de esquema completo

title: ImageBoundingBox
description: >
  Import and export format for importing/exporting images together with bounding
  box annotations. Can be used in Dataset.import_schema_uri field.
type: object
required:
- imageGcsUri
properties:
  imageGcsUri:
    type: string
    description: >
      A Cloud Storage URI pointing to an image. Up to 30MB in size.
      Supported file mime types: `image/jpeg`, `image/gif`, `image/png`,
      `image/webp`, `image/bmp`, `image/tiff`, `image/vnd.microsoft.icon`.
  boundingBoxAnnotations:
    type: array
    description: Multiple bounding box Annotations on the image.
    items:
      type: object
      description: >
        Bounding box anntoation. `xMin`, `xMax`, `yMin`, and `yMax` are relative
        to the image size, and the point 0,0 is in the top left of the image.
      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
        annotationResourceLabels:
          description: Resource labels on the Annotation.
          type: object
          additionalProperties:
            type: string
  dataItemResourceLabels:
    description: Resource labels on the DataItem.
    type: object
    additionalProperties:
      type: string

Ficheiros de entrada

JSON Lines

JSON em cada linha:



{
  "imageGcsUri": "gs://bucket/filename.ext",
  "boundingBoxAnnotations": [
    {
      "displayName": "OBJECT1_LABEL",
      "xMin": "X_MIN",
      "yMin": "Y_MIN",
      "xMax": "X_MAX",
      "yMax": "Y_MAX",
      "annotationResourceLabels": {
        "aiplatform.googleapis.com/annotation_set_name": "displayName",
        "env": "prod"
      }
    },
    {
      "displayName": "OBJECT2_LABEL",
      "xMin": "X_MIN",
      "yMin": "Y_MIN",
      "xMax": "X_MAX",
      "yMax": "Y_MAX"
    }
  ],
  "dataItemResourceLabels": {
    "aiplatform.googleapis.com/ml_use": "test/train/validation"
  }
}

Notas de campo:

  • imageGcsUri: o único campo obrigatório.
  • annotationResourceLabels - Pode conter qualquer número de pares de strings de chave-valor. O único par de chave-valor reservado pelo sistema é o seguinte:
    • "aiplatform.googleapis.com/annotation_set_name" : "value"

    Onde value é um dos nomes a apresentar dos conjuntos de anotações existentes no conjunto de dados.

  • dataItemResourceLabels - Pode conter qualquer número de pares de strings de chave-valor. O único par de chave-valor reservado pelo sistema é o seguinte, que especifica o conjunto de utilização de aprendizagem automática do item de dados:
    • "aiplatform.googleapis.com/ml_use" : "training/test/validation"

Exemplo de linhas JSON – object_detection.jsonl:



{"imageGcsUri": "gs://bucket/filename1.jpeg", "boundingBoxAnnotations": [{"displayName": "Tomato", "xMin": "0.3", "yMin": "0.3", "xMax": "0.7", "yMax": "0.6"}], "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "test"}}
{"imageGcsUri": "gs://bucket/filename2.gif", "boundingBoxAnnotations": [{"displayName": "Tomato", "xMin": "0.8", "yMin": "0.2", "xMax": "1.0", "yMax": "0.4"},{"displayName": "Salad", "xMin": "0.0", "yMin": "0.0", "xMax": "1.0", "yMax": "1.0"}], "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "training"}}
{"imageGcsUri": "gs://bucket/filename3.png", "boundingBoxAnnotations": [{"displayName": "Baked goods", "xMin": "0.5", "yMin": "0.7", "xMax": "0.8", "yMax": "0.8"}], "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "training"}}
{"imageGcsUri": "gs://bucket/filename4.tiff", "boundingBoxAnnotations": [{"displayName": "Salad", "xMin": "0.1", "yMin": "0.2", "xMax": "0.8", "yMax": "0.9"}], "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "validation"}}
...

CSV

Formato CSV:

[ML_USE],GCS_FILE_PATH,[LABEL],[BOUNDING_BOX]*
Lista de colunas
  • ML_USE (Opcional). Para fins de divisão de dados ao preparar um modelo. Use TRAINING, TEST ou VALIDATION. Para mais informações sobre a divisão manual de dados, consulte o artigo Acerca das divisões de dados para modelos do AutoML.
  • GCS_FILE_PATH. Este campo contém o URI do Cloud Storage para a imagem. Os URIs do Cloud Storage são sensíveis a maiúsculas e minúsculas.
  • LABEL. As etiquetas têm de começar por uma letra e só podem conter letras, números e sublinhados.
  • BOUNDING_BOX. Uma caixa limitadora para um objeto na imagem. A especificação de uma caixa delimitadora envolve mais do que uma coluna.
    bounding_box
    A. X_MIN,Y_MIN
    B. X_MAX,Y_MIN
    C. X_MAX,Y_MAX
    D. X_MIN,Y_MAX

    Cada vértice é especificado por valores de coordenadas x e y. As coordenadas são valores de ponto flutuante normalizados [0,1]; 0,0 é X_MIN ou Y_MIN, 1,0 é X_MAX ou Y_MAX.

    Por exemplo, uma caixa delimitadora para toda a imagem é expressa como (0.0,0.0,,,1.0,1.0,,) ou (0.0,0.0,1.0,0.0,1.0,1.0,0.0,1.0).

    A caixa delimitadora de um objeto pode ser especificada de uma de duas formas:

    1. Dois vértices (dois conjuntos de coordenadas x,y) que são pontos diagonalmente opostos do retângulo:
      A. X_MIN,Y_MIN
      C. X_MAX,Y_MAX
      conforme mostrado neste exemplo:
      A,,C,
      X_MIN,Y_MIN,,,X_MAX,Y_MAX,,
    2. Todos os quatro vértices especificados, conforme mostrado em:
      X_MIN,Y_MIN,X_MAX,Y_MIN, X_MAX,Y_MAX,X_MIN,Y_MAX,
      Se os quatro vértices especificados não formarem um retângulo paralelo aos limites da imagem, o Vertex AI especifica vértices que formam esse retângulo.

Exemplo de CSV – object_detection.csv:

test,gs://bucket/filename1.jpeg,Tomato,0.3,0.3,,,0.7,0.6,,
training,gs://bucket/filename2.gif,Tomato,0.8,0.2,,,1.0,0.4,,
gs://bucket/filename2.gif
gs://bucket/filename3.png,Baked goods,0.5,0.7,0.8,0.7,0.8,0.8,0.5,0.8
validation,gs://bucket/filename4.tiff,Salad,0.1,0.2,,,0.8,0.9,,
...