Mise à l'échelle de YOLO v4, le meilleur réseau neuronal pour la détection d'objets sur l'ensemble de données MS COCO



Le YOLO v4 mis à l'échelle est le réseau de neurones le plus précis ( 55,8% AP ) sur l'ensemble de données Microsoft COCO de tous les réseaux de neurones publiés à ce jour. Et c'est aussi le meilleur en termes de rapport vitesse / précision sur toute la plage de précision et de vitesse de 15 FPS à 1774 FPS . Pour le moment, il s'agit du réseau neuronal Top1 pour la détection d'objets.



Le YOLO v4 mis à l'échelle surpasse les réseaux de neurones en précision:



  • Google EfficientDet D7x / DetectoRS ou SpineNet-190 (auto-formĂ© sur des donnĂ©es supplĂ©mentaires)
  • Amazon Cascade-RCNN ResNest200
  • Microsoft RepPoints v2
  • Facebook RetinaNet SpineNet-190




Nous montrons que les approches YOLO et Cross-Stage-Partial (CSP) sont les meilleures en termes de précision absolue et de rapport précision / vitesse.



Tracé de précision (axe vertical) et de latence (axe horizontal) sur le GPU Tesla V100 (Volta) avec batch = 1 sans utiliser TensorRT:









Même à une résolution réseau inférieure, Scaled-YOLOv4-P6 (1280x1280) 30 FPS est légèrement plus précis et 3,7 fois plus rapide que EfficientDetD7 (1536x1536) 8,2 FPS. Ceux. YOLOv4 utilise la résolution du réseau plus efficacement.



Le YOLO v4 mis à l'échelle se trouve sur la courbe d' optimalité de Pareto - quel que soit l'autre réseau de neurones que vous utilisez, il existe toujours un tel réseau YOLOv4, qui est soit plus précis à la même vitesse, soit plus rapide avec la même précision, c'est-à-dire YOLOv4 est le meilleur en termes de vitesse et de précision.



Le YOLOv4 mis à l'échelle est plus précis et plus rapide que les réseaux de neurones:



  • Google EfficientDet D0-D7x
  • Google SpineNet S49s - S143
  • Pagaie Baidu PP YOLO
  • Et plein d'autres


Scaled YOLO v4 est une série de réseaux neuronaux construits à partir du réseau YOLOv4 amélioré et mis à l'échelle. Notre réseau neuronal a été formé à partir de zéro sans utiliser de poids pré-entraînés (Imagenet ou tout autre).



Évaluation de la précision des réseaux de neurones publiés: paperswithcode.com/sota/object-detection-on-coco :







la vitesse du réseau de neurones YOLOv4-tiny atteint 1774 FPS sur un GPU de jeu RTX 2080Ti utilisant TensorRT + tkDNN (batch = 4, FP16): github. com / ceccocats / tkDNN



YOLOv4-tiny peut fonctionner en temps réel à 39 FPS / 25ms de latence sur JetsonNano (416x416, fp16, batch = 1) tkDNN / TensorRT:









Scaled YOLOv4 utilise les ressources d'ordinateurs parallèles tels que les GPU et les NPU de manière beaucoup plus efficace. Par exemple, le GPU V100 (Volta) a des performances: 14 TFLops - 112 TFLops-TC images.nvidia.com/content/technologies/volta/pdf/tesla-volta-v100-datasheet-letter-fnl-web.pdf



Si nous testons les deux modèles sur GPU V100 avec batch = 1 , avec les paramètres --hparams = mixed_precision = true et sans --tensorrt = FP32 , alors:



  • YOLOv4-CSP (640x640) - 47,5% AP - 70 FPS - 120 BFlops (60 FMA)

    Sur la base des BFlops, il devrait être 933 FPS = (112000/120), mais en réalité, nous obtenons 70 FPS, c'est-à-dire utilisé 7,5% GPU = (70/933)
  • EfficientDetD3 (896x896) – 47.5% AP – 36 FPS – 50 BFlops (25 FMA)

    BFlops, 2240 FPS = (112 000 / 50), 36 FPS, .. 1.6% GPU = (36 / 2240)


Ceux. efficacité des opérations de calcul sur les appareils avec un calcul parallèle massif tels que les GPU utilisés dans YOLOv4-CSP (7,5 / 1,6) = 4,7 fois meilleure que l'efficacité des opérations utilisées dans EfficientDetD3.



Habituellement, les réseaux de neurones sont exécutés sur le processeur uniquement dans les tâches de recherche pour un débogage plus facile, et la fonctionnalité BFlops n'a actuellement qu'un intérêt académique. Dans les tâches du monde réel, la vitesse et la précision réelles sont importantes, et non les performances sur papier. La vitesse réelle du YOLOv4-P6 est 3.7x plus rapide que celle de EfficientDetD7 sur le GPU V100. Par conséquent, les appareils à parallélisme massif GPU / NPU / TPU / DSP sont presque toujours utilisés avec beaucoup plus d'optimisation: vitesse, prix et dissipation thermique:



  • GPU intĂ©grĂ© (Jetson Nano / Nx)
  • Mobile-GPU / NPU / DSP (Bionic-NPU / Snapdragon-DSP / Mediatek-APU / Kirin-NPU / Exynos-GPU / ...)
  • TPU-Edge (Google Coral / Intel Myriad / Mobileye EyeQ5 / Tesla-moteurs TPU 144 TOPS-8bit)
  • GPU cloud (nVidia A100 / V100 / TitanV)
  • Cloud NPU (Google-TPU, Huawei Ascend, Intel Habana, Qualcomm AI 100, ...)


Aussi lors de l'utilisation de réseaux de neurones sur le Web - généralement le GPU est utilisé via les bibliothèques WebGL, WebAssembly, WebGPU, dans ce cas - la taille du modèle peut avoir de l'importance: github.com/tensorflow/tfjs#about-this-repo



Utilisation d'appareils et d'algorithmes avec des le parallélisme est une voie sans issue du développement, car il est impossible de réduire la taille de la lithographie plus petite que la taille d'un atome de silicium pour augmenter la fréquence du processeur:



  • La meilleure taille actuelle pour la fabrication de dispositifs semi-conducteurs est de 5 nanomètres.
  • La taille du rĂ©seau cristallin du silicium est de 0,5 nanomètre.
  • Le rayon atomique du silicium est de 0,1 nanomètre.


La solution est des ordinateurs à parallélisme massif: sur un monocristal ou sur plusieurs cristaux reliés par un interposeur. Par conséquent, il est impératif de créer des réseaux de neurones qui utilisent efficacement des machines informatiques massivement parallèles telles que les GPU et les NPU.



Améliorations de YOLOv4 mis à l'échelle par rapport à YOLOv4:



  • YOLOv4 mis Ă  l'Ă©chelle a utilisĂ© des techniques de mise Ă  l'Ă©chelle du rĂ©seau optimales pour obtenir les rĂ©seaux YOLOv4-CSP -> P5 -> P6 -> P7
  • Architecture rĂ©seau amĂ©liorĂ©e: Backbone est optimisĂ© et Neck (PAN) utilise les connexions Cross-stage-partial (CSP) et l'activation Mish
  • La moyenne mobile exponentielle (EMA) est utilisĂ©e pendant l'entraĂ®nement - c'est un cas particulier de SWA: pytorch.org/blog/pytorch-1.6-now-includes-stochastic-weight-averaging
  • Pour chaque rĂ©solution du rĂ©seau, un rĂ©seau neuronal distinct est formĂ© (dans YOLOv4, un seul rĂ©seau neuronal a Ă©tĂ© formĂ© pour toutes les rĂ©solutions)
  • Normaliseurs amĂ©liorĂ©s dans les couches [yolo]
  • Activations modifiĂ©es pour la largeur et la hauteur, ce qui permet un entraĂ®nement rĂ©seau plus rapide
  • Utilisez le paramètre [net] letter_box = 1 (prĂ©serve le rapport hauteur / largeur de l'image d'entrĂ©e) pour les rĂ©seaux haute rĂ©solution (pour tous sauf yolov4-tiny.cfg)


Architecture de réseau neuronal Scaled-YOLOv4 (exemples de trois réseaux: P5, P6, P7): La







connexion CSP est très efficace, simple et peut être appliquée à tous les réseaux neuronaux. L'essentiel est que



  • la moitiĂ© du signal de sortie suit le chemin principal (gĂ©nĂ©rant plus d'informations sĂ©mantiques avec un grand champ rĂ©cepteur)
  • et l'autre moitiĂ© du signal suit un dĂ©tour (en gardant plus d'informations spatiales avec un petit champ rĂ©ceptif)




L'exemple le plus simple d'une connexion CSP (à gauche est un réseau régulier, à droite un réseau CSP):





Un exemple de connexion CSP dans YOLOv4-CSP / P5 / P6 / P7

(à gauche est un réseau régulier, à droite un réseau CSP):







Dans YOLOv4-tiny il y a 2 connexions CSP :







YOLOv4 est utilisé dans divers domaines et tâches:





Et dans de nombreuses autres tâches….



Il existe des implémentations dans différents frameworks:





Comment compiler et exécuter Cloud Object Detection gratuitement :



  1. colab: colab.research.google.com/drive/12QusaaRj_lUwCGDvQNfICpa7kA7_a2dE
  2. vidéo: www.youtube.com/watch?v=mKAEGSxwOAY




Comment compiler et exécuter gratuitement Training in the Cloud :

  1. colab: colab.research.google.com/drive/1_GdoqCJWXsChrOiY8sZMr_zbr_fH-0Fg?usp=sharing
  2. vidéo: youtu.be/mmj3nxGT2YQ


De plus, l'approche YOLOv4 peut être utilisée dans d'autres tâches, par exemple lors de la détection d'objets 3D:












All Articles