Formación y supervisión remotas de Ultralytics YOLOv5 mediante ClearML

Equipo Ultralytics

4 min leer

21 de octubre de 2022

Explore nuestra asociación con ClearML para disfrutar de una experiencia Ultralytics YOLOv5 mejorada con una integración ML perfecta, seguimiento de experimentos y mucho más.

En Ultralytics nos asociamos comercialmente con otras startups para que nos ayuden a financiar la investigación y el desarrollo de nuestras increíbles herramientas de código abierto, como YOLOv5, para que sigan siendo gratuitas para todo el mundo. Este artículo puede contener enlaces de afiliación a dichos socios.

ClearML es nuestro socio más reciente: una caja de herramientas de código abierto diseñada para ahorrarle tiempo.

Con la misión de acelerar la adopción de ML, ClearML facilita la integración de ML en cualquier producto de software y hardware existente.

Esta integración simplifica aún más el entrenamiento de un modelo YOLOv5 y el uso del gestor de experimentos ClearML para su seguimiento automático. Puede especificar fácilmente un ID de versión del conjunto de datos ClearML como entrada de datos, y se utilizará automáticamente para entrenar su modelo.

Lleve el seguimiento de sus experimentos al siguiente nivel

  • Realiza un seguimiento de cada entrenamiento YOLOv5 en el gestor de experimentos.
  • Versione y acceda fácilmente a sus datos de formación personalizados con la herramienta integrada de versionado de datos ClearML.
  • Obtenga el mejor mAP mediante la optimización de hiperparámetros ClearML.
  • Convierta su modelo YOLOv5 recién entrenado en una API con sólo unos comandos utilizando ClearML Serving.

Depende de ti cuántas de estas herramientas quieras utilizar, puedes ceñirte al gestor de experimentos o encadenarlas todas en un impresionante pipeline.

Puesta a punto

Para realizar un seguimiento de tus experimentos y datos, ClearML necesita comunicarse con un servidor. Para ello tienes dos opciones: registrarte gratuitamente en el servicio alojado ClearML o configurar tu propio servidor, ver aquí.

Incluso el servidor es de código abierto, así que si manejas datos confidenciales, ¡no hay problema!

  1. Instale el paquete clearml python: pip install clearml
  2. Conecte el SDK ClearML al servidor creando credenciales (vaya arriba a la derecha a Configuración → Espacio de trabajo → Crear nuevas credenciales), a continuación ejecute el siguiente comando y siga las instrucciones: clearml-init

Y ¡voilà! Estás listo para empezar...

Entrenamiento de YOLOv5 con ClearML

Para activar el seguimiento de experimentos ClearML, basta con instalar el paquete pip ClearML.

pip install clearml

Esto permitirá la integración con el script de entrenamiento YOLOv5. A partir de ahora, cada ejecución de entrenamiento será capturada y almacenada por el gestor de experimentos ClearML. Si quieres cambiar el project_name o task_name, dirígete a nuestro logger personalizado, donde puedes cambiarlo: utils/loggers/clearml/clearml_utils.py

python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cache

Esto capturará:

  • Código fuente + cambios no comprometidos
  • Paquetes instalados
  • (Hiper)parámetros
  • Ficheros modelo (utilice --save-period n para guardar un punto de control cada n épocas)
  • Salida de la consola
  • Escalares (mAP_0,5, mAP_0,5:0,95, precisión, recall, pérdidas, tasas de aprendizaje, ...)
  • Información general como detalles de la máquina, tiempo de ejecución, fecha de creación, etc.
  • Todos los gráficos producidos, como el correlograma de etiquetas y la matriz de confusión
  • Imágenes con cuadros delimitadores por época
  • Mosaico por época
  • Imágenes de validación por época

No está nada mal. Ahora podemos visualizar toda esta información en la interfaz ClearML para tener una visión general del progreso de nuestro entrenamiento. Añade columnas personalizadas a la vista de tabla (como, por ejemplo, mAP_0.5) para poder ordenar fácilmente el modelo de mejor rendimiento. O seleccione varios experimentos y compárelos directamente.

Podemos hacer aún más con toda esta información, como la optimización de hiperparámetros y la ejecución remota, así que sigue leyendo para aprender cómo.

Gestión de versiones de conjuntos de datos

Versionar tus datos separadamente de tu código es generalmente una buena idea y facilita también la adquisición de la última versión. Este repositorio admite el suministro de un ID de versión del conjunto de datos, y se asegurará de obtener los datos si aún no están allí. Además, este flujo de trabajo también guarda el ID del conjunto de datos utilizado como parte de los parámetros de la tarea, por lo que siempre sabrá con certeza qué datos se utilizaron en cada experimento.

Datos, Ultralytics YOLOv5 y ClearML

Prepare su conjunto de datos

El repositorio YOLOv5 admite diferentes conjuntos de datos mediante archivos YAML que contienen su información. Por defecto, los conjuntos de datos se descargan en la carpeta ../datasets en relación con la carpeta raíz del repositorio. Así, si ha descargado el conjunto de datos coco128 utilizando el enlace en el YAML o con los scripts proporcionados por yolov5, obtendrá esta estructura de carpetas:

..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt

Pero puede ser cualquier conjunto de datos que desee. Siéntete libre de utilizar los tuyos propios, siempre que mantengas esta estructura de carpetas.

A continuación, ⚠️copy el archivo YAML correspondiente a la raíz del conjunto de datos folder⚠️. Estos archivos YAML contienen la información que ClearML necesitará para utilizar correctamente el conjunto de datos. También puedes hacerlo tú mismo, por supuesto, sólo tienes que seguir la estructura de los YAML de ejemplo.

Básicamente, necesitamos las siguientes claves: path, train, test, val, nc, names.

..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # ← ¡AQUÍ!
|_ LICENCIA
|_ README.txt

Cargue su conjunto de datos

Para obtener este conjunto de datos en ClearML como un conjunto de datos versionado, vaya a la carpeta raíz del conjunto de datos y ejecute el siguiente comando:

cd coco128

clearml-data sync --project YOLOv5 --name coco128 --folder .


El comando clearml-data sync es en realidad un comando abreviado. También puedes ejecutar estos comandos uno tras otro:

# Opcionalmente añade --parent si quieres basar

# esta versión en otra versión del conjunto de datos, ¡para que no se carguen archivos duplicados!

clearml-data create --name coco128 --project YOLOv5/p>

clearml-data add --files .

clearml-data close

Ejecutar el entrenamiento utilizando un conjunto de datos ClearML

Ahora que dispone de un conjunto de datos ClearML, puede utilizarlo de forma muy sencilla para entrenar modelos YOLOv5 personalizados.

python train.py --img 640 --batch 16 --epochs 3 --data clearml:// --weights yolov5s.pt --cache

Optimización de hiperparámetros

Ahora que ya tenemos nuestros experimentos y la versión de los datos, ¡es hora de ver qué podemos construir encima!

Utilizando la información del código, los paquetes instalados y los detalles del entorno, el experimento en sí es ahora completamente reproducible. De hecho, ClearML permite clonar un experimento e incluso cambiar sus parámetros. A continuación, podemos volver a ejecutarlo con estos nuevos parámetros de forma automática, ¡esto es básicamente lo que hace HPO!

Para ejecutar la optimización de hiperparámetros localmente, hemos incluido un script preconfigurado. Simplemente asegúrese de que una tarea de entrenamiento se ha ejecutado al menos una vez, por lo que está en el gestor de experimentos ClearML, esencialmente la clonaremos y cambiaremos sus hiperparámetros.

Tendrás que rellenar el ID de esta tarea de plantilla en el script que se encuentra en utils/loggers/clearml/hpo.py y luego simplemente ejecutarlo. Puedes cambiar task.execute_locally() por task.execute() para ponerla en una cola ClearML y que un agente remoto trabaje en ella en su lugar.

# Para utilizar optuna, instálelo primero, de lo contrario puede cambiar el optimizador para que sea sólo RandomSearch pip install optuna python utils/loggers/clearml/hpo.py

HPO, Ultralytics YOLOv5 y ClearML

Ejecución remota (avanzada)

Ejecutar HPO localmente es muy práctico, pero ¿qué pasa si queremos ejecutar nuestros experimentos en una máquina remota? Tal vez tengas acceso a una máquina GPU muy potente in situ, o dispongas de algo de presupuesto para utilizar GPUs en la nube. Aquí es donde entra en juego el agente ClearML.

Compruebe aquí lo que puede hacer el agente:

En resumen: cada experimento rastreado por el gestor de experimentos contiene suficiente información para reproducirlo en una máquina diferente (paquetes instalados, cambios no comprometidos, etc.). Así que un agente ClearML hace precisamente eso: escucha una cola de tareas entrantes y cuando encuentra una, recrea el entorno y lo ejecuta mientras sigue informando de escalares, gráficos, etc. al gestor de experimentos.

Puedes convertir cualquier máquina (una VM en la nube, una máquina GPU local, tu propio portátil) en un agente ClearML con sólo ejecutarlo:

clearml-agent daemon --queue [--docker]

Clonación, edición y puesta en cola

Con nuestro agente en marcha, podemos darle algo de trabajo. ¿Recuerdas de la sección HPO que podemos clonar una tarea y editar los hiperparámetros? También podemos hacerlo desde la interfaz.

🪄 Clona el experimento haciendo clic con el botón derecho.

🎯 Edita los hiperparámetros a lo que desees que sean

⏳ Ponga en cola la tarea en cualquiera de las colas haciendo clic con el botón derecho del ratón.

Enqueue, Ultralytics YOLOv5 y ClearML

Ejecución remota de una tarea

Ahora puedes clonar una tarea como hemos explicado antes, o simplemente marcar tu script actual añadiendo task.execute_remotely() y al ejecutarse, se pondrá en una cola, ¡para que el agente empiece a trabajar en ella!

Para ejecutar el script de entrenamiento YOLOv5 remotamente, todo lo que tienes que hacer es añadir esta línea al script training.py después de que el logger ClearML haya sido instanciado:

# ... # Loggers data_dict = None if RANK in {-1, 0}: loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # loggers instance if loggers.clearml: loggers.clearml.task.execute_remotely(queue='my_queue') # <------ ADD THIS LINE # Data_dict is either None is user did not choose for ClearML dataset or is filled in by ClearML data_dict = loggers.clearml.data_dict # ...

Al ejecutar el script de entrenamiento después de este cambio, python ejecutará el script hasta esa línea, tras lo cual empaquetará el código y lo enviará a la cola en su lugar.

Autoescalado de trabajadores

ClearML también viene con escaladores automáticos. Esta herramienta creará automáticamente nuevas máquinas remotas en la nube de su elección (AWS, GCP, Azure) y las convertirá en agentes ClearML para usted siempre que se detecten experimentos en la cola. Una vez procesadas las tareas, el autoescalador apagará automáticamente las máquinas remotas, ¡y usted dejará de pagar! Echa un vistazo al vídeo de inicio del autoescalador a continuación.

¿Tiene alguna pregunta? Únase a nuestra comunidad y déjenos su pregunta hoy mismo.

¡Construyamos juntos el futuro
de la IA!

Comience su viaje con el futuro del aprendizaje automático

Empezar gratis
Enlace copiado en el portapapeles