Zum Inhalt springen

Ultralytics YOLOv5 Architektur

YOLOv5 (v6.0/6.1) ist ein leistungsstarker Algorithmus zur Objekterkennung, der von Ultralytics entwickelt wurde. Dieser Artikel befasst sich eingehend mit der Architektur von YOLOv5 , den Strategien zur Datenerweiterung, den Trainingsmethoden und den Verfahren zur Verlustberechnung. Dieses umfassende Verständnis wird Ihnen helfen, die praktische Anwendung der Objekterkennung in verschiedenen Bereichen zu verbessern, darunter Überwachung, autonome Fahrzeuge und Bilderkennung.

1. Struktur des Modells

YOLOv5Die Architektur der Website besteht aus drei Hauptteilen:

  • Backbone: Dies ist der Hauptteil des Netzes. Für YOLOv5 wird das Backbone mit Hilfe des CSPDarknet53 Struktur, eine Abwandlung der Darknet-Architektur der Vorgängerversionen.
  • Nacken: Dieser Teil verbindet die Wirbelsäule und den Kopf. In YOLOv5, SPPF (Spatial Pyramid Pooling - Fast) und PANet (Path Aggregation Network) Strukturen verwendet werden.
  • Kopf: Dieser Teil ist für die Erzeugung der endgültigen Ausgabe verantwortlich. YOLOv5 verwendet die YOLOv3 Head zu diesem Zweck.

Die Struktur des Modells ist in der nachstehenden Abbildung dargestellt. Die Details der Modellstruktur finden Sie unter yolov5l.yaml.

yolov5

YOLOv5 bietet einige bemerkenswerte Verbesserungen im Vergleich zu seinen Vorgängern:

  1. Die Focus Struktur, die in früheren Versionen zu finden war, wird durch eine 6x6 Conv2d Struktur. Diese Änderung steigert die Effizienz #4825.
  2. Die SPP Struktur wird ersetzt durch SPPF. Durch diese Änderung wird die Verarbeitungsgeschwindigkeit bei gleichbleibender Leistung mehr als verdoppelt.

Zum Testen der Geschwindigkeit von SPP und SPPFkann der folgende Code verwendet werden:

Beispiel für SPP vs. SPPF Geschwindigkeitsprofilierung (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()
Ergebnis:
True
SPP time: 0.5373051166534424
SPPF time: 0.20780706405639648

2. Techniken der Datenerweiterung

YOLOv5 setzt verschiedene Techniken zur Datenerweiterung ein, um die Verallgemeinerungsfähigkeit des Modells zu verbessern und die Überanpassung zu verringern. Zu diesen Techniken gehören:

  • Mosaik-Erweiterung: Eine Bildverarbeitungstechnik, bei der vier Trainingsbilder zu einem Bild kombiniert werden, so dass die Objekterkennungsmodelle besser mit verschiedenen Objektmaßstäben und Übersetzungen umgehen können.

    mosaik

  • Kopieren-Einfügen-Erweiterung: Eine innovative Methode zur Datenerweiterung, bei der zufällige Bereiche aus einem Bild kopiert und in ein anderes, zufällig ausgewähltes Bild eingefügt werden, wodurch ein neues Trainingsmuster entsteht.

    kopieren-einfügen

  • Zufällige affine Transformationen: Dazu gehören zufällige Drehungen, Skalierungen, Verschiebungen und Scherungen der Bilder.

    random-affin

  • MixUp-Erweiterung: Eine Methode, die zusammengesetzte Bilder durch eine lineare Kombination von zwei Bildern und ihren zugehörigen Beschriftungen erzeugt.

    Verwechslung

  • Albumentations: Eine leistungsstarke Bibliothek für Bildvergrößerungen, die eine Vielzahl von Vergrößerungstechniken unterstützt. Erfahren Sie mehr über die Verwendung von Albumentations-Augmentierungen.

  • HSV-Erweiterung: Zufällige Änderungen von Farbton, Sättigung und Wert der Bilder.

    hsv

  • Zufälliges horizontales Spiegeln: Eine Augmentierungsmethode, die Bilder nach dem Zufallsprinzip horizontal spiegelt.

    horizontal-flip

3. Ausbildungsstrategien

YOLOv5 wendet mehrere ausgeklügelte Trainingsstrategien an, um die Leistung des Modells zu verbessern. Dazu gehören:

  • Multiskalen-Training: Die Eingabebilder werden während des Trainingsprozesses nach dem Zufallsprinzip in einem Bereich zwischen dem 0,5- und 1,5-fachen ihrer Originalgröße skaliert.
  • AutoAnker: Diese Strategie optimiert die vorherigen Ankerboxen so, dass sie den statistischen Eigenschaften der Ground-Truth-Boxen in Ihren benutzerdefinierten Daten entsprechen.
  • Warmup und Cosinus LR Scheduler: Eine Methode zur Anpassung der Lernrate zur Verbesserung der Modellleistung.
  • Exponentieller gleitender Durchschnitt (EMA): Eine Strategie, die den Durchschnitt der Parameter über vergangene Schritte verwendet, um den Trainingsprozess zu stabilisieren und den Generalisierungsfehler zu reduzieren.
  • Trainingmit gemischter Genauigkeit: Eine Methode zur Durchführung von Operationen im Halbpräzisionsformat, die den Speicherverbrauch reduziert und die Rechengeschwindigkeit erhöht.
  • Hyperparameter-Evolution: Eine Strategie zur automatischen Abstimmung von Hyperparametern, um eine optimale Leistung zu erzielen. Erfahren Sie mehr über die Abstimmung von Hyperparametern.

4. Zusätzliche Merkmale

4.1 Berechnung von Verlusten

Der Verlust auf YOLOv5 wird als eine Kombination aus drei einzelnen Verlustkomponenten berechnet:

  • Klassenverlust (BCE-Verlust): Binary Cross-Entropy Loss, misst den Fehler für die Klassifizierungsaufgabe.
  • Objektivitätsverlust (BCE-Verlust): Ein weiterer binärer Cross-Entropie-Verlust, der den Fehler bei der Feststellung berechnet, ob ein Objekt in einer bestimmten Gitterzelle vorhanden ist oder nicht.
  • Lokalisierungsverlust (CIoU-Verlust): Vollständiger IoU-Verlust, misst den Fehler bei der Lokalisierung des Objekts innerhalb der Gitterzelle.

Die Gesamtverlustfunktion wird wie folgt dargestellt:

Verlust

4.2 Bilanzverluste

Die Objektivitätsverluste der drei Vorhersageschichten (P3, P4, P5) werden unterschiedlich gewichtet. Die Ausgleichsgewichte sind [4.0, 1.0, 0.4] bzw... Dieser Ansatz stellt sicher, dass die Vorhersagen auf den verschiedenen Skalen einen angemessenen Beitrag zum Gesamtverlust leisten.

obj_verlust

4.3 Beseitigung der Netzempfindlichkeit

Mit der Architektur von YOLOv5 wurden einige wichtige Änderungen an der Vorhersagestrategie für Boxen im Vergleich zu früheren Versionen von YOLO vorgenommen. In YOLOv2 und YOLOv3 wurden die Koordinaten der Boxen direkt durch die Aktivierung der letzten Schicht vorhergesagt.

b_x b_y b_w b_h

YOLOv5 Rasterberechnung

In YOLOv5 wurde jedoch die Formel für die Vorhersage der Feldkoordinaten aktualisiert, um die Empfindlichkeit des Gitters zu verringern und zu verhindern, dass das Modell unbegrenzte Feldabmessungen vorhersagt.

Die überarbeiteten Formeln zur Berechnung des voraussichtlichen Begrenzungsrahmens lauten wie folgt:

bx von bw bh

Vergleichen Sie den Mittelpunktsversatz vor und nach der Skalierung. Der Bereich für den Mittelpunktversatz reicht von (0, 1) bis (-0,5, 1,5). Daher kann der Versatz leicht 0 oder 1 werden.

YOLOv5 Rasterskalierung

Vergleichen Sie das Höhen- und Breitenskalierungsverhältnis (relativ zum Anker) vor und nach der Anpassung. Die ursprünglichen yolo haben einen schwerwiegenden Fehler. Breite und Höhe sind völlig unbegrenzt, da sie einfach out=exp(in) sind, was gefährlich ist, da es zu ausufernden Gradienten, Instabilitäten, NaN-Verlusten und letztendlich zu einem vollständigen Verlust der Ausbildung führen kann. Weitere Einzelheiten finden Sie in dieser Ausgabe.

YOLOv5 grenzenlose Skalierung

4.4 Build-Ziele

Der Build-Target-Prozess in YOLOv5 ist entscheidend für die Trainingseffizienz und die Modellgenauigkeit. Er beinhaltet die Zuweisung von Bodenwahrheitsboxen zu den entsprechenden Rasterzellen in der Ausgabekarte und deren Abgleich mit den entsprechenden Ankerboxen.

Dieser Prozess verläuft in folgenden Schritten:

  • Berechnen Sie das Verhältnis zwischen den Abmessungen der Grundwahrheitsbox und den Abmessungen der einzelnen Ankerschablonen.

rw

rh

rwmax

rhmax

rmax

Spiel

YOLOv5 IoU-Berechnung

  • Wenn das berechnete Verhältnis innerhalb des Schwellenwerts liegt, wird das Feld der Grundwahrheit mit dem entsprechenden Anker abgeglichen.

YOLOv5 Gitterüberlappung

  • Weisen Sie den passenden Anker den entsprechenden Zellen zu, wobei zu beachten ist, dass aufgrund des geänderten Mittelpunktversatzes ein Feld der Grundwahrheit mehr als einem Anker zugewiesen werden kann. Da der Bereich der Mittelpunktsverschiebung von (0, 1) auf (-0,5, 1,5) angepasst wurde. GT Box kann mehreren Ankern zugewiesen werden.

YOLOv5 Ankerauswahl

Auf diese Weise stellt der Build-Targets-Prozess sicher, dass jedes Objekt der Grundwahrheit während des Trainingsprozesses richtig zugeordnet und abgeglichen wird, wodurch YOLOv5 die Aufgabe der Objekterkennung effektiver erlernen kann.

Schlussfolgerung

Zusammenfassend lässt sich sagen, dass YOLOv5 einen bedeutenden Schritt vorwärts in der Entwicklung von Objekterkennungsmodellen in Echtzeit darstellt. Durch die Einbeziehung verschiedener neuer Funktionen, Verbesserungen und Trainingsstrategien übertrifft es frühere Versionen der YOLO Familie an Leistung und Effizienz.

Zu den wichtigsten Verbesserungen von YOLOv5 gehören die Verwendung einer dynamischen Architektur, eine breite Palette von Datenerweiterungstechniken, innovative Trainingsstrategien sowie wichtige Anpassungen bei den Rechenverlusten und dem Prozess der Zielbildung. All diese Neuerungen verbessern die Genauigkeit und Effizienz der Objekterkennung erheblich, während gleichzeitig ein hohes Maß an Geschwindigkeit beibehalten wird, was das Markenzeichen der YOLO Modelle ist.

📅 Erstellt vor 1 Jahr ✏️ Aktualisiert vor 11 Tagen

Kommentare