Entraîne et supervise Ultralytics YOLOv5 à distance avec ClearML
Explore notre partenariat avec ClearML pour améliorer ton expérience d’Ultralytics YOLOv5 grâce à une intégration ML fluide, au suivi des expériences et à bien plus encore.

Chez Ultralytics, nous collaborons commercialement avec d'autres startups pour nous aider à financer la recherche et le développement de nos excellents outils open source, comme YOLOv5, afin de les maintenir gratuits pour tout le monde. Cet article peut contenir des liens affiliés vers ces partenaires.
ClearML est notre nouveau partenaire : une boîte à outils open source conçue pour te faire gagner du temps.
Avec pour mission d'accélérer l'adoption du ML, ClearML facilite l'intégration du ML dans n'importe quel produit logiciel ou 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 en assurer automatiquement le suivi. Tu peux facilement spécifier l'ID d'une version de jeu de données ClearML comme entrée de données, et celle-ci sera automatiquement utilisée pour entraîner ton modèle.
Passe au niveau supérieur pour le suivi de tes expériences#
- Suis chaque exécution d'entraînement YOLOv5 dans le gestionnaire d'expériences.
- Versionne et accède facilement à tes données d'entraînement personnalisées avec l'outil intégré de gestion des versions de données ClearML.
- Obtiens le meilleur mAP possible avec l'optimisation des hyperparamètres de ClearML.
- Transforme ton modèle YOLOv5 fraîchement entraîné en API en quelques commandes seulement avec ClearML Serving.
C'est toi qui choisis le nombre d'outils à utiliser : tu peux te limiter au gestionnaire d'expériences ou tous les enchaîner dans un pipeline impressionnant.
Configuration#
Pour suivre tes expériences et tes données, ClearML doit communiquer avec un serveur. Tu as deux options : t'inscrire gratuitement au service hébergé ClearML ou configurer ton propre serveur ; consulte la documentation sur le déploiement de ClearML Server.
Même le serveur est open source ; si tu manipules des données sensibles, ce n'est donc pas un problème !
- Installe le paquet Python clearml :
pip install clearml - Connecte le SDK ClearML au serveur en créant des identifiants (va tout en haut à droite dans Settings → Workspace → Create new credentials), puis exécute la commande ci-dessous et suis les instructions :
clearml-init
Et voilà ! Tu es prêt à commencer…
Entraîner YOLOv5 avec ClearML#
Pour activer le suivi des expériences ClearML, installe simplement le paquet pip ClearML.
pip install clearmlCela activera l'intégration avec le script d'entraînement YOLOv5. À partir de maintenant, chaque exécution d'entraînement sera capturée et stockée par le gestionnaire d'expériences ClearML. Si tu veux modifier project_name ou task_name, rends-toi dans notre enregistreur personnalisé, où tu peux les modifier : utils/loggers/clearml/clearml_utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cacheLes éléments suivants seront capturés :
- Code source + modifications non validées
- Paquets installés
- (Hyper)paramètres
- Fichiers du modèle (utilise --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, l'environnement d'exécution, la date de création, etc.
- Tous les graphiques générés, comme le corrélogramme des labels et la matrice de confusion
- Images avec des boîtes englobantes pour chaque époque
- Mosaïque pour chaque époque
- Images de validation pour chaque époque
Pas mal ! Tu peux maintenant visualiser toutes ces informations dans l'interface utilisateur ClearML afin d'obtenir une vue d'ensemble de la progression de ton entraînement. Ajoute des colonnes personnalisées à la vue en tableau (par exemple mAP_0.5) pour trier facilement les modèles les plus performants. Tu peux aussi sélectionner plusieurs expériences et les comparer directement !
Nous pouvons même faire davantage avec toutes ces informations, notamment optimiser les hyperparamètres et exécuter des tâches à distance ; continue donc ta lecture pour découvrir comment !
Gestion des versions des jeux de données#
Il est généralement judicieux de versionner tes données séparément de ton code, ce qui facilite également l'obtention de la dernière version. Ce dépôt accepte un ID de version de jeu de données et veille à récupérer les données si elles ne sont pas encore disponibles. De plus, ce workflow enregistre aussi l'ID du jeu de données utilisé parmi les paramètres de la tâche ; tu sauras donc toujours avec certitude quelles données ont été utilisées dans chaque expérience !
Prépare ton jeu de données#
Le dépôt YOLOv5 prend en charge plusieurs jeux de données différents grâce à des fichiers YAML contenant leurs informations. Par défaut, les jeux de données sont téléchargés dans le dossier ../datasets, relativement au dossier racine du dépôt. Ainsi, si tu as téléchargé le jeu de données coco128 en utilisant le lien du fichier YAML ou les scripts fournis par yolov5, tu obtiens cette structure de dossiers :
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txtMais il peut s'agir de n'importe quel jeu de données. N'hésite pas à utiliser le tien, à condition de respecter cette structure de dossiers.
Ensuite, ⚠️copie le fichier YAML correspondant à la racine du dossier du jeu de données⚠️. Ces fichiers YAML contiennent les informations dont ClearML a besoin pour utiliser correctement le jeu de données. Tu peux bien sûr aussi créer ce fichier toi-même ; il te suffit de suivre la structure des exemples de fichiers YAML.
En substance, nous avons besoin des clés suivantes : path, train, test, val, nc, names.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # ← HERE!
|_ LICENSE
|_ README.txtImporte ton jeu de données#
Pour importer ce jeu de données dans ClearML en tant que jeu de données versionné, rends-toi dans le dossier racine du jeu de données et exécute 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. Tu peux aussi exécuter ces commandes l'une après l'autre :
# Optionally add --parent if you want to base
# this version on another dataset version, so no duplicate files are uploaded!
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data closeLancer l'entraînement avec un jeu de données ClearML#
Maintenant que tu disposes d'un jeu de données ClearML, tu peux 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 --cacheOptimisation des hyperparamètres#
Maintenant que nous avons nos expériences et notre version de données, examinons ce que nous pouvons construire par-dessus !
Grâce aux informations du code, aux paquets installés et aux détails de l'environnement, l'expérience elle-même est désormais entièrement reproductible. En fait, ClearML te permet de cloner une expérience et même d'en modifier les paramètres. Nous pouvons ensuite simplement la relancer automatiquement avec ces nouveaux paramètres ; c'est en substance ce que fait l'HPO !
Pour exécuter localement l'optimisation des hyperparamètres, nous avons inclus un script prêt à l'emploi. Vérifie simplement qu'une tâche d'entraînement a été exécutée au moins une fois afin qu'elle figure dans le gestionnaire d'expériences ClearML ; nous allons essentiellement la cloner et modifier ses hyperparamètres.
Tu dois renseigner l'ID de cette tâche modèle dans le script situé à utils/loggers/clearml/hpo.py, puis l'exécuter. Tu peux remplacer task.execute_locally() par task.execute() pour la placer dans une file d'attente ClearML et laisser un agent distant s'en charger.
# To use optuna, install it first, otherwise you can change the optimizer to just be RandomSearch
pip install optuna
python utils/loggers/clearml/hpo.pyExécution à distance (avancé)#
Exécuter l'HPO localement est très pratique, mais que faire si nous voulons exécuter nos expériences sur une machine distante ? Tu as peut-être accès à une machine GPU très puissante sur site, ou tu disposes d'un budget pour utiliser des GPU dans le cloud. C'est là que l'agent ClearML entre en jeu.
Découvre ici ce que l'agent peut faire :
En bref : chaque expérience suivie par le gestionnaire d'expériences contient suffisamment d'informations pour être reproduite sur une autre machine (paquets installés, modifications non validées, etc.). Un agent ClearML fait donc exactement cela : il écoute une file d'attente pour détecter les tâches entrantes et, lorsqu'il en trouve une, il recrée l'environnement et l'exécute tout en transmettant les scalaires, les graphiques, etc. au gestionnaire d'expériences.
Tu peux transformer n'importe quelle machine (une VM cloud, une machine GPU locale ou ton propre ordinateur portable) en agent ClearML en exécutant simplement :
clearml-agent daemon --queue [--docker]Cloner, modifier et mettre en file d'attente#
Une fois notre agent opérationnel, nous pouvons lui attribuer du travail. Souviens-toi de la section sur l'HPO : nous pouvons cloner une tâche et modifier les hyperparamètres. Nous pouvons aussi le faire depuis l'interface !
🪄 Clone l'expérience en faisant un clic droit dessus
🎯 Modifie les hyperparamètres comme tu le souhaites
⏳ Ajoute la tâche à l'une des files d'attente en faisant un clic droit dessus
Exécuter une tâche à distance#
Tu peux maintenant cloner une tâche comme expliqué ci-dessus, ou simplement marquer ton script actuel en ajoutant task.execute_remotely() ; lors de son exécution, il sera placé dans une file d'attente afin que l'agent puisse commencer à travailler dessus !
Pour exécuter le script d'entraînement YOLOv5 à distance, il te suffit d'ajouter cette ligne au script train.py, après l'instanciation de l'enregistreur 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 LINEDes questions ? Rejoins notre communauté et pose ta question dès aujourd'hui !









