YOLOv4 - das genaueste neuronale Echtzeitnetzwerk im Microsoft COCO-Dataset

Darknet YOLOv4 ist schneller / genauer als Google TensorFlow EfficientDet und FaceBook Pytorch / Detectron RetinaNet / MaskRCNN.

Der gleiche Artikel auf Medium : Medium
Code : github.com/AlexeyAB/darknet
Artikel : arxiv.org/abs/2004.10934


Wir werden einige Nuancen des Vergleichs und der Verwendung neuronaler Netze zur Erkennung von Objekten zeigen.

Unser Ziel war es, einen Objekterkennungsalgorithmus für die Verwendung in realen Produkten zu entwickeln und nicht nur die Wissenschaft voranzutreiben. Die Genauigkeit des neuronalen YOLOv4-Netzwerks (608 x 608) beträgt 43,5% AP / 65,7% AP50 Microsoft-COCO-Testdev.

62 FPS - YOLOv4 (608 x 608 Batch = 1) unter Tesla V100 - unter Verwendung von Darknet-Framework
400 FPS - YOLOv4 (416 x 416 Batch = 4) unter RTX 2080 Ti - unter Verwendung von TensorRT + tkDNN
32 FPS - YOLOv4 (416 x 416 Batch = 1) unter Jetson AGX Xavier - mit TensorRT + tkDNN




Zunächst einige nützliche Links.




Unser neuronales YOLOv4-Netzwerk und unser eigenes Darknet DL-Framework (C / C ++ / CUDA) bieten eine bessere FPS-Geschwindigkeit und AP50: 95- und AP50-Genauigkeit für Microsoft COCO-Datensätze als DL-Frameworks und neuronale Netzwerke: Google TensorFlow EfficientDet, FaceBook Detectron RetinaNet / MaskRCNN, PyTorch Yolov3-ASFF und viele andere ... YOLOv4 erreicht beim Microsoft COCO-Test eine Genauigkeit von 43,5% AP / 65,7% AP50 bei einer Geschwindigkeit von 62 FPS TitanV oder 34 FPS RTX 2070. Im Gegensatz zu anderen modernen Detektoren kann YOLOv4 jeden trainieren Wer hat die nVidia Gaming-Grafikkarte mit 8-16 GB VRAM. Jetzt können nicht nur große Unternehmen ein neuronales Netzwerk auf Hunderten von GPU / TPUs trainieren, um große Mini-Batch-Größen zu verwenden, um eine höhere Genauigkeit zu erzielen. Daher geben wir die Kontrolle über künstliche Intelligenz an normale Benutzer zurück, da für YOLOv4 kein großes Mini-Lot erforderlich ist.kann auf eine Größe von 2 - 8 begrenzt werden.

YOLOV4 ist optimal für die Verwendung in Echtzeit, weil Das Netzwerk liegt auf der Pareto-Optimalitätskurve im Diagramm AP (Genauigkeit) / FPS (Geschwindigkeit).



Diagramme der Genauigkeit (AP) und Geschwindigkeit (FPS) vieler neuronaler Netze zur Erkennung von Objekten, die auf GPUs TitanV / TeslaV100, TitanXP / TeslaP100, TitanX / TeslaM40 gemessen wurden, für die beiden Hauptindikatoren für die Genauigkeit AP50: 95 und AP50

Für einen fairen Vergleich nehmen wir Daten aus Artikeln und Vergleichen Sie nur auf der GPU mit der gleichen Architektur.

Die meisten praktischen Aufgaben stellen die Mindestanforderungen an Detektoren - dies sind die minimal akzeptable Genauigkeit und Geschwindigkeit. Normalerweise die minimal zulässige Geschwindigkeit von 30 FPS (Frames pro Sekunde) und höher für Echtzeitsysteme.

Wie aus den Grafiken ersichtlich, sind in Echtzeitsystemen mit FPS 30 oder mehr:

  • 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

Jene. YOLOv4 erfordert fünfmal billigere Geräte und ist genauer als EfficientDet-D2 (Google-TensorFlow). Sie können EfficientDet-D0 (Google-TensorFlow) verwenden, dann sind die Kosten für die Ausrüstung gleich, aber die Genauigkeit ist um 10% AP niedriger.
Darüber hinaus haben einige industrielle Systeme Einschränkungen hinsichtlich der Wärmeableitung oder der Verwendung eines passiven Kühlsystems. In diesem Fall können Sie TitanV auch mit Geld nicht verwenden.

Wenn Sie YOLOv4 (416x416) auf einer RTX 2080 Ti-GPU mit TensorRT + tkDNN verwenden, erreichen wir eine Geschwindigkeit von 2x schneller und bei Verwendung von Batch = 4 3x-4x schneller - für einen ehrlichen Vergleich präsentieren wir diese Ergebnisse nicht in einem Artikel über arxiv. org:

YOLOv4 neuronales Netzwerk (416x416) FP16 (Tensorkerne) Batch = 1 erreicht 32 FPS-Rechner nVidia Jetson AGX Xavier unter Verwendung von Bibliotheken + tkDNN TensorRT: github.com/ceccocats/tkDNN
etwas langsamere Geschwindigkeit ergibt OpenCV-dnn-Bibliothek, die mit CUDA: docs kompiliert wurde .opencv.org / master / da / d9d / tutorial_dnn_yolo.html

Manchmal wird die Geschwindigkeit (FPS) einiger neuronaler Netze in Artikeln angegeben, wenn eine hohe Stapelgröße verwendet wird oder wenn mit einer speziellen Software (TensorRT) getestet wird, die das Netzwerk optimiert und einen erhöhten FPS-Wert anzeigt. Der Vergleich einiger Netzwerke auf TRT mit anderen Netzwerken ohne TRT ist nicht fair. Die Verwendung einer hohen Chargengröße erhöht die FPS, erhöht aber auch die Latenz (anstatt sie zu verringern) im Vergleich zu Charge = 1. Wenn das Netzwerk mit Batch = 1 40 FPS und mit Batch = 32 60 FPS anzeigt, beträgt die Verzögerung 25 ms für Batch = 1 und ~ 500 ms für Batch = 32, weil Pro Sekunde werden nur ~ 2 Pakete (jeweils 32 Bilder) verarbeitet, weshalb die Verwendung von Batch = 32 in vielen industriellen Systemen nicht akzeptabel ist. Daher haben wir die Ergebnisse in den Diagrammen nur mit Batch = 1 und ohne Verwendung von TensorRT verglichen.

Jeder Prozess kann entweder von Personen oder von Computern gesteuert werden. Wenn ein Computersystem aufgrund niedriger Geschwindigkeit mit einer großen Verzögerung arbeitet und zu viele Fehler macht, kann es nicht mit der vollständigen Kontrolle der Aktionen betraut werden. In diesem Fall steuert die Person den Prozess, und das Computersystem gibt nur Hinweise - dies ist ein Empfehlungssystem - die Person arbeitet und nur das System erzählt, wo Fehler gemacht wurden. Wenn das System schnell und mit hoher Genauigkeit arbeitet, kann ein solches System den Prozess unabhängig steuern, und eine Person kümmert sich nur darum. Daher sind Genauigkeit und Systemgeschwindigkeit immer wichtig. Wenn Sie der Meinung sind, dass 120 FPS für YOLOv4 416x416 zu viel für Ihre Aufgabe sind und es besser ist, den Algorithmus langsamer und genauer zu verwenden, verwenden Sie bei realen Aufgaben höchstwahrscheinlich etwas Schwächeres als den Tesla V100 250 Watt.Beispiel: RTX 2060 / Jetson-Xavier 30-80 Watt. In diesem Fall erhalten Sie 30 FPS für YOLOv4 416x416 und andere neuronale Netze mit 1-15 FPS oder starten überhaupt nicht.

Merkmale des Trainings verschiedener neuronaler Netze


Sie müssen EfficientDet mit Mini-Batch = 128 Größe auf mehreren Tesla V100 32-GB-GPUs trainieren, während YOLOv4 auf nur einer Tesla V100 32-GB-GPU mit Mini-Batch = 8 = Batch / Unterteilungen trainiert wurde und auf einem regulären Spiel trainiert werden kann Grafikkarte 8-16 GB GPU-VRAM.
Die nächste Nuance ist die Schwierigkeit, ein neuronales Netzwerk zu trainieren, um seine eigenen Objekte zu erkennen. Unabhängig davon, wie viel Zeit Sie andere Netzwerke auf derselben 1080 Ti-GPU trainieren, erhalten Sie nicht die in der obigen Grafik angegebene Genauigkeit. Die meisten Netzwerke (EfficientDet, ASFF, ...) müssen auf 4 - 128 GPUs (mit einer großen Mini-Batch-Größe unter Verwendung von syncBN) trainiert werden, und es ist erforderlich, jedes Mal für jede Netzwerkauflösung neu zu trainieren, ohne beide Bedingungen zu erfüllen. Es ist unmöglich, die von ihnen angegebene AP- oder AP50-Genauigkeit zu erreichen.


Sie können die Abhängigkeit der Erkennungsgenauigkeit von Objekten von der Größe des Minibatch in anderen Detektoren sehen, d. H. Bei Verwendung von 128 Grafikkarten anstelle von 8 Grafikkarten ist die Lerngeschwindigkeit 10-mal höher und die Endgenauigkeit 1,5 AP höher - MegDet: Ein großer Mini-Batch-Objektdetektor arxiv.org/abs/1711.07240

Yolo ASFF: arxiv.org/abs/1911.09516
Im Anschluss an [43] führen wir eine Reihe von Tricks in den Trainingsprozess ein, z. B. den Mischalgorithmus [12], den Kosinus [26] -Lernratenplan und die synchronisierte Batch-Normalisierungstechnik [30].

EfficientDet: arxiv.org/abs/1911.09070
Nach jeder Faltung wird eine synchronisierte Chargennormalisierung mit einem Chargennormabfall von 0,99 und Epsilon 1e-3 hinzugefügt.

Jedes Modell trainiert 300 Epochen mit einer Gesamtgröße von 128 auf 32 TPUv3-Kernen.

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

Sie müssen 512 GB TPU / GPU-RAM verwenden, um das EfficientDet-Modell mit synchronisierter Batch-Normalisierung bei Batch = 128 zu trainieren, während Mini-Batch = 8 und nur 32 GB GPU-RAM zum Trainieren von YOLOv4 verwendet wurden. Trotzdem ist YOLOv4 schneller / genauer als öffentliche Netzwerke, obwohl es nur einmal mit einer Auflösung von 512 x 512 pro GPU (Tesla V100 32 GB / 16 GB) trainiert wird. Gleichzeitig führt die Verwendung der kleineren Mini-Batch-Größe und des GPU-VRAM nicht zu einem so dramatischen Genauigkeitsverlust wie in anderen neuronalen Netzen:


Quelle: arxiv.org/abs/2004.10934

Sie können also künstliche Intelligenz lokal auf Ihrem PC trainieren, anstatt sie herunterzuladen Datensatz in die Cloud - dies garantiert den Schutz Ihrer persönlichen Daten und macht das Training für künstliche Intelligenz für alle verfügbar.

Es reicht aus, unser Netzwerk einmal mit einer Netzwerkauflösung von 512 x 512 zu trainieren, und dann kann es mit verschiedenen Netzwerkauflösungen im Bereich [416 x 416 - 512 x 512 - 608 x 608] verwendet werden.

Die meisten anderen Modelle müssen jedes Mal für jede Netzwerkauflösung separat trainiert werden. Aus diesem Grund dauert das Training um ein Vielfaches länger.

Merkmale der Messgenauigkeit von Objekterkennungsalgorithmen


Sie können immer ein Bild finden, bei dem ein Algorithmus schlecht funktioniert und ein anderer Algorithmus gut funktioniert und umgekehrt. Daher wird zum Testen von Erkennungsalgorithmen ein großer Satz von ~ 20.000 Bildern und 80 verschiedenen Objekttypen verwendet - MSCOCO-Testentwicklungsdatensatz.

Damit der Algorithmus nicht einfach versucht, sich den Hash jedes Bildes und die Koordinaten darauf zu merken (Überanpassung), wird die Genauigkeit der Objekterkennung immer auf Bildern und Beschriftungen überprüft, die der Algorithmus während des Trainings nicht gesehen hat - dies stellt sicher, dass der Algorithmus Objekte auf Bildern / Videos erkennen kann, die er hat Noch nie gesehen.

Damit niemand einen Fehler bei der Berechnung der Genauigkeit machen kann, gibt es im öffentlichen Bereich nur Test-Dev-Testbilder, auf denen Sie die Ergebnisse erkennen und an den CodaLab-Evaluierungsserver senden, auf dem das Programm selbst Ihre Ergebnisse mit Testanmerkungen vergleicht, auf die niemand zugreifen kann .

Der MSCOCO-Datensatz besteht aus 3 Teilen

  1. Tutorial: 120.000 Bilder und eine JSON-Datei mit den Koordinaten jedes Objekts
  2. Validierungssatz: 5.000 Bilder und eine JSON-Datei mit den Koordinaten jedes Objekts
  3. Testsuite: 41.000 JPG-Bilder ohne die Koordinaten von Objekten (einige dieser Bilder werden verwendet, um die Genauigkeit bei Aufgaben zu bestimmen: Objekterkennung, Instanzsegmentierung, Schlüsselpunkte, ...)

Merkmale der Entwicklung von YOLOv4


Bei der Entwicklung von YOLOv4 musste ich sowohl das neuronale YOLOv4-Netzwerk als auch das Darknet-Framework unter C / C ++ / CUDA selbst entwickeln. weil In Darknet gibt es keine automatische Differenzierung und automatische Ausführung der Kettenregel, dann müssen alle Verläufe manuell implementiert werden. Auf der anderen Seite können wir von der strikten Einhaltung der Kettenregel abweichen, die Backpropagation ändern und sehr triviale Dinge versuchen, um die Lernstabilität und -genauigkeit zu erhöhen.

Zusätzliche Erkenntnisse bei der Erstellung neuronaler Netze


  • Nicht immer ist das beste Netzwerk zum Klassifizieren von Objekten das beste als Rückgrat für das Netzwerk, das zum Erkennen von Objekten verwendet wird
  • Die Verwendung von Gewichten, die mit Merkmalen trainiert wurden, deren Genauigkeit bei der Klassifizierung erhöht wurde, kann die Genauigkeit des Detektors beeinträchtigen (in einigen Netzwerken).
  • Nicht alle in verschiedenen Studien genannten Funktionen verbessern die Netzwerkgenauigkeit.
  • .
  • BFLOPS , BFLOPS
  • , receptive field , stride=2 / conv3x3, weights (filters) .

YOLOv4


Die Objekterkennung mit trainierten YOLOv4-Modellen ist in die OpenCV-dnn-Bibliothek github.com/opencv/opencv/issues/17148 integriert, sodass Sie YOLOv4 direkt von OpenCV aus verwenden können, ohne das Darknet-Framework zu verwenden. Die OpenCV-Bibliothek unterstützt die Implementierung neuronaler Netze auf der CPU, GPU (nVidia GPU) und VPU (Intel Myriad X). Weitere Details: docs.opencv.org/master/da/d9d/tutorial_dnn_yolo.html

OpenCV (dnn) Framework:


Darknet- Framework:


tkDNN + TensorRT - Maximale Objekterkennungsgeschwindigkeit mit YOLOv4: TensorRT + tkDNN github.com/ceccocats/tkDNN

  • 400 FPS - YOLOv4 (416 × 416 Charge = 4) auf RTX 2080 Ti
  • 32 FPS - YOLOv4 (416 x 416 Batch = 1) auf Jetson AGX Xavier

Die Verwendung von YOLOv4 kann erweitert werden, um 3D-gedrehte B-Boxen oder wichtige Punkte / Gesichtspunkte zu erkennen, z. B.:

Github.com/ouyanghuiyu/darknet_face_with_landmark


All Articles