Efficient Hyperparameter Tuning with Ray Tune and YOLO11
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΆΠΈΠ·Π½Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½Π° Π΄Π»Ρ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΏΡΡΠ΅ΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡΠ° Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΡΠΎ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ Π² ΡΠ΅Π±Ρ Π·Π°ΠΏΡΡΠΊ ΠΈΡΠΏΡΡΠ°Π½ΠΈΠΉ Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΈ ΠΎΡΠ΅Π½ΠΊΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΡΠΏΡΡΠ°Π½ΠΈΡ.
Accelerate Tuning with Ultralytics YOLO11 and Ray Tune
Ultralytics YOLO11 incorporates Ray Tune for hyperparameter tuning, streamlining the optimization of YOLO11 model hyperparameters. With Ray Tune, you can utilize advanced search strategies, parallelism, and early stopping to expedite the tuning process.
Π ΡΠΉ Π’ΡΡΠ½
Ray Tune is a hyperparameter tuning library designed for efficiency and flexibility. It supports various search strategies, parallelism, and early stopping strategies, and seamlessly integrates with popular machine learning frameworks, including Ultralytics YOLO11.
ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Weights & Biases
YOLO11 also allows optional integration with Weights & Biases for monitoring the tuning process.
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
Π§ΡΠΎΠ±Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ, Π²ΡΠΏΠΎΠ»Π½ΠΈ:
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
tune()
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π°
The tune()
method in YOLO11 provides an easy-to-use interface for hyperparameter tuning with Ray Tune. It accepts several arguments that allow you to customize the tuning process. Below is a detailed explanation of each parameter:
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | Π’ΠΈΠΏ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ |
---|---|---|---|
data |
str |
The dataset configuration file (in YAML format) to run the tuner on. This file should specify the training and validation data paths, as well as other dataset-specific settings. | |
space |
dict, optional |
A dictionary defining the hyperparameter search space for Ray Tune. Each key corresponds to a hyperparameter name, and the value specifies the range of values to explore during tuning. If not provided, YOLO11 uses a default search space with various hyperparameters. | |
grace_period |
int, optional |
The grace period in epochs for the ASHA scheduler in Ray Tune. The scheduler will not terminate any trial before this number of epochs, allowing the model to have some minimum training before making a decision on early stopping. | 10 |
gpu_per_trial |
int, optional |
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΠΎΠ΅ Π½ΡΠΆΠ½ΠΎ Π²ΡΠ΄Π΅Π»ΠΈΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΡΠΏΡΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ GPU , ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΌΡΠ»ΡΡΠΈGPU ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ. ΠΡΠ»ΠΈ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠ½Π΅Ρ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½ΡΠ΅ GPU. | ΠΠ΅Ρ |
iterations |
int, optional |
ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠΏΡΡΠ°Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. ΠΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠΉ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Π³Π°ΡΠ°Π½ΡΠΈΡΡΡ, ΡΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΈΠ΄ΡΠΈ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎ. | 10 |
**train_args |
dict, optional |
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π² train() method during tuning. These arguments can include settings like the number of training epochs, batch size, and other training-specific configurations. |
{} |
ΠΠ°ΡΡΡΠΎΠΈΠ² ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, ΡΡ ΡΠΌΠΎΠΆΠ΅ΡΡ ΡΠΎΡΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΏΠΎΠ΄ ΡΠ²ΠΎΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π½ΡΠΆΠ΄Ρ ΠΈ ΠΈΠΌΠ΅ΡΡΠΈΠ΅ΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ.
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
The following table lists the default search space parameters for hyperparameter tuning in YOLO11 with Ray Tune. Each parameter has a specific value range defined by tune.uniform()
.
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
Initial learning rate |
lrf |
tune.uniform(0.01, 1.0) |
ΠΡΠΎΠ³ΠΎΠ²ΡΠΉ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ |
momentum |
tune.uniform(0.6, 0.98) |
Momentum |
weight_decay |
tune.uniform(0.0, 0.001) |
Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΠ° |
warmup_epochs |
tune.uniform(0.0, 5.0) |
ΠΠΏΠΎΡ ΠΈ ΡΠ°Π·ΠΌΠΈΠ½ΠΊΠΈ |
warmup_momentum |
tune.uniform(0.0, 0.95) |
Π Π°Π·ΠΌΠΈΠ½ΠΎΡΠ½ΡΠΉ ΠΈΠΌΠΏΡΠ»ΡΡ |
box |
tune.uniform(0.02, 0.2) |
ΠΠΎΡΠΎΠ±ΠΊΠ° Π΄Π»Ρ ΠΏΠΎΡ ΡΠ΄Π΅Π½ΠΈΡ |
cls |
tune.uniform(0.2, 4.0) |
ΠΠ΅Ρ Π΄Π»Ρ ΠΏΠΎΡΠ΅ΡΠΈ ΠΊΠ»Π°ΡΡΠ° |
hsv_h |
tune.uniform(0.0, 0.1) |
ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΎΡΡΠ΅Π½ΠΊΠΎΠ² |
hsv_s |
tune.uniform(0.0, 0.9) |
ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Π½Π°ΡΡΡΠ΅Π½Π½ΠΎΡΡΠΈ |
hsv_v |
tune.uniform(0.0, 0.9) |
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ (ΡΡΠΊΠΎΡΡΡ) Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ |
degrees |
tune.uniform(0.0, 45.0) |
ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Π²ΡΠ°ΡΠ΅Π½ΠΈΡ (Π³ΡΠ°Π΄ΡΡΡ) |
translate |
tune.uniform(0.0, 0.9) |
ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° |
scale |
tune.uniform(0.0, 0.9) |
ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΡΠ°Π±Π° |
shear |
tune.uniform(0.0, 10.0) |
ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠ΄Π²ΠΈΠ³Π° (Π³ΡΠ°Π΄ΡΡΡ) |
perspective |
tune.uniform(0.0, 0.001) |
ΠΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ |
flipud |
tune.uniform(0.0, 1.0) |
ΠΠ΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΈΠΏΠ° |
fliplr |
tune.uniform(0.0, 1.0) |
ΠΠ΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»ΠΈΠΏΠ° |
mosaic |
tune.uniform(0.0, 1.0) |
ΠΠ΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ·Π°ΠΈΠΊΠΈ |
mixup |
tune.uniform(0.0, 1.0) |
ΠΠ΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΡΠΌΠ΅ΡΠΈΠ²Π°Π½ΠΈΡ |
copy_paste |
tune.uniform(0.0, 1.0) |
ΠΠ΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΏΠΈ-ΠΏΠ°ΡΡΠ° |
ΠΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ°
In this example, we demonstrate how to use a custom search space for hyperparameter tuning with Ray Tune and YOLO11. By providing a custom search space, you can focus the tuning process on specific hyperparameters of interest.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
In the code snippet above, we create a YOLO model with the "yolo11n.pt" pretrained weights. Then, we call the tune()
ΠΌΠ΅ΡΠΎΠ΄, ΡΠΊΠ°Π·Π°Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π°Π±ΠΎΡΠ° Π΄Π°Π½Π½ΡΡ
Ρ ΠΏΠΎΠΌΠΎΡΡΡ "coco8.yaml". ΠΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π΄Π»Ρ Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ lr0
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ»ΠΎΠ²Π°ΡΡ Ρ ΠΊΠ»ΡΡΠΎΠΌ "lr0" ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ tune.uniform(1e-5, 1e-1)
. ΠΠ°ΠΊΠΎΠ½Π΅Ρ, ΠΌΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΡΠ΅Π½ΠΈΡΠΎΠ²ΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΏΠΎΡ
, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΌΠ΅ΡΠΎΠ΄Ρ tune Π² Π²ΠΈΠ΄Π΅ epochs=50
.
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π»ΡΡΠ΅ΠΉ
ΠΠΎΡΠ»Π΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ° ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ray Tune ΡΠ΅Π±Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π°Π½Π°Π»ΠΈΠ·Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ². ΠΡΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΏΡΠΎΠ²Π΅Π΄Π΅Ρ ΡΠ΅Π±Ρ ΡΠ΅ΡΠ΅Π· ΠΎΠ±ΡΠΈΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΡΡΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ².
ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ² Ρ ΠΌΠ΅Π»ΠΎΠ΄ΠΈΡΠΌΠΈ ΠΈΠ· ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°
ΠΠΎΡΠ»Π΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ° ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Ρ tuner.fit()
Π’Ρ ΠΌΠΎΠΆΠ΅ΡΡ Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΈΠ· ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°. ΠΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π΅ΡΠ»ΠΈ ΡΡ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎΡΠ»Π΅ Π²ΡΡ
ΠΎΠ΄Π° ΠΈΠ· Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ°ΡΡΠ΅Π³ΠΎ ΡΠΊΡΠΈΠΏΡΠ°.
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()
ΠΠ°Π·ΠΎΠ²ΡΠΉ Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ²
ΠΠΎΠ»ΡΡΠΈ ΠΎΠ±Π·ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΠ»ΠΈ ΠΈΡΠΏΡΡΠ°Π½ΠΈΡ. Π’Ρ ΠΌΠΎΠΆΠ΅ΡΡ Π±ΡΡΡΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π½Π΅ Π±ΡΠ»ΠΎ Π»ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΡΡΠ°Π½ΠΈΠΉ.
ΠΠ°Π·ΠΎΠ²ΡΠΉ Π°Π½Π°Π»ΠΈΠ· Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΈΡΠΏΡΡΠ°Π½ΠΈΠΉ
ΠΠΎΠ»ΡΡΠΈ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΌ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΈΡΠΏΡΡΠ°Π½ΠΈΠΉ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΠΎΡΡΠ΅ΡΠ½ΡΠΌ ΠΌΠ΅ΡΡΠΈΠΊΠ°ΠΌ.
for i, result in enumerate(result_grid):
print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")
ΠΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π³ΡΠ°ΡΠΈΠΊΠ° Π²ΡΠ΅ΠΉ ΠΈΡΡΠΎΡΠΈΠΈ ΠΎΡΡΠ΅ΡΠ½ΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π΄Π»Ρ ΠΈΡΠΏΡΡΠ°Π½ΠΈΡ
Π’Ρ ΠΌΠΎΠΆΠ΅ΡΡ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΠΈΡΡΠΎΡΠΈΡ ΠΎΡΡΠ΅ΡΠ½ΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΡΠΏΡΡΠ°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠ΅Π½ΡΠ»ΠΈΡΡ Ρ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ.
import matplotlib.pyplot as plt
for i, result in enumerate(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()
Π Π΅Π·ΡΠΌΠ΅
Π ΡΡΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ ΠΎΠ±ΡΠΈΠ΅ ΡΠ°Π±ΠΎΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ², ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½Π½ΡΡ Ρ Ray Tune Ρ ΠΏΠΎΠΌΠΎΡΡΡ Ultralytics. ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΡΡΠ°ΠΏΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π·Π°Π³ΡΡΠ·ΠΊΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ° ΠΈΠ· Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ° ΠΈ ΠΈΡΠΏΡΡΠ°Π½ΠΈΡ, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΠ΅ Π³ΡΠ°ΡΠΈΠΊΠΎΠ² ΠΌΠ΅ΡΡΠΈΠΊ.
Π£Π·Π½Π°ΠΉΡΠ΅ Π±ΠΎΠ»ΡΡΠ΅, Π·Π°Π³Π»ΡΠ½ΡΠ² Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Ray Tune ΠΏΠΎ Π°Π½Π°Π»ΠΈΠ·Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² , ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ ΠΎΡΠ΄Π°ΡΡ ΠΎΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
ΠΠΠΠ ΠΠ‘Π« Π ΠΠ’ΠΠΠ’Π«
How do I tune the hyperparameters of my YOLO11 model using Ray Tune?
To tune the hyperparameters of your Ultralytics YOLO11 model using Ray Tune, follow these steps:
-
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ°ΠΊΠ΅ΡΡ:
-
Load your YOLO11 model and start tuning:
ΠΡΠΈ ΡΡΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Ray Tune, ΡΡΠΎΠ±Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠΠ° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΡ ΠΊ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎ Ray Tune.
What are the default hyperparameters for YOLO11 tuning with Ray Tune?
Ultralytics YOLO11 uses the following default hyperparameters for tuning with Ray Tune:
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ |
---|---|---|
lr0 |
tune.uniform(1e-5, 1e-1) |
ΠΠ°ΡΠ°Π»ΡΠ½Π°Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ |
lrf |
tune.uniform(0.01, 1.0) |
ΠΡΠΎΠ³ΠΎΠ²ΡΠΉ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½Ρ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ |
momentum |
tune.uniform(0.6, 0.98) |
Momentum |
weight_decay |
tune.uniform(0.0, 0.001) |
Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π²Π΅ΡΠ° |
warmup_epochs |
tune.uniform(0.0, 5.0) |
ΠΠΏΠΎΡ ΠΈ ΡΠ°Π·ΠΌΠΈΠ½ΠΊΠΈ |
box |
tune.uniform(0.02, 0.2) |
ΠΠΎΡΠΎΠ±ΠΊΠ° Π΄Π»Ρ ΠΏΠΎΡ ΡΠ΄Π΅Π½ΠΈΡ |
cls |
tune.uniform(0.2, 4.0) |
ΠΠ΅Ρ Π΄Π»Ρ ΠΏΠΎΡΠ΅ΡΠΈ ΠΊΠ»Π°ΡΡΠ° |
hsv_h |
tune.uniform(0.0, 0.1) |
ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΎΡΡΠ΅Π½ΠΊΠΎΠ² |
translate |
tune.uniform(0.0, 0.9) |
ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° |
ΠΡΠΈ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΠΎΠ΄ ΡΠ²ΠΎΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π½ΡΠΆΠ΄Ρ. ΠΠΎΠ»Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΡ Π½Π°ΠΉΠ΄Π΅ΡΡ Π² ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π΅ ΠΏΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
How can I integrate Weights & Biases with my YOLO11 model tuning?
To integrate Weights & Biases (W&B) with your Ultralytics YOLO11 tuning process:
-
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈ W&B:
-
ΠΠ·ΠΌΠ΅Π½ΠΈ ΡΠ²ΠΎΠΉ ΡΠΊΡΠΈΠΏΡ ΡΡΠ½ΠΈΠ½Π³Π°:
ΠΡΠ° Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΡΠ΅Π±Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈ Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² W&B.
Why should I use Ray Tune for hyperparameter optimization with YOLO11?
Ray Tune ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²:
- ΠΡΠΎΠ΄Π²ΠΈΠ½ΡΡΡΠ΅ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ ΠΏΠΎΠΈΡΠΊΠ°: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉ ΡΠ°ΠΊΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΠΊΠ°ΠΊ Π±Π°ΠΉΠ΅ΡΠΎΠ²ΡΠΊΠ°Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΈ HyperOpt, Π΄Π»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
- ΠΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ: ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΈΡΠΏΡΡΠ°Π½ΠΈΠΉ, ΡΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΊΠΎΡΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ.
- Π Π°Π½Π½ΡΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ°: ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ Π²ΡΠΎΠ΄Π΅ ASHA Π΄Π»Ρ ΡΠ°Π½Π½Π΅Π³ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΈΡ ΠΌΠ°Π»ΠΎΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΠΈΡΠΏΡΡΠ°Π½ΠΈΠΉ, ΡΠΊΠΎΠ½ΠΎΠΌΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ.
Ray Tune seamlessly integrates with Ultralytics YOLO11, providing an easy-to-use interface for tuning hyperparameters effectively. To get started, check out the Efficient Hyperparameter Tuning with Ray Tune and YOLO11 guide.
How can I define a custom search space for YOLO11 hyperparameter tuning?
To define a custom search space for your YOLO11 hyperparameter tuning with Ray Tune:
from ray import tune
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-1), "momentum": tune.uniform(0.6, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)
ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΡΡΡΠΎΠΈΡΡ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Π½Π°ΡΠ°Π»ΡΠ½Π°Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠΌΠΏΡΠ»ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ. Π ΡΠ°ΡΡΠΈΡΠ΅Π½Π½ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΡΠΈΡΠ°ΠΉ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ " ΠΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΏΠΎΠΈΡΠΊΠ° ".