Connectez-vous à YOLO Vision 2025 !
25 septembre 2025
10:00 — 18:00, heure d'été britannique
Événement hybride
Yolo Vision 2024

Entraîner et surveiller à distance Ultralytics YOLOv5 à l'aide de ClearML

Équipe Ultralytics

4 min de lecture

21 octobre 2022

Découvrez notre partenariat avec ClearML pour une expérience Ultralytics YOLOv5 améliorée avec une intégration ML transparente, un suivi des expériences, et plus encore.

Chez Ultralytics, nous collaborons commercialement avec d'autres startups pour nous aider à financer la recherche et le développement de nos formidables outils open source, comme YOLOv5, afin de les maintenir gratuits pour tous. Cet article peut contenir des liens d'affiliation vers ces partenaires.

ClearML est notre nouveau partenaire : une boîte à outils open source conçue pour vous faire gagner du temps.

Avec pour mission d'accélérer l'adoption du ML, ClearML rend le ML transparent à intégrer dans tout produit logiciel et matériel.

Cette intégration simplifie encore davantage l'entraînement d'un modèle YOLOv5 et l'utilisation du gestionnaire d'expériences ClearML pour le suivre automatiquement. Vous pouvez facilement spécifier un ID de version de l'ensemble de données ClearML comme entrée de données, et il sera automatiquement utilisé pour entraîner votre modèle.

Faites passer le suivi de vos expériences au niveau supérieur

  • Suivez chaque exécution d'entraînement YOLOv5 dans le gestionnaire d'expériences.
  • Version et accédez facilement à vos données d'entraînement personnalisées grâce à l'outil intégré de gestion des versions de données ClearML.
  • Obtenez la meilleure mAP possible grâce à l'optimisation des hyperparamètres ClearML.
  • Transformez votre modèle YOLOv5 nouvellement entraîné en une API avec seulement quelques commandes à l'aide de ClearML Serving.

C'est à vous de choisir le nombre d'outils que vous souhaitez utiliser. Vous pouvez vous en tenir au gestionnaire d'expériences, ou les enchaîner tous ensemble dans un pipeline impressionnant.

Mise en place

Pour assurer le suivi de vos expériences et de vos données, ClearML doit communiquer avec un serveur. Vous avez deux possibilités pour cela : vous inscrire gratuitement au service hébergé ClearML ou configurer votre propre serveur, voir ici.

Même le serveur est open source, donc si vous traitez des données sensibles, ce n'est pas un problème !

  1. Installez le paquet python clearml : pip install clearml
  2. Connectez le SDK ClearML au serveur en créant des identifiants (allez en haut à droite dans Paramètres → Espace de travail → Créer de nouveaux identifiants), puis exécutez la commande ci-dessous et suivez les instructions : clearml-init

Et voilà ! Vous êtes prêt à démarrer...

Entraînement de YOLOv5 avec ClearML

Pour activer le suivi des expériences ClearML, installez simplement le paquet pip ClearML.

pip install clearml

Cela permettra l'intégration avec le script d'entraînement YOLOv5. Chaque exécution d'entraînement sera désormais capturée et stockée par le gestionnaire d'expériences ClearML. Si vous souhaitez modifier le project_name ou le task_name, rendez-vous sur notre logger personnalisé, où vous pouvez le modifier : utils/loggers/clearml/clearml_utils.py

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

Ceci capturera :

  • Code source + modifications non validées
  • Paquets installés
  • (Hyper)paramètres
  • Fichiers de modèle (utilisez --save-period n pour enregistrer un point de contrôle toutes les n époques)
  • Sortie de la console
  • Scalaires (mAP_0.5, mAP_0.5:0.95, précision, rappel, pertes, taux d'apprentissage, ...)
  • Informations générales telles que les détails de la machine, la durée d'exécution, la date de création, etc.
  • Tous les tracés produits, tels que le correlogramme d'étiquettes et la matrice de confusion
  • Images avec des boîtes englobantes par époque
  • Mosaïque par époque
  • Images de validation par époque

Pas si mal ! Maintenant, nous pouvons visualiser toutes ces informations dans l'interface utilisateur de ClearML pour avoir un aperçu de notre progression en matière d'entraînement. Ajoutez des colonnes personnalisées à la vue tabulaire (comme par exemple mAP_0.5) afin de pouvoir facilement trier le modèle le plus performant. Ou sélectionnez plusieurs expériences et comparez-les directement !

Nous pouvons faire encore plus avec toutes ces informations, comme l'optimisation des hyperparamètres et l'exécution à distance, alors continuez à lire pour savoir comment !

Gestion des versions de l'ensemble de données

Le versionnage de vos données séparément de votre code est généralement une bonne idée et facilite également l'acquisition de la dernière version. Ce référentiel prend en charge la fourniture d'un ID de version de l'ensemble de données, et il s'assurera d'obtenir les données si elles ne sont pas encore là. De plus, ce flux de travail enregistre également l'ID de l'ensemble de données utilisé dans le cadre des paramètres de la tâche, vous saurez donc toujours avec certitude quelles données ont été utilisées dans quelle expérience !

Préparer votre jeu de données

Le référentiel YOLOv5 prend en charge un certain nombre d'ensembles de données différents en utilisant des fichiers YAML contenant leurs informations. Par défaut, les ensembles de données sont téléchargés dans le dossier ../datasets par rapport au dossier racine du référentiel. Donc, si vous avez téléchargé l'ensemble de données coco128 en utilisant le lien dans le YAML ou avec les scripts fournis par yolov5, vous obtenez cette structure de dossiers :

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

Mais il peut s'agir de n'importe quel jeu de données de votre choix. N'hésitez pas à utiliser le vôtre, à condition de respecter cette structure de dossiers.

Ensuite, ⚠️copiez le fichier YAML correspondant à la racine du dossier de l'ensemble de données⚠️. Ces fichiers YAML contiennent les informations dont ClearML aura besoin pour utiliser correctement l'ensemble de données. Vous pouvez également le créer vous-même, bien sûr, il suffit de suivre la structure des fichiers YAML d'exemple.

En gros, nous avons besoin des clés suivantes : path, train, test, val, nc, names.

..
|_ yolov5
|_ datasets
    |_ coco128
        |_ images
        |_ labels
        |_ coco128.yaml # ← ICI !
        |_ LICENSE
        |_ README.txt

Téléchargez votre ensemble de données

Pour intégrer cet ensemble de données dans ClearML en tant qu'ensemble de données versionné, accédez au dossier racine de l'ensemble de données et exécutez la commande suivante :

cd coco128

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


La commande clearml-data sync est en fait une commande abrégée. Vous pouvez également exécuter ces commandes l'une après l'autre :

# Ajoutez éventuellement --parent si vous voulez baser

# cette version sur une autre version de l'ensemble de données, afin qu'aucun fichier en double ne soit téléchargé !

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

clearml-data add --files .

clearml-data close

Exécuter l'entraînement en utilisant un ensemble de données ClearML

Maintenant que vous avez un jeu de données ClearML, vous pouvez très simplement l'utiliser pour entraîner des modèles YOLOv5 personnalisés.

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

Optimisation des hyperparamètres

Maintenant que nos expériences et notre version de données sont prêtes, il est temps de voir ce que nous pouvons construire par-dessus !

Grâce aux informations du code, aux packages installés et aux détails de l'environnement, l'expérience elle-même est désormais entièrement reproductible. En fait, ClearML vous permet de cloner une expérience et même de modifier ses paramètres. Nous pouvons ensuite la relancer automatiquement avec ces nouveaux paramètres, c'est essentiellement ce que fait HPO !

Pour exécuter l'optimisation des hyperparamètres localement, nous avons inclus un script pré-fait pour vous. Assurez-vous simplement qu'une tâche d'entraînement a été exécutée au moins une fois, afin qu'elle soit dans le gestionnaire d'expériences ClearML, nous allons essentiellement la cloner et modifier ses hyperparamètres.

Vous devrez renseigner l'ID de cette tâche de modèle dans le script situé dans utils\/loggers\/clearml\/hpo.py, puis l'exécuter. Vous pouvez remplacer task.execute_locally() par task.execute() pour le placer dans une file d'attente ClearML et demander à un agent distant de s'en charger.

# Pour utiliser optuna, installez-le d'abord, sinon vous pouvez changer l'optimiseur pour qu'il soit simplement RandomSearch pip install optuna python utils/loggers/clearml/hpo.py

Exécution à distance (Avancé)

L'exécution locale de HPO est très pratique, mais que se passe-t-il si nous voulons exécuter nos expériences sur une machine distante à la place ? Peut-être avez-vous accès à une machine GPU très puissante sur site, ou avez-vous un budget pour utiliser des GPU cloud. C'est là que l'agent ClearML entre en jeu.

Découvrez ce que l'agent peut faire ici :

En bref, chaque expérience suivie par le gestionnaire d'expériences contient suffisamment d'informations pour être reproduite sur une autre machine (packages installés, modifications non validées, etc.). Un agent ClearML fait donc exactement cela : il écoute une file d'attente pour les tâches entrantes et, lorsqu'il en trouve une, il recrée l'environnement et l'exécute tout en rapportant les scalaires, les tracés, etc. au gestionnaire d'expériences.

Vous pouvez transformer n'importe quelle machine (une VM cloud, une machine GPU locale, votre propre ordinateur portable) en un agent ClearML en exécutant simplement :

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

Clonage, édition et mise en file d'attente

Maintenant que notre agent est en cours d'exécution, nous pouvons lui donner du travail. Vous vous souvenez de la section HPO où nous pouvions cloner une tâche et modifier les hyperparamètres ? Nous pouvons le faire aussi depuis l'interface !

🪄 Clonez l'expérience en cliquant dessus avec le bouton droit de la souris

🎯 Modifiez les hyperparamètres selon vos souhaits

⏳ Mettre la tâche en file d'attente dans l'une des files d'attente en cliquant dessus avec le bouton droit de la souris

Exécution d'une tâche à distance

Vous pouvez maintenant cloner une tâche comme nous l'avons expliqué ci-dessus, ou simplement marquer votre script actuel en ajoutant task.execute_remotely() et lors de l'exécution, il sera placé dans une file d'attente, pour que l'agent commence à travailler dessus!

Pour exécuter le script d'entraînement YOLOv5 à distance, il vous suffit d'ajouter cette ligne au script training.py après l'instanciation du logger 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 # ...

Lorsque vous exécutez le script d'entraînement après cette modification, Python exécutera le script jusqu'à cette ligne, après quoi il empaquetera le code et l'enverra à la file d'attente !

Mise à l'échelle automatique des workers

ClearML est également livré avec des auto-scalers ! Cet outil lancera automatiquement de nouvelles machines distantes dans le cloud de votre choix (AWS, GCP, Azure) et les transformera en agents ClearML pour vous chaque fois que des expériences sont détectées dans la file d'attente. Une fois les tâches traitées, l'auto-scaler arrêtera automatiquement les machines distantes, et vous arrêtez de payer ! Consultez la vidéo de démarrage des auto-scalers ci-dessous.

Des questions ? Rejoignez notre communauté et posez votre question dès aujourd'hui !

Construisons ensemble l'avenir
de l'IA !

Commencez votre parcours avec l'avenir de l'apprentissage automatique

Démarrer gratuitement
Lien copié dans le presse-papiers