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 dir helfen, die praktische Anwendung der Objekterkennung in verschiedenen Bereichen wie Überwachung, autonome Fahrzeuge und Bilderkennung zu verbessern.

1. Modellstruktur

YOLOv5Architektur besteht aus drei Hauptteilen:

  • Backbone: Dies ist der Hauptteil des Netzwerks. FĂŒr YOLOv5 wird das Backbone mit Hilfe des New CSP-Darknet53 Struktur, eine Abwandlung der Darknet-Architektur, die in frĂŒheren Versionen verwendet wurde.
  • Nacken: Dieser Teil verbindet die WirbelsĂ€ule und den Kopf. In YOLOv5, SPPF und New CSP-PAN Strukturen genutzt werden.
  • Kopf: Dieser Teil ist fĂŒr die Erstellung der endgĂŒltigen Ausgabe verantwortlich. YOLOv5 verwendet die YOLOv3 Head zu diesem Zweck.

Die Struktur des Modells ist in der folgenden Abbildung dargestellt. Die Details zur Struktur des Modells findest du unter yolov5l.yaml.

yolov5

YOLOv5 fĂŒhrt einige kleinere Änderungen im Vergleich zu seinen VorgĂ€ngern ein:

  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 Geschwindigkeit der Verarbeitung 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):
        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):
        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):
        super().__init__()
        self.maxpool = nn.MaxPool2d(5, 1, padding=2)

    def forward(self, x):
        o1 = self.maxpool(x)
        o2 = self.maxpool(o1)
        o3 = self.maxpool(o2)
        return torch.cat([x, o1, o2, o3], dim=1)


def main():
    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 reduzieren. Zu diesen Techniken gehören:

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

Mosaik

  • Copy-Paste Augmentation: 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, sodass ein neues Trainingsmuster entsteht.

Kopieren und EinfĂŒgen

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

random-affin

  • MixUp Augmentation: 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.

  • HSV-Erweiterung: ZufĂ€llige Änderungen an Farbton, SĂ€ttigung und Wert der Bilder.

hsv

  • ZufĂ€lliges horizontales Spiegeln: Eine Erweiterungsmethode, die Bilder zufĂ€llig 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 Eingangsbilder werden wĂ€hrend des Trainingsprozesses zufĂ€llig 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 deinen benutzerdefinierten Daten entsprechen.
  • Warmup und Cosine LR Scheduler: Eine Methode zur Anpassung der Lernrate, um die Leistung des Modells zu verbessern.
  • 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.
  • Mixed Precision Training: 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 Anpassung von Hyperparametern, um eine optimale Leistung zu erzielen.

4. ZusÀtzliche Merkmale

4.1 Verluste berechnen

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

  • Klassifizierungsverlust (BCE Loss): Binary Cross-Entropy Loss, misst den Fehler bei der Klassifizierung.
  • Objectness Loss (BCE Loss): Ein weiterer Binary Cross-Entropy Loss, der den Fehler bei der Erkennung berechnet, ob ein Objekt in einer bestimmten Rasterzelle vorhanden ist oder nicht.
  • Ortungsverlust (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] beziehungsweise. Dieser Ansatz stellt sicher, dass die Vorhersagen auf verschiedenen Skalen angemessen zum Gesamtverlust beitragen.

obj_loss

4.3 Beseitigung der Netzempfindlichkeit

Die Architektur von YOLOv5 enthĂ€lt einige wichtige Änderungen an der Strategie zur Vorhersage der Boxen im Vergleich zu frĂŒheren Versionen von YOLO. 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 die Formel fĂŒr die Vorhersage der Feldkoordinaten jedoch aktualisiert, um die Empfindlichkeit des Rasters zu verringern und zu verhindern, dass das Modell unbegrenzte Feldabmessungen vorhersagen kann.

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

bx von bw bh

Vergleiche 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

Vergleiche das SkalierungsverhĂ€ltnis von Höhe und Breite (relativ zum Anker) vor und nach der Anpassung. Die ursprĂŒnglichen yolo/darknet Box-Gleichungen haben einen schweren 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 kompletten Verlust des Trainings fĂŒhren kann. siehe dieses Problem

YOLOv5 Unbegrenzte Skalierung

4.4 Bauziele

Der Build-Target-Prozess in YOLOv5 ist entscheidend fĂŒr die Trainingseffizienz und die Modellgenauigkeit. Dabei werden den entsprechenden Rasterzellen in der Ausgangskarte Bodenwahrheitsboxen zugewiesen und mit den entsprechenden Ankerboxen abgeglichen.

Dieser Prozess lÀuft in folgenden Schritten ab:

  • Berechne das VerhĂ€ltnis zwischen den Abmessungen der Ground Truth Box und den Abmessungen der einzelnen Ankerschablonen.

rw

rh

rwmax

rhmax

rmax

Spiel

YOLOv5 IoU-Berechnung

  • Wenn das berechnete VerhĂ€ltnis innerhalb des Schwellenwerts liegt, stimme die Ground Truth Box mit dem entsprechenden Anker ab.

YOLOv5 GitterĂŒberlappung

  • Weisen Sie den passenden Anker den entsprechenden Zellen zu. Beachten Sie dabei, dass aufgrund der geĂ€nderten Mittelpunktsverschiebung ein Feld der Grundwahrheit mehr als einem Anker zugeordnet werden kann. Da der Bereich der Mittelpunktsverschiebung von (0, 1) auf (-0,5, 1,5) angepasst wurde. Die 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, damit YOLOv5 die Aufgabe der Objekterkennung effektiver lernen kann.

Fazit

Zusammenfassend lĂ€sst sich sagen, dass YOLOv5 einen bedeutenden Schritt nach vorne in der Entwicklung von Objekterkennungsmodellen in Echtzeit darstellt. Durch die Einbeziehung verschiedener neuer Funktionen, Verbesserungen und Trainingsstrategien ĂŒbertrifft es die vorherigen Versionen der YOLO Familie in Bezug auf Leistung und Effizienz.

Zu den wichtigsten Verbesserungen von YOLOv5 gehören die Verwendung einer dynamischen Architektur, eine breite Palette von Datenanreicherungstechniken, 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 die hohe Geschwindigkeit beibehalten wird, die das Markenzeichen der YOLO Modelle ist.



Erstellt am 2023-11-12, Aktualisiert am 2024-01-14
Autoren: glenn-jocher (5), sergiuwaxmann (1)

Kommentare