Overslaan naar inhoud

Modeltraining met Ultralytics YOLO

Ultralytics YOLO ecosysteem en integraties

Inleiding

Het trainen van een deep learning model bestaat uit het voeden met gegevens en het aanpassen van de parameters zodat het accurate voorspellingen kan doen. De trainingmodus in Ultralytics YOLOv8 is ontworpen voor effectieve en efficiënte training van objectdetectiemodellen, waarbij de moderne hardwaremogelijkheden volledig worden benut. Deze gids behandelt alle details die je nodig hebt om aan de slag te gaan met het trainen van je eigen modellen met de robuuste set functies van YOLOv8.



Kijken: Hoe train je een YOLOv8 model op je eigen dataset in Google Colab.

Waarom kiezen voor Ultralytics YOLO voor training?

Hier zijn enkele overtuigende redenen om te kiezen voor YOLOv8's Treinmodus:

  • Efficiëntie: Haal het maximale uit je hardware, of je nu werkt met een enkele GPU of met meerdere GPU's.
  • Veelzijdigheid: Train op aangepaste datasets naast direct beschikbare zoals COCO, VOC en ImageNet.
  • Gebruiksvriendelijk: Eenvoudige maar krachtige CLI en Python interfaces voor een eenvoudige trainingservaring.
  • Hyperparameter Flexibiliteit: Een breed scala aan aanpasbare hyperparameters om de prestaties van het model te verfijnen.

Belangrijkste kenmerken van de treinenmodus

Hieronder volgen enkele opvallende kenmerken van YOLOv8's Treinmodus:

  • Automatische download van datasets: Standaard datasets zoals COCO, VOC en ImageNet worden automatisch gedownload bij het eerste gebruik.
  • Ondersteuning voor meerdere GPU's: Schaal je training naadloos over meerdere GPU's om het proces te versnellen.
  • Hyperparameter configuratie: De optie om hyperparameters aan te passen via YAML configuratiebestanden of CLI argumenten.
  • Visualisatie en monitoring: Real-time bijhouden van trainingsgegevens en visualisatie van het leerproces voor betere inzichten.

Tip

  • YOLOv8 datasets zoals COCO, VOC, ImageNet en vele andere automatisch downloaden bij het eerste gebruik, d.w.z. yolo train data=coco.yaml

Voorbeelden

Train YOLOv8n op de COCO8 dataset voor 100 epochs met afbeeldingsgrootte 640. Het trainingsapparaat kan worden gespecificeerd met de device argument. Als GPU geen argument doorgeeft device=0 wordt gebruikt als het beschikbaar is, anders device='cpu' worden gebruikt. Zie het onderdeel Argumenten hieronder voor een volledige lijst met trainingsargumenten.

Voorbeeld van training met één GPU en CPU

Het apparaat wordt automatisch bepaald. Als er een GPU beschikbaar is, wordt deze gebruikt, anders wordt de training gestart op de CPU.

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.yaml')  # build a new model from YAML
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolov8n.yaml').load('yolov8n.pt')  # build from YAML and transfer weights

# Train the model
results = model.train(data='coco8.yaml', epochs=100, imgsz=640)
# Build a new model from YAML and start training from scratch
yolo detect train data=coco8.yaml model=yolov8n.yaml epochs=100 imgsz=640

# Start training from a pretrained *.pt model
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640

# Build a new model from YAML, transfer pretrained weights to it and start training
yolo detect train data=coco8.yaml model=yolov8n.yaml pretrained=yolov8n.pt epochs=100 imgsz=640

Multi-GPU-training

Multi-GPU training maakt efficiënter gebruik van de beschikbare hardwarebronnen mogelijk door de trainingsbelasting over meerdere GPU's te verdelen. Deze functie is beschikbaar via zowel de Python API als de opdrachtregelinterface. Om multi-GPU training in te schakelen, moet je de GPU apparaat-ID's opgeven die je wilt gebruiken.

Multi-GPU trainingsvoorbeeld

Om te trainen met 2 GPU's, CUDA apparaten 0 en 1 gebruik je de volgende commando's. Breid indien nodig uit naar extra GPU's.

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data='coco8.yaml', epochs=100, imgsz=640, device=[0, 1])
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=0,1

Apple M1 en M2 MPS-training

Met de ondersteuning voor Apple M1 en M2 chips die geïntegreerd zijn in de Ultralytics YOLO modellen, is het nu mogelijk om je modellen te trainen op apparaten die gebruik maken van het krachtige Metal Performance Shaders (MPS) framework. MPS biedt een krachtige manier om reken- en beeldbewerkingstaken uit te voeren op Apple's aangepaste silicium.

Om training op Apple M1 en M2 chips mogelijk te maken, moet je 'mps' als apparaat opgeven wanneer je het trainingsproces start. Hieronder staat een voorbeeld van hoe je dit kunt doen in Python en via de commandoregel:

MPS Training Voorbeeld

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model with 2 GPUs
results = model.train(data='coco8.yaml', epochs=100, imgsz=640, device='mps')
# Start training from a pretrained *.pt model using GPUs 0 and 1
yolo detect train data=coco8.yaml model=yolov8n.pt epochs=100 imgsz=640 device=mps

Door gebruik te maken van de rekenkracht van de M1/M2 chips kunnen de trainingstaken efficiënter worden verwerkt. Raadpleeg voor meer gedetailleerde richtlijnen en geavanceerde configuratieopties de PyTorch MPS documentatie.

Onderbroken trainingen hervatten

Het hervatten van de training vanuit een eerder opgeslagen status is een cruciale functie bij het werken met deep learning modellen. Dit kan van pas komen in verschillende scenario's, zoals wanneer het trainingsproces onverwacht is onderbroken, of wanneer je een model wilt blijven trainen met nieuwe gegevens of voor meer epochs.

Wanneer de training wordt hervat, worden op Ultralytics YOLO de gewichten van het laatst opgeslagen model geladen en worden ook de status van de optimizer, de leersnelheidplanner en het epochnummer hersteld. Hierdoor kun je het trainingsproces naadloos voortzetten vanaf het punt waar het gebleven was.

Je kunt de training eenvoudig hervatten in Ultralytics YOLO door de resume argument naar True bij het aanroepen van de train methode en het pad naar de .pt bestand met de gedeeltelijk getrainde modelgewichten.

Hieronder staat een voorbeeld van hoe je een onderbroken training kunt hervatten met Python en via de opdrachtregel:

Voorbeeld cv training

from ultralytics import YOLO

# Load a model
model = YOLO('path/to/last.pt')  # load a partially trained model

# Resume training
results = model.train(resume=True)
# Resume an interrupted training
yolo train resume model=path/to/last.pt

Door resume=Truede train De functie gaat verder met trainen vanaf het punt waar het was gebleven, met behulp van de status die is opgeslagen in het bestand 'path/to/last.pt'. Als de resume argument is weggelaten of ingesteld op Falsede train functie start een nieuwe trainingssessie.

Onthoud dat checkpoints standaard aan het eind van elke epoch worden opgeslagen, of met een vast interval met de optie save_period argument, dus je moet minstens 1 epoche voltooien om een trainingsrun te hervatten.

Treininstellingen

De trainingsinstellingen voor YOLO modellen omvatten verschillende hyperparameters en configuraties die tijdens het trainingsproces worden gebruikt. Deze instellingen beïnvloeden de prestaties, snelheid en nauwkeurigheid van het model. De belangrijkste trainingsinstellingen zijn batchgrootte, leersnelheid, momentum en gewichtsverval. Daarnaast kan de keuze van de optimizer, verliesfunctie en samenstelling van de trainingsdataset het trainingsproces beïnvloeden. Zorgvuldig afstemmen en experimenteren met deze instellingen is cruciaal voor het optimaliseren van de prestaties.

Argument Standaard Beschrijving
model None Specificeert het modelbestand voor training. Accepteert een pad naar een .pt voorgetraind model of een .yaml configuratiebestand. Essentieel voor het definiëren van de modelstructuur of het initialiseren van gewichten.
data None Pad naar het configuratiebestand van de dataset (bijv, coco8.yaml). Dit bestand bevat dataset-specifieke parameters, waaronder paden naar trainings- en validatiegegevens, namen van klassen en het aantal klassen.
epochs 100 Totaal aantal trainingsepochs. Elke epoch vertegenwoordigt een volledige passage over de hele dataset. Het aanpassen van deze waarde kan de trainingsduur en modelprestaties beïnvloeden.
time None Maximale trainingstijd in uren. Indien ingesteld, overschrijft dit de epochs argument, waardoor de training automatisch stopt na de opgegeven duur. Nuttig voor trainingsscenario's met beperkte tijd.
patience 100 Aantal epochs dat gewacht moet worden zonder verbetering in de validatiemetriek voordat de training vroegtijdig wordt gestopt. Helpt overfitting te voorkomen door de training te stoppen wanneer de prestaties plateaus bereiken.
batch 16 Batchgrootte voor training, die aangeeft hoeveel afbeeldingen worden verwerkt voordat de interne parameters van het model worden bijgewerkt. AutoBatch (batch=-1) past de batchgrootte dynamisch aan op basis van de beschikbaarheid van GPU-geheugen.
imgsz 640 Doelafbeeldingsgrootte voor training. Alle afbeeldingen worden verkleind tot deze afmeting voordat ze in het model worden ingevoerd. Dit beïnvloedt de nauwkeurigheid van het model en de rekencomplexiteit.
save True Maakt het opslaan van trainingscheckpoints en uiteindelijke modelgewichten mogelijk. Handig voor het hervatten van de training of het uitrollen van het model.
save_period -1 Frequentie van het opslaan van modelcontrolepunten, gespecificeerd in epochs. Een waarde van -1 schakelt deze functie uit. Nuttig voor het opslaan van tussentijdse modellen tijdens lange trainingssessies.
cache False Maakt caching van datasetafbeeldingen in het geheugen mogelijk (True/ram), op schijf (disk), of schakel het uit (False). Verbetert de trainingssnelheid door schijf-I/O te verminderen ten koste van meer geheugengebruik.
device None Specificeert de rekenmachine(s) voor training: een enkele GPU (device=0), meerdere GPU's (device=0,1), CPU (device=cpu), of MPS voor Apple silicium (device=mps).
workers 8 Aantal werker threads voor het laden van gegevens (per RANK als Multi-GPU training). Beïnvloedt de snelheid van gegevens voorbewerken en invoeren in het model, vooral nuttig in multi-GPU opstellingen.
project None Naam van de projectmap waar de trainingsresultaten worden opgeslagen. Hiermee kunnen verschillende experimenten georganiseerd worden opgeslagen.
name None Naam van de trainingsrun. Wordt gebruikt om een submap aan te maken in de projectmap, waar de trainingslogs en uitvoer worden opgeslagen.
exist_ok False Als dit waar is, kan een bestaande map met projectnamen worden overschreven. Nuttig voor iteratieve experimenten zonder dat eerdere uitvoer handmatig moet worden gewist.
pretrained True Bepaalt of de training wordt gestart vanaf een voorgetraind model. Kan een booleaanse waarde zijn of een pad naar een specifiek model van waaruit gewichten moeten worden geladen. Verbetert de trainingsefficiëntie en modelprestaties.
optimizer 'auto' Keuze van optimizer voor training. Opties omvatten SGD, Adam, AdamW, NAdam, RAdam, RMSProp enzovoort, of auto voor automatische selectie op basis van modelconfiguratie. Beïnvloedt de convergentiesnelheid en stabiliteit.
verbose False Schakelt verbose uitvoer in tijdens de training, met gedetailleerde logbestanden en voortgangsupdates. Nuttig voor het debuggen en nauwlettend in de gaten houden van het trainingsproces.
seed 0 Stelt het willekeurige zaad voor de training in, zodat de resultaten van verschillende runs met dezelfde configuraties reproduceerbaar zijn.
deterministic True Dwingt het gebruik van deterministische algoritmen af, wat reproduceerbaarheid garandeert maar de prestaties en snelheid kan beïnvloeden vanwege de beperking op niet-deterministische algoritmen.
single_cls False Behandelt alle klassen in multi-class datasets als een enkele klasse tijdens de training. Nuttig voor binaire classificatietaken of wanneer je je richt op objectaanwezigheid in plaats van classificatie.
rect False Maakt rechthoekige training mogelijk, waarbij de batchsamenstelling wordt geoptimaliseerd voor minimale opvulling. Kan de efficiëntie en snelheid verbeteren, maar kan de modelnauwkeurigheid beïnvloeden.
cos_lr False Gebruikt een cosinus leersnelheid scheduler, die de leersnelheid aanpast volgens een cosinuscurve over epochs. Helpt bij het beheren van de leersnelheid voor betere convergentie.
close_mosaic 10 Schakelt het vergroten van mozaïekgegevens in de laatste N epochs uit om de training te stabiliseren voor voltooiing. Instellen op 0 schakelt deze functie uit.
resume False Hervat de training vanaf het laatst opgeslagen controlepunt. Laadt automatisch modelgewichten, optimalisatorstatus en epoch-telling, waardoor de training naadloos wordt voortgezet.
amp True Maakt automatische gemengde precisie (AMP) training mogelijk, waardoor minder geheugen wordt gebruikt en de training mogelijk sneller verloopt met minimale invloed op de nauwkeurigheid.
fraction 1.0 Specificeert de fractie van de dataset om te gebruiken voor training. Hiermee kan worden getraind op een deelverzameling van de volledige dataset, handig voor experimenten of wanneer de middelen beperkt zijn.
profile False Maakt profilering van ONNX en TensorRT snelheden tijdens training mogelijk, handig voor het optimaliseren van de inzet van modellen.
freeze None Bevriest de eerste N lagen van het model of gespecificeerde lagen op index, waardoor het aantal trainbare parameters wordt verminderd. Nuttig voor fine-tuning of transfer learning.
lr0 0.01 Initiële leersnelheid (d.w.z. SGD=1E-2, Adam=1E-3) . Het aanpassen van deze waarde is cruciaal voor het optimalisatieproces en beïnvloedt hoe snel modelgewichten worden bijgewerkt.
lrf 0.01 Uiteindelijke leersnelheid als fractie van de initiële leersnelheid = (lr0 * lrf), gebruikt in combinatie met planners om de leersnelheid in de loop van de tijd aan te passen.
momentum 0.937 Momentumfactor voor SGD of bèta1 voor Adam optimizers, die van invloed is op het meenemen van gradiënten uit het verleden in de huidige update.
weight_decay 0.0005 L2 regularisatieterm, die grote gewichten bestraft om overfitting te voorkomen.
warmup_epochs 3.0 Aantal epochs voor het opwarmen van de leersnelheid, waarbij de leersnelheid geleidelijk wordt verhoogd van een lage waarde naar de initiële leersnelheid om de training in een vroeg stadium te stabiliseren.
warmup_momentum 0.8 Initieel momentum voor opwarmfase, geleidelijk aanpassen aan het ingestelde momentum gedurende de opwarmperiode.
warmup_bias_lr 0.1 Leersnelheid voor biasparameters tijdens de opwarmfase, om de modeltraining in de eerste tijdperken te stabiliseren.
box 7.5 Gewicht van de box loss component in de verliesfunctie, die beïnvloedt hoeveel nadruk wordt gelegd op het nauwkeurig voorspellen van bounding box coördinaten.
cls 0.5 Gewicht van het classificatieverlies in de totale verliesfunctie, die het belang van correcte klassevoorspelling beïnvloedt ten opzichte van andere componenten.
dfl 1.5 Gewicht van het focale distributieverlies, gebruikt in bepaalde YOLO versies voor fijnkorrelige classificatie.
pose 12.0 Gewicht van het poseerverlies in modellen getraind voor het schatten van de pose, wat de nadruk op het nauwkeurig voorspellen van poseerpunten beïnvloedt.
kobj 2.0 Gewicht van het verlies aan objectheid van sleutelpunten in modellen voor het schatten van de houding, waarbij de betrouwbaarheid van de detectie in evenwicht wordt gebracht met de nauwkeurigheid van de houding.
label_smoothing 0.0 Past label smoothing toe, waarbij harde labels worden verzacht tot een mix van het doellabel en een uniforme verdeling over labels, wat generalisatie kan verbeteren.
nbs 64 Nominale partijgrootte voor normalisatie van verlies.
overlap_mask True Bepaalt of segmentatiemaskers moeten overlappen tijdens training, van toepassing bij segmentatietaken voor instanties.
mask_ratio 4 Downsample-verhouding voor segmentatiemaskers, die van invloed is op de resolutie van maskers die tijdens de training worden gebruikt.
dropout 0.0 Uitvalpercentage voor regularisatie bij classificatietaken, om overaanpassing te voorkomen door willekeurig eenheden weg te laten tijdens de training.
val True Maakt validatie tijdens training mogelijk, zodat de prestaties van het model periodiek kunnen worden geëvalueerd op een aparte dataset.
plots False Genereert en bewaart grafieken van trainings- en validatiegegevens, evenals voorspellingsvoorbeelden, om visueel inzicht te geven in de prestaties van het model en de leervorderingen.

Augmentatie-instellingen en hyperparameters

Augmentatietechnieken zijn essentieel voor het verbeteren van de robuustheid en prestaties van YOLO modellen door variabiliteit te introduceren in de trainingsgegevens, waardoor het model beter kan generaliseren naar ongeziene gegevens. De volgende tabel beschrijft het doel en het effect van elk augmentatieargument:

Argument Type Standaard Bereik Beschrijving
hsv_h float 0.015 0.0 - 1.0 Past de tint van de afbeelding aan met een fractie van het kleurenwiel, waardoor kleurvariabiliteit wordt geïntroduceerd. Helpt het model te veralgemenen onder verschillende lichtomstandigheden.
hsv_s float 0.7 0.0 - 1.0 Verandert de verzadiging van de afbeelding met een fractie, waardoor de intensiteit van kleuren wordt beïnvloed. Nuttig voor het simuleren van verschillende omgevingsomstandigheden.
hsv_v float 0.4 0.0 - 1.0 Wijzigt de waarde (helderheid) van de afbeelding met een fractie, waardoor het model goed presteert onder verschillende lichtomstandigheden.
degrees float 0.0 -180 - +180 Roteert de afbeelding willekeurig binnen het opgegeven gradenbereik, waardoor het model objecten met verschillende oriëntaties beter kan herkennen.
translate float 0.1 0.0 - 1.0 Vertaalt het beeld horizontaal en verticaal met een fractie van de beeldgrootte, wat helpt bij het leren om gedeeltelijk zichtbare objecten te detecteren.
scale float 0.5 >=0.0 Schaalt het beeld met een versterkingsfactor, waardoor objecten op verschillende afstanden van de camera worden gesimuleerd.
shear float 0.0 -180 - +180 Snijdt het beeld in een bepaalde mate, waardoor het effect wordt nagebootst van objecten die vanuit verschillende hoeken worden bekeken.
perspective float 0.0 0.0 - 0.001 Past een willekeurige perspectieftransformatie toe op de afbeelding, waardoor het model objecten in de 3D-ruimte beter kan begrijpen.
flipud float 0.0 0.0 - 1.0 Draai de afbeelding om met de opgegeven waarschijnlijkheid, waardoor de gegevensvariabiliteit toeneemt zonder de kenmerken van het object aan te tasten.
fliplr float 0.5 0.0 - 1.0 Spiegelt de afbeelding van links naar rechts met de opgegeven waarschijnlijkheid, handig voor het leren van symmetrische objecten en het vergroten van de datasetdiversiteit.
bgr float 0.0 0.0 - 1.0 Wisselt de afbeeldingskanalen om van RGB naar BGR met de opgegeven waarschijnlijkheid, handig om de robuustheid voor onjuiste kanaalvolgorde te vergroten.
mosaic float 1.0 0.0 - 1.0 Combineert vier trainingsafbeeldingen in één, waarbij verschillende scènecomposities en objectinteracties worden gesimuleerd. Zeer effectief voor het begrijpen van complexe scènes.
mixup float 0.0 0.0 - 1.0 Mengt twee afbeeldingen en hun labels, waardoor een samengesteld beeld ontstaat. Verbetert het vermogen van het model om te generaliseren door labelruis en visuele variabiliteit te introduceren.
copy_paste float 0.0 0.0 - 1.0 Kopieert objecten van een afbeelding en plakt ze op een andere afbeelding, handig voor het vergroten van objectinstanties en het leren van object occlusie.
auto_augment str randaugment - Past automatisch een vooraf gedefinieerd augmentatiebeleid toe (randaugment, autoaugment, augmix), die optimaliseert voor classificatietaken door de visuele kenmerken te diversifiëren.
erasing float 0.4 0.0 - 0.9 Wist willekeurig een deel van de afbeelding tijdens de classificatietraining, zodat het model zich concentreert op minder voor de hand liggende kenmerken voor herkenning.
crop_fraction float 1.0 0.1 - 1.0 Verkleint de classificatieafbeelding tot een fractie van de grootte om de centrale kenmerken te benadrukken en zich aan te passen aan de schaal van het object, waardoor achtergrondafleidingen worden verminderd.

Deze instellingen kunnen worden aangepast aan de specifieke eisen van de dataset en taak. Experimenteren met verschillende waarden kan helpen bij het vinden van de optimale augmentatiestrategie die leidt tot de beste modelprestaties.

Info

Zie het referentiegedeelte voor meer informatie over trainingsuitbreidingen.

Loggen

Bij het trainen van een YOLOv8 model kan het waardevol zijn om de prestaties van het model in de loop van de tijd bij te houden. Dit is waar loggen om de hoek komt kijken. Ultralytics YOLO biedt ondersteuning voor drie soorten loggers - Comet, ClearML, en TensorBoard.

Om een logger te gebruiken, selecteer je deze uit het dropdown menu in het bovenstaande codefragment en voer je deze uit. De gekozen logger wordt geïnstalleerd en geïnitialiseerd.

Comet

Comet is een platform waarmee datawetenschappers en ontwikkelaars experimenten en modellen kunnen volgen, vergelijken, verklaren en optimaliseren. Het biedt functionaliteiten zoals real-time metrieken, code diffs en hyperparameters bijhouden.

Om Comet te gebruiken:

Voorbeeld

# pip install comet_ml
import comet_ml

comet_ml.init()

Vergeet niet om je aan te melden bij je Comet account op hun website en je API-sleutel te krijgen. Deze moet je toevoegen aan je omgevingsvariabelen of je script om je experimenten te loggen.

ClearML

ClearML is een open-source platform dat het bijhouden van experimenten automatiseert en helpt bij het efficiënt delen van bronnen. Het is ontworpen om teams te helpen hun ML werk efficiënter te beheren, uit te voeren en te reproduceren.

Om ClearML te gebruiken:

Voorbeeld

# pip install clearml
import clearml

clearml.browser_login()

Na het uitvoeren van dit script moet je je aanmelden bij je ClearML account op de browser en je sessie verifiëren.

TensorBoard

TensorBoard is een visualisatietoolkit voor TensorFlow. Hiermee kun je je TensorFlow grafiek visualiseren, kwantitatieve gegevens over de uitvoering van je grafiek plotten en aanvullende gegevens tonen, zoals afbeeldingen die er doorheen gaan.

TensorBoard gebruiken in Google Colab:

Voorbeeld

load_ext tensorboard
tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

Voer de onderstaande opdracht uit om TensorBoard lokaal te gebruiken en bekijk de resultaten op http://localhost:6006/.

Voorbeeld

tensorboard --logdir ultralytics/runs  # replace with 'runs' directory

Hiermee wordt TensorBoard geladen en naar de map geleid waar je trainingslogs zijn opgeslagen.

Na het instellen van je logger kun je doorgaan met je modeltraining. Alle trainingsgegevens worden automatisch gelogd in het door jou gekozen platform en je kunt deze logbestanden raadplegen om de prestaties van je model in de loop van de tijd te volgen, verschillende modellen te vergelijken en gebieden te identificeren die voor verbetering vatbaar zijn.



Aangemaakt 2023-11-12, Bijgewerkt 2024-04-23
Auteurs: dependabot[bot] (1), glenn-jocher (10), fcakyon (1), Laughing-q (2), Burhan-Q (1)

Reacties