Am 25. Juni 2020 wurde von Ultralytics die erste offizielle Version von YOLOv5 veröffentlicht, einem Computer-Vision-Modell zur Objekterkennung.
Was ist YOLOv5?
YOLOv5 ist ein Modell aus der You Only Look Once (YOLO)-Familie von Computer Vision-Modellen. YOLOv5 wird häufig zur Objekterkennung verwendet. YOLOv5 ist in vier Hauptversionen erhältlich: klein (s), mittel (m), groß (l) und extragroß (x), wobei jede Version eine zunehmend höhere Genauigkeit bietet. Jede Variante benötigt auch eine unterschiedliche Trainingszeit.
Im Diagramm besteht das Ziel darin, ein Objektdetektormodell zu erstellen , das im Verhältnis zu seiner Inferenzzeit (X-Achse) sehr leistungsfähig (Y-Achse) ist. Vorläufige Ergebnisse zeigen, dass YOLOv5 im Vergleich zu anderen modernen Techniken zu diesem Zweck außerordentlich gut abschneidet.
In der obigen Grafik können Sie sehen, dass alle Varianten von YOLOv5 schneller trainieren als EfficientDet. Das genaueste YOLOv5-Modell, YOLOv5x, kann Bilder um ein Vielfaches schneller und mit einem ähnlichen Grad an Genauigkeit verarbeiten wie das EfficientDet D4-Modell. Diese Daten werden später in diesem Beitrag ausführlicher erläutert.
Die Leistungsverbesserungen bei YOLOv5 resultieren größtenteils aus den Trainingsverfahren von PyTorch, während die Modellarchitektur nahe an YOLOv4 bleibt .
Ursprung von YOLOv5: Eine Erweiterung von YOLOv3 PyTorch
Das YOLOv5-Repository ist eine natürliche Erweiterung des YOLOv3-PyTorch-Repository von Glenn Jocher . Das YOLOv3-PyTorch-Repository war ein beliebtes Ziel für Entwickler, die YOLOv3-Darknet-Gewichte auf PyTorch portierten und dann zur Produktion übergingen. Viele (einschließlich unseres Vision-Teams bei Roboflow) mochten die Benutzerfreundlichkeit des PyTorch-Zweigs und nutzten diesen Ausgang für die Bereitstellung.
Nachdem die Modellarchitektur und das Trainingsverfahren von YOLOv3 vollständig repliziert wurden, begann Ultralytics mit der Durchführung von Forschungsverbesserungen und Änderungen am Repository-Design mit dem Ziel, Tausenden von Entwicklern die Möglichkeit zu geben, ihre eigenen benutzerdefinierten Objektdetektoren zu trainieren und einzusetzen, um jedes Objekt der Welt zu erkennen. Dies ist ein Ziel, das wir hier bei Roboflow teilen.
Das folgende Bild zeigt einige der von Ultralytics vorgenommenen Aktualisierungen:
Diese Weiterentwicklungen wurden ursprünglich als YOLOv4 bezeichnet, da YOLOv4 kürzlich im Darknet-Framework veröffentlicht wurde. Das Modell wurde in YOLOv5 umbenannt, um Versionskollisionen zu vermeiden. Zu Beginn gab es eine ziemliche Debatte um die Benennung von YOLOv5 und wir haben einen Artikel veröffentlicht , in dem YOLOv4 und YOLOv5 verglichen werden . Dort können Sie beide Modelle nebeneinander mit Ihren eigenen Daten ausführen.
Wir verzichten in diesem Artikel auf benutzerdefinierte Datensatzvergleiche und diskutieren nur die neuen Technologien und Metriken, die die YOLO-Forscher in GitHub-Diskussionen veröffentlichen.
Es ist erwähnenswert, dass seit der Veröffentlichung des Repositorys bedeutende Forschungsfortschritte bei YOLOv5 erzielt wurden, die unserer Erwartung nach fortgesetzt werden und dem YOLO-„Spitznamen“ möglicherweise eine gewisse Berechtigung verleihen. YOLOv5 ist also keineswegs ein fertiges Modell: Es wird sich im Laufe der Zeit weiterentwickeln.
Ein Überblick über die YOLOv5-Architektur
Bei der Objekterkennung, einem Anwendungsfall, für den YOLOv5 entwickelt wurde, werden Merkmale aus Eingabebildern erstellt. Diese Merkmale werden dann durch ein Vorhersagesystem geleitet, um Kästchen um Objekte zu zeichnen und ihre Klassen vorherzusagen.
Das YOLO-Modell war der erste Objektdetektor, der das Verfahren zur Vorhersage von Begrenzungsrahmen mit Klassenbezeichnungen in einem durchgängig differenzierbaren Netzwerk verband.
Das YOLO-Netzwerk besteht aus drei Hauptteilen.
- Backbone : Ein faltendes neuronales Netzwerk, das Bildmerkmale mit unterschiedlicher Granularität aggregiert und bildet.
- Hals : Eine Reihe von Ebenen zum Mischen und Kombinieren von Bildmerkmalen, um sie zur Vorhersage weiterzuleiten.
- Kopf : Verwendet Merkmale vom Hals und führt Schritte zur Box- und Klassenvorhersage aus.
Allerdings gibt es viele Ansätze, die man verfolgen kann, um verschiedene Architekturen bei jeder Hauptkomponente zu kombinieren. Die Beiträge von YOLOv4 und YOLOv5 dienen vor allem dazu, Durchbrüche in anderen Bereichen der Computervision zu integrieren und zu beweisen, dass sie als Kombination die YOLO-Objekterkennung verbessern.
Ein Überblick über YOLO-Trainingsverfahren
Die Verfahren zum Trainieren eines Modells sind genauso wichtig wie jeder andere Faktor für die Endleistung eines Objekterkennungssystems, obwohl sie oft weniger diskutiert werden. Lassen Sie uns über zwei Haupttrainingsverfahren in YOLOv5 sprechen:
- Datenerweiterung : Bei der Datenerweiterung werden Transformationen an den grundlegenden Trainingsdaten vorgenommen, um das Modell einem größeren Spektrum semantischer Variationen auszusetzen als beim isolierten Trainingssatz.
- Verlustberechnungen : YOLO berechnet eine Gesamtverlustfunktion aus den Verlustfunktionen GIoU, obj und class. Diese Funktionen können sorgfältig konstruiert werden, um das Ziel der mittleren Durchschnittspräzision zu maximieren .
YOLOv5 für PyTorch
Der größte Beitrag von YOLOv5 besteht darin, das Darknet-Forschungsframework in das PyTorch-Framework zu übersetzen. Das Darknet-Framework ist hauptsächlich in C geschrieben und bietet eine feinkörnige Kontrolle über die im Netzwerk kodierten Operationen. In vielerlei Hinsicht ist die Kontrolle der Sprache auf niedrigerer Ebene ein Segen für die Forschung, kann aber die Übertragung neuer Forschungserkenntnisse verlangsamen, da man mit jeder neuen Ergänzung benutzerdefinierte Gradientenberechnungen schreibt.
Der Prozess der Übersetzung (und Übererfüllung) der Trainingsverfahren in Darknet in PyTorch in YOLOv3 ist keine Kleinigkeit.
Datenerweiterung in YOLOv5
Mit jedem Trainingsbatch übergibt YOLOv5 Trainingsdaten an einen Datenlader, der die Daten online erweitert. Der Datenlader nimmt drei Arten von Erweiterungen vor:
- Skalierung.
- Farbraumanpassungen.
- Mosaikerweiterung.
Die neuartigste Methode hierbei ist die Mosaikdatenerweiterung, bei der vier Bilder in vier Kacheln mit zufälligem Verhältnis kombiniert werden.
Der Mosaikdatenlader ist nativ für das YOLOv3 PyTorch- und jetzt auch das YOLOv5-Repo.
Die Mosaikerweiterung ist besonders nützlich für den beliebten COCO- Benchmark zur Objekterkennung, da sie dem Modell hilft, das bekannte „ Kleinobjektproblem “ zu lösen, bei dem kleine Objekte nicht so genau erkannt werden wie größere Objekte.
Es ist erwähnenswert, dass es sich lohnt, mit Ihrer eigenen Reihe von Erweiterungen zu experimentieren , um die Leistung bei Ihrer benutzerdefinierten Aufgabe zu maximieren.
Hier ist ein Bild von erweiterten Trainingsbildern in YOLOv5:
Um ausführlicher zu erfahren, wie die Datenerweiterung die Objekterkennungsmodelle verbessert hat , empfehle ich die Lektüre dieses Posts zur Datenerweiterung in YOLOv4 .
Automatisch lernende Begrenzungsrahmenanker
Im YOLOv3 PyTorch-Repo stellte Glenn Jocher die Idee vor, Ankerboxen basierend auf der Verteilung von Begrenzungsboxen im benutzerdefinierten Datensatz mit K-Means- und genetischen Lernalgorithmen zu lernen. Dies ist für benutzerdefinierte Aufgaben sehr wichtig, da die Verteilung der Begrenzungsboxgrößen und -positionen erheblich von den voreingestellten Begrenzungsboxankern im COCO-Datensatz abweichen kann.
Um Box-Vorhersagen zu treffen, sagt das YOLOv5-Netzwerk Begrenzungsboxen als Abweichungen von einer Liste von Ankerbox-Dimensionen voraus .
Die größten Unterschiede bei Ankerboxen können auftreten, wenn wir versuchen, etwas wie Giraffen zu erkennen, die sehr groß und dünn sind, oder Mantas, die sehr breit und flach sind. Alle YOLO-Ankerboxen werden in YOLOv5 automatisch gelernt, wenn Sie Ihre benutzerdefinierten Daten eingeben.
Der folgende Code zeigt ein Beispiel für Anker, die aus Trainingsdaten in einer YOLOv5-Konfigurationsdatei gelernt wurden.
16-Bit-Gleitkommagenauigkeit
Das PyTorch-Framework ermöglicht es, die Gleitkommagenauigkeit beim Training und bei der Inferenz von 32 Bit auf 16 Bit zu halbieren. Bei Verwendung mit YOLOv5 beschleunigt dies die Inferenzzeit von Modellen erheblich.
Allerdings sind die Geschwindigkeitsverbesserungen derzeit nur auf ausgewählten GPUs verfügbar – nämlich V100 und T4. Allerdings hat NVIDIA schriftlich erklärt, dass sie die Abdeckung dieser Effizienzsteigerung verbessern wollen.
Neue Modellkonfigurationsdateien
YOLOv5 formuliert die Modellkonfiguration in.yaml , im Gegensatz zu den .cfg in Darknet verwendeten Dateien. Der Hauptunterschied zwischen diesen beiden Formaten besteht darin, dass die .yamlDatei komprimiert wird, um nur die verschiedenen Schichten im Netzwerk anzugeben, und diese dann mit der Anzahl der Schichten im Block multipliziert werden.
CSP-Backbone
Sowohl YOLOv4 als auch YOLOv5 implementieren den CSP-Engpass, um Bildfunktionen zu formulieren. Der Forschungsbeitrag für diese Architektur geht an WongKinYiu und sein jüngstes Paper über Cross Stage Partial Networks für das Backbone von Convolutional Neural Networks.
Das CSP behebt Probleme mit doppelten Gradienten in anderen größeren ConvNet-Backbones, was zu weniger Parametern und weniger FLOPS bei vergleichbarer Bedeutung führt. Dies ist für die YOLO-Familie äußerst wichtig, bei der Inferenzgeschwindigkeit und kleine Modellgröße von größter Bedeutung sind.
Die CSP-Modelle basieren auf DenseNet. DenseNet wurde entwickelt, um Schichten in Convolutional Neural Networks mit den folgenden Zielen zu verbinden:
- um das Problem des verschwindenden Gradienten zu lindern (es ist schwierig, Verlustsignale durch ein sehr tiefes Netzwerk zu unterstützen);
- um die Funktionsverbreitung zu stärken;
- um das Netzwerk zu ermutigen, Funktionen wiederzuverwenden und;
- um die Anzahl der Netzwerkparameter zu reduzieren.
In CSPResNext50 und CSPDarknet53 wurde das DenseNet bearbeitet, um die Feature-Map der Basisschicht zu trennen, indem sie kopiert und eine Kopie durch den dichten Block gesendet und eine andere direkt an die nächste Stufe gesendet wird. Die Idee hinter CSPResNext50 und CSPDarknet53 besteht darin, Rechenengpässe im DenseNet zu beseitigen und das Lernen zu verbessern, indem eine unbearbeitete Version der Feature-Map weitergegeben wird.
PA-Netz Hals
Sowohl YOLOv4 als auch YOLOv5 implementieren den PA-NET-Hals für die Merkmalsaggregation.
Jedes der oben genannten P_i stellt eine Feature-Ebene im CSP-Backbone dar.
Das obige Bild stammt aus einer von Google Brain durchgeführten Untersuchung der Objekterkennungsarchitektur EfficientDet . Die Autoren von EfficientDet kamen zu dem Schluss, dass BiFPN die beste Wahl für die Objekterkennung ist. Dies könnte ein Bereich sein, in dem YOLOv4 und YOLOv5 mit anderen Implementierungen noch mehr erkunden können.
Es ist hier sicherlich erwähnenswert, dass YOLOv5 die Forschungsanfrage von YOLOv4 übernimmt, um den besten Hals für ihre Architektur zu bestimmen. YOLOv4 untersuchte verschiedene Möglichkeiten für den besten YOLO-Hals, darunter:
- FPN
- PFANNE
- NAS-FPN
- BiFPN
- ASFF
- SFAM
Allgemeine Lebensqualitätsupdates für Entwickler: Warum sollte ich YOLOv5 verwenden?
Im Vergleich zu anderen Frameworks zur Objekterkennung ist YOLOv5 für Entwickler, die Computer Vision-Technologien in eine Anwendung implementieren, äußerst einfach zu verwenden . Ich kategorisiere diese Lebensqualitäts-Updates wie folgt.
- Einfach zu installieren : YOLOv5 erfordert nur die Installation von Torch und einigen leichten Python-Bibliotheken.
- Schnelles Training : Die YOLOv5-Modelle lassen sich extrem schnell trainieren , was beim Erstellen Ihres Modells zur Senkung der Experimentierkosten beiträgt.
- Funktionierende Inferenz-Ports : Sie können mit YOLOv5 Rückschlüsse auf einzelne Bilder, Stapelbilder, Video-Feeds oder Webcam-Ports ziehen.
- Intuitive Datendateisystemstruktur : Das Dateiordnerlayout ist intuitiv und während der Entwicklung einfach zu navigieren
- Einfache Anwendung auf Mobilgeräten : Sie können YOLOv5 problemlos von PyTorch-Gewichten in ONXX-Gewichte und in CoreML in IOS übersetzen.
Vorläufige YOLOv5-Evaluierungsmetriken
Die in diesem Abschnitt vorgestellten Bewertungsmaßstäbe sind vorläufig und wir können mit der Veröffentlichung eines offiziellen Forschungspapiers zu YOLOv5 rechnen, wenn die Forschungsarbeiten abgeschlossen sind und neuere Beiträge zur Familie der YOLO-Modelle geleistet wurden.
Dennoch ist es sinnvoll, diese Kennzahlen für einen Entwickler bereitzustellen, der überlegt, welches Framework er heute verwenden soll, bevor die Forschungspapiere zu YOLOv5 veröffentlicht wurden.
Die folgenden Bewertungsmetriken basieren auf der Leistung des COCO-Datensatzes, der eine breite Palette von Bildern mit 80 Objektklassen enthält. Weitere Einzelheiten zu den Leistungsmetriken finden Sie in diesem Beitrag zum Thema „ Was ist mAP?“ .
Das offizielle YOLOv4-Dokument veröffentlicht die folgenden Bewertungsmetriken für die Ausführung des trainierten Netzwerks auf dem COCO-Datensatz auf einer V100-GPU:
Mit der Erstveröffentlichung des ersten YOLOv5 V1-Modells veröffentlichte das YOLOv5-Repository Folgendes:
Diese Diagramme kehren die FPS-X-Achse gegenüber ms/Bild um, wir können jedoch schnell die YOLOv5-Achse umkehren, um Bilder pro Zahl auf etwa 200–300 FPS auf derselben V100-GPU zu schätzen und dabei einen höheren mAP zu erreichen.
Wichtig zu erwähnen ist hier auch die neue Version von YOLOv4-tiny, einem sehr kleinen und sehr leistungsfähigen Modell im Darknet Repository.
Die Bewertungsmetriken für YOLOv4-tiny lauten:
Das heißt, es ist sehr schnell und sehr leistungsfähig. Wichtig ist hier jedoch, dass die Bewertungsmetrik AP_50 ist – was die durchschnittliche Präzision bei 50 % iOU bedeutet. Mit dieser weniger strengen Metrik im Hinterkopf müssen wir mit der vollständigen Tabelle für YOLOv5 vergleichen:
Dort können wir sehen, dass YOLOv5s (ein ähnliches Modell in Geschwindigkeit und Modellgröße) 55,8 AP_50 erreicht.
Der Vergleich ist hier etwas komplizierter, da das YOLOv4-tiny-Modell auf einer 1080Ti ausgewertet wird, die maximal doppelt so langsam ist wie die in der YOLOv5-Tabelle verwendete V100.
Es versteht sich von selbst, dass es in Zukunft noch weitere Benchmarks mit vergleichbaren Ergebnissen geben wird, und einige davon sind in diesem GitHub-Problem bereits in Arbeit . WongKinYiu, Autor des oben genannten CSP-Repos und zweiter Autor von YOLOv4, bietet vergleichbare Benchmarks.
Aus dieser Sicht erweist sich YOLOv4 als die bessere Architektur. Es ist jedoch erwähnenswert, dass YOLOv4 in diesem Vergleich im Ultralytics YOLOv3-Repository (nicht im nativen Darknet) trainiert wird und die meisten Trainingsverbesserungen im YOLOv5-Repository enthält, was mAP-Verbesserungen zeigt.
YOLOv5-Beschriftungsformat: YOLOv5 PyTorch TXT
Das YOLOv5 PyTorch TXT-Annotation-Format ähnelt YOLO Darknet TXT, enthält jedoch zusätzlich eine YAML-Datei mit Modellkonfiguration und Klassenwerten.
Je nachdem, welches Annotationstool Sie verwenden, müssen Sie die Annotationen so konvertieren, dass sie mit YOLOv5 funktionieren. Roboflow ermöglicht Ihnen die Eingabe von 27 verschiedenen Beschriftungsformaten und deren Export für die Arbeit mit YOLOv5 . Wenn Sie VOTT , LabelImg , CVAT oder ein anderes Tool verwenden , können Sie diese Beschriftungen für die Arbeit mit YOLOv5 konvertieren.
YOLOv5-Beschriftungstool
Ultralytics, der Entwickler von YOLOv5, arbeitet mit Robflow als empfohlenes YOLOv5-Kennzeichnungstool zusammen . Weitere Informationen zur Zusammenarbeit von Roboflow mit YOLOv5 finden Sie im Abschnitt „Datasets, Labeling und Active Learning“ des YOLOv5-Github-Repos.
Bereitstellen in Roboflow
Sobald Sie mit dem Training eines YOLOv5-Modells fertig sind, verfügen Sie über einen Satz trainierter Gewichte, die Sie mit einem gehosteten API-Endpunkt verwenden können . Sie können Ihre Modellgewichte mit der Funktion deploy() im Roboflow-Pip-Paket in Roboflow Deploy hochladen , um Ihre trainierten Gewichte in der Cloud zu verwenden.
Um Modellgewichte hochzuladen, erstellen Sie zunächst ein neues Projekt in Roboflow, laden Sie Ihren Datensatz hoch und erstellen Sie eine Projektversion. Lesen Sie unsere vollständige Anleitung zum Erstellen und Einrichten eines Projekts in Roboflow . Schreiben Sie dann ein Python-Skript mit dem folgenden Code:
Ersetzen Sie PROJECT_ID durch die ID Ihres Projekts und DATASET_VERSION durch die Versionsnummer, die Ihrem Projekt zugeordnet ist. Erfahren Sie, wie Sie Ihre Projekt-ID und Datensatzversionsnummer finden.
Kurz nach dem Ausführen des obigen Codes steht Ihr Modell auf der Bereitstellungsseite Ihres Roboflow-Projekt-Dashboards zur Verwendung bereit.
Stellen Sie Ihr Modell am Rand bereit
Zusätzlich zur Verwendung der von Roboflow gehosteten API für die Bereitstellung können Sie Roboflow Inference verwenden , eine Open-Source-Inferenzlösung, die Millionen von API-Aufrufen in Produktionsumgebungen ermöglicht hat. Inference funktioniert mit CPU und GPU und bietet Ihnen sofortigen Zugriff auf eine Reihe von Geräten, vom NVIDIA Jetson über TRT-kompatible Geräte bis hin zu ARM-CPU-Geräten.
Mit Roboflow Inference können Sie Ihr Modell selbst hosten und auf dem Gerät bereitstellen.
Sie können Anwendungen mithilfe der Inference-Docker-Container oder des Pip-Pakets bereitstellen . In dieser Anleitung verwenden wir die Inference-Docker-Bereitstellungslösung. Installieren Sie zunächst Docker auf Ihrem Gerät . Lesen Sie dann die Inference-Dokumentation, um den Docker-Container für Ihr Gerät zu finden .
Für diese Anleitung verwenden wir den GPU-Docker-Container:
Dieser Befehl lädt den Docker-Container herunter und startet den Inferenzserver. Dieser Server ist unter verfügbar http://localhost:9001. Um die Inferenz auszuführen, können wir den folgenden Python-Code verwenden:
Legen Sie oben Ihre Roboflow-Arbeitsbereichs-ID, Modell-ID und Ihren API-Schlüssel fest.
- Finden Sie Ihren Arbeitsbereich und Ihre Modell-ID
- Finden Sie Ihren API-Schlüssel
Legen Sie außerdem die URL eines Bildes fest, für das Sie die Inferenz ausführen möchten. Dies kann eine lokale Datei sein.
Um Ihr YOLOv5-Modell kommerziell mit Inference zu nutzen, benötigen Sie eine Roboflow Enterprise-Lizenz, mit der Sie eine Pass-Through-Lizenz für die Nutzung von YOLOv5 erhalten. Eine Enterprise-Lizenz gewährt Ihnen außerdem Zugriff auf Funktionen wie erweiterte Geräteverwaltung, Multi-Modell-Container, automatische Batch-Inferenz und mehr.
Um mehr über die Bereitstellung kommerzieller Anwendungen mit Roboflow Inference zu erfahren, wenden Sie sich an das Roboflow-Vertriebsteam .
Abschluss
Die erste Version von YOLOv5 ist sehr schnell, leistungsstark und benutzerfreundlich. Während YOLOv5 noch keine neuen Verbesserungen der Modellarchitektur für die Familie der YOLO-Modelle einführt, führt es ein neues PyTorch-Trainings- und Bereitstellungsframework ein, das den Stand der Technik für Objektdetektoren verbessert. Darüber hinaus ist YOLOv5 sehr benutzerfreundlich und kann sofort für benutzerdefinierte Objekte verwendet werden.
Wenn man einen Schritt zurücktritt, ist es eine großartige Zeit, an der Computervision zu arbeiten, da sich der Stand der Technik so schnell weiterentwickelt.
Häufig gestellte Fragen
Welche Architektur verwendet YOLOv5?
YOLOv5 verwendet ein Convolutional Neural Network (CNN)-Backbone, um Bildmerkmale zu bilden. Diese Merkmale werden im Modellhals kombiniert und an den Kopf gesendet. Der Modellkopf interpretiert dann die kombinierten Merkmale, um die Klasse eines Bildes vorherzusagen.
Ist YOLOv5 ein einstufiger Detektor?
Ja, das YOLOv5-Modell ist ein einstufiger Detektor.
Zitieren Sie diesen Beitrag
Verwenden Sie den folgenden Eintrag, um diesen Beitrag bei Ihrer Recherche zu zitieren:
Jacob Solawetz . (29. Juni 2020). Was ist YOLOv5? Ein Leitfaden für Anfänger. Roboflow-Blog: https://blog.roboflow.com/yolov5-improvements-and-evaluation/
Besprechen Sie diesen Beitrag
Wenn Sie Fragen zu diesem Blogbeitrag haben, starten Sie eine Diskussion im Roboflow-Forum .