Preparar datos de entrenamiento de imágenes para la detección de objetos

En esta página, se describe cómo preparar datos de entrenamiento de imágenes para usarlos en un conjunto de datos de Vertex AI a fin de entrenar un modelo de detección de objetos de imagen.

En la siguiente sección, se incluye información sobre los requisitos de datos, el archivo de esquema de entrada/salida y el formato de los archivos de importación de datos (líneas JSONL y CSV) que el esquema define.

Detección de objetos

Requisitos de los datos

Requisitos generales de imagen
Tipos de archivos admitidos
  • JPEG
  • PNG
  • GIF
  • BMP
  • ICO
Tipos de imágenes

Los modelos de AutoML están optimizados para fotografías de objetos del mundo real.

Tamaño del archivo de imagen de entrenamiento (MB) Tamaño máximo: 30 MB.
Tamaño del archivo de imagen de predicción* (MB) Tamaño máximo: 1.5 MB.
Tamaño de la imagen (píxeles)

1,024 por 1,024 píxeles como máximo sugerido.

En imágenes mucho más grandes que 1,024 píxeles por 1,024 píxeles, puede perderse cierta calidad durante el proceso de normalización de imágenes de Vertex AI.

Requisitos de cuadro de límite y etiquetas
Los siguientes requisitos se aplican a los conjuntos de datos que se usan para entrenar modelos de AutoML.
Etiqueta instancias para entrenamiento

10 anotaciones (instancias) como mínimo.

Requisitos de anotación

Para cada etiqueta, debes tener al menos 10 imágenes, cada una con al menos una anotación (cuadro de límite y etiqueta).

Sin embargo, para entrenar los modelos, se recomienda el uso de alrededor de 1,000 anotaciones por etiqueta. En general, mientras más imágenes tengas por etiqueta, mejor funcionará el modelo.

Proporción de etiquetas (de la etiqueta más común a la menos común):

El modelo funciona mejor cuando hay, como máximo, 100 veces más imágenes destinadas a la etiqueta más común que a la menos común.

Para el rendimiento del modelo, se recomienda quitar las etiquetas de muy baja frecuencia.

Longitud perimetral del cuadro de límite

Al menos 0.01 * longitud de un lado de la imagen. Por ejemplo, una imagen de 1,000 * 900 píxeles requeriría cuadros de límite de al menos 10 * 9 píxeles.

Tamaño mínimo del cuadro de límite: 8 píxeles por 8 píxeles.

Los siguientes requisitos se aplican a los conjuntos de datos usados para entrenar modelos de AutoML o modelos personalizados.
Cuadros de límite por imagen distinta Máximo de 500.
Cuadros de límite que se muestran en una solicitud de predicción

100 (de forma predeterminada), 500 como máximo.

Datos de entrenamiento y requisitos de los conjuntos de datos
Los siguientes requisitos se aplican a los conjuntos de datos que se usan para entrenar modelos de AutoML.
Características de la imagen de entrenamiento

Los datos de entrenamiento deben parecerse lo máximo posible a los datos sobre los que se harán las predicciones.

Por ejemplo, si tu caso práctico implica imágenes desenfocadas y de baja resolución (como las de una cámara de seguridad), los datos de entrenamiento deben estar compuestos por imágenes con esas características. En general, se recomienda proporcionar imágenes de entrenamiento con varios ángulos, resoluciones y fondos.

Por lo general, los modelos de Vertex AI no pueden predecir las etiquetas que las personas no pueden asignar. Por lo tanto, si no se puede entrenar a una persona para que asigne etiquetas con tan solo mirar la imagen durante 1 o 2 segundos, es probable que tampoco se pueda entrenar al modelo para que lo haga.

Procesamiento previo de imágenes internas

Después de que se importan las imágenes, Vertex AI realiza el procesamiento previo de los datos. Las imágenes procesadas de forma previa son los datos reales que se usaron para entrenar el modelo.

El procesamiento previo de imágenes (cambio de tamaño) se produce cuando el borde más pequeño de la imagen es mayor que 1,024 píxeles. En el caso en el que el lado más pequeño de la imagen sea superior a 1,024 píxeles, ese tamaño más pequeño se reduce a 1024 píxeles. Los cuadros de límite especificados y el lado más grande se reducen la misma cantidad que el lado más pequeño. Por lo tanto, las anotaciones reducidas (cuadros de límite y etiquetas) se quitan si tienen menos de 8 x 8 píxeles.

Las imágenes con un lado inferior menor o igual que 1,024 píxeles no están sujetas a cambios de tamaño del preprocesamiento.

Los siguientes requisitos se aplican a los conjuntos de datos usados para entrenar modelos de AutoML o modelos personalizados.
Imágenes en cada conjunto de datos 150,000 como máximo
Total de cuadros de límite anotados en cada conjunto de datos 1,000,000 como máximo
Número de etiquetas en cada conjunto de datos 1 como mínimo, 1,000 como máximo

Archivo del esquema YAML

Usa el siguiente archivo de esquema de acceso público para importar anotaciones de detección de objetos en imágenes (cuadros de límite y etiquetas). Este archivo de esquema dicta el formato de los archivos de entrada de datos. La estructura de este archivo sigue el esquema de OpenAPI.

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

Archivo del 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

Archivos de entrada

Líneas JSON

JSON en cada línea:


{
  "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 campos:

  • imageGcsUri: es el único campo obligatorio.
  • annotationResourceLabels: puede contener cualquier cantidad de pares de strings de clave-valor. El único par clave-valor reservado por el sistema es el siguiente:
    • "aiplatform.googleapis.com/annotation_set_name": "value"

    En el ejemplo anterior, value es uno de los nombres de visualización de los conjuntos de anotaciones existentes en el conjunto de datos.

  • dataItemResourceLabels: puede contener cualquier cantidad de pares de strings de clave-valor. El único par clave-valor reservado por el sistema es el siguiente, que especifica el conjunto de uso del aprendizaje automático del elemento de datos:
    • "aiplatform.googleapis.com/ml_use" : "training/test/validation"

Ejemplo de líneas 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 columnas
  • ML_USE (opcional). Para la división de datos con el entrenamiento de un modelo. Usa TRAINING, TEST o VALIDATION. Para obtener más información sobre la división manual de datos, consulta Información acerca de las divisiones de datos para modelos de AutoML.
  • GCS_FILE_PATH. Este campo contiene el URI de Cloud Storage para la imagen. Los URI de Cloud Storage distinguen entre mayúsculas y minúsculas.
  • LABEL. Las etiquetas deben comenzar con una letra y solo deben contener letras, números y guiones bajos.
  • BOUNDING_BOX: Un cuadro de límite de un objeto en la imagen. La especificación de un cuadro de límite involucra más de una columna.
    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 se especifica mediante valores de coordenadas x, y. Las coordenadas son valores de punto flotante normalizados [0,1]; 0.0 es X_MIN o Y_MIN, 1.0 es X_MAX o Y_MAX.

    Por ejemplo, un cuadro de límite para toda la imagen se expresa como (0.0,0.0,,,1.0,1.0,,) o (0.0,0.0,1.0,0.0,1.0,1.0,0.0,1.0).

    El cuadro de límite de un objeto se puede especificar de las siguientes dos maneras:

    1. Dos vértices (dos conjuntos de coordenadas x,y) que son puntos diagonales opuestos del rectángulo:
      A. X_MIN,Y_MIN
      C. X_MAX,Y_MAX
      como se muestra en este ejemplo:
      A,,C,
      X_MIN,Y_MIN,,,X_MAX,Y_MAX,,.
    2. Los cuatro vértices especificados como se muestra en:
      X_MIN,Y_MIN,X_MAX,Y_MIN, X_MAX,Y_MAX,X_MIN,Y_MAX,
      Si los cuatro vértices especificados no forman un rectángulo paralelo a los bordes de la imagen, Vertex AI especifica los vértices que forman ese rectángulo.

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