Link to this sectionUltralytics YOLOv5-Architektur#
YOLOv5 (v6.0/6.1) ist ein leistungsstarker Objekterkennungsalgorithmus, der von Ultralytics entwickelt wurde. Dieser Artikel bietet einen tiefen Einblick in die YOLOv5-Architektur, Datenaugmentierung-Strategien, Trainingsmethoden und Techniken zur Verlustberechnung. Dieses umfassende Verständnis hilft dir dabei, deine praktische Anwendung der Objekterkennung in verschiedenen Bereichen wie Überwachung, autonomen Fahrzeugen und Bilderkennung zu verbessern.
Link to this sectionModellstruktur#
Die Architektur von YOLOv5 besteht aus drei Hauptteilen:
- Backbone: Dies ist der Hauptteil des Netzwerks. Für YOLOv5 ist das Backbone mit der
CSPDarknet53-Struktur entworfen, einer Modifikation der Darknet-Architektur aus früheren Versionen. - Neck: Dieser Teil verbindet das Backbone mit dem Head. In YOLOv5 werden
SPPF(Spatial Pyramid Pooling - Fast) undPANet(Path Aggregation Network) Strukturen verwendet. - Head: Dieser Teil ist für die Generierung des Endergebnisses verantwortlich. YOLOv5 verwendet dafür den
YOLOv3 Head.
Die Struktur des Modells ist in der Abbildung unten dargestellt. Details zur Modellstruktur findest du in models/yolov5l.yaml.

YOLOv5 führt einige bemerkenswerte Verbesserungen gegenüber seinen Vorgängern ein:
- Die
Focus-Struktur aus früheren Versionen wurde durch eine6x6 Conv2d-Struktur ersetzt. Diese Änderung steigert die Effizienz #4825. - Die
SPP-Struktur wurde durchSPPFersetzt. Diese Änderung verdoppelt die Verarbeitungsgeschwindigkeit bei gleichbleibendem Ergebnis.
Um die Geschwindigkeit von SPP und SPPF zu testen, kann der folgende Code verwendet werden:
SPP vs SPPF speed profiling example (click to open)
import time
import torch
import torch.nn as nn
class SPP(nn.Module):
def __init__(self):
"""Initializes an SPP module with three different sizes of max pooling layers."""
super().__init__()
self.maxpool1 = nn.MaxPool2d(5, 1, padding=2)
self.maxpool2 = nn.MaxPool2d(9, 1, padding=4)
self.maxpool3 = nn.MaxPool2d(13, 1, padding=6)
def forward(self, x):
"""Applies three max pooling layers on input `x` and concatenates results along channel dimension."""
o1 = self.maxpool1(x)
o2 = self.maxpool2(x)
o3 = self.maxpool3(x)
return torch.cat([x, o1, o2, o3], dim=1)
class SPPF(nn.Module):
def __init__(self):
"""Initializes an SPPF module with a specific configuration of MaxPool2d layer."""
super().__init__()
self.maxpool = nn.MaxPool2d(5, 1, padding=2)
def forward(self, x):
"""Applies sequential max pooling and concatenates results with input tensor."""
o1 = self.maxpool(x)
o2 = self.maxpool(o1)
o3 = self.maxpool(o2)
return torch.cat([x, o1, o2, o3], dim=1)
def main():
"""Compares outputs and performance of SPP and SPPF on a random tensor (8, 32, 16, 16)."""
input_tensor = torch.rand(8, 32, 16, 16)
spp = SPP()
sppf = SPPF()
output1 = spp(input_tensor)
output2 = sppf(input_tensor)
print(torch.equal(output1, output2))
t_start = time.time()
for _ in range(100):
spp(input_tensor)
print(f"SPP time: {time.time() - t_start}")
t_start = time.time()
for _ in range(100):
sppf(input_tensor)
print(f"SPPF time: {time.time() - t_start}")
if __name__ == "__main__":
main()Ergebnis:
True
SPP time: 0.5373051166534424
SPPF time: 0.20780706405639648Link to this sectionDatenaugmentierungstechniken#
YOLOv5 verwendet verschiedene Datenaugmentierungstechniken, um die Generalisierungsfähigkeit des Modells zu verbessern und Overfitting zu reduzieren. Zu diesen Techniken gehören:
-
Mosaic-Augmentierung: Eine Bildverarbeitungstechnik, die vier Trainingsbilder zu einem kombiniert, um Objekterkennungsmodelle dazu zu ermutigen, besser mit verschiedenen Objektgrößen und Verschiebungen umzugehen.

-
Copy-Paste-Augmentierung: Eine innovative Datenaugmentierungsmethode, bei der zufällige Ausschnitte aus einem Bild kopiert und auf ein anderes, zufällig ausgewähltes Bild eingefügt werden, wodurch effektiv ein neuer Trainingsdatensatz erzeugt wird.

-
Zufällige affine Transformationen: Dies umfasst zufällige Rotationen, Skalierungen, Verschiebungen und Scherungen der Bilder.

-
MixUp-Augmentierung: Eine Methode, die zusammengesetzte Bilder durch eine lineare Kombination zweier Bilder und ihrer zugehörigen Labels erstellt.

-
Albumentations: Eine leistungsstarke Bildaugmentierungsbibliothek, die eine Vielzahl von Augmentierungstechniken unterstützt. Erfahre mehr über die Verwendung von Albumentations-Augmentierungen.
-
HSV-Augmentierung: Zufällige Änderungen an Farbton (Hue), Sättigung (Saturation) und Wert (Value) der Bilder.

-
Zufällige horizontale Spiegelung: Eine Augmentierungsmethode, die Bilder zufällig horizontal spiegelt.

Link to this sectionTrainingsstrategien#
YOLOv5 wendet verschiedene ausgefeilte Trainingsstrategien an, um die Leistung des Modells zu steigern. Dazu gehören:
- Multiskalen-Training: Die Eingabebilder werden während des Trainingsprozesses zufällig auf einen Bereich zwischen dem 0,5- und 1,5-fachen ihrer Originalgröße skaliert.
- AutoAnchor: Diese Strategie optimiert die Prior-Anchor-Boxen, um sie an die statistischen Eigenschaften der Ground-Truth-Boxen in deinen benutzerdefinierten Daten anzupassen.
- Warmup und Cosine LR Scheduler: Eine Methode zur Anpassung der Lernrate, um die Modellleistung zu verbessern.
- Exponential Moving Average (EMA): Eine Strategie, die den Durchschnitt der Parameter über vergangene Schritte verwendet, um den Trainingsprozess zu stabilisieren und den Generalisierungsfehler zu reduzieren.
- Mixed Precision-Training: Eine Methode zur Durchführung von Operationen im Halb-Präzisions-Format, um den Speicherverbrauch zu senken und die Rechengeschwindigkeit zu erhöhen.
- Hyperparameter-Evolution: Eine Strategie zur automatischen Abstimmung von Hyperparametern, um eine optimale Leistung zu erzielen. Erfahre mehr über Hyperparameter-Tuning.
Link to this sectionZusätzliche Funktionen#
Link to this section4.1 Verlustberechnung#
Der Verlust in YOLOv5 wird als Kombination aus drei individuellen Verlustkomponenten berechnet:
- Klassenverlust (BCE Loss): Binary Cross-Entropy Verlust, misst den Fehler für die Klassifizierungsaufgabe.
- Objekt-Verlust (BCE Loss): Ein weiterer Binary Cross-Entropy Verlust, der den Fehler bei der Erkennung berechnet, ob ein Objekt in einer bestimmten Rasterzelle vorhanden ist oder nicht.
- Positionsverlust (CIoU Loss): Complete IoU-Verlust, misst den Fehler bei der Lokalisierung des Objekts innerhalb der Rasterzelle.
Die gesamte Verlustfunktion wird dargestellt durch:
Link to this section4.2 Verlustausgleich#
Die Objekt-Verluste der drei Vorhersageschichten (P3, P4, P5) werden unterschiedlich gewichtet. Die Ausgleichsgewichte sind jeweils [4.0, 1.0, 0.4]. Dieser Ansatz stellt sicher, dass die Vorhersagen auf verschiedenen Skalen angemessen zum Gesamtverlust beitragen.
Link to this section4.3 Eliminierung der Rasterempfindlichkeit#
Die YOLOv5-Architektur nimmt im Vergleich zu früheren YOLO-Versionen einige wichtige Änderungen an der Strategie zur Box-Vorhersage vor. In YOLOv2 und YOLOv3 wurden die Box-Koordinaten direkt mithilfe der Aktivierung der letzten Schicht vorhergesagt.
In YOLOv5 wurde die Formel zur Vorhersage der Box-Koordinaten jedoch aktualisiert, um die Rasterempfindlichkeit zu verringern und zu verhindern, dass das Modell unbegrenzte Box-Dimensionen vorhersagt.
Die überarbeiteten Formeln zur Berechnung der vorhergesagten Bounding Box lauten wie folgt:
Vergleiche den Versatz des Mittelpunkts vor und nach der Skalierung. Der Bereich des Versatzes des Mittelpunkts wird von (0, 1) auf (-0,5, 1,5) angepasst. Daher kann der Versatz leicht 0 oder 1 erreichen.
Vergleiche das Skalierungsverhältnis von Höhe und Breite (relativ zum Anchor) vor und nach der Anpassung. Die ursprünglichen Yolo/Darknet-Box-Gleichungen weisen einen schwerwiegenden Fehler auf. Breite und Höhe sind völlig unbegrenzt, da sie einfach out=exp(in) sind, was gefährlich ist, da dies zu außer Kontrolle geratenen Gradienten, Instabilitäten, NaN-Verlusten und letztlich zu einem vollständigen Trainingsverlust führen kann. Siehe dieses Problem für weitere Details.
Link to this section4.4 Build Targets#
Der Prozess der Erstellung von Zielen (Build Targets) in YOLOv5 ist entscheidend für die Trainingseffizienz und die Modell-Genauigkeit. Er beinhaltet die Zuweisung von Ground-Truth-Boxen zu den entsprechenden Rasterzellen in der Ausgabekarte und deren Abgleich mit den passenden Anchor-Boxen.
Dieser Prozess folgt diesen Schritten:
- Berechne das Verhältnis der Abmessungen der Ground-Truth-Box und der Abmessungen jeder Anchor-Vorlage.
- Wenn das berechnete Verhältnis innerhalb des Schwellenwerts liegt, gleiche die Ground-Truth-Box mit dem entsprechenden Anchor ab.
- Weise den abgeglichenen Anchor den entsprechenden Zellen zu, wobei zu beachten ist, dass aufgrund des überarbeiteten Versatzes des Mittelpunkts eine Ground-Truth-Box mehr als einem Anchor zugewiesen werden kann, da der Versatzbereich des Mittelpunkts von (0, 1) auf (-0,5, 1,5) angepasst wurde, was zusätzliche Übereinstimmungen ermöglicht.
Auf diese Weise stellt der Prozess der Erstellung von Zielen sicher, dass jedes Ground-Truth-Objekt während des Trainingsprozesses korrekt zugewiesen und abgeglichen wird, was YOLOv5 ermöglicht, die Aufgabe der Objekterkennung effektiver zu erlernen.
Link to this sectionFazit#
YOLOv5 stellt einen bedeutenden Schritt in der Entwicklung der Objekterkennung in Echtzeit dar. Seine architektonischen Entscheidungen, Trainingsstrategien und technischen Verfeinerungen liefern im Vergleich zu früheren YOLO-Versionen eine starke Leistung und Effizienz.
Die primären Verbesserungen in YOLOv5 umfassen den Einsatz einer dynamischen Architektur, eine umfangreiche Palette an Datenaugmentierungstechniken, innovative Trainingsstrategien sowie wichtige Anpassungen bei der Verlustberechnung und dem Prozess der Erstellung von Zielen. All diese Innovationen verbessern die Genauigkeit und Effizienz der Objekterkennung erheblich, während sie das hohe Maß an Geschwindigkeit beibehalten, das das Markenzeichen von YOLO-Modellen ist.