Qu'est-ce que YOLO ?
Les réseaux YOLO (You Only Look Once) sont une famille très populaire de réseaux convolutifs profonds pour la détection d'objets en temps réel. Les modèles de détection d'objets en temps réel doivent produire des prédictions très rapidement, généralement en moins de 200 ms, ou traiter des flux vidéo à 30 FPS ou plus. Afin de répondre aux exigences de vitesse, ils sont souvent plus petits que les modèles non temps réel, ce qui réduit souvent la précision.
La première version de yolo a été proposée en mai 2016 par Joseph Redmon. Il a expliqué son idée novatrice avec l'article "You Only Look Once : Unified Real-Time Object Detection". Comme son nom l'indique, la principale nouveauté de YOLO est qu'il suffit de traiter une image une seule fois, un trait qui permet une grande accélération lors de la détection d'objets.
L'architecture YOLO a connu un grand succès dans le domaine de la vision par ordinateur et 8 autres versions ont suivi ! La dernière en date, YOLO-NAS, a été publiée en mai 2023, soit peu de temps après YOLOv8. De nombreux praticiens de l'apprentissage profond utilisent la détection d'objets YOLO dans leurs applications, YOLOv8 étant probablement la plus populaire et la plus utilisée en raison de son grand dépôt open source qui offre une implémentation simple et abstraite.
Qu'est-ce qui rend YOLO différent ?
Le principal avantage de YOLO est sa vitesse d'inférence inégalée. Les architectures précédentes de détection d'objets utilisaient un classificateur d'images. En revanche, la nouveauté de YOLO est qu'il a changé le paradigme de la classification à la régression. Les architectures plus anciennes réutilisaient les classificateurs d'images pour la détection d'objets. Des architectures telles que les modèles de parties déformables (DPM) utilisent la technique de la fenêtre glissante, en balayant des sous-régions d'une image avec une fenêtre mobile et en appliquant un classificateur sur chaque sous-région à la recherche de l'objet d'intérêt. D'autre part, le R-CNN utilise la méthode de proposition de région qui génère d'abord des propositions de boîtes de délimitation sur lesquelles le classificateur effectuera la classification. La méthode de proposition de région offrait une méthode plus noble que la technique de "force brute" de la fenêtre glissante, mais de multiples classifications doivent être exécutées et un post-traitement est nécessaire pour éliminer les détections en double. De tels pipelines sont lents et difficiles à optimiser.
YOLO a changé le paradigme en transformant le problème de la détection d'objets de la classification à la régression. Les coordonnées de la boîte englobante et les probabilités de classe sont régressées directement à partir des pixels de l'image. Il suffit de regarder et de classer une image une seule fois. Un seul réseau neuronal convolutif prédit plusieurs boîtes englobantes. Avantages :
- Rapide : il est capable de détecter des objets en temps réel, >40 FPS.
- Simple : il ne repose que sur un seul réseau neuronal convolutif qui fournit à la fois les coordonnées de la boîte englobante et les probabilités de classe. Le R-CNN, en comparaison, se compose de 3 modules différents [3].
- Entraînement sur des images entières : Comme il s'entraîne sur des images entières, il apprend des caractéristiques plus généralisées. Il voit à la fois l'objet et le contexte (arrière-plan). Il est donc moins enclin aux faux positifs dus aux pixels d'arrière-plan.
Comment fonctionne le détecteur d'objets YOLO original
Avant de décrire les différentes versions de YOLO jusqu'à YOLO-NAS, il convient d'expliquer l'opération d'inférence du modèle YOLO original. Les étapes ci-dessous sont également présentées visuellement dans la figure 1.
- L'image d'entrée est séparée en une grille SxS, où S est un hyperparamètre réglable. Chaque cellule de la grille est responsable de la détection des objets dont le centre se trouve dans cette cellule.
- Chaque cellule de la grille prédit B boîtes englobantes, où B est à nouveau un hyperparamètre réglable. Pour chaque boîte, il produit également un score de confiance (0,0 à 1,0) qui représente la confiance du modèle dans l'existence d'un objet dans la boîte et la précision de la boîte. Essentiellement, la confiance est juste le IOU(ground truth, prediction) , mais formellement, elle est calculée comme suit
P(objet) * IOU(vérité terrain, prédiction)
pour tenir compte des cas où aucun objet n'existe dans la boîte, puisque la probabilité sera nulle.
- Pour chaque boîte Bi, le modèle produit 5 prédictions de régression (x, y, w, h, confiance). Les variables x, y déterminent le centre de la boîte englobante de l'objet, tandis que w, h déterminent la largeur et la hauteur de la boîte.
- Le modèle produit également une prédiction de "classification" pour chaque cellule de grille, qui représente la probabilité que la classe Classi soit présente dans une cellule de grille.
- Le score final est calculé comme indiqué ci-dessous et il code à la fois la précision de la boîte englobante et la confiance de la classification spécifique à la classe **.
Score = P(Classi| obj)* P(obj) *IOU = P(Classi)*IOU
Au total, le modèle produira un tenseur S S (B*5 + len(Class)), ce qui signifie que pour chaque cellule, nous avons 5 sorties par boîte englobante (liées à sa position et à sa forme) et des sorties len(Class), une pour chaque classe de l'ensemble de données.

- **Note : Une limitation de YOLO est qu'il ne peut prédire qu'une classe par cellule de grille.
L'image ci-dessous présente l'architecture originale de YOLO, qui consiste en un seul CNN !
L'architecture suit le paradigme typique consistant à réduire les dimensions de l'image et du noyau tout en augmentant le nombre de filtres dans chaque couche conv en cours de route. Une couche entièrement connectée est également utilisée à la fin.

Une histoire de YOLOs ( yolo9000, yolov3, yolov4, yolov5, yolov6, yolov7, yolov8, yolo nas)
Maintenant que nous avons compris le modèle original de détection d'objets de yolo, examinons les versions ultérieures.
YOLO 9000 (Yolov2)
Le nom de YOLO 9000 provient de la capacité du modèle à prédire 9000 classes différentes. Il s'appuie sur l'architecture originale en ajoutant certaines caractéristiques et en en éliminant d'autres, afin d'accroître les performances. Joseph Redmon est à nouveau le principal auteur et contributeur de ce modèle.
Les améliorations les plus notables sont
- Comprend la normalisation par lots. Les effets de régularisation ont amélioré mAP de 2% .
- Le classificateur pré-entraîné sur ImageNet utilisé dans YOLO accepte des images de 224x224 mais augmente la résolution à 448x448 pendant la détection. Pour aider le réseau à s'adapter aux différentes tailles, le réseau de classification est d'abord entraîné pendant 10 époques sur des images de 448x448. Cela a permis d'obtenir une augmentation de 4 % de mAP !
- Les couches entièrement connectées, sur la couche de prédiction, sont remplacées par une couche convolutive avec des boîtes d'ancrage. Les boîtes d'ancrage sont des boîtes de délimitation prédéfinies qui agissent comme des suggestions pour le réseau lorsqu'il fait des prédictions. Essentiellement, lors de l'utilisation d'ancres, le réseau doit seulement corriger les suggestions plutôt que de les découvrir par lui-même. En utilisant des ancres, la PMA a légèrement diminué de 0,3 %, mais le rappel a augmenté de 7 %, ce qui est surprenant !
- De bonnes priorités de boîte d'ancrage ont été découvertes en regroupant les coordonnées de boîte d'ancrage de l'ensemble de formation, au lieu de les choisir manuellement.
- Application d'une technique d'entraînement multi-échelle, où le réseau est entraîné sur différentes résolutions pour créer des représentations plus générales.

Fig 3 : Yolo 9000 est devenu l'état de l'art. Il était plus rapide et plus précis que ses concurrents. Source de l'image [2]
YOLOv3 :
Yolov3, le dernier modèle de Joseph Redmon, a été présenté dans un article au ton très humoristique et sarcastique ! Il vaut la peine d'être lu rien que pour cela. Le modèle lui-même est légèrement meilleur et même s'il ne s'est pas classé avec ses concurrents aussi bien que YOLOv2 en termes de mAP, sa vitesse d'inférence est 3x plus rapide que son concurrent le plus rapide, une variante SSD. Atteint AP=33.0%
Plusieurs backbones CNN différents ont été choisis, DarkNet-19 étant extrêmement rapide, atteignant jusqu'à 171 FPS ! Les connexions résiduelles, un standard d'or de nos jours, ont également été introduites dans cette version.
YOLOv4 :
Le premier modèle de la famille YOLO, qui ne provient pas de l'Université de Washington et de Joseph Redmon mais qui est toujours construit sur le framework DarkNet. Le modèle a été évalué sur le jeu de données COCO et a fourni des améliorations surprenantes en termes d'AP tout en restant significativement plus rapide que ses concurrents. Atteint AP=43.0%
Yolov4 s'est principalement concentré sur l'amélioration de ses méthodes d'entraînement. Ils ont utilisé ce qu'ils appellent le "Bag of Freebies", c'est-à-dire des méthodes qui n'affectent que l'entraînement et améliorent les performances. Voici quelques exemples
- Méthodes d'augmentation avancées (CutMix, augmentation mosaïque, formation autodidacte)
- Remplacement de la perte MSE par une variance de perte IoU
- En utilisant la régularisation DropBlock et
- Trouver les hyperparamètres les plus optimaux grâce aux algorithmes génétiques.
Cependant, ils ont également utilisé des "Bag of Specials", c'est-à-dire des blocs d'extension ou des méthodes de post-traitement qui augmentent légèrement le coût d'inférence mais améliorent considérablement la précision des détections d'objets. Voici quelques exemples
- Utilisation de la fonction d'activation mish[6]
- Utilisation des connexions résiduelles pondérées à entrées multiples (MiWRC)
- Mise en commun des pyramides spatiales [7].

Fig 4 : Comparaison des performances de YOLOv4, YOLOv3 et des réseaux concurrents dans le jeu de données de détection d'objets COCO. Source de l'image [5]
YOLOv5 :
Peu après la sortie de YOLOv4, Glenn Jocher d'Ultralytics a présenté YOLOv5 en utilisant le framework Pytorch, en mai 2020. En raison de ce repo yolov5 open source [8], yolov5 est probablement la version la plus populaire de toutes, mais aussi la plus controversée.
Aucun article n'accompagne cette version. La principale différence avec yolov4 est que yolov5 est construit à partir des sources avec la bibliothèque Pytorch au lieu d'être dérivé de la version originale de DarkNet yolo.
Une grande controverse entoure les versions de yolov5 et suivantes (v6, v7), certains affirmant qu'elles ne sont pas officielles. Ce qui compte vraiment, cependant, c'est que les gens trouvent ces dépôts utiles et puissent construire des applications utiles à partir de leur code source ouvert.
YOLOv6 :
Yolov6 a été publié presque en parallèle avec Yolov7 (été 2022), de la société chinoise Meituan. L'objectif était de tester les méthodes d'entraînement et les blocs de plug-in récents de l'état de l'art de la vision par ordinateur. Expliquer toutes ces techniques complexes n'est pas le but de ce billet de blog, mais nous mentionnons brièvement les principales contributions de Yolov6.
- Nouveau modèle de squelette RepVGG
- TAL: Apprentissage par alignement de tâches
- Perte de classification de VariFocal et perte de régression de SIoU/GIoU.
- Autodistillation
- Quantification - Formation consciente, pour une meilleure performance via la quantification des poids.
Selon les bancs d'essai publiés dans leur article, Yolov6 obtient jusqu'à AP=52,5% à 98 FPS avec son plus grand modèle.
YOLOv7 :
YOLOv7, dont l'article a été publié plus tôt que l'article yolov6 (le versionnage devient désordonné...), a réussi à repousser encore plus loin les barrières de la détection d'objets en temps réel. Selon l'article publié , "YOLOv7 surpasse tous les détecteurs d'objets connus en termes de vitesse et de précision dans une plage allant de 5 FPS à 160 FPS et présente la plus grande précision 56,8 % AP parmi tous les détecteurs d'objets en temps réel connus avec 30 FPS ou plus sur le GPU V100 ".

Fig. 5 : Comparaison de yolov7 avec d'autres concurrents. Yolov7 est actuellement SOTA dans la détection d'objets en temps réel. Source de l'image[10]
Ainsi, YOLOv7 est effectivement le détecteur d'objets en temps réel le plus avancé pour 2022. L'article s'intitule "YOLOv7 : Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors". Comme pour Yolov4 (même auteur principal), ils utilisent un certain nombre de méthodes de formation de pointe pour la vision par ordinateur pendant la formation. Cela leur permet d'améliorer les performances sur le jeu de données COCO sans affecter la vitesse d'inférence du tout. Tout ce qu'ils ont fait n'affecte que les coûts de formation sans compromettre la vitesse d'inférence.
YOLOv8 :
Yolov8's ou "Real-Time Flying Object Detection" a été publié en 2023. Cette nouvelle version est conçue comme un cadre unifié pour l'entraînement de modèles à différentes tâches telles que la détection, la segmentation, l'estimation de la pose, le suivi et la classification.
Il utilise un réseau dorsal plus avancé, qui est une variante de l'architecture CPSDarkNetBackbone. Il utilise à la fois le Feature Pyramid Network (FPN) et le Path Aggregation Network (PAN), et il a introduit des améliorations et de nouvelles fonctionnalités pour améliorer les performances comme nous pouvons le voir sur les figures suivantes.

Plus rapide et plus précis que YOLOv7 et tous ses prédécesseurs grâce à sa prédiction multi-échelle, YOLOv8 constitue un puissant outil de deep learning pour la détection d'objets en temps réel. Son architecture sans ancrage le rend également plus facile à utiliser.
YOLOv8 fonctionne également sur les CPU et les GPU, et est très efficace et flexible, prenant en charge un large éventail de formats d'exportation.
YOLO-NAS
Selon DeciAI, YOLO-NAS est environ 0,5 mAP points plus précis et 10% à 20% plus rapide que les variantes équivalentes de YOLOv8 et YOLOv7.

Cette version, développée par DeciAI, vise à remédier aux limites des modèles précédents en matière de détection d'objets. NAS, qui signifie Neural Architecture Search (recherche d'architecture neuronale), est une technique d'automatisation de la conception de réseaux neuronaux artificiels.
Les trois caractéristiques clés de YOLO-NAS mises en évidence par Deci.ai sont les suivantes :
- Bloc de base adapté à la quantification
- Formation avancée et quantification : schémas de formation avancée et quantification après formation
- Optimisation et pré-entraînement AutoNAC : parfaitement adapté à la détection d'objets dans le monde réel
Le modèle, lorsqu'il est converti en sa version quantifiée INT8, ne subit qu'une baisse de précision minime, ce qui constitue une amélioration significative par rapport à d'autres modèles. Ces progrès aboutissent à une architecture supérieure dotée de capacités de détection d'objets sans précédent et de performances exceptionnelles.
Code source ouvert pour YOLO
Les détecteurs d'objets Yolo sont un excellent choix pour les applications en temps réel. Si des prédictions rapides sont nécessaires, YOLOv8 est probablement le meilleur choix à l'heure actuelle. Toutes les versions de Yolo ont un code source ouvert.
Travailler avec eux devrait être facile, mais vous devez vous assurer que les annotations de vos ensembles de données sont au format yolo.
Annotations de la boîte de délimitation de Yolo :
sont au format .txt et chaque image doit être accompagnée d'un fichier d'annotation .txt. Chaque ligne du fichier .txt représente un objet. Dans chaque ligne, 5 identifiants sont inclus et font référence à [class id, bbox center x, bbox center y , bbox width, bbox height] comme présenté dans la figure 6 ci-dessous. Il est important de noter que l'ID de classe commence à partir du numéro 0 et que les coordonnées sont normalisées dans la plage [0,1]. Si vos boîtes sont en pixels, divisez center_x et bbox_width par la largeur de l'image, et center_y et bbox_height par la hauteur de l'image.
Vous pouvez annoter vos ensembles de données et les exporter dans différents formats à l'aide d'outils simples comme LabelMe ou utiliser les outils d'étiquetage assistés par l'IA de Picselia et réduire considérablement les coûts d'annotation.

Fig 6 : Exemple de fichier d'annotation yolo
Dépôts Github :
- YOLOv5 est le projet le plus populaire et le mieux documenté avec de nombreux tutoriels officiels. Il est relativement facile de travailler avec lui et les performances sont généralement bonnes. Cependant, il n'est plus à la pointe de la technologie.
- Yolov6 est également bien documenté et devrait offrir de meilleures performances et une meilleure vitesse par rapport à yolov5. Si vous êtes intéressé par l'entraînement d'un modèle yolov6 avec des données personnalisées, ce tutoriel devrait vous être utile. Pour une application simple, il suffit de quelques lignes de code dans le terminal après avoir cloné leur repo.
- Le référentiel Yolov7 offre plus que la simple détection d'objets. Il est facile d'utiliser leur modèle pré-entraîné pour l'estimation de la pose et la segmentation des instances. Cependant, ils ne fournissent pas une aussi bonne documentation que yolov6/yolov5 et l'entraînement sur vos données personnalisées peut demander un peu plus d'efforts de votre part. Si vous souhaitez tester le modèle, ils le proposent également sur les espaces de visages étreints.
- yolov8 - GitHub Topics
- YOLONAS.md - Deci-AI/super-gradients
Conclusions
La famille de modèles YOLO a connu un grand succès, comme en témoigne le nombre de versions différentes qui ont suivi la publication originale. Les praticiens de l'apprentissage profond utilisent les modèles YOLO pour la détection d'objets, car ils offrent un excellent compromis entre vitesse et précision. Il est facile de travailler avec les modèles yolo grâce aux référentiels open source publiés par les créateurs. La détection d'objets est la principale tâche pour laquelle les modèles yolo sont performants, mais le dépôt yolov8 contient également des modèles pour la classification, la segmentation d'images et l'estimation de la pose.
REFERENCES :
[1] On ne regarde qu'une fois : Détection unifiée d'objets en temps réel
[2] Détection d'objets avec des modèles à base de parties formés de manière discriminatoire.
[4] YOLOv3 : Une amélioration incrémentale
[5] YOLOv4 : Vitesse et précision optimales de la détection d'objets
[6] Mish : Une fonction d'activation auto-régularisée non-monotone.
[9] YOLOv6 : Un cadre de détection d'objets en une seule étape pour les applications industrielles.
[11] YOLO-NAS (Neural Architecture Search) - Ultralytics YOLOv8 Docs