Overslaan naar inhoud

Problemen oplossen met YOLO

YOLO Veelvoorkomende problemen Afbeelding

Inleiding

Deze gids is een uitgebreid hulpmiddel voor het oplossen van veel voorkomende problemen tijdens het werken met YOLOv8 aan je Ultralytics projecten. Het oplossen van deze problemen kan een fluitje van een cent zijn met de juiste begeleiding, zodat je projecten op schema blijven zonder onnodige vertragingen.



Kijken: Ultralytics YOLOv8 Veelvoorkomende problemen | Installatiefouten, Problemen met modeltraining

Veelvoorkomende problemen

Installatiefouten

Installatiefouten kunnen verschillende oorzaken hebben, zoals incompatibele versies, ontbrekende afhankelijkheden of onjuiste omgevingsinstellingen. Controleer eerst of je het volgende doet:

  • Je gebruikt Python 3.8 of hoger, zoals aanbevolen.

  • Zorg ervoor dat je de juiste versie van PyTorch (1.8 of later) hebt geïnstalleerd.

  • Overweeg het gebruik van virtuele omgevingen om conflicten te vermijden.

  • Volg de officiële installatiegids stap voor stap.

Daarnaast zijn hier enkele veelvoorkomende installatieproblemen die gebruikers zijn tegengekomen, samen met hun respectievelijke oplossingen:

  • Fouten bij het importeren of problemen met afhankelijkheden - Als je fouten krijgt tijdens het importeren van YOLOv8 of je hebt problemen met afhankelijkheden, overweeg dan de volgende stappen voor probleemoplossing:

    • Nieuwe installatie: Soms kan het starten met een nieuwe installatie onverwachte problemen oplossen. Vooral met bibliotheken zoals Ultralytics, waar updates wijzigingen in de bestandsstructuur of functionaliteiten kunnen introduceren.

    • Regelmatig bijwerken: Zorg ervoor dat je de nieuwste versie van de bibliotheek gebruikt. Oudere versies zijn mogelijk niet compatibel met recente updates, wat kan leiden tot conflicten of problemen.

    • Afhankelijkheden controleren: Controleer of alle vereiste afhankelijkheden correct zijn geïnstalleerd en compatibele versies hebben.

    • Wijzigingen bekijken: Als je in eerste instantie een oudere versie hebt gekloond of geïnstalleerd, houd er dan rekening mee dat belangrijke updates de structuur of functionaliteiten van de bibliotheek kunnen beïnvloeden. Raadpleeg altijd de officiële documentatie of changelogs om belangrijke wijzigingen te begrijpen.

    • Onthoud dat het up-to-date houden van je bibliotheken en afhankelijkheden cruciaal is voor een soepele en foutloze ervaring.

  • YOLOv8 uitvoeren op GPU - Als je problemen ondervindt bij het uitvoeren van YOLOv8 op GPU, overweeg dan de volgende stappen voor probleemoplossing:

    • Compatibiliteit en installatie van CUDA controleren: Zorg ervoor dat je GPU compatibel is met CUDA en dat CUDA correct is geïnstalleerd. Gebruik de nvidia-smi commando om de status van je NVIDIA GPU en CUDA-versie te controleren.

    • Kijk op PyTorch en CUDA integratie: Zorg ervoor dat PyTorch CUDA kan gebruiken door import torch; print(torch.cuda.is_available()) in een Python terminal. Als het 'True' teruggeeft, is PyTorch ingesteld om CUDA te gebruiken.

    • Activering van de omgeving: Zorg ervoor dat je in de juiste omgeving bent waar alle benodigde pakketten zijn geïnstalleerd.

    • Update je pakketten: Verouderde pakketten zijn mogelijk niet compatibel met je GPU. Houd ze bijgewerkt.

    • Programmaconfiguratie: Controleer of het programma of de code het GPU-gebruik specificeert. In YOLOv8 kan dit in de instellingen of configuratie staan.

Problemen met modeltraining

In dit gedeelte komen veel voorkomende problemen tijdens het trainen aan de orde, evenals de verklaringen en oplossingen.

Verificatie van configuratie-instellingen

Uitgave: Je weet niet zeker of de configuratie-instellingen in de .yaml bestand correct worden toegepast tijdens de modeltraining.

Oplossing: De configuratie-instellingen in de .yaml bestand moet worden toegepast bij gebruik van de model.train() functie. Volg deze stappen om ervoor te zorgen dat deze instellingen correct worden toegepast:

  • Controleer of het pad naar je .yaml configuratiebestand correct is.
  • Zorg ervoor dat je het pad naar je .yaml bestand als de data argument bij het aanroepen van model.train()zoals hieronder getoond:
model.train(data='/path/to/your/data.yaml', batch=4)

Training versnellen met meerdere GPU's

Probleem: Training is traag op een enkele GPU en je wilt het proces versnellen door meerdere GPU's te gebruiken.

Oplossing: Het vergroten van de batchgrootte kan de training versnellen, maar het is essentieel om rekening te houden met de geheugencapaciteit van de GPU. Volg deze stappen om de training met meerdere GPU's te versnellen:

  • Zorg ervoor dat je meerdere GPU's beschikbaar hebt.

  • Pas je .yaml configuratiebestand aan om het aantal GPU's op te geven dat gebruikt moet worden, bijvoorbeeld gpus: 4.

  • Verhoog de batchgrootte dienovereenkomstig om de meerdere GPU's volledig te benutten zonder de geheugenlimieten te overschrijden.

  • Pas je trainingsopdracht aan om meerdere GPU's te gebruiken:

# Adjust the batch size and other settings as needed to optimize training speed
model.train(data='/path/to/your/data.yaml', batch=32, multi_scale=True)

Parameters voor continue bewaking

Vraagstuk: Je wilt weten welke parameters tijdens de training continu moeten worden gecontroleerd, behalve verlies.

Oplossing: Hoewel verlies een cruciale meetwaarde is om te controleren, is het ook essentieel om andere meetwaarden bij te houden om de prestaties van het model te optimaliseren. Enkele belangrijke meetgegevens om te controleren tijdens de training zijn:

  • Precisie
  • Terugroepen
  • Gemiddelde precisie (mAP)

Je hebt toegang tot deze statistieken vanuit de trainingslogs of door tools zoals TensorBoard of wandb te gebruiken voor visualisatie. Door vroegtijdig te stoppen op basis van deze meetgegevens kun je betere resultaten behalen.

Hulpmiddelen voor het bijhouden van trainingsvoortgang

Vraagstuk: Je bent op zoek naar aanbevelingen voor hulpmiddelen om de voortgang van trainingen bij te houden.

Oplossing: Om de trainingsvoortgang bij te houden en te visualiseren kun je overwegen om de volgende tools te gebruiken:

  • TensorBoard: TensorBoard is een populaire keuze voor het visualiseren van trainingsgegevens, zoals verlies, nauwkeurigheid en meer. Je kunt het integreren met je YOLOv8 trainingsproces.
  • CometComet biedt een uitgebreide toolkit voor het bijhouden en vergelijken van experimenten. Je kunt metrieken, hyperparameters en zelfs modelgewichten bijhouden. Integratie met YOLO modellen is ook eenvoudig, zodat je een compleet overzicht hebt van je experimentcyclus.
  • Ultralytics HUB: Ultralytics HUB biedt een gespecialiseerde omgeving voor het volgen van YOLO modellen, waardoor je een one-stop platform hebt om statistieken en datasets te beheren en zelfs om samen te werken met je team. Gezien de toegespitste focus op YOLO biedt het meer op maat gemaakte trackingopties.

Elk van deze tools biedt zijn eigen voordelen, dus je kunt bij het maken van een keuze rekening houden met de specifieke behoeften van je project.

Hoe te controleren of er wordt getraind op de GPU

Probleem: De waarde 'device' in de trainingslogs is 'null' en je weet niet zeker of er getraind wordt op de GPU.

Oplossing: Als de 'device' waarde 'null' is, betekent dit meestal dat het trainingsproces is ingesteld om automatisch een beschikbare GPU te gebruiken, wat het standaard gedrag is. Om ervoor te zorgen dat de training op een specifieke GPU plaatsvindt, kun je de waarde 'device' handmatig instellen op de GPU-index (bijvoorbeeld '0' voor de eerste GPU) in je .yaml configuratiebestand:

device: 0

Hiermee wordt het trainingsproces expliciet toegewezen aan de opgegeven GPU. Als je op de CPU wilt trainen, stel dan 'device' in op 'cpu'.

Houd de map 'runs' in de gaten voor logboeken en statistieken om de voortgang van de training effectief te volgen.

Belangrijke overwegingen voor effectieve modeltraining

Hier zijn enkele dingen die je in gedachten moet houden als je problemen hebt met modeltraining.

Datasetformaat en labels

  • Belang: De basis van elk model voor machinaal leren ligt in de kwaliteit en het formaat van de gegevens waarop het is getraind.

  • Aanbeveling: Zorg ervoor dat je aangepaste dataset en de bijbehorende labels voldoen aan het verwachte formaat. Het is cruciaal om te controleren of annotaties accuraat en van hoge kwaliteit zijn. Onjuiste of ondermaatse annotaties kunnen het leerproces van het model verstoren en leiden tot onvoorspelbare uitkomsten.

Modelconvergentie

  • Belang: Het bereiken van modelconvergentie zorgt ervoor dat het model voldoende heeft geleerd van de trainingsgegevens.

  • Aanbeveling: Wanneer je een model 'vanaf nul' traint, is het van vitaal belang om ervoor te zorgen dat het model een bevredigend convergentieniveau bereikt. Dit kan een langere trainingsduur vereisen, met meer epochs, in vergelijking met het verfijnen van een bestaand model.

Leersnelheid en batchgrootte

  • Belang: Deze hyperparameters spelen een cruciale rol bij het bepalen hoe het model zijn gewichten bijwerkt tijdens de training.

  • Aanbeveling: Evalueer regelmatig of de gekozen leersnelheid en batchgrootte optimaal zijn voor je specifieke dataset. Parameters die niet in harmonie zijn met de eigenschappen van de dataset kunnen de prestaties van het model belemmeren.

Klasseverdeling

  • Belang: De verdeling van klassen in je dataset kan de voorspellingstendensen van het model beïnvloeden.

  • Aanbeveling: Beoordeel regelmatig de verdeling van klassen binnen je dataset. Als er een onevenwichtige klassenverdeling is, bestaat het risico dat het model een vertekening ontwikkelt in de richting van de meest voorkomende klasse. Deze vooringenomenheid kan duidelijk worden in de verwarringmatrix, waar het model mogelijk overwegend de meerderheidsklasse voorspelt.

Kruiscontrole met voorgetrainde gewichten

  • Belang: Het gebruik van voorgetrainde gewichten kan een solide startpunt zijn voor modeltraining, vooral als de gegevens beperkt zijn.

  • Aanbeveling: Als diagnostische stap kun je overwegen om je model te trainen met dezelfde gegevens, maar het te initialiseren met vooraf getrainde gewichten. Als deze aanpak een goed gevormde verwarringmatrix oplevert, kan dit erop wijzen dat het 'from scratch' model misschien verder getraind of aangepast moet worden.

In dit hoofdstuk worden veel voorkomende problemen tijdens het voorspellen van modellen behandeld.

Bounding Box voorspellingen krijgen met je YOLOv8 aangepaste model

Probleem: Bij het uitvoeren van voorspellingen met een aangepast YOLOv8 model zijn er problemen met het formaat en de visualisatie van de coördinaten van de bounding box.

Oplossing:

  • Coördinatenformaat: YOLOv8 geeft bounding box coördinaten in absolute pixelwaarden. Om deze om te zetten naar relatieve coördinaten (variërend van 0 tot 1), moet je delen door de afbeeldingsafmetingen. Stel bijvoorbeeld dat je afbeelding 640x640 groot is. Dan doe je het volgende:
# Convert absolute coordinates to relative coordinates
x1 = x1 / 640  # Divide x-coordinates by image width
x2 = x2 / 640
y1 = y1 / 640  # Divide y-coordinates by image height
y2 = y2 / 640
  • Bestandsnaam: Om de bestandsnaam op te vragen van de afbeelding die je voorspelt, kun je het pad van het afbeeldingsbestand rechtstreeks openen vanuit het resultaatobject in je voorspellus.

Objecten filteren in YOLOv8 voorspellingen

Probleem: Problemen met het filteren en weergeven van alleen specifieke objecten in de voorspellingsresultaten bij het uitvoeren van YOLOv8 met behulp van de Ultralytics bibliotheek.

Oplossing: Om specifieke klassen te detecteren gebruik je het classes argument om de klassen te specificeren die je wilt opnemen in de uitvoer. Bijvoorbeeld, om alleen auto's te detecteren (aangenomen dat 'auto's' klasse-index 2 heeft):

yolo task=detect mode=segment model=yolov8n-seg.pt source='path/to/car.mp4' show=True classes=2

Precisiemetriek begrijpen in YOLOv8

Probleem: Verwarring over het verschil tussen vakprecisie, maskerprecisie en precisie van de verwarringsmatrix in YOLOv8.

Oplossing: Box precisie meet de nauwkeurigheid van voorspelde bounding boxes vergeleken met de werkelijke ground truth boxes met IoU (Intersection over Union) als metriek. Maskerprecisie beoordeelt de overeenkomst tussen voorspelde segmentatiemaskers en grondwaarnemingsmaskers bij pixelgewijze objectclassificatie. Precisie van de verwarringsmatrix daarentegen richt zich op de algehele classificatienauwkeurigheid over alle klassen en houdt geen rekening met de geometrische nauwkeurigheid van voorspellingen. Het is belangrijk op te merken dat een bounding box geometrisch accuraat kan zijn (true positive), zelfs als de klassevoorspelling fout is, wat leidt tot verschillen tussen boxprecisie en verwarringsmatrixprecisie. Deze metrieken evalueren verschillende aspecten van de prestaties van een model en weerspiegelen de behoefte aan verschillende evaluatiemetrieken in verschillende taken.

Objectafmetingen extraheren in YOLOv8

Probleem: Moeilijkheid bij het terugvinden van de lengte en hoogte van gedetecteerde objecten in YOLOv8, vooral wanneer er meerdere objecten in een afbeelding worden gedetecteerd.

Oplossing: Om de afmetingen van bounding boxes te achterhalen, gebruik je eerst het Ultralytics YOLOv8 model om objecten in een afbeelding te voorspellen. Extraheer vervolgens de breedte- en hoogte-informatie van bounding boxes uit de voorspellingsresultaten.

from ultralytics import YOLO

# Load a pre-trained YOLOv8 model
model = YOLO('yolov8n.pt')

# Specify the source image
source = 'https://ultralytics.com/images/bus.jpg'

# Make predictions
results = model.predict(source, save=True, imgsz=320, conf=0.5)

# Extract bounding box dimensions
boxes = results[0].boxes.xywh.cpu()
for box in boxes:
    x, y, w, h = box
    print(f"Width of Box: {w}, Height of Box: {h}")

Uitdagingen

GPU implementatieproblemen

Probleem: Het implementeren van modellen in een multi-GPU omgeving kan soms leiden tot onverwacht gedrag, zoals onverwacht geheugengebruik, inconsistente resultaten tussen GPU's, enz.

Oplossing: Controleer op standaard GPU-initialisatie. Sommige frameworks, zoals PyTorch, initialiseren CUDA-bewerkingen op een standaard GPU voordat ze overschakelen naar de aangewezen GPU's. Om onverwachte standaard initialisaties te omzeilen, kun je de GPU direct opgeven tijdens de implementatie en voorspelling. Gebruik vervolgens tools om het GPU-gebruik en geheugengebruik te controleren om eventuele afwijkingen in real-time te identificeren. Zorg er ook voor dat je de nieuwste versie van het framework of de bibliotheek gebruikt.

Problemen met modelconversie/exporteren

Probleem: Tijdens het converteren of exporteren van machine learning modellen naar verschillende formaten of platforms kunnen gebruikers fouten of onverwacht gedrag tegenkomen.

Oplossing:

  • Compatibiliteitscontrole: Zorg ervoor dat je versies van bibliotheken en frameworks gebruikt die compatibel zijn met elkaar. Niet compatibele versies kunnen leiden tot onverwachte fouten tijdens de conversie.

  • Omgeving resetten: Als je een interactieve omgeving zoals Jupyter of Colab gebruikt, overweeg dan om je omgeving opnieuw op te starten na het maken van belangrijke wijzigingen of installaties. Een nieuwe start kan soms onderliggende problemen oplossen.

  • Officiële documentatie: Raadpleeg altijd de officiële documentatie van het gereedschap of de bibliotheek die je gebruikt voor de conversie. Deze bevat vaak specifieke richtlijnen en best practices voor het exporteren van modellen.

  • Ondersteuning van de gemeenschap: Kijk in de officiële repository van de bibliotheek of het framework voor soortgelijke problemen die door andere gebruikers zijn gemeld. De beheerders of de community kunnen oplossingen of workarounds hebben gegeven in discussiethreads.

  • Regelmatig bijwerken: Zorg ervoor dat je de nieuwste versie van de tool of bibliotheek gebruikt. Ontwikkelaars brengen regelmatig updates uit die bekende bugs oplossen of de functionaliteit verbeteren.

  • Stapsgewijs testen: Voordat je een volledige conversie uitvoert, test je het proces met een kleiner model of een kleinere dataset om mogelijke problemen in een vroeg stadium op te sporen.

Gemeenschap en ondersteuning

Door je aan te sluiten bij een gemeenschap van gelijkgestemden kun je je ervaring en succes in het werken met YOLOv8 aanzienlijk vergroten. Hieronder vind je een aantal kanalen en bronnen die je misschien nuttig vindt.

Forums en kanalen voor hulp

GitHub problemen: De YOLOv8 repository op GitHub heeft een Issues tab waar je vragen kunt stellen, bugs kunt melden en nieuwe functies kunt voorstellen. De gemeenschap en beheerders zijn hier actief en het is een goede plek om hulp te krijgen bij specifieke problemen.

Ultralytics Discord Server: Ultralytics heeft een Discord server waar je kunt communiceren met andere gebruikers en de ontwikkelaars.

Officiële documentatie en bronnen

Ultralytics YOLOv8 Documenten: De officiële documentatie biedt een uitgebreid overzicht van YOLOv8, samen met gidsen over installatie, gebruik en probleemoplossing.

Deze bronnen zouden een solide basis moeten bieden voor het oplossen van problemen en het verbeteren van je YOLOv8 projecten, maar ook om in contact te komen met anderen in de YOLOv8 gemeenschap.

Conclusie

Het oplossen van problemen is een integraal onderdeel van elk ontwikkelproces en als je over de juiste kennis beschikt, kun je de tijd en moeite die het kost om problemen op te lossen aanzienlijk verminderen. Deze handleiding is bedoeld om de meest voorkomende uitdagingen aan te pakken waarmee gebruikers van het YOLOv8 model binnen het Ultralytics ecosysteem worden geconfronteerd. Door deze veel voorkomende problemen te begrijpen en aan te pakken, kun je zorgen voor een soepeler verloop van je project en betere resultaten behalen met je computervisietaken.

Vergeet niet dat de Ultralytics gemeenschap een waardevolle bron is. Samenwerken met collega-ontwikkelaars en experts kan aanvullende inzichten en oplossingen opleveren die misschien niet in de standaarddocumentatie staan. Blijf altijd leren, experimenteren en je ervaringen delen om bij te dragen aan de collectieve kennis van de gemeenschap.

Probleemoplossing!



Gemaakt op 2023-11-12, Bijgewerkt op 2024-04-19
Auteurs: RizwanMunawar (1), glenn-jocher (2)

Reacties