Implementando el aprendizaje activo

Uso de Active Learning para mejorar rápidamente sus modelos en Roboflow .

Written by Mohamed Traore

Last published at: June 30th, 2022

"El aprendizaje activo es una estrategia de entrenamiento de aprendizaje automático que permite que un algoritmo identifique de manera proactiva subconjuntos de datos de entrenamiento que pueden mejorar el rendimiento de manera más eficiente. Más simple: el aprendizaje activo es una estrategia para identificar qué ejemplos específicos en nuestros datos de entrenamiento pueden mejorar mejor el rendimiento del modelo. Es un subconjunto de estrategias de aprendizaje automático humano en el circuito para mejorar nuestros modelos aprovechando al máximo nuestros datos de entrenamiento". - ¿Qué es el Aprendizaje Activo?

La belleza de Active Learning es que puede ayudarlo a crear un modelo más sólido con menos imágenes. Las rondas de entrenamiento que se requerirán para mantener su modelo funcionando bien y mejorarlo disminuirán rápidamente con el tiempo.

Hay 3 formas clave de implementar el aprendizaje activo:

1. Recoge continuamente nuevas imágenes al azar

Puede codificar el muestreo aleatorio en su solución de implementación.

El muestreo aleatorio ayudará a traer más imágenes a su proyecto que sean representativas del verdadero entorno de implementación.

ventajas:

  1. El modelo aprenderá rápidamente qué detectar y qué no detectar dentro del entorno en el que está presente.
  2. Más imágenes que contengan los objetos de interés (lo que nuestro modelo está entrenado para detectar): después de etiquetar y volver a entrenar, ¡nuestro modelo funcionará mucho mejor dentro de su entorno de implementación!

Ejemplo:

Está ejecutando la inferencia (implementando su modelo) durante un período de 6 horas. En este período de tiempo de 6 horas, configura su dispositivo mediante programación (es decir, NVIDIA Jetson u OAK Device) para guardar una cantidad determinada de imágenes cada 15 minutos (es decir, "guardar 3 imágenes cada 15 minutos"). Devuelva las imágenes recopiladas a Roboflow o guárdelas en sus dispositivos/sistema para cargarlas en el futuro en Roboflow .

  • Con el tiempo, verá menos detecciones falsas.
    • Además, obtendrá algunas imágenes con los objetos de interés (lo que su modelo está capacitado para "ver"), independientemente del nivel de confianza .
    • La ventaja de esto es que su modelo se reforzará para continuar haciendo un "buen trabajo" en los objetos de interés y mejorar donde ha hecho un "mal trabajo" (detección de confianza baja o no detección cuando debería haber habido uno) independientemente del nivel de confianza en el que se detectó.

2. Recopile nuevas imágenes por debajo de un umbral de confianza dado

Este método se puede emplear seleccionando un umbral de confianza para las detecciones y requiriendo (dentro de su propio código) que se muestreen y envíen todas las detecciones de objetos (que el modelo está capacitado para reconocer) con un umbral de confianza inferior al ___% o 0.___ regrese a su espacio de trabajo en Roboflow para un examen más detallado, es decir, pruebas en la aplicación web alojada o la API de inferencia para encontrar el problema + etiquetado y reentrenamiento.

ventajas:

  1. El modelo aprenderá rápidamente qué detectar y qué no detectar dentro del entorno en el que está presente.
  2. El nivel de confianza para las detecciones comenzará a aumentar rápidamente, ya que esencialmente le está diciendo a su modelo (después de etiquetar y volver a entrenar), "oye, hiciste un mal trabajo aquí, esto es lo que se suponía que debías hacer".
  3. Más imágenes que contengan los objetos de interés (lo que nuestro modelo está entrenado para detectar): después de etiquetar y volver a entrenar, ¡nuestro modelo funcionará mucho mejor dentro de su entorno de implementación!

Ejemplos:

  • Comience con un umbral de confianza establecido del 40 %: cualquier objeto (o cada __ veces un objeto) detectado con un nivel de confianza inferior al 40 %, o 0,40, debe configurarse mediante programación para volver a Roboflow o almacenarse en sus dispositivos para cargarlos en el futuro en Roboflow .
    • Siguiente : Después de volver a entrenar y recibir mejores métricas de entrenamiento y/o más datos del entorno de producción, establezca el umbral de confianza en 50 %, y cualquier objeto detectado en un nivel de confianza inferior al 50 % o 0,50, debe configurarse programáticamente para regresar a Roboflow o almacenado en sus dispositivos/sistema para cargarlo en el futuro en Roboflow .
    • Más tarde : con el tiempo, podrá establecer un punto de referencia más alto para los niveles de confianza , como 60 %, 75 % u 80 %. La razón por la que no desea comenzar en estos niveles para los puntos de referencia de confianza es que recibirá una cantidad muy alta de detecciones falsas o detecciones con poca confianza con los modelos más nuevos.

3. Solicite a los usuarios de su aplicación que verifiquen las predicciones del modelo

ventajas:

  1. Los comentarios de los usuarios son una gran herramienta. Básicamente, obtiene más pares de ojos para ayudar con el control de calidad de su modelo.
  2. También puede agregar repo de errores, en caso de que el modelo no funcione en absoluto (es decir, alertas cuando el sistema o la aplicación fallan o el modelo se ejecuta pero no detecta nada).

Ejemplo:

  • Agregue " repo de errores" dentro de su tablero, aplicación móvil o como haya elegido para crear su producto de visión por computadora. Utilice estos repo de errores para identificar rápidamente formas de mejorar la funcionalidad de su producto de visión artificial y, lo que es más importante, asegúrese de que los usuarios tengan un modelo que no solo funcione bien, sino que esté preparado para mejorar rápidamente.
    • Tome las imágenes de los informes de errores y configúrelas programáticamente para devolverlas a repo o Roboflow en su sistema para cargarlas en el futuro en Roboflow .

Recursos para implementar el aprendizaje activo

Código de muestra

Primero, instale el paquete pip de Roboflow Python (PyPi)

# installing the Roboflow Python pip package
pip install roboflow
  1. Copie/pegue el bloque de código a continuación en VSCode, XCode, PyCharm, Spyder (u otro editor de código)
  2. Actualice los valores para el modelo [nombre], la versión del modelo, api_key y device_name dentro del objeto "rf".
  3. Guarde el archivo python en un directorio; asegúrese de anotar el nombre del directorio y el nombre del archivo, ya que los necesitaremos más adelante para que la implementación funcione .
from roboflow import Roboflow
import json
# private api key found in Roboflow > YOURWORKSPACE > Roboflow API
# NOTE: this is your private key, not publishable key!
# https://docs.roboflow.com/rest-api#obtaining-your-api-key
private_api_key = "INSERT API KEY HERE"

# gain access to your workspace
rf = Roboflow(api_key=private_api_key)
workspace = rf.workspace()

# you can obtain your model path from your project URL, it is located
# after the name of the workspace within the URL - you can also find your
# model path on the Example Web App for any dataset version trained
# with Roboflow Train
# https://docs.roboflow.com/inference/hosted-api#obtaining-your-model-endpoint
model_path = "INSERT MODEL PATH HERE"
project = workspace.project(f"{model_path}")

# be sure to replace with a path to your file
# if you run this in Colab, be sure to upload the file to colab, hover over
# the file name, and select the 3 dots on the right of the file name to copy
# the file path, and paste it as the value for "imgpath"
img_path = "INSERT IMAGE PATH HERE"

# establish number of retries to use in case of upload failure
project.upload(f"{img_path}", num_retry_uploads=3)

API de carga de Roboflow

La API de carga se puede usar para cargar imágenes en un nuevo proyecto

  • ejemplo : Proyecto 1 : Modelo implementado actualmente | Proyecto 2 : Imágenes de aprendizaje activo: imágenes recopiladas al azar | Proyecto 3 : Imágenes de aprendizaje activo: imágenes por debajo del umbral de confianza del 30 % | Proyecto 4: Imágenes de aprendizaje activo: imágenes por debajo de un umbral de confianza del 50 %

API de inferencia de Roboflow

Los scripts "InferenceHosted" y "UploadHosted" se utilizarán para imágenes alojadas en un servidor. Los scripts "InferenceLocal" y "UploadLocal" se deben usar para las imágenes que están alojadas en su dispositivo (es decir, el disco duro de la computadora o el dispositivo periférico).

Paquete Python de Roboflow