Comment entraîner YOLOv8 sur un ensemble de données personnalisé

Comment entraîner YOLOv8 sur un ensemble de données personnalisé

YOLOv8 est l'édition la plus récente de la collection très renommée de modèles qui implémentent l'architecture YOLO (You Only Look Once). Ce développement a été réalisé par Ultralytics, une équipe réputée pour son travail sur YOLOv3 (pytorch fork) et YOLOv5.

Poursuivant le modèle défini par YOLOv5, YOLOv6 et YOLOv7, nous avons désormais accès non seulement à la détection d'objets, mais aussi segmentation des instances et classement des 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. De la même manière que YOLOv5, nous avons également plusieurs exports tels que ONNX et Tensorflow SavedModel (qui ne sont pas encore implémentés).

Le fait que nous recherchons toujours le benchmark Papers with Code pour distinguer YOLOv8 des autres modèles temps réel de pointe est un problème pour évaluer le « vrai SOTA revendiqué ». Donc, la seule façon de savoir si YOLOv8 peut être adapté à votre cas d'utilisation, est de l'essayer !

Dans ce didacticiel, nous vous fournirons un guide détaillé sur la façon de former le modèle de détection d'objets YOLOv8 sur un ensemble de données personnalisé.Vous serez apprendre comment utiliser la nouvelle API, comment préparer l'ensemble de données et, surtout, comment former et valider le modèle.

Commençons!

Dans cet article, nous allons essayer de vous expliquer comment intégrer rapidement cette nouvelle architecture dans votre workflow Picsellia.

Les principales choses que nous allons explorer seront :

  1. Comment créer votre ensemble de données de détection d'objets
  2. Comment Convertir un fichier d'annotation COCO au format YOLO
  3. Lancer une formation et interpréter les résultats
  4. Utilisez votre modèle sur de nouvelles données.

Évidemment, nous avons créé un dépôt github pour vous aider avec le développement, Vous pouvez le trouver ici:

https://github.com/picselliahq/yolo-notebooks

Vous pouvez également en trouver extraits pertinents dans notre documentation :https://documentation.picsellia.com/recipes 

Construisez votre ensemble de données avec l'outil d'étiquetage de Picsellia

Créez votre ensemble de données

Pour cet article, nous utiliserons un ensemble de données de vente au détail, aimablement partagé par nos amis de Neurolabs 

(vous cherchez une solution de surveillance des rayons ? go, regardez-les !)

La première étape à faire pour utiliser le Picsellia La plate-forme d'étiquetage consiste à configurer vos étiquettes. Ici, nous allons créer un modèle de détection de classe unique, alors passons aux paramètres et configurons-le. :)

Ensuite, nous pouvons annoter immédiatement, l'interface de Picsellia Labeling est conçue pour être efficace et facile à utiliser, vous devriez pouvoir construire votre ensemble de données très facilement.

Maintenant que notre ensemble de données est annoté (oui, imaginons que j'ai tout annoté maintenant), nous avons plus de 14 000 objets annotés sur 230 images.

Exportons l'ensemble de données afin d'entraîner votre modèle YOLO v8. Les exports de dataset sont réalisés au format COCO sur Picsellia.

Le format COCO

Ce format est l'un des plus courants ( ;) ).COCO signifie Objet commun dans des situations courantes! C'est un fichier Json contenant 5 clés :

  1. 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.
  2. licences: cette partie donne des informations sur les licences dont nous disposons pour notre jeu de données
  3. catégorie: il donne l'identifiant des annotations et des objets détectés ainsi que le nom, nous pouvons également y déterminer des sous-catégories
  4. images: il stocke les images, les noms de fichiers, la hauteur et la largeur, le temps pris, etc.
  5. annotations: pour les identifiants que nous avons pour les images, il contient un cadre englobant, la zone des coordonnées de segmentation ici est le cadre englobant les coordonnées x1, y1, x2, y2 de l'objet détecté tandis que la segmentation est le contour de l'objet is_crowd 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, nous pouvons les convertir en une seule grande boîte et l'indiquer avec le paramètre is_crowd

Le format YOLO

Malheureusement, les algorithmes YOLOvX ne lisent pas le format COCO. Pourquoi donc? Je ne sais pas.

Ils veulent une façon différente de lire les étiquettes... basé 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 [id_class x0 y0 x1 y1] normalisé.

Conversion COCO en YOLO

Vous trouverez dans le dépôt une classe appelée YOLOFormatter() qui fera l'affaire pour vous :)

Nous ne présenterons pas le code lui-même 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 votre BBOX, vos polygones et vos annotations de classification au format yolo.

Comment entraîner YOLOv8 sur votre ensemble de données personnalisé

Le package python YOLOv8

Pour YOLOv8, les développeurs se sont éloignés de la conception traditionnelle des scripts train.py, detector.py, val.py et export.py distincts.

Fournir une API unifiée pour tout faire :)

Avantages: Plus facile de passer de 0 à un modèle formé et validé !

Les inconvénients: Il est beaucoup plus difficile de modifier le code pour ajouter des intégrations, par exemple, comme des rappels d'entraîneur personnalisés ou un algorithme NMS modifié.

Vous pourrez trouver plus d’informations sur l’API directement sur la Documentation d’ultralytics

Voyons maintenant à quel point il est facile de lancer une formation :)

<script src="https://gist.github.com/ThibautLucas/eaff5b0e1b0a418949e7483d64ee3ca0.js"></script>

Interprétation des résultats

Le lancement de l'entraînement est assez simple avec les modèles YOLO, au moins pour les versions 5, 7 et 8. La seule chose qui pourrait prêter à confusion est la quantité de résultats et de métriques générés.

Les principales métriques calculées et stockées sont :

Score F1

Le score F1 est une métrique couramment utilisée pour évaluer les performances d'un modèle de classification binaire. C'est la moyenne harmonique de la précision et du rappel, où la précision est le nombre de prédictions vraies positives divisé par le nombre total de prédictions vraies positives et faussement positives, et le rappel est le nombre de prédictions vraies positives divisé par le nombre total de prédictions vraies positives et faussement négatives.

Le score F1 va de 0 à 1, 1 étant le meilleur score possible. Ceci est particulièrement utile lorsque la répartition des classes est déséquilibrée, car il prend en compte à la fois la précision et le rappel du modèle.

Recall

Recall 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 mesure pour évaluer les performances 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 où le coût des faux négatifs est élevé. Le rappel est calculé comme le nombre de prédictions vraies positives divisé par la somme des prédictions vraies positives et des prédictions faussement négatives. 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.

Precision recall

La précision est la proportion de véritables prédictions positives parmi toutes les prédictions positives faites par le modèle, tandis que le rappel est la proportion de véritables prédictions positives parmi toutes les instances positives réelles de l'ensemble de données.

Une courbe précision-rappel est unparcelle qui montre le compromis entre précision et rappel pour différents paramètres de seuil. Dans une courbe précision-rappel, la précision est tracée sur l'axe des y et le rappel est tracé sur l'axe des x. En modifiant le réglage du seuil, un point différent sur la courbe précision-rappel peut être obtenu.

Utilisez votre modèle entraîné

Il est vraiment facile d'exécuter vos modèles une fois qu'ils sont formés, Ultralytics a créé une CLI simple pour le faire.

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

VOILA !

Gérez vos données d'IA de la bonne manière

Obtenir un essai

Recommandé pour vous:

english language
EN
french language
FR