Preparar dados de treinamento de imagem para classificação

Nesta página, descrevemos como preparar dados de treinamento em imagem para usar em um conjunto de dados da Vertex AI a fim de treinar um modelo de classificação de imagens.

As seções de objetivo a seguir incluem informações sobre requisitos de dados, o arquivo de esquema de entrada/saída e o formato dos arquivos de importação de dados (Linhas JSON e CSV) definidos pelo esquema.

Classificação de rótulo único

Requisitos de dados

  • Dados de treinamento: os formatos de imagem a seguir são compatíveis com o treinamento do modelo. Depois que a API Vertex AI pré-processa essas imagens importadas, elas são usadas como dados para treinar um modelo. O tamanho máximo do arquivo é de 30 MB.
    • JPEG
    • GIF
    • PNG
    • BMP
    • ICO
  • Dados de previsão: os formatos de imagem a seguir são compatíveis com a solicitação de uma consulta (consulta) para o modelo. O tamanho máximo do arquivo é de 1,5 MB.
    • JPEG
    • GIF
    • PNG
    • WEBP
    • BMP
    • TIFF
    • ICO

    Práticas recomendadas para dados de imagem usados para treinar modelos do AutoML

    As práticas recomendadas a seguir se aplicam a conjuntos de dados que treinam modelos usando o AutoML.

  • Os modelos do AutoML são otimizados para fotografias de objetos reais.
  • 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 envolver imagens borradas e de baixa resolução (como de uma câmera de segurança), seus dados de treinamento precisarão ser compostos por imagens borradas de baixa resolução. Em geral, pense também em fornecer vários ângulos, resoluções e planos de fundo para suas imagens de treinamento.
  • Os modelos da Vertex AI geralmente não preveem rótulos que pessoas não possam atribuir. Então, se um humano não puder ser treinado para atribuir rótulos olhando a imagem por 1 ou 2 segundos, o modelo provavelmente não poderá ser treinado para fazer isso também.
  • Recomendamos cerca de 1.000 imagens de treinamento por rótulo. O mínimo por rótulo é 10. Em geral, são necessários mais exemplos por rótulo para treinar modelos com vários rótulos por imagem, e os resultados são mais difíceis de interpretar.
  • O modelo funciona melhor quando há no máximo 100 vezes mais imagens para o rótulo mais comum do que para o menos comum. Recomendamos remover rótulos de frequência muito baixa.
  • Pense em incluir um rótulo None_of_the_above e imagens que não correspondam a nenhum dos rótulos definidos. Por exemplo, para um conjunto de dados de flores, inclua imagens de flores fora das variedades rotuladas e identifique-as como None_of_the_above.

Arquivo de esquema YAML

Use o seguinte arquivo de esquema de acesso público para importar anotações de classificação de imagem de rótulo único. Esse arquivo de esquema determina o formato dos arquivos de entrada de dados. A estrutura desse arquivo segue o esquema OpenAPI.

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

Arquivo de esquema completo

title: ImageClassificationSingleLabel
description: >
 Import and export format for importing/exporting images together with
 single-label classification annotation. 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`.
 classificationAnnotation:
   type: object
   description: Single classification Annotation on 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.
     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

Linhas JSON

JSON em cada linha:


{
  "imageGcsUri": "gs://bucket/filename.ext",
  "classificationAnnotation": {
    "displayName": "LABEL",
    "annotationResourceLabels": {
        "aiplatform.googleapis.com/annotation_set_name": "displayName",
        "env": "prod"
      }
   },
  "dataItemResourceLabels": {
    "aiplatform.googleapis.com/ml_use": "training/test/validation"
  }
}

Observações sobre o 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"

    Em que value é um dos nomes de exibição 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 uso de machine learning do item de dados:
    • "aiplatform.googleapis.com/ml_use" : "training/test/validation"

Exemplo de linhas JSON: image_classification_single_label.jsonl:


{"imageGcsUri": "gs://bucket/filename1.jpeg",  "classificationAnnotation": {"displayName": "daisy"}, "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "test"}}
{"imageGcsUri": "gs://bucket/filename2.gif",  "classificationAnnotation": {"displayName": "dandelion"}, "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "training"}}
{"imageGcsUri": "gs://bucket/filename3.png",  "classificationAnnotation": {"displayName": "roses"}, "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "training"}}
{"imageGcsUri": "gs://bucket/filename4.bmp",  "classificationAnnotation": {"displayName": "sunflowers"}, "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "training"}}
{"imageGcsUri": "gs://bucket/filename5.tiff",  "classificationAnnotation": {"displayName": "tulips"}, "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "validation"}}
...

CSV

Formato CSV:

[ML_USE],GCS_FILE_PATH,[LABEL]
Lista de colunas
  • ML_USE (opcional): para fins de divisão de dados ao treinar um modelo. Use TRAINING, TEST, ou VALIDATION. Para mais informações sobre a divisão de dados manual, consulte Sobre a divisão de dados para modelos do AutoML.
  • GCS_FILE_PATH: este campo contém o URI do Cloud Storage para a imagem. 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 (opcional).

Exemplo de CSV - image_classification_single_label.csv:

test,gs://bucket/filename1.jpeg,daisy
training,gs://bucket/filename2.gif,dandelion
gs://bucket/filename3.png
gs://bucket/filename4.bmp,sunflowers
validation,gs://bucket/filename5.tiff,tulips
...
    

Classificação de vários rótulos

Requisitos de dados

  • Dados de treinamento: os formatos de imagem a seguir são compatíveis com o treinamento do modelo. Depois que a API Vertex AI pré-processa essas imagens importadas, elas são usadas como dados para treinar um modelo. O tamanho máximo do arquivo é de 30 MB.
    • JPEG
    • GIF
    • PNG
    • BMP
    • ICO
  • Dados de previsão: os formatos de imagem a seguir são compatíveis com a solicitação de uma consulta (consulta) para o modelo. O tamanho máximo do arquivo é de 1,5 MB.
    • JPEG
    • GIF
    • PNG
    • WEBP
    • BMP
    • TIFF
    • ICO

    Práticas recomendadas para dados de imagem usados para treinar modelos do AutoML

    As práticas recomendadas a seguir se aplicam a conjuntos de dados que treinam modelos usando o AutoML.

  • Os modelos do AutoML são otimizados para fotografias de objetos reais.
  • 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 envolver imagens borradas e de baixa resolução (como de uma câmera de segurança), seus dados de treinamento precisarão ser compostos por imagens borradas de baixa resolução. Em geral, pense também em fornecer vários ângulos, resoluções e planos de fundo para suas imagens de treinamento.
  • Os modelos da Vertex AI geralmente não preveem rótulos que pessoas não possam atribuir. Então, se um humano não puder ser treinado para atribuir rótulos olhando a imagem por 1 ou 2 segundos, o modelo provavelmente não poderá ser treinado para fazer isso também.
  • Recomendamos cerca de 1.000 imagens de treinamento por rótulo. O mínimo por rótulo é 10. Em geral, são necessários mais exemplos por rótulo para treinar modelos com vários rótulos por imagem, e os resultados são mais difíceis de interpretar.
  • O modelo funciona melhor quando há no máximo 100 vezes mais imagens para o rótulo mais comum do que para o menos comum. Recomendamos remover rótulos de frequência muito baixa.
  • Pense em incluir um rótulo None_of_the_above e imagens que não correspondam a nenhum dos rótulos definidos. Por exemplo, para um conjunto de dados de flores, inclua imagens de flores fora das variedades rotuladas e identifique-as como None_of_the_above.

Arquivo de esquema YAML

Use o seguinte arquivo de esquema de acesso público para importar anotações de classificação de imagem de vários rótulos. Esse arquivo de esquema determina o formato dos arquivos de entrada de dados. A estrutura desse arquivo segue o esquema OpenAPI.

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

Arquivo de esquema completo

title: ImageClassificationMultiLabel
description: >
 Import and export format for importing/exporting images together with
 multi-label classification 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`.
 classificationAnnotations:
   type: array
   description: Multiple classification Annotations on the image.
   items:
     type: object
     description: Classification annotation.
     properties:
       displayName:
         type: string
         description: >
           It will be imported as/exported from AnnotationSpec's display name,
           i.e. the name of the label/class.
       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

Linhas JSON

JSON em cada linha:


{
  "imageGcsUri": "gs://bucket/filename.ext",
  "classificationAnnotations": [
    {
      "displayName": "LABEL1",
      "annotationResourceLabels": {
        "aiplatform.googleapis.com/annotation_set_name":"displayName",
        "label_type": "flower_type"
      }
    },
    {
      "displayName": "LABEL2",
      "annotationResourceLabels": {
        "aiplatform.googleapis.com/annotation_set_name":"displayName",
        "label_type": "image_shot_type"
      }
    }
  ],
  "dataItemResourceLabels": {
    "aiplatform.googleapis.com/ml_use": "training/test/validation"
  }
}

Observações sobre o 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"

    Em que value é um dos nomes de exibição 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 uso de machine learning do item de dados:
    • "aiplatform.googleapis.com/ml_use" : "training/test/validation"

Exemplo de linhas JSON: image_classification_multi_label.jsonl:


{"imageGcsUri": "gs://bucket/filename1.jpeg",  "classificationAnnotations": [{"displayName": "daisy"}, {"displayName": "full_shot"}], "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "test"}}
{"imageGcsUri": "gs://bucket/filename2.gif",  "classificationAnnotations": [{"displayName": "dandelion"}, {"displayName": "medium_shot"}], "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "training"}}
{"imageGcsUri": "gs://bucket/filename3.png",  "classificationAnnotations": [{"displayName": "roses"}, {"displayName": "extreme_closeup"}], "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "training"}}
{"imageGcsUri": "gs://bucket/filename4.bmp",  "classificationAnnotations": [{"displayName": "sunflowers"}, {"displayName": "closeup"}], "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "training"}}
{"imageGcsUri": "gs://bucket/filename5.tiff",  "classificationAnnotations": [{"displayName": "tulips"}, {"displayName": "extreme_closeup"}], "dataItemResourceLabels": {"aiplatform.googleapis.com/ml_use": "validation"}}
...

CSV

Formato CSV:

[ML_USE],GCS_FILE_PATH,[LABEL1,LABEL2,...LABELn]
Lista de colunas
  • ML_USE (opcional): para fins de divisão de dados ao treinar um modelo. Use TRAINING, TEST, ou VALIDATION. Para mais informações sobre a divisão de dados manual, consulte Sobre a divisão de dados para modelos do AutoML.
  • GCS_FILE_PATH: este campo contém o URI do Cloud Storage para a imagem. 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 (opcional).

Exemplo de CSV - image_classification_multi_label.csv:

test,gs://bucket/filename1.jpeg,daisy,full_shot
training,gs://bucket/filename2.gif,dandelion,medium_shot
gs://bucket/filename3.png
gs://bucket/filename4.bmp,sunflowers,closeup
validation,gs://bucket/filename5.tiff,tulips,extreme_closeup
...