Former et surveiller à distance Ultralytics YOLOv5 à l'aide de ClearML

L'équipe Ultralytics

4 min lire

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 avons des partenariats commerciaux avec d'autres startups pour nous aider à financer la recherche et le développement de nos formidables outils open-source, comme YOLOv5, afin qu'ils restent gratuits pour tout le monde. 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 de la ML, ClearML permet d'intégrer la ML de manière transparente dans tous les produits logiciels et matériels existants.

Grâce à cette intégration, il est encore plus simple d'entraîner un modèle YOLOv5 et d'utiliser le gestionnaire d'expériences ClearML pour le suivre automatiquement. Vous pouvez facilement spécifier l'identifiant de la version d'un jeu de données ClearML en tant qu'entrée de données, et il sera automatiquement utilisé pour entraîner votre modèle.

Passez à la vitesse supérieure en matière de suivi des expériences

  • Suivez chaque entraînement YOLOv5 dans le gestionnaire d'expériences.
  • Versionnez et accédez facilement à vos données de formation personnalisées grâce à l'outil intégré de versionnement des données ClearML.
  • Obtenez le meilleur mAP grâce à l'optimisation des hyperparamètres ClearML.
  • Transformez votre modèle YOLOv5 nouvellement formé en une API avec seulement quelques commandes à l'aide de ClearML Serving.

C'est à vous de décider combien de ces outils vous voulez 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 garder une trace de vos expériences et de vos données, ClearML a besoin de communiquer avec un serveur. Vous avez deux options pour cela : soit vous vous inscrivez gratuitement au ClearML Hosted Service, soit vous créez votre propre serveur, voir ici.

Même le serveur est open-source, donc si vous traitez des données sensibles, il n'y a pas de problème !

  1. Installer le paquetage python clearml : pip install clearml
  2. Connectez le ClearML SDK au serveur en créant des identifiants (allez en haut à droite dans Settings → Workspace → Create new credentials), puis exécutez la commande ci-dessous et suivez les instructions : clearml-init

Et voilà ! Vous êtes prêt à commencer...

Former YOLOv5 avec ClearML

Pour activer le suivi des expériences ClearML, il suffit d'installer le paquetage pip ClearML.

pip install clearml

Cela permettra l'intégration avec le script de formation YOLOv5. A partir de maintenant, chaque formation sera capturée et stockée par le gestionnaire d'expériences ClearML. Si vous souhaitez modifier le nom du projet ou le nom de la tâche, rendez-vous dans notre logger personnalisé, où vous pourrez le modifier : utils/loggers/clearml/clearml_utils.py

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

Il s'agit de capturer :

  • Code source + modifications non validées
  • Paquets installés
  • (Hyper)paramètres
  • Fichiers de modèle (utiliser --save-period n pour enregistrer un point de contrôle toutes les n époques)
  • Sortie 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 graphiques produits, tels que le corrélogramme des étiquettes et la matrice de confusion
  • Images avec boîtes de délimitation par époque
  • Mosaïque par époque
  • Images de validation par épisode

Ce n'est pas si mal ! Nous pouvons maintenant visualiser toutes ces informations dans l'interface ClearML afin d'obtenir une vue d'ensemble de la progression de notre formation. Ajoutez des colonnes personnalisées à la vue du tableau (comme par exemple mAP_0.5) afin de pouvoir facilement trier le modèle le plus performant. Vous pouvez également sélectionner plusieurs expériences et les comparer directement !

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

Gestion de la version des données

Versionner vos données séparément de votre code est généralement une bonne idée et facilite l'acquisition de la dernière version. Ce référentiel prend en charge la fourniture d'un identifiant de version du jeu de données, et il s'assurera d'obtenir les données si elles ne sont pas encore disponibles. En outre, ce flux de travail enregistre également l'ID du jeu de données utilisé dans les paramètres de la tâche, de sorte que vous saurez toujours avec certitude quelles données ont été utilisées dans quelle expérience !

Données, Ultralytics YOLOv5 et ClearML

Préparez votre jeu de données

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

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

Mais il peut s'agir de n'importe quel ensemble de données. N'hésitez pas à utiliser les vôtres, tant que vous respectez cette structure de dossiers.

Ensuite, ⚠️copy le fichier YAML correspondant à la racine du jeu de données folder⚠️. Ces fichiers YAML contiennent les informations dont ClearML aura besoin pour utiliser correctement le jeu de données. Vous pouvez bien sûr les créer vous-même, il suffit de suivre la structure des exemples de fichiers YAML.

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écharger votre jeu de données

Pour intégrer ce jeu de données dans ClearML en tant que jeu de données versionné, accédez au dossier racine du jeu 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 :

# Ajouter optionnellement --parent si vous voulez baser

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

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

clearml-data add --files .

clearl-data close

Entraînement à l'aide d'un ensemble de données ClearML

Maintenant que vous disposez d'un ensemble 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 nous avons nos expériences et notre version des données, il est temps de voir ce que nous pouvons construire au-dessus !

En utilisant les informations sur le code, les paquets installés et les détails de l'environnement, l'expérience elle-même est maintenant complètement reproductible. En fait, ClearML vous permet de cloner une expérience et même de changer ses paramètres. Nous pouvons alors la réexécuter automatiquement avec ces nouveaux paramètres, c'est en fait ce que fait HPO !

Pour exécuter l'optimisation des hyperparamètres localement, nous avons inclus un script prédéfini. Il suffit de s'assurer qu'une tâche d'entraînement a été exécutée au moins une fois, de sorte qu'elle se trouve dans le gestionnaire d'expériences ClearML, nous allons essentiellement la cloner et modifier ses hyperparamètres.

Vous devrez remplir l'ID de cette tâche modèle dans le script qui se trouve à utils/loggers/clearml/hpo.py et ensuite l'exécuter. Vous pouvez remplacer task.execute_locally() par task.execute() pour la placer dans une file d'attente ClearML et demander à un agent distant de travailler dessus à la place.

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

HPO, Ultralytics YOLOv5 et ClearML

Exécution à distance (avancé)

Exécuter HPO localement est très pratique, mais que faire si nous voulons exécuter nos expériences sur une machine distante ? Peut-être avez-vous accès à une machine GPU très puissante sur site, ou disposez-vous d'un budget pour utiliser des GPU en nuage. C'est là que l'agent ClearML entre en jeu.

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

En bref : chaque expérience suivie par le gestionnaire d'expériences contient suffisamment d'informations pour la reproduire sur une machine différente (paquets installés, changements non validés, etc.). C'est ce que fait un agent ClearML : 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 continuant à rapporter les scalaires, les tracés, etc. au gestionnaire d'expériences.

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

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

Clonage, modification et mise en file d'attente

Une fois notre agent en marche, nous pouvons lui donner du travail. Vous vous souvenez dans la section HPO que nous pouvons cloner une tâche et éditer les hyperparamètres ? Nous pouvons également le faire à partir de l'interface !

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

🎯 Modifiez les hyperparamètres pour qu'ils correspondent à ce que vous souhaitez.

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

Enqueue, Ultralytics YOLOv5 et ClearML

Exécuter 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 puisse commencer à travailler dessus !

Pour exécuter le script de formation YOLOv5 à distance, il 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 # ...

Lors de l'exécution du script de formation après cette modification, python exécutera le script jusqu'à cette ligne, après quoi il empaquettera le code et l'enverra dans la file d'attente à la place !

Mise à l'échelle automatique des travailleurs

ClearML est également livré avec des auto scalers ! Cet outil démarre automatiquement de nouvelles machines distantes dans le cloud de votre choix (AWS, GCP, Azure) et les transforme 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 cesserez de payer ! Regardez la vidéo de démarrage de l'auto scaler ci-dessous.

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

Construisons ensemble le futur
de l'IA !

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

Commencer gratuitement
Lien copié dans le presse-papiers