Entrena un modelo de detección de objetos con AutoML Vision Edge

Un modelo de detección de objetos es similar al modelo de etiquetado de imágenes, pero en lugar de asignar etiquetas a imágenes completas, las asigna a regiones de las imágenes. Puedes usar modelos de detección de objetos para reconocer y ubicar objetos en una imagen o realizar un seguimiento de los movimientos de un objeto en una serie de imágenes.

Para entrenar un modelo de detección de objetos, debes proporcionar a AutoML Vision Edge un conjunto de imágenes con las etiquetas de objeto y los límites correspondientes. AutoML Vision Edge usa este conjunto de datos para entrenar un modelo nuevo en la nube, que puedes usar para detectar objetos en el dispositivo.

Antes de comenzar

1. Reúne tus datos de entrenamiento

Primero, debes reunir un conjunto de datos de entrenamiento compuesto de imágenes etiquetadas. Ten en cuenta los siguientes lineamientos:

  • Las imágenes deben estar en uno de los siguientes formatos: JPEG, PNG, GIF, BMP, ICO.

  • Cada imagen debe tener 30 MB o menos. Ten en cuenta que AutoML Vision Edge reduce la escala de la mayoría de las imágenes durante el preprocesamiento, por lo que, generalmente, no habrá ningún beneficio de precisión si proporcionas imágenes de muy alta resolución.

  • Incluye al menos 10 (y preferiblemente 100 o más) ejemplos de cada etiqueta.

  • Incluye varios ángulos, resoluciones y fondos para cada etiqueta.

  • Los datos de entrenamiento deben ser lo más parecidos posible a los datos sobre los que se harán las predicciones. Por ejemplo, si tu caso de uso incluye imágenes borrosas y de baja resolución (como las de una cámara de seguridad), tus datos de entrenamiento deben estar compuestos por imágenes borrosas de baja resolución.

  • Los modelos generados por AutoML Vision Edge se optimizan para fotografías de objetos en el mundo real. Es posible que no funcionen bien para radiografías, dibujos a mano, documentos escaneados, recibos, etcétera.

    Además, por lo general, los modelos no pueden predecir etiquetas que las personas no pueden asignar. De manera que si una persona no puede asignar etiquetas con solo observar la imagen durante 1 o 2 segundos, probablemente el modelo tampoco pueda entrenarse para hacerlo.

Cuando tengas listas las imágenes de entrenamiento, prepáralas para importarlas a Google Cloud. Tienes estas dos opciones:

Opción 1: Cloud Storage con índice CSV

Sube tus imágenes de entrenamiento a Google Cloud Storage y prepara un archivo CSV en el que se enumeren las URL de cada imagen y, si lo deseas, las etiquetas de objeto y las regiones de límite correctas para cada imagen. Esta opción es útil cuando se usan conjuntos de datos muy grandes.

Por ejemplo, sube tus imágenes a Cloud Storage y prepara un archivo CSV como el siguiente:

gs://your-training-data-bucket/001.jpg,accordion,0.2,0.4,,,0.3,0.5,,
gs://your-training-data-bucket/001.jpg,tuba,0.2,0.5,,,0.4,0.8,,
gs://your-training-data-bucket/002.jpg,accordion,0.2,0.2,,,0.9,0.8,,

Los cuadros de límite de objetos se especifican como coordenadas relativas en la imagen. Consulta Da formato a un archivo CSV de datos de entrenamiento.

Las imágenes deben almacenarse en un bucket que se encuentre en la región us-central1 y en la parte del proyecto de Google Cloud correspondiente de tu proyecto de Firebase.

Opción 2: Imágenes sin etiquetar

Etiqueta tus imágenes de entrenamiento y establece límites de objetos en Google Cloud Console después de subirlos. Esto solo se recomienda para conjuntos de datos pequeños. Consulta el siguiente paso.

2. Entrena tu modelo

A continuación, entrena un modelo con tus imágenes:

  1. Abre la página Vision Datasets en Google Cloud Console. Selecciona tu proyecto cuando se te solicite.

  2. Haz clic en Nuevo conjunto de datos, proporciona un nombre para el conjunto de datos, selecciona el tipo de modelo que quieres entrenar y haz clic en Crear conjunto de datos.

  3. En la pestaña Importar del conjunto de datos, sube tus imágenes de entrenamiento, un archivo ZIP con las imágenes de entrenamiento o un archivo CSV que contenga las ubicaciones de Cloud Storage a las que las subiste. Consulta la página Reúne tus datos de entrenamiento.

  4. Una vez que se complete la tarea de importación, usa la pestaña Imágenes para verificar los datos de entrenamiento.

  5. Si no subiste un CSV, establece los cuadros de límite alrededor de los objetos que deseas reconocer y etiqueta cada objeto para cada imagen.

  6. En la pestaña Entrenar, haz clic en Comenzar entrenamiento.

    1. Ingresa un nombre para el modelo y selecciona el tipo Edge.

    2. Configura las siguientes opciones de entrenamiento que rigen el rendimiento del modelo generado:

      Optimiza el modelo en función de lo siguiente: La configuración del modelo que usarás. Puedes entrenar modelos más pequeños y rápidos cuando sean importantes la latencia baja o el tamaño pequeño del paquete, o modelos más lentos y grandes cuando la precisión revista mayor importancia.
      Presupuesto por hora de procesamiento de nodo

      El tiempo máximo que se invierte en entrenar el modelo, en horas de procesamiento. Por lo general, un tiempo de entrenamiento mayor da como resultado un modelo más preciso.

      Ten en cuenta que el entrenamiento se puede finalizar en menos del tiempo especificado si el sistema determina que el modelo está optimizado y que un entrenamiento adicional no mejoraría la precisión. Solo se te facturarán las horas realmente utilizadas.

      Tiempos típicos de entrenamiento
      Conjuntos muy pequeños1 hora
      500 imágenes2 horas
      1,000 imágenes3 horas
      5,000 imágenes6 horas
      10,000 imágenes7 horas
      50,000 imágenes11 horas
      100,000 imágenes13 horas
      1,000,000 imágenes18 horas

3. Evalúa tu modelo

Cuando se complete el entrenamiento, puedes hacer clic en la pestaña Evaluar para ver las métricas de rendimiento del modelo.

Un uso importante de esta página es determinar el umbral de confianza más adecuado para tu modelo. Este umbral es la confianza mínima que debe tener el modelo para asignar una etiqueta a una imagen. Si mueves el control deslizante del Límite de confianza, puedes ver cómo diferentes umbrales afectan el rendimiento del modelo. El rendimiento del modelo se mide con dos métricas: precisión y recuperación.

En el contexto de la clasificación de imágenes, la precisión es la relación entre la cantidad de imágenes que se etiquetaron correctamente y la cantidad de imágenes que etiquetó el modelo dado el umbral seleccionado. Cuando un modelo tiene alta precisión, asigna etiquetas de manera incorrecta con menos frecuencia (menos falsos positivos).

La recuperación es la relación entre la cantidad de imágenes que se etiquetaron correctamente y la cantidad de imágenes con contenido que el modelo debería haber podido etiquetar. Cuando un modelo tiene una recuperación alta, con menos frecuencia falla cuando no asigna ninguna etiqueta (menos falsos negativos).

Llevar a cabo la optimización para la precisión o la recuperación depende de tu caso de uso. Consulta la Guía para principiantes de AutoML Vision y la Guía para el AA inclusivo: AutoML a fin de obtener más información.

Cuando encuentres un umbral de confianza que genere métricas con las que te sientas cómodo, toma nota de ello, ya que lo usarás para configurar el modelo en tu app. Puedes usar esta herramienta cuando quieras para obtener un valor de umbral apropiado.

4. Publica o descarga tu modelo

Si estás satisfecho con el rendimiento del modelo y quieres usarlo en una app, tienes tres opciones, entre las que puedes elegir cualquier combinación: implementar el modelo para predicciones en línea, publicar el modelo en Firebase o descargar el modelo y empaquetarlo con tu app.

Implementa el modelo

En la pestaña Probar y usar del conjunto de datos, puedes implementar el modelo para realizar predicciones en línea, que ejecutan el modelo en la nube. Esta opción se describe en la documentación de Cloud AutoML. Los documentos de este sitio abordan las dos opciones restantes.

Publica el modelo

Si publicas el modelo en Firebase, puedes actualizarlo sin lanzar una nueva versión de la app, y puedes usar Remote Config y A/B Testing para entregar de forma dinámica diferentes modelos a distintos conjuntos de usuarios.

Si eliges proporcionar el modelo únicamente mediante el alojamiento con Firebase y no empaquetarlo con tu app, puedes reducir el tamaño de descarga inicial de la app. Sin embargo, ten en cuenta que, si el modelo no se empaqueta con la aplicación, las funcionalidades relacionadas con el modelo no estarán disponibles hasta que la app lo descargue por primera vez.

Para publicar tu modelo, puedes usar cualquiera de los dos métodos que se indican a continuación:

  • Descarga el modelo de TF Lite desde la página Probar y usar de tu conjunto de datos en Google Cloud Console y, luego, súbelo en la página Modelo personalizado de Firebase console. Por lo general, esta es la forma más fácil de publicar un solo modelo.
  • Publica el modelo directamente desde tu proyecto de Google Cloud en Firebase con el SDK de Admin. Puedes usar este método para publicar por lotes varios modelos o crear canalizaciones de publicación automatizada.

Para publicar el modelo con la API de Model Management del SDK de Admin, haz lo siguiente:

  1. Instala e inicializa el SDK.

  2. Publica el modelo.

    Deberás especificar el identificador de recursos del modelo, que es una string similar a la de este ejemplo:

    projects/PROJECT_NUMBER/locations/us-central1/models/MODEL_ID
    PROJECT_NUMBER El número de proyecto del bucket de Cloud Storage que contiene el modelo. Este puede ser tu proyecto de Firebase o algún otro proyecto de Google Cloud. Encuentra este valor en la página Configuración de Firebase console o en el panel de Google Cloud Console.
    MODEL_ID El ID del modelo, que obtuviste de la API de Cloud para AutoML.

    Python

    # First, import and initialize the SDK.
    
    # Get a reference to the AutoML model
    source = ml.TFLiteAutoMlSource('projects/{}/locations/us-central1/models/{}'.format(
        # See above for information on these values.
        project_number,
        model_id
    ))
    
    # Create the model object
    tflite_format = ml.TFLiteFormat(model_source=source)
    model = ml.Model(
        display_name="example_model",  # This is the name you will use from your app to load the model.
        tags=["examples"],             # Optional tags for easier management.
        model_format=tflite_format)
    
    # Add the model to your Firebase project and publish it
    new_model = ml.create_model(model)
    new_model.wait_for_unlocked()
    ml.publish_model(new_model.model_id)
    

    Node.js

    // First, import and initialize the SDK.
    
    (async () => {
      // Get a reference to the AutoML model. See above for information on these
      // values.
      const automlModel = `projects/${projectNumber}/locations/us-central1/models/${modelId}`;
    
      // Create the model object and add the model to your Firebase project.
      const model = await ml.createModel({
        displayName: 'example_model',  // This is the name you use from your app to load the model.
        tags: ['examples'],  // Optional tags for easier management.
        tfliteModel: { automlModel: automlModel },
      });
    
      // Wait for the model to be ready.
      await model.waitForUnlocked();
    
      // Publish the model.
      await ml.publishModel(model.modelId);
    
      process.exit();
    })().catch(console.error);
    

Descarga y empaqueta el modelo con tu app

Si empaquetas el modelo con la app, puedes asegurarte de que las funciones de AA de tu aplicación todavía estén activas cuando el modelo alojado en Firebase no esté disponible.

Si publicas el modelo y lo empaquetas con tu app, esta usará la última versión disponible.

Para descargar el modelo, haz clic en TF Lite en la página Probar y usar de tu conjunto de datos.

Próximos pasos

Ahora que publicaste o descargaste el modelo, aprende a usarlo en tus apps para iOS+ y Android.