Comment entraîner YOLOv5 sur un jeu de données personnalisé, étape par étape

Comment entraîner YOLOv5 sur un jeu de données personnalisé, étape par étape
Note : La vidéo suivante a été enregistrée sur la version précédente de Picsellia, tandis que cet article de blog a été mis à jour avec la dernière interface de Picsellia et les dernières fonctionnalités MLOps pour la vision par ordinateur (Mise à jour : 17-Mars-2022).

En guise d'introduction, nous allons passer brièvement en revue les algorithmes YOLO. Pour ceux qui ne savent pas ce qu'est YOLO, il s'agit de l'un des algorithmes de détection d'objets les plus connus, qui obtient des résultats de pointe depuis plusieurs années maintenant.

Le but de ce tutoriel est de vous apprendre à former un YOLOv5 facilement, en utilisant notre plateforme MLOps de bout en bout en vision par ordinateur. Mais d'abord, nous allons rapidement couvrir sa théorie. Cet article se présentera comme suit :

  1. Évolution des détecteurs d'objets
  2. Qu'est-ce que YOLO et en quoi est-il différent des autres détecteurs d'objets ?
  3. Performances
  4. YOLO v5 en détail
  5. Comment entraîner YOLO v5 sur votre propre jeu de données personnalisé ?

C'est parti !

Évolution des détecteurs d'objets

Il existe quelques types de détecteurs d'objets, les R-CNN et les SSD.

Les R-CNN sont des réseaux neuronaux convolutifs basés sur les régions. Ils sont plus anciens et constituent un exemple de détecteurs à deux étapes. Les deux étapes sont une recherche sélective qui propose une région, c'est-à-dire des boîtes de délimitation susceptibles de contenir des objets, et un CNN utilisé pour classer cette région. Comme vous pouvez le voir dans la figure suivante, les deux étapes sont effectuées de manière séquentielle, ce qui peut prendre beaucoup de temps.

Le problème est que la première implémentation de R-CNN en 2013 était vraiment lente. Cela laissait beaucoup de place à l'amélioration, et c'est ce qui a été réalisé en 2015 avec Fast R-CNN, et plus tard Faster R-CNN. Celles-ci ont remplacé l'étape sélective par le réseau de proposition de région (RPN), faisant finalement de R-CNN un détecteur d'objets de bout en bout en Deep Learning.

Cette famille de détecteurs donne généralement des résultats assez précis, mais elle est assez lente. C'est pourquoi les chercheurs ont mis au point une architecture différente, appelée "Single Shot Detectors" (SSD), dont YOLO fait partie.

CALENDRIER DE LA SSD

  • 2015 : YOLO (You Only Look Once)
  • 2016 : YOLO 9000
  • 2018 : YOLO v3
  • 2020 : YOLO v4
  • 2020 : YOLO v5

Qu'est-ce qui rend ces algorithmes rapides ?

Ils apprennent simultanément les coordonnées de l'objet mais aussi les classes correspondantes. Ils sont moins précis que le R-CNN mais beaucoup plus rapides. C'est la philosophie de YOLO et des nombreuses itérations connues au fil des ans. 

Aujourd'hui, nous allons nous concentrer sur le dernier en date, YOLO v5. Comme vous pouvez le voir dans le graphique suivant, il est vraiment performant, même contre la dette efficiente, qui est exponentiellement plus lente lorsque vous choisissez une version plus élevée de celle-ci. 

YOLOv5 dans PyTorch > ONNX > CoreML > iOS

A quoi ressemble la performance ?

Pour

  • Beaucoup plus rapide que les détecteurs basés sur le R-CNN
  • Performances SOTA aujourd'hui avec YOLO v5

Cons

  • Légèrement moins précis que le R-CNN

Comme nous pouvons le voir ensuite, il existe plusieurs versions du YOLO v5 lui-même. Elles vont de la petite à la très grande taille, avec des différences évidentes en termes de poids, de performances et de latence. C'est une bonne nouvelle car nous pouvons choisir une version qui est soit très rapide, mais moins précise, soit des versions qui sont de bons compromis entre latence et précision, et une version plus lourde qui sera plus performante.

Tailles Yolov5

Maintenant que nous avons abordé le sujet de YOLO et ses principales différences avec les autres algorithmes, nous allons l'entraîner !

Comment entraîner YOLOv5 sur un jeu de données personnalisé ?

Pour mémoire, Picsellia est une plateforme de développement MLOps de bout en bout qui vous permet de créer et de versionner des jeux de données, d'annoter vos données d'IA, de suivre vos expériences et de construire vos propres modèles. De plus, sa dernière version vous permet de déployer et de surveiller vos modèles, et d'orchestrer des pipelines pour automatiser vos flux de travail d'IA - tout cela au même endroit. 

Si vous souhaitez en savoir plus, n'hésitez pas à consulter notre documentation ou à programmer un appel rapide avec notre équipe .

Sans plus attendre, commençons !

1. Créer l'ensemble de données

Voici à quoi ressemble l'interface d'annotation. Nous allons choisir un jeu de données de raisins de cuve pour notre projet de détection d'objets.

L'interface de l'ensemble de données de Picsellia

Nous pouvons trier l'ensemble des données de cette façon pour voir plus de détails, comme indiqué ci-dessous.

Comme vous pouvez le voir, le jeu de données est déjà entièrement annoté avec 5 classes différentes, correspondant à différents types de raisins.

Si vous cliquez sur l'onglet "Analytique", vous pouvez obtenir un meilleur aperçu de la distribution des données et de la distribution des objets par image (entre autres mesures).

Maintenant, jetons un coup d'œil aux annotations. De retour à l'onglet "Images", nous pouvons sélectionner l'ensemble de la base de données, ou seulement un sous-ensemble des images que nous voulons étiqueter.

Notre plateforme est livrée avec un système pré-annoté et une boîte à outils d'étiquetage IA robuste qui vous permet d'automatiser entièrement vos annotations. De cette façon, vous pouvez ne garder que les plus précises et optimiser votre ensemble d'entraînement.

Comme nous pouvons le voir ci-dessous, le jeu de données est bien annoté avec chaque raisin à l'intérieur des boîtes de délimitation.

Vous pouvez sélectionner les images ou le sous-ensemble que vous souhaitez, pour les annoter, les accepter, les rejeter ou interagir par des commentaires et des mentions avec vos collègues. De cette façon, vous vous assurez que tout le monde travaille sur les mêmes données. Par ailleurs, Picsellia dispose également d'un système de "révision", dans lequel les collaborateurs désignés peuvent accepter ou rejeter les étiquettes.

Interface d'annotation

Maintenant, pour des raisons de simplicité, nous ne créerons pas un modèle capable de détecter ces 5 classes, mais plutôt un détecteur d'objets capable de détecter le raisin en général. Pour cela, nous allons fusionner les 5 classes en une seule que nous appellerons "raisin", et créer une nouvelle version du jeu de données avec celle-ci.

Tout d'abord, je vais sélectionner toutes mes images et créer une nouvelle version de l'ensemble de données sans étiquettes ("Create blank").

Une fois créé, je retourne à l'onglet "Datasets" dans le menu latéral, et je vois ma plus récente version non étiquetée. Je peux voir que j'ai plusieurs versions de mon jeu de données. Maintenant, choisissons la version la plus récente, "grape-no-label", afin de configurer les étiquettes et de fusionner les différentes classes de raisin en une seule ("grape").

Versions du jeu de données

Interface du jeu de données - Images non étiquetées

Maintenant, pour configurer vos étiquettes, allez dans l'onglet "Paramètres" sur l'écran supérieur, et sélectionnez "Nouvelles étiquettes".

Paramètres - Configurer les étiquettes

Ensuite, choisissez votre classe d'annotation - dans ce cas, Détection d'objets -, nommez-la et ajoutez-la comme suit. Ensuite, il suffit de cliquer sur "Créer des étiquettes".

Il est maintenant temps de fusionner nos étiquettes !

Nous allons importer l'annotation de notre ancien jeu de données dans cette version, et fusionner les 5 étiquettes différentes en une seule.

Pour cela, cliquez sur "Annotations", où nous sélectionnerons la version de l'ensemble de données à partir de laquelle nous souhaitons importer nos étiquettes. Dans ce cas, c'est le jeu de données appelé "first" qui contient les 5 raisins différents.

Choisissez l'étiquette de sortie "grape" comme indiqué ci-dessous, et sélectionnez chacune des annotations à importer comme "grape" en cliquant sur leurs cases à cocher. Ensuite, cliquez sur "Exécuter les instructions".

Si nous allons dans la balise "Settings" , nous pouvons voir que notre étiquette est bien définie comme un seul "raisin", et voir qu'elle a les 3 920 objets.

De retour à l'interface de l'ensemble de données (onglet"Images" ), nous pouvons voir une seule étiquette.

Si nous jetons un coup d'œil aux annotations, nous pouvons observer que toutes nos boîtes englobantes contiennent tous les différents types de raisins, maintenant étiquetés simplement comme "raisin".

Passons maintenant aux choses sérieuses : former un YOLOv5 sur cet ensemble de données.

2. Mettre en place la formation

Nous allons créer un nouveau projet nommé "yolo-grape-test", qui utilise cet ensemble de données et organise mes formations.

Chez Picsellia, vous avez également la possibilité d'inviter des membres de votre équipe à votre projet pour travailler sur les mêmes données (nous allons l'ignorer pour ce tutoriel).

Invitez vos coéquipiers à collaborer

Pour mémoire, dans l'onglet "Tous les projets", dans le menu latéral, vous verrez tous vos projets stockés en un seul endroit.

Centre de projet

Maintenant, vérifions notre projet. A ce stade, le projet est plutôt vide, donc nous allons attacher l'ensemble de données que nous venons de créer à ce projet, pour lequel nous allons cliquer sur "Open Datalake".

Nous sélectionnons ensuite le projet souhaité, "Embrapa-vin-vigne".

Et nous voulons choisir la version "raisin-un".

Notre jeu de données est maintenant bien attaché ! 

Ensuite, avant de créer notre expérience, jetons un coup d'œil à la section Modèle de Picsellia.

Les modèles de Picsellia

Sur cette page, vous trouverez tous les modèles que nous avons téléchargés et qui constituent une architecture de base que vous pouvez utiliser pour démarrer votre expérience, comme indiqué ci-dessous.

Modèle Hub

Pour notre expérience, nous allons utiliser le modèle YOLOv5-m, pour des raisons de rapidité de formation. Vous pouvez utiliser ce modèle tout de suite, c'est-à-dire que vous n'avez rien à faire, il suffit de les sélectionner.

Il est maintenant temps de revenir à notre projet, et de créer notre expérience en utilisant ce modèle YOLOv5-m pré-entraîné.

Une fois là, nous allons réaliser notre expérience avec l'interface utilisateur.

Il s'agit de la première version de notre formation, appelée "v1".

Et, dans un deuxième temps, nous allons choisir le modèle d'architecture de base dans mon "Organization HUB". Dans ce cas, YOLOv5-m.

Pour exécuter YOLOv5-m, il suffit de configurer deux paramètres. Le nombre de pas (ou "époques") et la taille du lot. 

Pour ce tutoriel, et pour le montrer rapidement, nous allons juste mettre en place 100 époques. Comme nous allons l'exécuter dans Colab, nous allons mettre en place une petite taille de lot, 1, juste pour le test ; et l'exécuter sur un grand matériel plus tard.

Enfin, nous sélectionnons notre jeu de données.

Puis nous créons l'expérience, et nous verrons l'aperçu de l'expérience. Nous avons notre modèle de base, notre jeu de données joint, et nos paramètres sont tous configurés.

La beauté de Picsellia est que dans l'onglet "Launch" , nous pouvons choisir différentes manières de lancer nos expériences.

Nous le lancerons avec Google Colab, donc en cliquant ici, nous accéderons à un carnet Jupyter préconfiguré avec tout ce qui est nécessaire pour former un YOLOv5. Je vais vous montrer rapidement toutes les étapes nécessaires pour lancer l'entraînement.

3. Lancement de la formation

Tout d'abord, nous devons installer le paquet Picsellia, ainsi que le paquet Picsellia YOLOv5. Dans cette bibliothèque, nous avons empaqueté toute l'implémentation Pytorch de YOLOv5. 

Nous devons importer les paquets ainsi que Pytorch, os, subprocess, etc.

Nous devons tirer parti du système d'expérimentation de Picsellia pour obtenir tous les fichiers que nous avons de notre travail pré-entraîné et les paramètres, de sorte qu'avec le checkout nous pouvons tout obtenir sur l'instance.

Ensuite, nous devons télécharger les annotations et les images.

Nous créons un répertoire qui stockera nos images et nos annotations. 

Nous devons ensuite générer un yaml qui contiendra la carte des étiquettes ainsi que le répertoire, le chemin des images d'entraînement et de test. 

Ensuite, nous devons configurer les hyperparamètres qui seront utilisés pour l'entraînement, donc les seules choses que nous devons donner sont les paramètres que nous avons configurés à partir de Picsellia, la carte d'étiquettes et le nom de l'expérience.

Et ensuite, nous pourrons enfin lancer la formation !

Nous l'avons déjà lancé afin de vous le montrer, car il peut être assez lent sur un notebook Jupyter CPU. Mais, comme vous pouvez le voir, la formation se déroule plutôt bien. 

Et, tout est renvoyé à Picsellia, en direct !

Comme vous pouvez le voir ci-dessous, j'ai déjà mes mesures d'entraînement en direct sur la plateforme. Si je rafraîchis la page, je devrais avoir d'autres valeurs, avec les nouvelles époques.

4. Vérifiez les résultats

Maintenant, comme il serait trop long d'attendre que la formation se termine, et pour vous montrer de vrais résultats avec une formation plus longue, j'ai mis en place une autre formation que je vous montrerai ensuite.

Cet entraînement a 1000 époques et a été effectué sur des GPU NVIDIA v100. Comme vous pouvez le constater, les métriques sont plutôt bonnes.

Nous avons des problèmes avec notre perte ici - nous devrions l'étudier plus tard -, mais comme vous pouvez le voir, elle converge un peu.  

Maintenant, voyons les résultats de l'évaluation sur des images réelles de notre jeu de données. Pour cela, j'ai enregistré les images de mon évaluation sur différents lots d'images. 

J'ai téléchargé une de ces images. Nous avons déjà de bons résultats pour notre excellent algorithme de détection !

Par exemple, si nous effectuons seulement 1000 époques (ou "étapes") de formation, le processus de formation complet peut prendre jusqu'à 4 heures. En revanche, pour notre test original, où nous n'avons mis en place que 100 époques, cela ne prendrait que quelques minutes. 

Si nous allons vérifier les fichiers de notre expérience, nous avons téléchargé avec succès tous les fichiers nécessaires pour reprendre notre formation plus tard. Nous avons besoin du fichier de configuration, qui est le yaml ; un fichier de contrôle pour les hyperparamètres ; et un autre fichier de contrôle qui est les poids de pytorch.

Maintenant, nous pouvons reprendre notre formation quand nous le voulons et itérer encore et encore sur nos expériences facilement en utilisant Picsellia ! 

Si vous souhaitez essayer Picsellia gratuitement et profiter de nos dernières fonctionnalités MLOps (déploiement de modèles, surveillance, orchestration automatisée des pipelines, etc.), demandez votre essai de 14 jours ici

Commencez à gérer vos données d'IA de la bonne façon.

Demander un essai gratuit

Recommandé pour vous :