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, den Datenaugmentations-Strategien, den Trainingsmethoden und den Techniken zur Verlustberechnung. Dieses umfassende Verständnis wird Ihnen helfen, Ihre praktische Anwendung der Objekterkennung in verschiedenen Bereichen, einschließlich Überwachung, autonomen Fahrzeugen und Bilderkennung, zu verbessern.
1. Modellstruktur
Die Architektur von YOLOv5 besteht aus drei Hauptteilen:
- Backbone: Dies ist der Hauptteil des Netzwerks. Für YOLOv5 ist das Backbone mit dem
CSPDarknet53
Struktur, eine Modifikation der Darknet-Architektur, die in früheren Versionen verwendet wurde. - Neck: Dieser Teil verbindet das Backbone und den Head. In YOLOv5 werden
SPPF
(Spatial Pyramid Pooling - Fast) undPANet
(Path Aggregation Network)-Strukturen verwendet werden. - Head: Dieser Teil ist für die Generierung der endgültigen Ausgabe verantwortlich. YOLOv5 verwendet die
YOLOv3 Head
zu diesem Zweck.
Die Struktur des Modells ist in der Abbildung unten dargestellt. Die Details zur Modellstruktur finden Sie in yolov5l.yaml
.
YOLOv5 führt im Vergleich zu seinen Vorgängern einige bemerkenswerte Verbesserungen ein:
- Die
Focus
Struktur, die in früheren Versionen zu finden war, wird durch eine6x6 Conv2d
Struktur. Diese Änderung steigert die Effizienz #4825. - Die
SPP
Struktur wird ersetzt durchSPPF
. Diese Änderung mehr als verdoppelt die Verarbeitungsgeschwindigkeit bei gleichbleibender Ausgabe.
Um die Geschwindigkeit von SPP
und SPPF
kann folgender Code verwendet werden:
SPP vs SPPF Geschwindigkeitsprofilierungsbeispiel (zum Öffnen anklicken)
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()
True
SPP time: 0.5373051166534424
SPPF time: 0.20780706405639648
2. Techniken zur Datenaugmentation
YOLOv5 verwendet verschiedene Datenaugmentierungstechniken, um die Fähigkeit des Modells zur Verallgemeinerung zu verbessern und Overfitting zu reduzieren. Zu diesen Techniken gehören:
-
Mosaic Augmentation: Eine Bildverarbeitungstechnik, die vier Trainingsbilder zu einem zusammenfügt, um Objekterkennungs-Modelle zu ermutigen, besser mit verschiedenen Objektmaßstäben und -übersetzungen umzugehen.
-
Copy-Paste Augmentation: Eine innovative Datenaugmentierungsmethode, die zufällige Ausschnitte aus einem Bild kopiert und sie in ein anderes, zufällig ausgewähltes Bild einfügt, wodurch effektiv eine neue Trainingsstichprobe generiert wird.
-
Random Affine Transformations: Dies beinhaltet zufällige Drehungen, Skalierungen, Verschiebungen und Scherungen der Bilder.
-
MixUp Augmentation: Eine Methode, die zusammengesetzte Bilder erzeugt, indem sie eine lineare Kombination aus zwei Bildern und ihren zugehörigen Labels verwendet.
-
Albumentations: Eine leistungsstarke Bibliothek zur Bildaugmentierung, die eine Vielzahl von Augmentierungstechniken unterstützt. Erfahren Sie mehr über die Verwendung von Albumentations-Augmentierungen.
-
HSV Augmentation: Zufällige Änderungen an Farbton, Sättigung und Wert der Bilder.
-
Random Horizontal Flip: Eine Augmentierungsmethode, die Bilder zufällig horizontal spiegelt.
3. Trainingsstrategien
YOLOv5 wendet verschiedene ausgeklügelte Trainingsstrategien an, um die Leistung des Modells zu verbessern. Dazu gehören:
- Multiscale Training: Die Eingabebilder werden während des Trainings zufällig innerhalb eines Bereichs vom 0,5- bis 1,5-fachen ihrer ursprünglichen Größe skaliert.
- AutoAnchor: Diese Strategie optimiert die vorherigen Anchor-Boxen, um sie an die statistischen Eigenschaften der Ground-Truth-Boxen in Ihren benutzerdefinierten Daten anzupassen.
- Warmup and 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, wodurch die Speichernutzung reduziert und die Rechengeschwindigkeit erhöht wird.
- Hyperparameter-Evolution: Eine Strategie zur automatischen Optimierung von Hyperparametern, um eine optimale Leistung zu erzielen. Erfahren Sie mehr über Hyperparameter-Optimierung.
4. Zusätzliche Funktionen
4.1 Berechnung der Verluste
Der Verlust in YOLOv5 wird als eine Kombination aus drei einzelnen Verlustkomponenten berechnet:
- Classes Loss (BCE Loss): Binary Cross-Entropy Loss, misst den Fehler für die Klassifizierungsaufgabe.
- Objectness Loss (BCE Loss): Ein weiterer Binary Cross-Entropy Loss, der den Fehler bei der Erkennung misst, ob ein Objekt in einer bestimmten Rasterzelle vorhanden ist oder nicht.
- Location Loss (CIoU Loss): Complete IoU Loss, misst den Fehler bei der Lokalisierung des Objekts innerhalb der Rasterzelle.
Die gesamte Loss-Funktion wird wie folgt dargestellt:
4.2 Verlustausgleich
Die Objectness-Losses der drei Vorhersageebenen (P3
, P4
, P5
) werden unterschiedlich gewichtet. Die Balance-Gewichte sind [4.0, 1.0, 0.4]
. Dieser Ansatz stellt sicher, dass die Vorhersagen auf verschiedenen Skalen angemessen zum Gesamtverlust beitragen.
4.3 Eliminierung der Gitterempfindlichkeit
Die YOLOv5-Architektur nimmt einige wichtige Änderungen an der Box-Vorhersagestrategie im Vergleich zu früheren Versionen von YOLO 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 Gitterempfindlichkeit zu reduzieren und zu verhindern, dass das Modell unbegrenzte Box-Dimensionen vorhersagt.
Die überarbeiteten Formeln zur Berechnung der vorhergesagten Bounding Box lauten wie folgt:
Vergleichen Sie den Mittelpunkt-Offset vor und nach der Skalierung. Der Mittelpunkt-Offset-Bereich wird von (0, 1) auf (-0,5, 1,5) angepasst. Daher kann der Offset leicht 0 oder 1 erreichen.
Vergleichen Sie das Verhältnis der Höhen- und Breitenskalierung (relativ zum Anker) vor und nach der Anpassung. Die ursprünglichen YOLO/Darknet-Box-Gleichungen haben einen schwerwiegenden Fehler. Breite und Höhe sind völlig unbegrenzt, da sie einfach out=exp(in) sind, was gefährlich ist, da dies zu unkontrollierten Gradienten, Instabilitäten, NaN-Verlusten und letztendlich zu einem vollständigen Verlust des Trainings führen kann. Weitere Informationen finden Sie in diesem Issue.
4.4 Build-Ziele
Der Build-Target-Prozess in YOLOv5 ist entscheidend für die Trainingseffizienz und die Modell-Genauigkeit. Er umfasst die Zuweisung von Ground-Truth-Boxen zu den entsprechenden Gitterzellen in der Ausgabekarte und deren Abgleich mit den entsprechenden Ankerboxen.
Dieser Prozess umfasst die folgenden Schritte:
- Berechnen Sie das Verhältnis der Abmessungen der Ground-Truth-Box zu den Abmessungen jeder Anchor-Vorlage.
- Wenn das berechnete Verhältnis innerhalb des Schwellenwerts liegt, ordnen Sie die Ground-Truth-Box dem entsprechenden Anchor zu.
- Weisen Sie den passenden Anchor den entsprechenden Zellen zu, wobei zu beachten ist, dass aufgrund des überarbeiteten Mittelpunkt-Offsets eine Ground-Truth-Box mehr als einem Anchor zugewiesen werden kann. Da der Bereich des Mittelpunkt-Offsets von (0, 1) auf (-0,5, 1,5) angepasst wurde, kann die GT-Box mehr Anchors zugewiesen werden.
Auf diese Weise stellt der Prozess zum Erstellen von Zielen sicher, dass jedes Ground-Truth-Objekt während des Trainingsprozesses korrekt zugewiesen und abgeglichen wird, sodass YOLOv5 die Aufgabe der Objekterkennung effektiver erlernen kann.
Fazit
Zusammenfassend lässt sich sagen, dass YOLOv5 einen bedeutenden Fortschritt in der Entwicklung von Echtzeit-Objekterkennungsmodellen darstellt. Durch die Integration verschiedener neuer Funktionen, Verbesserungen und Trainingsstrategien übertrifft es frühere Versionen der YOLO-Familie in Bezug auf Leistung und Effizienz.
Zu den wichtigsten Verbesserungen in YOLOv5 gehören die Verwendung einer dynamischen Architektur, eine umfangreiche Palette von Datenerweiterungstechniken, innovative Trainingsstrategien sowie wichtige Anpassungen bei der Berechnung von Verlusten und dem Prozess des Erstellens von Zielen. All diese Innovationen verbessern die Genauigkeit und Effizienz der Objekterkennung erheblich, während gleichzeitig ein hohes Maß an Geschwindigkeit beibehalten wird, das das Markenzeichen von YOLO-Modellen ist.