Yolo Vision Shenzhen
Shenzhen
Únete ahora

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

Equipo Ultralytics

4 minutos de lectura

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 la formación de un YOLOv5 y utilizar el gestor de experimentos ClearML para track 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 usar, puedes limitarte al gestor de experimentos o encadenarlas todas en un pipeline impresionante.

Configurando todo

Para track 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, por lo que si trabaja con 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.

¡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: clearml.py

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

Esto capturará:

  • Código fuente + cambios no confirmados
  • Paquetes instalados
  • (Hiper)parámetros
  • Archivos de modelo (use --save-period n para guardar un punto de control cada n épocas)
  • Salida de la consola
  • EscalaresmAP,5, mAP,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 bounding boxes 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.5) para poder ordenar fácilmente el modelo de mejor rendimiento. O seleccione varios experimentos y compárelos directamente.

Incluso podemos hacer mucho 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

Controlar las versiones de tus datos por separado de tu código es generalmente una buena idea y facilita la adquisición de la última versión tambié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 de eso, este flujo de trabajo también guarda el ID del conjunto de datos utilizado como parte de los parámetros de la tarea, ¡así que siempre sabrás con certeza qué datos se utilizaron en qué experimento!

Prepara tu 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 este puede ser cualquier conjunto de datos que desees. Siéntete libre de usar el tuyo propio, siempre y cuando 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
|_ coco128yaml # ← ¡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 sync --project YOLOv5 --name coco128 --folder .


El comando clearml 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, ¡así que no se suben archivos duplicados!

clearml create --name coco128 --project YOLOv5

clearml add --files .

clearml 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 tenemos nuestros experimentos y la versión de los datos, ¡es hora de echar un vistazo a lo que podemos construir sobre ellos!

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 clearml.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 clearml.py

Ejecución remota (avanzado)

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 .

Consulta lo que el agente puede hacer aquí:

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 daemon --queue [--docker]

Clonación, edición y puesta en cola

Con nuestro agente en funcionamiento, podemos asignarle trabajo. ¿Recuerdas de la sección de HPO que podemos clonar una tarea y editar los hiperparámetros? ¡Podemos hacer eso también desde la interfaz!

🪄 Clona el experimento haciendo clic derecho sobre él.

🎯 Edita los hiperparámetros según tus necesidades.

⏳ Ponga en cola la tarea en cualquiera de las colas haciendo clic derecho en ella

Ejecución remota de una tarea

Ahora puede clonar una tarea como explicamos anteriormente, o simplemente marcar su script actual añadiendo task.execute_remotely() y, al ejecutarlo, se colocará en una cola para que el agente comience a trabajar.

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.

Trabajadores de autoescalado

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.

¿Alguna pregunta? ¡Únase a nuestra comunidad y deje su pregunta hoy mismo!

¡Construyamos juntos el futuro
de la IA!

Comience su viaje con el futuro del aprendizaje automático

Comienza gratis