Explora nuestra asociación con ClearML para disfrutar de una experiencia Ultrlaytics YOLOv5 mejorada con una perfecta integración de ML, 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 esos socios.
ClearML es nuestro socio más reciente: una caja de herramientas de código abierto diseñada para ahorrarte tiempo.
Con la misión de acelerar la adopción del ML, ClearML hace que el ML se integre sin problemas en cualquier producto de Software y Hardware existente.
Esta integración simplifica aún más el entrenamiento de un YOLOv5 modelo y utilizar el gestor de experimentos de ClearML para seguirlo automáticamente. Puedes especificar fácilmente un ID de versión del conjunto de datos ClearML como entrada de datos y se utilizará automáticamente para entrenar tu modelo.
Depende de ti cuántas de estas herramientas quieras utilizar, puedes ceñirte al gestor de experimentos, o encadenarlas todas en un impresionante pipeline.
Para hacer 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, consulta aquí.
Incluso el servidor es de código abierto, así que si tratas con datos sensibles, ¡no hay problema!
Y ¡voilá! Ya estás listo para empezar...
Para activar el seguimiento de experimentos de ClearML , sólo tienes que instalar el paquete pip ClearML .
instalar pip 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 nombre_del_proyecto o el nombre_de_la_tarea, dirígete a nuestro registrador personalizado, donde podrás 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á:
¡No está nada mal! Ahora podemos visualizar toda esta información en la interfaz de usuario de 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 con mejor rendimiento. ¡O selecciona varios experimentos y compáralos directamente!
Hay aún más cosas que podemos hacer 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!
Versionar tus datos por separado de tu código suele ser una buena idea y además facilita 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 ahí. 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, ¡así siempre sabrás con seguridad qué datos se utilizaron en cada experimento!
El repositorio YOLOv5 admite distintos 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 has descargado el conjunto de datos coco128 utilizando el enlace del YAML o con los scripts proporcionados por yolov5, obtendrás esta estructura de carpetas:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txt
Pero puede ser cualquier conjunto de datos que desees. 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: ruta, tren, prueba, val, nc, nombres.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # <---- HERE!
|_ LICENSE
|_ README.txt
Para introducir este conjunto de datos en ClearML como conjunto de datos versionado, ve a la carpeta raíz del conjunto de datos y ejecuta 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:
# Añade opcionalmente --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-datos añadir --archivos .
clearml-datos cerrar
Ahora que tienes un conjunto de datos ClearML , puedes 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
Ahora que tenemos nuestros experimentos y la versión de los datos, ¡es hora de echar un vistazo a lo que 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 te permite clonar un experimento e incluso cambiar sus parámetros. A continuación, podemos volver a ejecutarlo con estos nuevos parámetros automáticamente, ¡esto es básicamente lo que hace HPO!
Para ejecutar la optimización de hiperparámetros localmente, hemos incluido un script preelaborado para ti. Sólo tienes que asegurarte de que una tarea de entrenamiento se ha ejecutado al menos una vez, de modo 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 hacer que un agente remoto trabaje en ella en su lugar.
# Para utilizar optuna, instálalo primero, de lo contrario puedes cambiar el optimizador para que sea sólo RandomSearch pip install optuna python utils/loggers/clearml/hpo.py
Ejecutar HPO localmente es realmente práctico, pero ¿y si en lugar de eso queremos ejecutar nuestros experimentos en una máquina remota? Quizá 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 .
Comprueba lo que puede hacer el agente aquí:
En resumen: cada experimento rastreado por el gestor de experimentos contiene información suficiente para reproducirlo en una máquina diferente (paquetes instalados, cambios no comprometidos, etc.). Así que un agente de ClearML hace precisamente eso: escucha una cola de tareas entrantes y, cuando encuentra una, recrea el entorno y lo ejecuta sin dejar de informar de escalares, gráficos, etc. al gestor de experimentos.
Puedes convertir cualquier máquina (una VM en la nube, una máquina local de GPU , tu propio portátil... ) en un agente de ClearML con sólo ejecutarlo:
clearml-agente demonio --queue [--docker]
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 del ratón.
🎯 Edita los hiperparámetros como desees
⏳ Pon en cola la tarea en cualquiera de las colas haciendo clic con el botón derecho sobre ella
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 a distancia, todo lo que tienes que hacer es añadir esta línea al script training.py después de que se haya instanciado el registrador ClearML :
# ... # 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, ¡después de lo cual empaquetará el código y lo enviará a la cola en su lugar!
ClearML ¡también viene con autoescaladores! Esta herramienta creará automáticamente nuevas máquinas remotas en la nube que elijas (AWS, GCP, Azure) y las convertirá en agentes de ClearML para ti siempre que se detecten experimentos en la cola. Una vez procesadas las tareas, el autoescalador apagará automáticamente las máquinas remotas y ¡dejarás de pagar! Mira el vídeo de inicio del autoescalador a continuación.
¿Tienes alguna pregunta? ¡ Únete a nuestra comunidad y deja tu pregunta hoy mismo!
Comienza tu viaje con el futuro del aprendizaje automático