Overslaan naar inhoud

Best practices voor machine learning en tips voor modeltraining

Inleiding

Een van de belangrijkste stappen bij het werken aan een computervisieproject is modeltraining. Voordat je aan deze stap begint, moet je je doelen definiƫren en je gegevens verzamelen en annoteren. Nadat je de gegevens hebt voorbewerkt om er zeker van te zijn dat ze schoon en consistent zijn, kun je verder gaan met het trainen van je model.

Wat is modeltraining? Modeltraining is het proces waarbij je je model leert visuele patronen te herkennen en voorspellingen te doen op basis van je gegevens. Het heeft een directe invloed op de prestaties en nauwkeurigheid van je applicatie. In deze gids behandelen we best practices, optimalisatietechnieken en tips om problemen op te lossen om je computervisiemodellen effectief te trainen.

Een Machine Learning-model trainen

Een computer vision-model wordt getraind door de interne parameters aan te passen om fouten tot een minimum te beperken. In eerste instantie krijgt het model een grote set gelabelde afbeeldingen. Het doet voorspellingen over wat er in deze afbeeldingen staat en de voorspellingen worden vergeleken met de werkelijke labels of inhoud om fouten te berekenen. Deze fouten laten zien hoe ver de voorspellingen van het model afwijken van de werkelijke waarden.

Tijdens de training doet het model iteratief voorspellingen, berekent het fouten en werkt het de parameters bij via een proces dat backpropagation wordt genoemd. In dit proces past het model zijn interne parameters aan (weights and biases) om het aantal fouten te verminderen. Door deze cyclus vele malen te herhalen, verbetert het model geleidelijk de nauwkeurigheid. Na verloop van tijd leert het complexe patronen herkennen, zoals vormen, kleuren en texturen.

Wat is Backpropagation?

Dit leerproces maakt het voor het computervisiemodel mogelijk om verschillende taken uit te voeren, waaronder objectdetectie, segmentatie van instanties en beeldclassificatie. Het uiteindelijke doel is om een model te maken dat zijn leerproces kan generaliseren naar nieuwe, ongeziene beelden, zodat het nauwkeurig visuele gegevens in echte toepassingen kan begrijpen.

Nu we weten wat er achter de schermen gebeurt wanneer we een model trainen, laten we eens kijken naar aandachtspunten bij het trainen van een model.

Training over grote datasets

Er zijn een paar verschillende aspecten waar je aan moet denken als je van plan bent om een grote dataset te gebruiken om een model te trainen. Je kunt bijvoorbeeld de batchgrootte aanpassen, het gebruik van GPU regelen, kiezen voor multischaal training, enz. Laten we elk van deze opties in detail bekijken.

Partijgrootte en GPU gebruik

Bij het trainen van modellen op grote datasets is efficiƫnt gebruik van je GPU van groot belang. Batchgrootte is een belangrijke factor. Dit is het aantal gegevensmonsters dat een model voor machinaal leren verwerkt in een enkele trainingsiteratie. Als je de maximale batchgrootte gebruikt die door je GPU wordt ondersteund, kun je de mogelijkheden volledig benutten en de tijd die het trainen van het model in beslag neemt, beperken. Je wilt echter voorkomen dat het geheugen van GPU opraakt. Als je geheugenfouten tegenkomt, verklein dan de batchgrootte stapsgewijs totdat het model soepel traint.

Met betrekking tot YOLOv8, kunt u de batch_size parameter in de trainingsconfiguratie overeenkomen met je GPU capaciteit. Ook het instellen van batch=-1 in je trainingsscript zal automatisch de batchgrootte bepalen die efficiƫnt verwerkt kan worden op basis van de mogelijkheden van je apparaat. Door de batchgrootte nauwkeurig af te stellen, kun je je GPU bronnen optimaal benutten en het algehele trainingsproces verbeteren.

Subset Training

Subsettraining is een slimme strategie waarbij uw model wordt getraind op een kleinere set gegevens die de grotere gegevensset vertegenwoordigt. Het kan tijd en middelen besparen, vooral tijdens de eerste modelontwikkeling en het testen. Als je weinig tijd hebt of experimenteert met verschillende modelconfiguraties, is subsettraining een goede optie.

Als het gaat om YOLOv8, kunt u eenvoudig subsettraining implementeren met behulp van de fraction parameter. Met deze parameter kunt u opgeven welk deel van uw gegevensset moet worden gebruikt voor training. Bijvoorbeeld, het instellen van fraction=0.1 traint uw model op 10% van de gegevens. U kunt deze techniek gebruiken voor snelle iteraties en het afstemmen van uw model voordat u zich vastlegt op het trainen van een model met behulp van een volledige gegevensset. Subsettraining helpt u snel vooruitgang te boeken en potentiƫle problemen in een vroeg stadium te identificeren.

Multi-schaal training

Multischaal training is een techniek die het vermogen van je model om te generaliseren verbetert door het te trainen op afbeeldingen van verschillende groottes. Je model kan objecten op verschillende schalen en afstanden leren detecteren en robuuster worden.

Als je bijvoorbeeld YOLOv8 traint, kun je multischaaltraining inschakelen door de scale parameter. Deze parameter past de grootte van trainingsbeelden aan met een bepaalde factor, waardoor objecten op verschillende afstanden worden gesimuleerd. Bijvoorbeeld, het instellen van scale=0.5 verkleint de afbeeldingsgrootte met de helft, terwijl scale=2.0 zal het verdubbelen. Door deze parameter te configureren, kan uw model verschillende afbeeldingsschalen ervaren en de detectiemogelijkheden voor verschillende objectgrootten en scenario's verbeteren.

Caching

Caching is een belangrijke techniek om de efficiƫntie van het trainen van machine learning modellen te verbeteren. Door voorbewerkte afbeeldingen in het geheugen op te slaan, vermindert caching de tijd die de GPU besteedt aan het wachten op gegevens die van de schijf moeten worden geladen. Het model kan continu gegevens ontvangen zonder vertragingen door I/O-bewerkingen op de schijf.

Caching kan worden gecontroleerd tijdens het trainen YOLOv8 met behulp van de cache parameter:

  • cache=True: Slaat datasetafbeeldingen op in het RAM-geheugen, wat de hoogste toegangssnelheid biedt, maar ten koste gaat van een hoger geheugengebruik.
  • cache='disk': Slaat de afbeeldingen op schijf op, langzamer dan RAM, maar sneller dan het laden van nieuwe gegevens elke keer.
  • cache=False: Schakelt caching uit en vertrouwt volledig op schijf-I/O, wat de langzaamste optie is.

Gemengde precisietraining

Gemengde precisietraining maakt gebruik van zowel 16-bits (FP16) als 32-bits (FP32) drijvende-kommatypen. De sterke punten van zowel FP16 als FP32 worden benut door FP16 te gebruiken voor snellere berekeningen en FP32 om precisie te behouden waar nodig. De meeste bewerkingen van het neurale netwerk worden uitgevoerd in FP16 om te profiteren van snellere berekeningen en een lager geheugengebruik. Er wordt echter een masterkopie van de gewichten van het model bewaard in FP32 om de nauwkeurigheid te garanderen tijdens de stappen voor het bijwerken van het gewicht. U kunt grotere modellen of grotere batchgroottes verwerken binnen dezelfde hardwarebeperkingen.

Gemengde Precisietraining Overzicht

Als u gemengde precisietraining wilt implementeren, moet u uw trainingsscripts aanpassen en ervoor zorgen dat uw hardware (zoals GPU's) dit ondersteunt. Veel moderne deep learning-frameworks, zoals Tensorflow, bieden ingebouwde ondersteuning voor gemengde precisie.

Gemengde precisietraining is eenvoudig bij het werken met YOLOv8. U kunt gebruik maken van de amp markeren in uw trainingsconfiguratie. Montuur amp=True maakt Automatic Mixed Precision (AMP)-training mogelijk. Gemengde precisietraining is een eenvoudige maar effectieve manier om uw modeltrainingsproces te optimaliseren.

Voorgetrainde gewichten

Het gebruik van voorgetrainde gewichten is een slimme manier om het trainingsproces van je model te versnellen. Voorgetrainde gewichten zijn afkomstig van modellen die al getraind zijn op grote datasets, waardoor je model een voorsprong heeft. Transfer learning past voorgetrainde modellen aan op nieuwe, gerelateerde taken. Het verfijnen van een voorgetraind model houdt in dat je begint met deze gewichten en dan verder traint op jouw specifieke dataset. Deze manier van trainen resulteert in snellere trainingstijden en vaak betere prestaties omdat het model begint met een goed begrip van de basiskenmerken.

De pretrained Parameter maakt transfer learning eenvoudig met YOLOv8. Montuur pretrained=True gebruikt standaard vooraf getrainde gewichten, of u kunt een pad opgeven naar een aangepast, vooraf getraind model. Het gebruik van vooraf getrainde gewichten en transfer learning vergroot effectief de mogelijkheden van uw model en verlaagt de trainingskosten.

Andere technieken waarmee u rekening moet houden bij het verwerken van een grote gegevensset

Er zijn nog een aantal andere technieken waarmee u rekening moet houden bij het verwerken van een grote dataset:

  • Leertariefplanners: Het implementeren van leersnelheidsschema's past de leersnelheid dynamisch aan tijdens de training. Een goed afgestelde leersnelheid kan voorkomen dat het model doorschiet naar minima en de stabiliteit verbeteren. Bij het trainen van YOLOv8 is de lrf parameter helpt bij het beheren van de planning van het leertempo door het uiteindelijke leertempo in te stellen als een fractie van het initiĆ«le tarief.
  • Gedistribueerde training: Voor het verwerken van grote datasets kan gedistribueerde training een spelbreker zijn. Je kunt de trainingstijd verkorten door de trainingsbelasting te verdelen over meerdere GPU's of machines.

Het aantal tijdperken om voor te trainen

Bij het trainen van een model verwijst een epoch naar Ć©Ć©n volledige doorgang door de gehele trainingsgegevensset. Tijdens een epoch verwerkt het model elk voorbeeld in de trainingsset Ć©Ć©n keer en werkt het de parameters bij op basis van het leeralgoritme. Er zijn meestal meerdere epochs nodig om het model in staat te stellen zijn parameters in de loop van de tijd te leren en te verfijnen.

Een veel voorkomende vraag die naar voren komt, is hoe het aantal epochs moet worden bepaald waarvoor het model moet worden getraind. Een goed uitgangspunt is 300 epochs. Als het model vroeg te veel past, kunt u het aantal epochs verminderen. Als overfitting na 300 epochs niet optreedt, kunt u de training uitbreiden tot 600, 1200 of meer epochs.

Het ideale aantal epochs kan echter variƫren op basis van de grootte van uw dataset en projectdoelen. Grotere datasets hebben mogelijk meer epochs nodig om het model effectief te laten leren, terwijl kleinere datasets mogelijk minder epochs nodig hebben om overfitting te voorkomen. Met betrekking tot YOLOv8, kunt u de epochs parameter in uw trainingsscript.

Vroeg stoppen

Vroeg stoppen is een waardevolle techniek voor het optimaliseren van modeltraining. Door de validatieprestaties te bewaken, kunt u de training stopzetten zodra het model niet meer verbetert. U kunt rekenkracht besparen en overfitting voorkomen.

Het proces bestaat uit het instellen van een geduldparameter die bepaalt hoeveel epochs er moeten worden gewacht op een verbetering in de validatiemeetgegevens voordat de training wordt gestopt. Als de prestaties van het model niet verbeteren binnen deze epochs, wordt de training gestopt om verspilling van tijd en middelen te voorkomen.

Overzicht vroegtijdig stoppen

Voor YOLOv8, kunt u vroegtijdig stoppen inschakelen door de parameter geduld in uw trainingsconfiguratie in te stellen. Bijvoorbeeld patience=5 betekent dat de training stopt als er geen verbetering is in de validatiestatistieken gedurende 5 opeenvolgende epochs. Het gebruik van deze methode zorgt ervoor dat het trainingsproces efficiƫnt blijft en optimale prestaties worden bereikt zonder overmatige berekeningen.

Kiezen tussen cloud- en lokale training

Er zijn twee opties voor het trainen van uw model: cloudtraining en lokale training.

Cloud training biedt schaalbaarheid en krachtige hardware en is ideaal voor het verwerken van grote datasets en complexe modellen. Platformen zoals Google Cloud, AWS en Azure bieden on-demand toegang tot krachtige GPU's en TPU's, waardoor de trainingstijd wordt versneld en experimenten met grotere modellen mogelijk worden. Training in de cloud kan echter duur zijn, vooral voor langere periodes, en gegevensoverdracht kan de kosten en latentie verhogen.

Lokale training biedt meer controle en maatwerk, zodat u uw omgeving kunt afstemmen op specifieke behoeften en doorlopende cloudkosten kunt vermijden. Het kan voordeliger zijn voor langetermijnprojecten en omdat uw gegevens on-premises blijven, is het veiliger. Lokale hardware kan echter beperkte middelen hebben en onderhoud vereisen, wat kan leiden tot langere trainingstijden voor grote modellen.

Een optimizer selecteren

Een optimizer is een algoritme dat de gewichten van uw neurale netwerk aanpast om de verliesfunctie te minimaliseren, die meet hoe goed het model presteert. In eenvoudiger bewoordingen helpt de optimizer het model te leren door de parameters aan te passen om fouten te verminderen. Het kiezen van de juiste optimizer heeft direct invloed op hoe snel en nauwkeurig het model leert.

U kunt ook de optimalisatieparameters verfijnen om de prestaties van het model te verbeteren. Door de leersnelheid aan te passen, wordt de grootte van de stappen ingesteld bij het bijwerken van parameters. Voor stabiliteit kunt u beginnen met een gematigd leertempo en dit in de loop van de tijd geleidelijk verlagen om het leren op lange termijn te verbeteren. Bovendien bepaalt het instellen van het momentum hoeveel invloed eerdere updates hebben op de huidige updates. Een gebruikelijke waarde voor momentum ligt rond de 0,9. Het zorgt over het algemeen voor een goede balans.

Gemeenschappelijke optimizers

Verschillende optimizers hebben verschillende sterke en zwakke punten. Laten we een blik werpen op een paar veelvoorkomende optimizers.

  • SGD (Stochastic Gradient Descent):

    • Hiermee worden modelparameters bijgewerkt met behulp van de gradiĆ«nt van de verliesfunctie ten opzichte van de parameters.
    • Eenvoudig en efficiĆ«nt, maar kan traag convergeren en kan vast komen te zitten in lokale minima.
  • Adam (adaptieve momentschatting):

    • Combineert de voordelen van zowel SGD met momentum als RMSProp.
    • Hiermee past u de leersnelheid voor elke parameter aan op basis van schattingen van het eerste en tweede moment van de gradiĆ«nten.
    • Zeer geschikt voor gegevens met veel ruis en schaarse gradiĆ«nten.
    • EfficiĆ«nt en vereist over het algemeen minder afstemming, waardoor het een aanbevolen optimizer is voor YOLOv8.
  • RMSProp (Root Mean Square Propagation):

    • Hiermee past u de leersnelheid voor elke parameter aan door de gradiĆ«nt te delen door een voortschrijdend gemiddelde van de grootheden van recente gradiĆ«nten.
    • Helpt bij het aanpakken van het probleem van de verdwijnende gradiĆ«nt en is effectief voor terugkerende neurale netwerken.

Voor YOLOv8de optimizer parameter kunt u kiezen uit verschillende optimizers, waaronder SGD, Adam, AdamW, NAdam, RAdam en RMSProp, of u kunt deze instellen op auto voor automatische selectie op basis van modelconfiguratie.

Verbinding maken met de gemeenschap

Deel uitmaken van een gemeenschap van computervisie-enthousiastelingen kan u helpen problemen op te lossen en sneller te leren. Hier zijn enkele manieren om contact te maken, hulp te krijgen en ideeƫn uit te wisselen.

Hulpbronnen van de Gemeenschap

  • GitHub problemen: Bezoek de YOLOv8 GitHub repository en gebruik de Issues tab om vragen te stellen, bugs te melden en nieuwe functies voor te stellen. De gemeenschap en beheerders zijn erg actief en staan klaar om te helpen.
  • Ultralytics Discord-server: Word lid van de Ultralytics Discord-server om te chatten met andere gebruikers en ontwikkelaars, ondersteuning te krijgen en je ervaringen te delen.

Officiƫle documentatie

  • Ultralytics YOLOv8 Documentatie: Bekijk de officiĆ«le YOLOv8 documentatie voor gedetailleerde handleidingen en handige tips voor verschillende computer vision projecten.

Door deze bronnen te gebruiken, kunt u uitdagingen oplossen en op de hoogte blijven van de nieuwste trends en praktijken in de computer vision-gemeenschap.

Kernpunten

Het trainen van computer vision-modellen omvat het volgen van goede praktijken, het optimaliseren van uw strategieƫn en het oplossen van problemen wanneer ze zich voordoen. Technieken zoals het aanpassen van batchgroottes, gemengde precisietraining en beginnen met vooraf getrainde gewichten kunnen ervoor zorgen dat uw modellen beter werken en sneller trainen. Methoden zoals subsettraining en vroegtijdig stoppen helpen u tijd en middelen te besparen. Door in contact te blijven met de community en op de hoogte te blijven van nieuwe trends, kun je je vaardigheden op het gebied van modeltraining blijven verbeteren.

FAQ

Hoe kan ik het gebruik van GPU verbeteren als ik een grote dataset train met Ultralytics YOLO ?

Om het gebruik van GPU te verbeteren, stel je de batch_size parameter in je trainingsconfiguratie op de maximale grootte die wordt ondersteund door je GPU. Dit zorgt ervoor dat je de mogelijkheden van de GPU volledig benut, waardoor de trainingstijd korter wordt. Als je geheugenfouten tegenkomt, verklein dan de batchgrootte stapsgewijs totdat de training soepel verloopt. Voor YOLOv8 kun je het volgende instellen batch=-1 in je trainingsscript zal automatisch de optimale batchgrootte bepalen voor efficiƫnte verwerking. Raadpleeg voor meer informatie de trainingsconfiguratie.

Wat is gemengde precisietraining en hoe schakel ik die in op YOLOv8?

Bij gemengde precisietraining worden zowel 16-bits (FP16) als 32-bits (FP32) floating-point types gebruikt om een balans te vinden tussen rekensnelheid en precisie. Deze aanpak versnelt de training en vermindert het geheugengebruik zonder de nauwkeurigheid van het model op te offeren. Om gemengde precisietraining in YOLOv8 in te schakelen, stel je de optie amp parameter naar True in je trainingsconfiguratie. Dit activeert Automatische Gemengde Precisie (AMP) training. Voor meer details over deze optimalisatietechniek, zie de trainingsconfiguratie.

Hoe verbetert multischaaltraining de prestaties van YOLOv8 modellen?

Multischaal training verbetert de prestaties van het model door te trainen op afbeeldingen van verschillende groottes, waardoor het model beter kan generaliseren over verschillende schalen en afstanden. In YOLOv8 kun je multischaaltraining inschakelen door de optie scale parameter in de trainingsconfiguratie. Bijvoorbeeld, scale=0.5 verkleint de afbeelding met de helft, terwijl scale=2.0 verdubbelt het. Deze techniek simuleert objecten op verschillende afstanden, waardoor het model robuuster wordt in verschillende scenario's. Bekijk voor instellingen en meer details de trainingsconfiguratie.

Hoe kan ik vooraf getrainde gewichten gebruiken om de training in YOLOv8 te versnellen?

Het gebruik van voorgetrainde gewichten kan de trainingstijd aanzienlijk verkorten en de prestaties van het model verbeteren door uit te gaan van een model dat de basiskenmerken al begrijpt. In YOLOv8 kun je de pretrained parameter naar True of geef een pad op naar aangepaste voorgetrainde gewichten in je trainingsconfiguratie. Deze aanpak, bekend als transfer learning, maakt gebruik van kennis uit grote datasets om zich aan te passen aan je specifieke taak. Meer informatie over vooraf getrainde gewichten en hun voordelen hier.

Het aantal epochs verwijst naar de volledige passages door de trainingsdataset tijdens de modeltraining. Een typisch startpunt is 300 epochs. Als je model al vroeg te veel aanpast, kun je het aantal verminderen. Als overfitting niet wordt waargenomen, kun je de training uitbreiden tot 600, 1200 of meer epochs. Om dit in te stellen in YOLOv8, gebruik je de epochs parameter in je trainingsscript. Voor aanvullend advies over het bepalen van het ideale aantal epochs, raadpleeg je dit gedeelte over aantal epochs.



Aangemaakt 2024-06-26, Bijgewerkt 2024-07-05
Auteurs: glenn-jocher (3), Laughing-q (1), abirami-vina (1)

Reacties