Configureer YOLOv8 voor GPU: Versnel Objectdetectie

Inleiding

YOLOv8, ontwikkeld door Ultralytics in 2023, is naar voren gekomen als een van de unieke objectdetectiealgoritmes in de YOLO-serie en wordt geleverd met aanzienlijke architecturale en prestatieverbeteringen ten opzichte van zijn voorgangers, zoals YOLOv5. Deze verbeteringen omvatten een CSPNet-backbone voor betere functie-extractie, een FPN+PAN-nek voor verbeterde multi-schaal objectdetectie, en een verschuiving naar een aanker-vrije aanpak. Deze veranderingen verbeteren aanzienlijk de nauwkeurigheid, efficiëntie en bruikbaarheid van het model voor real-time objectdetectie.

Door een GPU te gebruiken met YOLOv8 kan de prestatie voor objectdetectietaken aanzienlijk worden verbeterd, met snellere training en inferentie. Deze handleiding zal je begeleiden bij het instellen van YOLOv8 voor GPU-gebruik, inclusief configuratie, probleemoplossing en optimalisatietips.

YOLOv8

YOLOv8 bouwt voort op zijn voorgangers met geavanceerd ontwerp van neurale netwerken en trainings technieken om de prestaties in objectdetectie te verbeteren. Het verenigt objectlokalisatie en classificatie in een enkel, efficiënt framework, waarbij snelheid en nauwkeurigheid in balans zijn. De architectuur bestaat uit drie belangrijke componenten:

  1. Ruggengraat: Een zeer geoptimaliseerde CNN-ruggengraat, mogelijk gebaseerd op CSPDarknet, haalt multi-schaal eigenschappen op met behulp van efficiënte lagen zoals dieptescheidende convoluties, waardoor hoge prestaties worden gegarandeerd met minimale computationele overhead.
  2. Hals: Een verbeterd Path Aggregation Network (PANet) verfijnt en integreert multi-schaal eigenschappen om objecten van verschillende groottes beter te detecteren. Het is geoptimaliseerd voor efficiëntie en geheugenverbruik.
  3. Hoofd: Het ankerloze hoofd voorspelt begrenzingskaders, betrouwbaarheidsscores en klassenlabels, waardoor voorspellingen worden vereenvoudigd en de aanpasbaarheid aan diverse objectvormen en schalen wordt verbeterd.

Deze innovaties maken YOLOv8 sneller, nauwkeuriger en veelzijdiger voor moderne objectdetectietaken. Bovendien introduceert YOLOv8 een ankerloze benadering voor het voorspellen van begrenzingskaders, waarbij wordt afgestapt van de ankergebaseerde methoden van eerdere versies.

Waarom een GPU gebruiken met YOLOv8?

YOLOv8 (You Only Look Once, Versie 8) is een krachtig raamwerk voor objectdetectie. Hoewel het op CPU’s draait, biedt het gebruik van een GPU enkele belangrijke voordelen, zoals:

  • Snelheid: GPU’s verwerken parallelle berekeningen efficiënter, waardoor training- en inferentietijden worden verkort.
  • Schaalbaarheid: Grotere datasets en modellen zijn beheersbaar met GPU’s.
  • Verbeterde Prestaties: Real-time objectdetectie wordt haalbaar, waardoor toepassingen zoals autonome voertuigen, bewaking en live videobewerking mogelijk zijn.

GPU’s zijn de duidelijke keuze voor het behalen van snellere resultaten en het verwerken van complexere taken met YOLOv8.

CPU vs. GPU

Bij het werken met YOLOv8 of elk ander objectdetectiemodel kan de keuze tussen CPU en GPU aanzienlijke invloed hebben op de prestaties van het model voor zowel training als inferentie. CPU’s zijn geweldig voor algemene doeleinden en kunnen efficiënt omgaan met kleinere taken. CPU’s schieten echter tekort wanneer de taak rekenintensief wordt. Taken zoals objectdetectie vereisen snelheid en parallelle berekening, en GPU’s zijn ontworpen om taken met hoge prestaties en parallelle verwerking aan te kunnen. Daarom zijn ze ideaal voor het draaien van diepe leermmodellen zoals YOLO. Bijvoorbeeld, training en inferentie op een GPU kunnen 10-50 keer sneller zijn dan op een CPU, afhankelijk van de hardware en de modelgrootte.

Aspect CPU GPU
Inferentietijd (per afbeelding) ~500 ms ~15 ms
Trainingsnelheid (epochs/uur) ~2 epochs/uur ~30 epochs/uur
Batchgroottecapaciteit Klein (2-4 afbeeldingen) Groot (16-32 afbeeldingen)
Real-time prestaties Nee Ja
Parallelle verwerking Beperkt Uitstekend (duizenden cores)
Energie-efficiëntie Lager voor grote taken Hoger voor parallelle workloads
Kostenefficiëntie Geschikt voor kleine taken Ideaal voor elke deep learning-taak

Het verschil wordt nog duidelijker tijdens de training, waar GPU’s de epochs dramatisch verkorten in vergelijking met CPU’s. Deze snelheidstoename stelt GPU’s in staat om grotere datasets te verwerken en real-time objectdetectie efficiënter uit te voeren.

Vereisten voor het gebruik van YOLOv8 met GPU

Voordat je YOLOv8 voor GPU configureert, zorg ervoor dat je aan de volgende vereisten voldoet:

1. Hardwarevereisten

  • NVIDIA GPU: YOLOv8 is afhankelijk van CUDA voor GPU-versnelling, dus je hebt een NVIDIA GPU met een CUDA Compute Capability van 6.0 of hoger nodig.
  • Geheugen: Minimaal 8GB GPU-geheugen wordt aanbevolen voor gematigde datasets. Voor grotere datasets is 16GB of meer gewenst.

2. Softwarevereisten

  • Python: Versie 3.8 of later.
  • PyTorch: Geïnstalleerd met GPU-ondersteuning (via CUDA). Bij voorkeur NVIDIA GPU.
  • CUDA Toolkit en cuDNN: Zorg ervoor dat deze compatibel zijn met jouw PyTorch-versie.
  • YOLOv8: Installeerbaar vanuit het Ultralytics repository.

3. Driver Vereisten

  • Download en installeer de laatste NVIDIA drivers van de NVIDIA website.
  • Controleer de beschikbaarheid van je GPU met nvidia-smi na de installatie van de driver.

Stapsgewijze Handleiding voor het Configureren van YOLOv8 voor GPU

1. Installeer NVIDIA Drivers

Om NVIDIA drivers te installeren:

  • Identificeer jouw GPU met de onderstaande code:
nvidia-smi
  • Bezoek de NVIDIA Drivers Download pagina en download de juiste driver.
  • Volg de installatie-instructies voor jouw besturingssysteem.
  • Herstart je computer om de wijzigingen toe te passen.
  • Verifieer de installatie door uit te voeren:
nvidia-smi
  • Dit commando toont GPU-informatie en bevestigt de functionaliteit van de driver.

2. Installeer CUDA Toolkit en cuDNN

Om YOLOv8 te gebruiken, moeten we de juiste versie van PyTorch selecteren, wat op zijn beurt een CUDA-versie vereist.

Stappen om CUDA Toolkit te installeren

  1. Download de juiste versie van de CUDA Toolkit van de NVIDIA Developer site.
  2. Installeer de CUDA Toolkit en stel omgevingsvariabelen in (bijv. PATH, LD_LIBRARY_PATH).
  3. Verifieer de installatie door uit te voeren:
nvcc --version

Zorg ervoor dat je de nieuwste versie van CUDA hebt, zodat PyTorch de GPU effectief kan gebruiken

Stappen om cuDNN te installeren

  1. Download cuDNN van de NVIDIA Developer site.
  2. Pak de inhoud uit en kopieer deze naar de bijbehorende CUDA-directories (bijv. bin, include, lib).
  3. Zorg ervoor dat de cuDNN-versie overeenkomt met uw CUDA-installatie.

3. Installeer PyTorch met GPU-ondersteuning

Om PyTorch met GPU-ondersteuning te installeren, bezoek de PyTorch Startpagina en selecteer de juiste installatieopdracht. Bijvoorbeeld:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117

4. Installeer en voer YOLOv8 uit

Installeer YOLOv8 door deze stappen te volgen:

  • Installeer Ultralytics om met yolov8 te werken en importeer de noodzakelijke bibliotheken
pip install ultralytics
  • Voorbeeld voor Python-script:
from Ultralytics import YOLO
# Laad een COCO-gepretrainde YOLOv8n-model

model = YOLO("yolov8n.pt")

# Toon modelinformatie (optioneel)
model.info()

# Train het model op de COCO8 voorbeelddataset voor 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device = ‘cuda’)

# Voer inferentie uit met het YOLOv8n-model op de afbeelding 'bus.jpg'
results = model("path/to/image.jpg")
  • Voorbeeld voor Command Line:
# gebruik de CLI-opdrachten om het model direct uit te voeren:
from Ultralytics import YOLO

# Laad een COCO-voorgetraind YOLOv8n-model
model = YOLO("yolov8n.pt")

# Toon modelinformatie (optioneel)
model.info()

# Train het model op de COCO8-voorbeelddataset voor 100 epochs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

# Voer inferentie uit met het YOLOv8n-model op de afbeelding 'bus.jpg'
results = model("path/to/image.jpg")

5. Verifieer GPU-configuratie in YOLOv8

Gebruik de volgende Python-opdracht om te controleren of uw GPU wordt gedetecteerd en CUDA is ingeschakeld:

import torch
# Controleer of GPU beschikbaar is
print("CUDA Available:", torch.cuda.is_available())

# Ontvang GPU-details
if torch.cuda.is_available():
    print("GPU Name:", torch.cuda.get_device_name(0))

6. Trainen of Infereren met GPU

Specificeer het apparaat als cuda in uw trainings- of inferentieopdrachten:

Command-Line Voorbeeld

yolo task=detect mode=train data=coco.yaml model=yolov8n.pt device=0 epochs = 128 plots = True

Valideer het aangepaste model

yolo task=detect mode=val model={HOME}/runs/detect/train/weights/best.pt data={dataset.location}/data.yaml

Python Script Voorbeeld

from ultralytics import YOLO

# Laad het YOLOv8-model
model = YOLO('yolov8n.pt')

# Train het model op GPU
model.train(data='coco.yaml', epochs=50, device='cuda')

# Voer inferentie uit op GPU
results = model.predict(source='input.jpg', device='cuda')

Waarom DigitalOcean GPU-droplets?

DigitalOcean GPU-droplets zijn ontworpen om high-performance AI- en machine learning-taken aan te kunnen. H100s voorzien deze GPU-droplets van uitzonderlijke snelheid en parallelle verwerkingsmogelijkheden, waardoor ze ideaal zijn voor efficiënte training en uitvoering van YOLOv8-modellen. Bovendien zijn deze droplets vooraf geïnstalleerd met de nieuwste versie van CUDA, zodat je meteen gebruik kunt maken van GPU-versnelling zonder tijd te verspillen aan handmatige configuraties. Deze gestroomlijnde omgeving stelt je in staat om je volledig te richten op het optimaliseren van je YOLOv8-modellen en het moeiteloos schalen van je projecten.

Veelvoorkomende problemen oplossen

1. YOLOv8 Gebruikt Geen GPU

  • Controleer de beschikbaarheid van de GPU met
torch.cuda.is_available()
  • Controleer CUDA- en PyTorch-compatibiliteit.
  • Zorg ervoor dat je device=0 of device='cuda' specificeert in commando’s of scripts.
  • Update NVIDIA-stuurprogramma’s en installeer indien nodig de CUDA Toolkit opnieuw.

2. CUDA-fouten

  • Zorg ervoor dat de versie van de CUDA Toolkit overeenkomt met de vereisten van PyTorch.
  • Controleer de installatie van cuDNN door diagnostische scripts uit te voeren.
  • Controleer de omgevingsvariabelen voor CUDA (PATH en LD_LIBRARY_PATH).

3. Trage prestaties

  • Activeer training in gemengde precisie om geheugengebruik en snelheid te optimaliseren:
model.train(data='coco.yaml', epochs=50, device='cuda', amp=True)
  • Verlaag de batchgrootte als het geheugengebruik te hoog is.
  • Zorg ervoor dat je een geoptimaliseerd systeem hebt voor het uitvoeren van parallelle verwerking, en overweeg batchverwerking te gebruiken in je detectiescript om de prestaties te verbeteren.
from Ultralytics import YOLO

# Laad de modellen
vehicle_model = YOLO('yolov8l.pt')
license_model = YOLO('Registration.pt')

# Verwerk elke stream, voorbeeld voor één stream
results = vehicle_model(source='stream1.mp4', batch=4)  # Pas indien nodig aan voor parallelle verwerking

Veelgestelde vragen

Hoe activeer ik de GPU voor YOLOv8?

Specificeer device='cuda' of device=0 (indien de eerste GPU wordt gebruikt) in uw commando’s of scripts bij het laden van het model. Hiermee wordt YOLOv8 in staat gesteld om de GPU te gebruiken voor snellere berekeningen tijdens inferentie en training. Zorg ervoor dat uw GPU correct is ingesteld en gedetecteerd.

model = YOLO("yolov8n.pt") 
model.to('cuda')

Waarom gebruikt YOLOv8 mijn GPU niet?

YOLOv8 gebruikt mogelijk de GPU niet als er problemen zijn met de hardware, drivers of de configuratie.
Controleer eerst de installatie van CUDA en de compatibiliteit met PyTorch. Werk de drivers indien nodig bij. Zorg ervoor dat uw CUDA en CuDNN compatibel zijn met uw PyTorch-installatie.
Installeer torchvision en controleer de configuratie die wordt geïnstalleerd en gebruikt.

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118`
import torch print(torch.cuda.get_device_name())

Bovendien kan YOLOv8 de GPU niet gebruiken als PyTorch niet is geïnstalleerd met GPU-ondersteuning (bijv. een versie alleen voor CPU), of als de device-parameter in uw YOLOv8-commando’s mogelijk niet expliciet is ingesteld op cuda. Het uitvoeren van YOLOv8 op een systeem zonder een CUDA-compatibele GPU of met onvoldoende VRAM kan er ook toe leiden dat het standaard naar de CPU wordt omgeleid.

Om dit op te lossen, zorg ervoor dat uw GPU CUDA-compatibel is, controleer de installatie van alle vereiste afhankelijkheden, controleer of torch.cuda.is_available() True retourneert, en specificeer expliciet de parameter device='cuda' in uw YOLOv8-scripts of commando’s.

Wat zijn de hardwarevereisten voor YOLOv8 op GPU?

Om YOLOVv8 effectief te installeren en uit te voeren op een GPU, wordt Python 3.7 of hoger aanbevolen en is een CUDA-compatibele GPU vereist voor GPU-versnelling.

Er wordt een moderne NVIDIA GPU met minimaal 8GB geheugen aanbevolen. Voor grote datasets is meer geheugen gunstig. Voor optimale prestaties wordt aanbevolen om Python 3.8 of nieuwer, PyTorch 1.10 of hoger, en een NVIDIA GPU compatibel met CUDA 11.2+ te gebruiken. De GPU moet idealiter minimaal 8GB VRAM hebben om efficiënt met gemiddelde datasets om te kunnen gaan, hoewel meer VRAM gunstig is voor grotere datasets en complexe modellen. Bovendien moet uw systeem minimaal 8GB RAM en 50GB vrije schijfruimte hebben om datasets op te slaan en modeltraining te vergemakkelijken. Door deze hardware- en softwareconfiguraties te verzekeren, kunt u snellere training en inferentie met YOLOv8 bereiken, vooral voor rekenintensieve taken.

Let op: AMD GPU’s ondersteunen mogelijk geen CUDA, dus het kiezen van een NVIDIA GPU voor YOLOv8-compatibiliteit is essentieel.

Kan YOLOv8 op meerdere GPU’s draaien?

Om YOLOv8 te trainen met meerdere GPU’s, kun je PyTorch’s DataParallel gebruiken of meerdere apparaten direct specificeren (bijv. cuda:0,1). Voor gedistribueerde training gebruikt YOLOv8 standaard PyTorch’s Multi-GPU DistributedDataParallel (DDP). Zorg ervoor dat je systeem over meerdere GPU’s beschikt en geef de GPU’s op die je wilt gebruiken in het trainingsscript of de opdrachtregel. Stel bijvoorbeeld --device 0,1,2,3 in de CLI of device=[0,1,2,3] in Python in om GPU’s 0, 1, 2 en 3 te gebruiken. YOLOv8 beheert automatisch de parallelle training over de opgegeven GPU’s zonder dat een expliciete data_parallel parameter nodig is. Terwijl alle GPU’s tijdens de training worden gebruikt, draait de validatiefase doorgaans standaard op een enkele GPU, omdat deze minder middelen vereist dan training.

Hoe optimaliseer ik YOLOv8 voor inferentie op GPU?

Schakel gemengde precisie in en pas batchgroottes aan om geheugen en snelheid in balans te brengen. Afhankelijk van uw dataset vereist het trainen van YOLOv8 nogal wat rekenkracht om efficiënt te kunnen draaien. Gebruik een kleiner of gekwantiseerd modelvariant (bijv. YOLOv8n of gekwantiseerde versies met INT8) om geheugengebruik en inferentietijd te verminderen. Stel in uw inferentiescript expliciet de parameter device in op cuda voor GPU-uitvoering. Gebruik technieken zoals batchinferentie om meerdere afbeeldingen tegelijk te verwerken en GPU-gebruik te maximaliseren. Indien van toepassing, maak gebruik van TensorRT om het model verder te optimaliseren voor snellere GPU-inferentie. Controleer regelmatig de GPU-geheugen en prestaties om efficiënt gebruik van resources te waarborgen.

De onderstaande codefragment zal u in staat stellen om afbeeldingen parallel te verwerken binnen de gedefinieerde batchgrootte.

from Ultralytics import YOLO
model = YOLO('yolov8n.pt', device='cpu', batch=4)  # geef de gewenste batchgrootte op

# geef het argument 'images' door, dat de lijst met voorbewerkte afbeeldingen is
results = model.predict(images)  # 'images' moeten de vorm hebben (N, 3, H, W)

Indien u de CLI gebruikt, geef de batchgrootte op met -b of –batch-grootte. Met Python, zorg ervoor dat het batchargument correct is ingesteld bij het initialiseren van uw model of bij het oproepen van de voorspellingsmethode.

Hoe los ik CUDA Out-of-memory problemen op?

Om CUDA out-of-memory fouten op te lossen, verlaag de validatie batchgrootte in je YOLOv8 configuratiebestand, aangezien kleinere batches minder GPU-geheugen vereisen. Daarnaast, als je toegang hebt tot meerdere GPU’s, overweeg dan om de validatiewerklast over hen te verdelen met behulp van PyTorch’s DistributedDataParallel of een vergelijkbare functionaliteit, hoewel dit geavanceerde kennis van PyTorch vereist. Je kunt ook proberen om gecachte geheugen te wissen met torch.cuda.empty_cache() in je script en ervoor zorgen dat er geen onnodige processen op je GPU draaien. Het upgraden naar een GPU met meer VRAM of het optimaliseren van je model en dataset voor geheugenefficiëntie zijn verdere stappen om dergelijke problemen te verminderen.

Conclusie

Het configureren van YOLOv8 om een GPU te gebruiken is een eenvoudig proces dat de prestaties aanzienlijk kan verbeteren. Door deze gedetailleerde handleiding te volgen, kun je training en inferentie versnellen voor je objectherkenningstaken. Optimaliseer je setup, los veelvoorkomende problemen op en ontgrendel het volledige potentieel van YOLOv8 met GPU-versnelling.

Referenties

Source:
https://www.digitalocean.com/community/tutorials/yolov8-for-gpu-accelerate-object-detection