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 construire votre jeu de données de détection d'objets
- Comment convertir un fichier d'annotations COCO au format YOLO ?
- Lancer une formation et interpréter les résultats
- Utilisez votre modèle sur de nouvelles données.
É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.
Créez votre jeu 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 sur la vente au détail, aimablement partagé par nos amis de Neurolabs (à la recherche d'une solution de surveillance des étagères ? Allez les voir !).
La première étape à effectuer pour utiliser la plateforme d'étiquetage Picsellia est de configurer vos étiquettes, ici nous allons construire un modèle de détection de classe unique, donc naviguons vers les paramètres et configurons-le :)
L'interface de Picsellia Labeling a été conçue pour être efficace et facile à utiliser, vous devriez être en mesure de construire votre ensemble de données très facilement.
Maintenant que nous avons annoté notre ensemble de données (oui, imaginons que j'ai tout annoté), nous avons plus de 14 000 objets annotés sur 230 images.

Exportons le jeu de données afin d'entraîner votre modèle YOLOv8. Les exportations se font au format COCO sur Picsellia.
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 entraîner YOLOv8 sur votre jeu 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, 7 et 8. 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.
Utilisez 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 !