Ultralytics YOLOv5-Architektur#
YOLOv5 (v6.0/6.1) ist ein leistungsstarker Objekterkennungsalgorithmus, der von Ultralytics entwickelt wurde. Dieser Artikel befasst sich intensiv mit der YOLOv5-Architektur, Datenerweiterungsstrategien, Trainingsmethoden und Verlustberechnungstechniken. Dieses umfassende Verständnis hilft dir dabei, deine praktische Anwendung der Objekterkennung in verschiedenen Bereichen, einschließlich Überwachung, autonomem Fahren und Bilderkennung, zu verbessern.
Modellstruktur#
Die Architektur von YOLOv5 besteht aus drei Hauptteilen:
- Backbone: Dies ist der Hauptteil des Netzwerks. Für YOLOv5 ist der Backbone so konzipiert, dass er die
CSPDarknet53-Struktur verwendet, eine Modifikation der Darknet-Architektur aus vorherigen Versionen. - Neck: Dieser Teil verbindet Backbone und Head. In YOLOv5 werden die Strukturen
SPPF(Spatial Pyramid Pooling - Fast) undPANet(Path Aggregation Network) verwendet. - Head: Dieser Teil ist für die Generierung der Endergebnisse verantwortlich. YOLOv5 verwendet zu diesem Zweck den
YOLOv3 Head.
Die Struktur des Modells ist in der folgenden Abbildung dargestellt. Die Details zur Modellstruktur findest du in models/yolov5l.yaml.

YOLOv5 führt einige bemerkenswerte Verbesserungen gegenüber seinen Vorgängern ein:
- Die in früheren Versionen vorhandene
Focus-Struktur wird durch eine6x6 Conv2d-Struktur ersetzt. Diese Änderung steigert die Effizienz #4825. - Die
SPP-Struktur wird durchSPPFersetzt. Diese Änderung mehr als verdoppelt die Verarbeitungsgeschwindigkeit bei gleichbleibender Ausgabe.
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
from torch import 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.20780706405639648Datenaugmentierungstechniken#
YOLOv5 verwendet verschiedene Datenerweiterungstechniken, um die Fähigkeit des Modells zur Verallgemeinerung zu verbessern und Overfitting zu reduzieren. Diese Techniken umfassen:
-
Mosaic Augmentation: Eine Bildverarbeitungstechnik, die vier Trainingsbilder auf eine Weise zu einem einzigen kombiniert, die Objekterkennungsmodelle ermutigt, besser mit verschiedenen Objektskalierungen 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.

Trainingsstrategien#
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 zum Ausführen von Operationen im Halbpixel-Genauigkeitsformat, wodurch der Speicherverbrauch reduziert und die Rechengeschwindigkeit erhöht wird.
- Hyperparameter Evolution: Eine Strategie zur automatischen Abstimmung von Hyperparametern, um eine optimale Leistung zu erzielen. Erfahre mehr über das Hyperparameter-Tuning.
Zusätzliche Funktionen#
4.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:
4.2 Verlustausgleich#
Die Objekthaftungsverluste (objectness losses) 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.
4.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 Höhen- und Breitenskalierungsverhältnis (relativ zum Anker) vor und nach der Anpassung. Die ursprünglichen yolo/darknet-Boxgleichungen weisen einen schwerwiegenden Fehler auf. Breite und Höhe sind völlig ungebunden, da sie einfach out=exp(in) sind, was gefährlich ist, da es zu unkontrollierten Gradienten, Instabilitäten, NaN-Verlusten und letztendlich zu einem vollständigen Trainingsverlust führen kann. Siehe dieses Issue für weitere Details.
4.4 Build Targets#
Der Build-Zielprozess in YOLOv5 ist entscheidend für die Trainingseffizienz und die Modell-Genauigkeit. Er beinhaltet das Zuweisen von Ground-Truth-Boxen zu den entsprechenden Gitterzellen in der Ausgabekarte und deren Abgleich mit den entsprechenden Ankerboxen.
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.
Fazit#
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.