Overslaan naar inhoud

Ultralytics YOLOv5 Architectuur

YOLOv5 (v6.0/6.1) is een krachtig objectdetectiealgoritme dat is ontwikkeld door Ultralytics. Dit artikel gaat diep in op de architectuur van YOLOv5 , strategieƫn voor gegevensuitbreiding, trainingsmethoden en technieken voor het berekenen van verliezen. Dit uitgebreide inzicht zal helpen om je praktische toepassing van objectdetectie op verschillende gebieden te verbeteren, waaronder surveillance, autonome voertuigen en beeldherkenning.

1. Modelstructuur

YOLOv5De architectuur bestaat uit drie hoofdonderdelen:

  • Ruggengraat: Dit is de hoofdstructuur van het netwerk. Voor YOLOv5 wordt de backbone ontworpen met behulp van de New CSP-Darknet53 structuur, een aanpassing van de Darknet-architectuur die in eerdere versies werd gebruikt.
  • Hals: Dit deel verbindt de ruggengraat en het hoofd. In YOLOv5, SPPF en New CSP-PAN structuren worden gebruikt.
  • Hoofd: Dit deel is verantwoordelijk voor het genereren van de uiteindelijke uitvoer. YOLOv5 gebruikt de YOLOv3 Head voor dit doel.

De structuur van het model is weergegeven in de afbeelding hieronder. De details van de modelstructuur zijn te vinden in yolov5l.yaml.

yolov5

YOLOv5 introduceert enkele kleine veranderingen ten opzichte van zijn voorgangers:

  1. De Focus structuur, gevonden in eerdere versies, is vervangen door een 6x6 Conv2d structuur. Deze verandering verhoogt de efficiƫntie #4825.
  2. De SPP structuur wordt vervangen door SPPF. Deze wijziging verdubbelt de verwerkingssnelheid meer dan.

Om de snelheid van SPP en SPPFkan de volgende code worden gebruikt:

Voorbeeld SPP vs SPPF snelheidsprofilering (klik om te openen)
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()
resultaat:
True
SPP time: 0.5373051166534424
SPPF time: 0.20780706405639648

2. Technieken voor gegevensuitbreiding

YOLOv5 maakt gebruik van verschillende gegevensuitbreidingstechnieken om het generalisatievermogen van het model te verbeteren en overpassen te verminderen. Deze technieken omvatten:

  • MozaĆÆekvergroting: Een beeldverwerkingstechniek die vier trainingsbeelden combineert tot Ć©Ć©n beeld op een manier die objectdetectiemodellen aanmoedigt om beter om te gaan met verschillende objectschalen en vertalingen.

    mozaĆÆek

  • Copy-Paste Augmentation: Een innovatieve gegevensuitbreidingsmethode waarbij willekeurige patches uit een afbeelding worden gekopieerd en op een andere willekeurig gekozen afbeelding worden geplakt, waardoor effectief een nieuw trainingsvoorbeeld wordt gegenereerd.

    kopiƫren-plakken

  • Willekeurige Affiene Transformaties: Dit omvat willekeurige rotatie, schaling, translatie en afschuiving van de afbeeldingen.

    willekeurig-affine

  • MixUp Augmentation: Een methode die samengestelde afbeeldingen maakt door een lineaire combinatie te nemen van twee afbeeldingen en hun bijbehorende labels.

    mixup

  • Albumentaties: Een krachtige bibliotheek voor het augmenteren van afbeeldingen die een grote verscheidenheid aan augmentatietechnieken ondersteunt.

  • HSV Vergroting: Willekeurige veranderingen in de Tint, Verzadiging en Waarde van de afbeeldingen.

    hsv

  • Willekeurige horizontale flip: Een augmentatiemethode waarbij afbeeldingen willekeurig horizontaal worden omgedraaid.

    horizontaal-omlaag

3. Trainingsstrategieƫn

YOLOv5 past verschillende geavanceerde trainingsstrategieƫn toe om de prestaties van het model te verbeteren. Deze omvatten:

  • Training met meerdere schalen: De invoerafbeeldingen worden willekeurig herschaald binnen een bereik van 0,5 tot 1,5 keer hun oorspronkelijke grootte tijdens het trainingsproces.
  • AutoAnchor: Deze strategie optimaliseert de voorafgaande ankervakken om overeen te komen met de statistische kenmerken van de grondwaarheidsvakken in je aangepaste gegevens.
  • Opwarming en Cosine LR Scheduler: Een methode om de leersnelheid aan te passen om de prestaties van het model te verbeteren.
  • Exponentieel Bewegend Gemiddelde (EMA): Een strategie die het gemiddelde van parameters over eerdere stappen gebruikt om het trainingsproces te stabiliseren en generalisatiefouten te verminderen.
  • Gemengde precisie training: Een methode om bewerkingen uit te voeren in half-precisie formaat, waardoor minder geheugen wordt gebruikt en de rekensnelheid toeneemt.
  • Hyperparameter evolutie: Een strategie om hyperparameters automatisch af te stemmen voor optimale prestaties.

4. Extra functies

4.1 Verliezen berekenen

Het verlies in YOLOv5 wordt berekend als een combinatie van drie afzonderlijke verliescomponenten:

  • Klassen verlies (BCE verlies): Binary Cross-Entropy loss meet de fout voor de classificatietaak.
  • Objectness Loss (BCE-verlies): Een ander Binary Cross-Entropy verlies berekent de fout in het detecteren of een object aanwezig is in een bepaalde rastercel of niet.
  • Locatieverlies (CIoU-verlies): Volledig IoU-verlies meet de fout in het lokaliseren van het object binnen de rastercel.

De totale verliesfunctie wordt weergegeven door:

verlies

4.2 Balansverliezen

De objectiviteitsverliezen van de drie voorspellende lagen (P3, P4, P5) worden verschillend gewogen. De balansgewichten zijn [4.0, 1.0, 0.4] respectievelijk. Deze aanpak zorgt ervoor dat de voorspellingen op verschillende schalen op de juiste manier bijdragen aan het totale verlies.

obj_verlies

4.3 Netgevoeligheid elimineren

De YOLOv5 architectuur brengt enkele belangrijke veranderingen aan in de voorspellingsstrategie van de boxen vergeleken met eerdere versies van YOLO. In YOLOv2 en YOLOv3 werden de boxcoƶrdinaten direct voorspeld met behulp van de activering van de laatste laag.

b_x b_j b_w b_h

YOLOv5 rasterberekening

In YOLOv5 is de formule voor het voorspellen van de dooscoƶrdinaten echter bijgewerkt om de rastergevoeligheid te verminderen en te voorkomen dat het model onbegrensde doosafmetingen voorspelt.

De herziene formules voor het berekenen van de voorspelde bounding box zijn als volgt:

bx door bw bh

Vergelijk de verschuiving van het middelpunt voor en na het schalen. Het bereik van de middelpuntverschuiving wordt aangepast van (0, 1) tot (-0,5, 1,5). Daarom kan de offset gemakkelijk 0 of 1 worden.

YOLOv5 rasterschaling

Vergelijk de hoogte- en breedteschaalverhouding (ten opzichte van het anker) voor en na de aanpassing. De originele yolo/darknet box vergelijkingen hebben een ernstige fout. Breedte en hoogte zijn volledig onbegrensd omdat ze eenvoudigweg out=exp(in) zijn, wat gevaarlijk is, omdat het kan leiden tot op hol geslagen gradiƫnten, instabiliteiten, NaN-verliezen en uiteindelijk een volledig verlies van de training. verwijs naar dit probleem

YOLOv5 grenzeloze schaalbaarheid

4.4 Bouwdoelen

Het doelproces in YOLOv5 is cruciaal voor de trainingsefficiƫntie en de nauwkeurigheid van het model. Het bestaat uit het toewijzen van grondwaarheidsvakken aan de juiste rastercellen in de uitvoerkaart en het matchen van deze vakken met de juiste ankervakken.

Dit proces verloopt als volgt:

  • Bereken de verhouding tussen de afmetingen van de grondwaarheidsbox en de afmetingen van elke ankermal.

rw

rh

rwmax

rhmax

rmax

overeenkomen met

YOLOv5 IoU-berekening

  • Als de berekende verhouding binnen de drempelwaarde ligt, match dan het grondwaarheidsvak met het corresponderende anker.

YOLOv5 rasteroverlapping

  • Wijs het gematchte anker toe aan de juiste cellen, waarbij je in gedachten moet houden dat door de herziene middelpuntverschuiving een grondwaarheidsvak aan meer dan Ć©Ć©n anker kan worden toegewezen. Omdat het bereik van de middelpuntverschuiving is aangepast van (0, 1) naar (-0,5, 1,5). GT Box kan aan meer ankers worden toegewezen.

YOLOv5 ankerselectie

Op deze manier zorgt het build targets proces ervoor dat elk ground truth object goed wordt toegewezen en gematcht tijdens het trainingsproces, waardoor YOLOv5 de taak van objectdetectie effectiever kan leren.

Conclusie

Concluderend kan worden gesteld dat YOLOv5 een belangrijke stap voorwaarts is in de ontwikkeling van realtime objectdetectiemodellen. Door verschillende nieuwe functies, verbeteringen en trainingsstrategieƫn in te bouwen, overtreft het eerdere versies van de YOLO familie in prestaties en efficiƫntie.

De belangrijkste verbeteringen in YOLOv5 omvatten het gebruik van een dynamische architectuur, een uitgebreide reeks technieken voor gegevensuitbreiding, innovatieve trainingsstrategieƫn en belangrijke aanpassingen in de rekenverliezen en het proces om doelen te bouwen. Al deze innovaties zorgen voor een aanzienlijke verbetering van de nauwkeurigheid en efficiƫntie van objectdetectie met behoud van een hoge mate van snelheid, wat het handelsmerk is van YOLO modellen.



Aangemaakt 2023-11-12, Bijgewerkt 2024-06-19
Auteurs: ambitious-octopus (1), glenn-jocher (9), sergiuwaxmann (1)

Reacties