Meet YOLO26: next-gen vision AI.

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) und PANet (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-Architektur mit Backbone, Neck und Head

YOLOv5 führt einige bemerkenswerte Verbesserungen gegenüber seinen Vorgängern ein:

  1. Die Focus-Struktur aus früheren Versionen wurde durch eine 6x6 Conv2d-Struktur ersetzt. Diese Änderung steigert die Effizienz #4825.
  2. Die SPP-Struktur wurde durch SPPF ersetzt. 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.20780706405639648

Link 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.

    YOLOv5 Mosaic-Datenaugmentierung kombiniert vier Bilder

  • 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.

    YOLOv5 Copy-Paste-Augmentierung für Instanzsegmentierung

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

    YOLOv5 zufällige affine Transformationen für das Training

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

    YOLOv5 MixUp-Datenaugmentierung mischt zwei Bilder

  • 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.

    YOLOv5 HSV-Farbraum-Augmentierungsbeispiele

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

    YOLOv5 zufällige horizontale Spiegelungs-Augmentierung

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:

YOLOv5 Gesamtverlustfunktionsformel

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.

YOLOv5 Objekt-Verlust-Ausgleichsformel

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.

Formel zur Vorhersage der x-Koordinate der Bounding Box Formel zur Vorhersage der y-Koordinate der Bounding Box Formel zur Vorhersage der Breite der Bounding Box Formel zur Vorhersage der Höhe der Bounding Box

YOLOv5 grid computation

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:

YOLOv5 überarbeitete Formel für die x-Koordinate der Bounding Box YOLOv5 überarbeitete Formel für die y-Koordinate der Bounding Box YOLOv5 überarbeitete Formel für die Breite der Bounding Box YOLOv5 überarbeitete Formel für die Höhe der Bounding Box

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.

YOLOv5 grid scaling

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.

YOLOv5 unbounded scaling

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.

Formel für das Verhältnis von Ground-Truth zu Anchor-Breite

Formel für das Verhältnis von Ground-Truth zu Anchor-Höhe

Formel für das maximale Breitenverhältnis

Formel für das maximale Höhenverhältnis

Formel für das maximale Gesamtverhältnis

Formel für den Anchor-Matching-Schwellenwert

YOLOv5 IoU computation
  • Wenn das berechnete Verhältnis innerhalb des Schwellenwerts liegt, gleiche die Ground-Truth-Box mit dem entsprechenden Anchor ab.
YOLOv5 grid overlap
  • 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.
YOLOv5 anchor selection

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.

Mitwirkende

Kommentare