YOLOv8 est l'édition la plus récente de la très célèbre collection de modèles qui mettent en œuvre l'architecture YOLO (You Only Look Once). Ce développement a été réalisé par Ultralytics, une équipe renommée pour son travail sur YOLOv3 (PyTorch fork) et YOLOv5.
Dans la continuité de YOLOv5, YOLOv6 et YOLOv7, nous avons maintenant accès non seulement à la détection d'objets, mais aussi à la segmentation d'instances et à la classification d'images. Le modèle lui-même a été construit dans PyTorch, et est capable de fonctionner à la fois sur les CPU et les GPU. Comme pour YOLOv5, nous avons également plusieurs exportations telles que ONNX et Tensorflow SavedModel (qui ne sont pas encore implémentées).
Le fait que nous soyons toujours à la recherche de l'indice de référence Papers with Code pour distinguer YOLOv8 des autres modèles en temps réel de l'état de l'art est un problème pour évaluer le "vrai SOTA revendiqué". Ainsi, la seule façon de savoir si YOLOv8 peut convenir à votre cas d'utilisation, c'est de l'essayer !
Dans ce tutoriel, nous vous fournirons un guide détaillé sur la façon d'entraîner le modèle de détection d'objets YOLOv8 sur un jeu de données personnalisé. Vous apprendrez comment utiliser la nouvelle API, comment préparer le jeu de données et, surtout, comment entraîner et valider le modèle.
C'est parti !
Dans cet article, nous allons essayer d'expliquer comment intégrer rapidement cette nouvelle architecture dans votre Workflow Picsellia.
Les principales choses que nous allons explorer seront :
- Comment convertir un jeu de données COCO en format YOLO.
- Comment enregistrer les mesures d'entraînement sur la plateforme Picsellia.
- Sauvegarder les poids formés afin de reprendre la formation.
- Surveillez vos modèles YOLO avec le service de surveillance Picsellia.
Évidemment, nous avons créé un repo github pour vous aider à coder, vous pouvez le trouver ici :
https://github.com/picselliahq/yolo-notebooks
Vous pouvez également trouver des extraits pertinents dans notre documentation : https://documentation.picsellia.com/recipes.
Convertir le jeu de données Picsellia COCO au format YOLO

Pour cet article, nous utiliserons un ensemble de données sur la vente au détail, aimablement partagé par nos amis de Neurolabs (vous cherchez une solution de surveillance des étagères ? Allez les voir !).
La première étape à effectuer pour utiliser un jeu de données Picsellia au format COCO est de passer du format COCO au format YOLO :)
Le format COCO
Ce format est l'un des plus courants ( ;) ). COCO est l'acronyme de Common Object in Common Situations (objet commun dans des situations communes) ! Il s'agit d'un fichier Json contenant 5 clés :
- info: cette partie de la structure donne des informations sur le jeu de données, la version, l'heure, la date de création, l'auteur, etc.
- Licences: cette partie donne des informations sur les licences dont nous disposons pour notre jeu de données.
- catégorie: elle donne l'identifiant des annotations et des objets détectés ainsi que leur nom ; on peut également y déterminer des sous-catégories.
- images: il stocke les images, les noms de fichiers, la hauteur et la largeur, le temps pris, etc.
- annotations: pour les identifiants que nous avons pour les images, il contient la boîte limite, la zone de coordonnées de segmentation ici la boîte limite est les coordonnées x1,y1,x2,y2 de l'objet détecté tandis que la segmentation est le contour de l'objet iscrowd c'est le paramètre binaire qui indique s'il y a plusieurs objets sur l'échelle nous ne pouvons pas vraiment segmenter chacun d'eux mais nous pouvons les convertir en une grande boîte et l'indiquer avec le paramètre iscrowd

Le format YOLO

Malheureusement, les algorithmes de YOLOvX ne lisent pas le format COCO. Pourquoi ? Je ne le sais pas.
Ils veulent une autre façon de lire les étiquettes... basée sur des fichiers .txt.

Chaque image de votre ensemble de données doit avoir un fichier .txt correspondant avec tous les objets de l'image avec un[class_id x0 y0 x1 y1] normalisé.
Conversion de COCO en YOLO
Vous trouverez dans le référentiel une classe appelée YOLOFormatter() qui fera l'affaire pour vous :)

Nous ne présenterons pas le code réel car il est assez simple, mais vous pourrez le trouver ici :
https://github.com/picselliahq/yolo-notebooks/blob/main/utils/yolo.py
Veuillez noter que dans le repo, vous pourrez convertir vos annotations BBOX, polygones et classification au format yolo.
Comment s'entraîner sur un jeu de données personnalisé et tout enregistrer sur Picsellia ?
Picsellia vous permet de garder une trace de vos expériences (training) sur des jeux de données donnés afin d'assurer la reproductibilité de votre travail. Pour ce faire, vous avez besoin d'un projet sur Picsellia.
Créer un projet sur la plateforme Picsellia

Vous pouvez soit le faire avec l'interface utilisateur dans la section des projets, soit utiliser notre SDK python !

Ne nous attardons pas trop sur cette partie car elle n'est pas essentielle à cet article, et plongeons directement dans la façon d'entraîner YOLOv8 sur votre ensemble de données personnalisé.
Le paquet python YOLOv8

Pour YOLOv8, les développeurs se sont éloignés de la conception traditionnelle des scripts distincts train.py, detect.py, val.py et export.py.
Fournir une API unifiée pour tout faire :)
Pour : Il est plus facile de passer de 0 à un modèle formé et validé !
Inconvénients : il est beaucoup plus difficile de modifier le code pour ajouter des intégrations, par exemple, comme des rappels personnalisés pour les entraîneurs ou un algorithme modifié pour le SGEN.
Vous pourrez trouver plus d'informations sur l'API directement sur la documentation Ultralytics.
Voyons maintenant à quel point il est facile de lancer une formation:)

Interprétation des résultats
Le lancement d'une formation est assez simple avec les modèles YOLO, du moins pour les v5, v7 et v8. La seule chose qui peut prêter à confusion est la quantité de journaux et de métriques générés.
Les principales métriques calculées et stockées sont les suivantes :
Score F1
Le score F1 est une métrique couramment utilisée pour évaluer les performances d'un modèle de classification binaire. Il s'agit de la moyenne harmonique de la précision et du rappel, où la précision est le nombre de prédictions positives vraies divisé par le nombre total de prédictions positives vraies et fausses, et le rappel est le nombre de prédictions positives vraies divisé par le nombre total de prédictions positives vraies et fausses. Le score F1 est compris entre 0 et 1, 1 étant le meilleur score possible. Il est particulièrement utile lorsque la distribution des classes est déséquilibrée, car il prend en compte à la fois la précision et le rappel du modèle.
Rappel
Le rappel fait référence à la capacité d'un modèle à identifier correctement toutes les instances pertinentes dans un ensemble de données. Il est souvent utilisé comme métrique pour évaluer la performance d'un modèle dans les tâches de classification, en particulier dans les cas où l'ensemble de données est déséquilibré ou le coût des faux négatifs est élevé. Le rappel est calculé comme le nombre de prédictions positives vraies divisé par la somme des prédictions positives vraies et des prédictions négatives fausses. Une valeur de rappel élevée indique que le modèle a un faible taux de faux négatifs, ce qui signifie qu'il est capable d'identifier correctement la plupart des instances pertinentes dans l'ensemble de données.
Précision-rappel
La précision est la proportion de prédictions positives vraies parmi toutes les prédictions positives faites par le modèle, tandis que le rappel est la proportion de prédictions positives vraies parmi toutes les instances positives réelles dans l'ensemble de données.
Une courbe précision-rappel est un graphique qui montre le compromis entre la précision et le rappel pour différents paramètres de seuil. Dans une courbe précision-rappel, la précision est représentée sur l'axe des ordonnées et le rappel sur l'axe des abscisses. En modifiant le paramètre du seuil, on peut obtenir un point différent sur la courbe précision-rappel.
Stockage de toutes les mesures de performance dans l'expérience Picsellia
Le paquet python YOLOv8 génère des courbes pour la métrique ci-dessus dans un format ... .jpg. Ceci est pratique dans certains cas, mais pas dans la majorité des cas, surtout si vous voulez comparer plusieurs formations.
Avec un peu de chance, il génère également un fichier results.csv où toutes les valeurs tabulaires sont stockées. C'est là que nous obtiendrons les métriques réelles pour nous connecter à Picsellia.

Ce snippet passe en boucle toutes les colonnes du fichier de résultats et envoie les résultats à Picsellia. A la fin, vous obtiendrez les mêmes graphiques que l'image générée par le paquet YOLOv8, mais avec des légendes et la possibilité de comparer plusieurs exécutions:)

Exportation du modèle YOLO pour l'inférence et l'apprentissage par transfert
Création d'un modèle Picsellia
Maintenant que vous avez formé la première version de votre modèle, vous pourriez vouloir le déployer soit à la périphérie ou dans le nuage, pour ce faire, vous pouvez utiliser notre solution Picsellia Serverless Deployment. La seule chose à faire est de créer un modèle sur Picsellia, qui sera exporté de l'expérience (c'est-à-dire l'entraînement que vous venez d'effectuer ;)).
Vous pouvez choisir d'encapsuler autant d'artefacts que vous le souhaitez, mais deux d'entre eux sont importants: le modèle ONNX exporté, et le fichier des poids formés (.pt).
Le modèle ONNX sera utilisé pour déployer le modèle, et les poids formés seront utilisés pour effectuer l'apprentissage par transfert.
Voici le code correspondant (disponible dans le dépôt github)
Empaqueter une image Docker pour la formation continue
Afin d'intégrer un modèle personnalisé (par exemple, YOLOv8) et de tirer parti des fonctions de formation sans code de Picsellia ou même de la formation continue une fois que votre modèle est mis en production et dans une boucle de rétroaction - vous voulez en savoir plus sur les boucles de rétroaction ? Inscrivez-vous à notre prochain webinaire !(cliquez ici)
Pour ce faire, vous pouvez suivre notre tutoriel ici :
https://documentation.picsellia.com/docs/package-your-models
En résumé, vous avez deux façons d'empaqueter vos modèles dans une image Docker, une façon simple qui ne vous donnera pas de journaux en temps réel et une autre version qui vous permettra d'accéder aux journaux en temps réel.
Si vous avez des difficultés avec cette partie, n'hésitez pas à nous contacter 🙂 .
Exécution de votre modèle formé
Il est très facile d'exécuter vos modèles une fois qu'ils sont formés, Ultralytics a créé un CLI simple pour le faire.

La seule chose que vous devez spécifier est le chemin d'accès à votre fichier de poids. Vous pouvez utiliser .pt ou .onnx.
VOILA !