Efficiënt afstemmen van hyperparameters met Ray Tune en YOLOv8
Het afstemmen van hyperparameters is van vitaal belang voor het bereiken van topprestaties van het model door de optimale set hyperparameters te ontdekken. Hiervoor worden proeven uitgevoerd met verschillende hyperparameters en wordt de prestatie van elke proef geëvalueerd.
Versnel Tuning met Ultralytics YOLOv8 en Ray Tune
Ultralytics YOLOv8 bevat Ray Tune voor hyperparameter tuning, waardoor de optimalisatie van YOLOv8 model hyperparameters wordt gestroomlijnd. Met Ray Tune kun je gebruik maken van geavanceerde zoekstrategieën, parallellisme en vroegtijdig stoppen om het afstemmingsproces te versnellen.
Ray Tune
Ray Tune is een hyperparameter tuning bibliotheek ontworpen voor efficiëntie en flexibiliteit. Het ondersteunt verschillende zoekstrategieën, parallellisme en vroege stopstrategieën, en integreert naadloos met populaire machine learning frameworks, waaronder Ultralytics YOLOv8 .
Integratie met Weights & Biases
YOLOv8 maakt ook optionele integratie met Weights & Biases voor het bewaken van het tuningsproces.
Installatie
Voer het volgende uit om de vereiste pakketten te installeren:
Installatie
Gebruik
Gebruik
tune()
Methode Parameters
De tune()
methode in YOLOv8 biedt een eenvoudig te gebruiken interface voor het afstemmen van hyperparameters met Ray Tune. Het accepteert verschillende argumenten waarmee je het tuningsproces kunt aanpassen. Hieronder volgt een gedetailleerde uitleg van elke parameter:
Parameter | Type | Beschrijving | Standaardwaarde |
---|---|---|---|
data |
str |
Het configuratiebestand van de dataset (in YAML formaat) om de tuner op uit te voeren. Dit bestand moet de trainings- en validatiegegevenspaden specificeren, evenals andere datasetspecifieke instellingen. | |
space |
dict, optional |
Een woordenboek dat de hyperparameter zoekruimte voor Ray Tune definieert. Elke sleutel correspondeert met een hyperparameter naam, en de waarde specificeert het bereik van waarden om te onderzoeken tijdens het afstemmen. Indien niet opgegeven, gebruikt YOLOv8 een standaard zoekruimte met verschillende hyperparameters. | |
grace_period |
int, optional |
De respijtperiode in epochs voor de ASHA planner in Ray Tune. De planner zal geen enkele proef beëindigen voordat dit aantal epochs is bereikt, zodat het model een minimum aan training heeft voordat het een beslissing neemt om vroegtijdig te stoppen. | 10 |
gpu_per_trial |
int, optional |
Het aantal GPU's dat per proef moet worden toegewezen tijdens tuning. Dit helpt bij het beheren van het GPU-gebruik, vooral in multi-GPU omgevingen. Als dit niet wordt opgegeven, gebruikt de tuner alle beschikbare GPU's. | Geen |
iterations |
int, optional |
Het maximale aantal proeven dat wordt uitgevoerd tijdens het afstemmen. Deze parameter helpt om het totale aantal geteste hyperparametercombinaties te regelen, zodat het afstemproces niet oneindig doorloopt. | 10 |
**train_args |
dict, optional |
Extra argumenten om door te geven aan de train() methode tijdens het afstemmen. Deze argumenten kunnen instellingen bevatten zoals het aantal trainingsepochs, de batchgrootte en andere trainingsspecifieke configuraties. |
{} |
Door deze parameters aan te passen, kun je het hyperparameter optimalisatieproces afstemmen op je specifieke behoeften en beschikbare rekenkracht.
Standaard zoekruimte Beschrijving
De volgende tabel toont de standaard zoekruimteparameters voor hyperparameter tuning in YOLOv8 met Ray Tune. Elke parameter heeft een specifiek waardebereik gedefinieerd door tune.uniform()
.
Parameter | Waarde Bereik | Beschrijving |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Initiële leersnelheid |
lrf |
tune.uniform(0.01, 1.0) |
Factor voor uiteindelijke leersnelheid |
momentum |
tune.uniform(0.6, 0.98) |
Momentum |
weight_decay |
tune.uniform(0.0, 0.001) |
Gewichtsverlies |
warmup_epochs |
tune.uniform(0.0, 5.0) |
Opwarmingsepochs |
warmup_momentum |
tune.uniform(0.0, 0.95) |
Opwarm momentum |
box |
tune.uniform(0.02, 0.2) |
Gewicht verliezen |
cls |
tune.uniform(0.2, 4.0) |
Gewichtsverlies klasse |
hsv_h |
tune.uniform(0.0, 0.1) |
Tintvergrotingsbereik |
hsv_s |
tune.uniform(0.0, 0.9) |
Bereik verzadigingsvergroting |
hsv_v |
tune.uniform(0.0, 0.9) |
Waarde (helderheid) Vergrotingsbereik |
degrees |
tune.uniform(0.0, 45.0) |
Rotatievergrotingsbereik (graden) |
translate |
tune.uniform(0.0, 0.9) |
Vertaalverbreding bereik |
scale |
tune.uniform(0.0, 0.9) |
Schaalvergrotingsbereik |
shear |
tune.uniform(0.0, 10.0) |
Schuifvergrotingsbereik (graden) |
perspective |
tune.uniform(0.0, 0.001) |
Perspectiefvergrotingsbereik |
flipud |
tune.uniform(0.0, 1.0) |
Verticale flip-vergrotingskans |
fliplr |
tune.uniform(0.0, 1.0) |
Horizontale flip-vergrotingskans |
mosaic |
tune.uniform(0.0, 1.0) |
Waarschijnlijkheid van mozaïekvergroting |
mixup |
tune.uniform(0.0, 1.0) |
Mengselvergrotingskans |
copy_paste |
tune.uniform(0.0, 1.0) |
Copy-paste vergroting waarschijnlijkheid |
Voorbeeld aangepaste zoekruimte
In dit voorbeeld laten we zien hoe je een aangepaste zoekruimte kunt gebruiken voor het afstemmen van hyperparameters met Ray Tune en YOLOv8. Door een aangepaste zoekruimte op te geven, kun je het afstemmingsproces richten op specifieke hyperparameters die van belang zijn.
Gebruik
In het bovenstaande codefragment maken we een YOLO model met de "yolov8n.pt" voorgetrainde gewichten. Vervolgens roepen we de tune()
methode, waarbij we de configuratie van de dataset specificeren met "coco8.yaml". We bieden een aangepaste zoekruimte voor de initiële leersnelheid lr0
met behulp van een woordenboek met de sleutel "lr0" en de waarde tune.uniform(1e-5, 1e-1)
. Tot slot geven we extra trainingsargumenten, zoals het aantal epochs, direct door aan de afstemmethode als epochs=50
.
Resultaten van Ray Tune verwerken
Na het uitvoeren van een hyperparameter tuning experiment met Ray Tune, wil je misschien verschillende analyses uitvoeren op de verkregen resultaten. Deze handleiding neemt je mee door veelgebruikte workflows voor het verwerken en analyseren van deze resultaten.
Resultaten van afstemexperimenten laden vanuit een directory
Na het afstemexperiment met tuner.fit()
kun je de resultaten uit een map laden. Dit is handig, vooral als je de analyse uitvoert nadat het initiële trainingsscript is afgesloten.
experiment_path = f"{storage_path}/{exp_name}"
print(f"Loading results from {experiment_path}...")
restored_tuner = tune.Tuner.restore(experiment_path, trainable=train_mnist)
result_grid = restored_tuner.get_results()
Basale analyse op experimentniveau
Een overzicht krijgen van hoe de proeven hebben gepresteerd. Je kunt snel controleren of er fouten zijn gemaakt tijdens de proeven.
Basisanalyse op proefniveau
Toegang tot individuele trial hyperparameter configuraties en de laatst gerapporteerde metriek.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")
De hele geschiedenis van gerapporteerde statistieken voor een proef plotten
Je kunt de geschiedenis van de gerapporteerde statistieken voor elk onderzoek uitzetten om te zien hoe de statistieken zich in de loop van de tijd ontwikkelden.
import matplotlib.pyplot as plt
for result in result_grid:
plt.plot(result.metrics_dataframe["training_iteration"], result.metrics_dataframe["mean_accuracy"], label=f"Trial {i}")
plt.xlabel('Training Iterations')
plt.ylabel('Mean Accuracy')
plt.legend()
plt.show()
Samenvatting
In deze documentatie hebben we veelvoorkomende workflows behandeld om de resultaten van experimenten uitgevoerd met Ray Tune te analyseren met Ultralytics. De belangrijkste stappen zijn het laden van de experimentresultaten uit een map, het uitvoeren van basisanalyses op experiment- en proefniveau en het plotten van metrieken.
Kijk verder op de pagina Resultaten analyseren van Ray Tune om het meeste uit je hyperparameter tuning experimenten te halen.