Modeltraining met Ultralytics YOLO
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.
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
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
Door resume=True
de 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 False
de 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:
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:
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
Voer de onderstaande opdracht uit om TensorBoard lokaal te gebruiken en bekijk de resultaten op http://localhost:6006/.
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)