YOLOv4 - le réseau neuronal en temps réel le plus précis du jeu de données Microsoft COCO

Darknet YOLOv4 est plus rapide / plus précis que Google TensorFlow EfficientDet et FaceBook Pytorch / Detectron RetinaNet / MaskRCNN.

Le mĂŞme article sur medium : medium
Code : github.com/AlexeyAB/darknet
Article : arxiv.org/abs/2004.10934


Nous montrerons quelques nuances de comparaison et d'utilisation de réseaux de neurones pour détecter des objets.

Notre objectif était de développer un algorithme de détection d'objets pour une utilisation dans des produits réels, et pas seulement de faire avancer la science. La précision du réseau de neurones YOLOv4 (608x608) est de 43,5% AP / 65,7% AP50 Microsoft-COCO-testdev.

62 FPS - YOLOv4 (608x608 batch = 1) sur Tesla V100 - en utilisant Darknet-framework
400 FPS - YOLOv4 (416x416 batch = 4) sur RTX 2080 Ti - en utilisant TensorRT + tkDNN
32 FPS - YOLOv4 (416x416 batch = 1) sur Jetson AGX Xavier - en utilisant TensorRT + tkDNN




Tout d'abord, quelques liens utiles.




Notre réseau de neurones YOLOv4 et notre propre framework Darknet DL (C / C ++ / CUDA) sont meilleurs en vitesse FPS et en précision AP50: 95 et AP50 sur les jeux de données Microsoft COCO que les frameworks DL et réseaux de neurones: Google TensorFlow EfficientDet, FaceBook Detectron RetinaNet / MaskRCNN, PyTorch Yolov3-ASFF, et bien d'autres ... YOLOv4 atteint une précision de 43,5% AP / 65,7% AP50 sur le test Microsoft COCO à une vitesse de 62 FPS TitanV ou 34 FPS RTX 2070. Contrairement à d'autres détecteurs modernes, YOLOv4 peut entraîner n'importe qui avec celui qui a la carte graphique de jeu nVidia avec 8-16 Go de VRAM. Désormais, non seulement les grandes entreprises peuvent former un réseau de neurones sur des centaines de GPU / TPU pour utiliser de grandes tailles de mini-lots afin d'obtenir une plus grande précision, nous renvoyons donc le contrôle de l'intelligence artificielle aux utilisateurs ordinaires, car pour YOLOv4, un grand mini-lot n'est pas nécessaire,peut être limité à une taille de 2 à 8.

YOLOV4 est optimal pour une utilisation en temps réel, car le réseau se trouve sur la courbe d'optimalité de Pareto dans le graphique AP (précision) / FPS (vitesse).



Graphiques de précision (AP) et de vitesse (FPS) de nombreux réseaux de neurones pour détecter des objets mesurés sur des GPU TitanV / TeslaV100, TitanXP / TeslaP100, TitanX / TeslaM40 pour les deux principaux indicateurs de précision AP50: 95 et AP50

Pour une comparaison équitable, nous prenons des données d'articles et comparer uniquement sur le GPU avec la même architecture.

La plupart des tâches pratiques ont les exigences minimales nécessaires pour les détecteurs - ce sont la précision et la vitesse minimales acceptables. Habituellement, la vitesse minimale autorisée de 30 FPS (images par seconde) et plus pour les systèmes en temps réel.

Comme le montrent les graphiques, dans les systèmes en temps réel avec FPS 30 ou plus:

  • YOLOv4-608 RTX 2070 450$ (34 FPS) 43.5% AP / 65.7% AP50
  • EfficientDet-D2 TitanV 2250$ (42 FPS) 43.0% AP / 62.3% AP50
  • EfficientDet-D0 RTX 2070 450$ (34 FPS) 33.8% AP / 52.2% AP50

Ceux. YOLOv4 nécessite un équipement 5 fois moins cher et plus précis que EfficientDet-D2 (Google-TensorFlow). Vous pouvez utiliser EfficientDet-D0 (Google-TensorFlow) alors le coût de l'équipement sera le même, mais la précision sera de 10% AP inférieure.
De plus, certains systèmes industriels ont des limites sur la dissipation thermique ou sur l'utilisation d'un système de refroidissement passif - dans ce cas, vous ne pouvez pas utiliser TitanV même avec de l'argent.

Lorsque vous utilisez YOLOv4 (416x416) sur un GPU RTX 2080 Ti en utilisant TensorRT + tkDNN, nous atteignons une vitesse 2x plus rapide, et lorsque vous utilisez batch = 4, il est 3x-4x fois plus rapide - pour une comparaison honnête, nous ne présentons pas ces résultats dans un article sur arxiv. org:

Réseau de neurones YOLOv4 (416x416) FP16 (Tensor Cores) batch = 1 atteint à 32 FPS calculator nVidia Jetson AGX Xavier en utilisant les bibliothèques + tkDNN TensorRT: github.com/ceccocats/tkDNN la
vitesse légèrement plus lente donne la bibliothèque OpenCV-dnn compilée avec CUDA: docs .opencv.org / master / da / d9d / tutorial_dnn_yolo.html

Parfois, la vitesse (FPS) de certains réseaux de neurones dans les articles est indiquée lors de l'utilisation d'une taille de lot élevée ou lors de tests avec un logiciel spécialisé (TensorRT), qui optimise le réseau et affiche une valeur FPS accrue. La comparaison de certains réseaux sur TRT avec d'autres réseaux sans TRT n'est pas juste. L'utilisation d'une taille de lot élevée augmente le FPS, mais augmente également la latence (plutôt que de la diminuer) par rapport à batch = 1. Si le réseau avec batch = 1 affiche 40 FPS, et avec batch = 32, il affiche 60 FPS, le délai sera de 25 ms pour batch = 1 et de ~ 500 ms pour batch = 32, car seuls ~ 2 paquets (32 images chacun) seront traités par seconde, c'est pourquoi l'utilisation de batch = 32 n'est pas acceptable dans de nombreux systèmes industriels. Par conséquent, nous avons comparé les résultats sur les graphiques uniquement avec batch = 1 et sans utiliser TensorRT.

Tout processus peut être contrôlé par des personnes ou par des ordinateurs. Lorsqu'un système informatique agit avec un retard important en raison de la faible vitesse et fait trop d'erreurs, vous ne pouvez pas vous voir confier un contrôle complet sur les actions, dans ce cas, la personne contrôle le processus, et le système informatique ne donne que des indices - il s'agit d'un système de recommandation - la personne travaille et le système uniquement indique où des erreurs ont été commises. Lorsque le système fonctionne rapidement et avec une grande précision, un tel système peut contrôler le processus de manière indépendante et une personne ne s'en occupe que. Par conséquent, la précision et la vitesse du système sont toujours importantes. S'il vous semble que 120 FPS pour YOLOv4 416x416 est trop pour votre tâche, et qu'il vaut mieux prendre l'algorithme plus lentement et plus précisément, alors très probablement dans les tâches réelles, vous utiliserez quelque chose de plus faible que le Tesla V100 250 Watt,par exemple, RTX 2060 / Jetson-Xavier 30-80 Watt, dans ce cas, vous obtiendrez 30 FPS sur YOLOv4 416x416 et d'autres réseaux de neurones à 1-15 FPS ou ne démarrerez pas du tout.

Caractéristiques de la formation de divers réseaux de neurones


Vous devez former EfficientDet avec un mini-lot = taille 128 sur plusieurs GPU Tesla V100 32 Go, tandis que YOLOv4 a été formé sur un seul GPU Tesla V100 32 Go avec mini-lot = 8 = lot / subdivisions, et peut être formé sur un jeu régulier carte graphique 8-16 Go GPU-VRAM.
La nuance suivante est la difficulté de former un réseau de neurones pour détecter ses propres objets. Peu importe combien de temps vous entraînez d'autres réseaux sur le même GPU 1080 Ti, vous n'obtiendrez pas la précision indiquée dans le graphique ci-dessus. La plupart des réseaux (EfficientDet, ASFF, ...) doivent être formés sur 4 à 128 GPU (avec une grande taille de mini-lot utilisant syncBN) et il est nécessaire de s'entraîner à chaque fois pour chaque résolution de réseau, sans remplir les deux conditions, il est impossible d'atteindre la précision AP ou AP50 déclarée par eux.


Vous pouvez voir la dépendance de la précision de détection des objets sur la taille du mini-lot dans d'autres détecteurs, c'est-à-dire en utilisant 128 cartes vidéo au lieu de 8 cartes vidéo et la vitesse d'apprentissage est 10 fois plus élevée et la précision finale est 1,5 AP plus élevée - MegDet: un grand détecteur d'objets en mini-lots arxiv.org/abs/1711.07240

Yolo ASFF: arxiv.org/abs/1911.09516
Après [43], nous introduisons un sac de trucs dans le processus de formation, tels que l'algorithme de mixage [12], le calendrier des taux d'apprentissage cosinus [26] et la technique de normalisation des lots synchronisés [30].

EfficientDet: arxiv.org/abs/1911.09070
La normalisation par lots synchronisée est ajoutée après chaque convolution avec la décroissance de la norme de lot 0,99 et epsilon 1e-3.

Chaque modèle est formé de 300 époques avec une taille totale de lot de 128 sur 32 cœurs TPUv3.

cloud.google.com/tpu/docs/types-zones#europe
v3-32 TPU type (v3) – 32 TPU v3 cores – 512 GiB Total TPU memory

Vous devez utiliser 512 Go de TPU / GPU-RAM pour entraîner le modèle EfficientDet avec une normalisation de lot synchronisée à lot = 128, tandis que le mini-lot = 8 et seulement 32 Go de RAM-GPU ont été utilisés pour entraîner YOLOv4. Malgré cela, YOLOv4 est plus rapide / plus précis que les réseaux publics, bien qu'il ne soit formé qu'une seule fois avec une résolution de 512x512 par GPU (Tesla V100 32 Go / 16 Go). Dans le même temps, l'utilisation de la plus petite taille de mini-lot et du GPU-VRAM ne conduit pas à une perte de précision aussi dramatique que dans d'autres réseaux de neurones:


Source: arxiv.org/abs/2004.10934

Vous pouvez donc former l'intelligence artificielle localement sur votre PC, au lieu de télécharger Ensemble de données vers le cloud - cela garantit la protection de vos données personnelles et rend la formation en intelligence artificielle accessible à tous.

Il suffit de former notre réseau une fois avec une résolution de réseau 512x512, puis il peut être utilisé avec différentes résolutions de réseau dans la plage: [416x416 - 512x512 - 608x608].

La plupart des autres modèles doivent être formés à chaque fois séparément pour chaque résolution de réseau, pour cette raison, la formation prend beaucoup plus de temps.

Caractéristiques de mesure de la précision des algorithmes de détection d'objets


Vous pouvez toujours trouver une image sur laquelle un algorithme fonctionnera mal, et un autre algorithme fonctionnera bien, et vice versa. Par conséquent, pour tester les algorithmes de détection, un large ensemble de ~ 20 000 images et 80 types d'objets différents est utilisé - MSCOCO test-dev dataset.

Pour que l'algorithme n'essaie pas de se souvenir simplement du hachage de chaque image et des coordonnées sur celle-ci (sur-ajustement), la précision de la détection d'objet est toujours vérifiée sur les images et les étiquettes que l'algorithme n'a pas vues pendant la formation - cela garantit que l'algorithme peut détecter des objets sur les images / vidéos qu'il jamais vu.

Pour que personne ne puisse se tromper dans le calcul de la précision, dans le domaine public, il n'y a que des images de test-dev sur lesquelles vous détectez et envoyez les résultats au serveur d'évaluation CodaLab, sur lequel le programme lui-même compare vos résultats avec des annotations de test qui ne sont accessibles à personne. .

L'ensemble de données MSCOCO se compose de 3 parties

  1. Tutoriel: 120 000 images et un fichier json avec les coordonnées de chaque objet
  2. Set de validation: 5000 images et un fichier json avec les coordonnées de chaque objet
  3. Suite de tests: 41 000 images jpg sans les coordonnées des objets (certaines de ces images sont utilisées pour déterminer la précision des tâches: détection d'objets, segmentation d'instances, points clés, ...)

Caractéristiques du développement de YOLOv4


Lors du développement de YOLOv4, j'ai dû développer moi-même le réseau de neurones YOLOv4 et le framework Darknet en C / C ++ / CUDA. Parce que dans Darknet il n'y a pas de différenciation automatique et d'exécution automatique de la règle de chaîne, alors tous les gradients doivent être implémentés manuellement. D'un autre côté, nous pouvons déroger au strict respect de la règle de la chaîne, changer la rétropropagation et essayer des choses très simples pour augmenter la stabilité et la précision de l'apprentissage.

Résultats supplémentaires lors de la création de réseaux de neurones


  • Pas toujours le meilleur rĂ©seau pour classer les objets sera le meilleur en tant que colonne vertĂ©brale pour le rĂ©seau utilisĂ© pour dĂ©tecter les objets
  • L'utilisation de poids entraĂ®nĂ©s avec des fonctionnalitĂ©s qui ont une prĂ©cision accrue dans la classification peut affecter la prĂ©cision du dĂ©tecteur (sur certains rĂ©seaux)
  • Toutes les fonctionnalitĂ©s mentionnĂ©es dans diverses Ă©tudes n'amĂ©liorent pas la prĂ©cision du rĂ©seau.
  • .
  • BFLOPS , BFLOPS
  • , receptive field , stride=2 / conv3x3, weights (filters) .

YOLOv4


La détection d'objets à l'aide de modèles YOLOv4 formés est intégrée à la bibliothèque OpenCV-dnn github.com/opencv/opencv/issues/17148 afin que vous puissiez utiliser YOLOv4 directement à partir d'OpenCV sans utiliser le framework Darknet. La bibliothèque OpenCV prend en charge la mise en œuvre de réseaux de neurones sur le processeur, le GPU (nVidia GPU), le VPU (Intel Myriad X). Plus de détails: docs.opencv.org/master/da/d9d/tutorial_dnn_yolo.html Framework

OpenCV (dnn):


Framework Darknet :


tkDNN + TensorRT - Vitesse maximale de détection d'objet à l'aide de YOLOv4: TensorRT + tkDNN github.com/ceccocats/tkDNN

  • 400 FPS - YOLOv4 (416x416 batch = 4) sur RTX 2080 Ti
  • 32 FPS - YOLOv4 (416x416 batch = 1) sur Jetson AGX Xavier

L'utilisation de YOLOv4 peut être étendue pour détecter des boîtes 3D tournées ou des points clés / points de repère faciaux, par exemple:

github.com/ouyanghuiyu/darknet_face_with_landmark


All Articles