İçeriğe geç

Ray Tune ile Verimli Hiperparametre Ayarlama ve YOLOv8

Hiperparametre ayarlama, optimum hiperparametre setini keşfederek en yüksek model performansına ulaşmada hayati önem taşır. Bu, farklı hiperparametrelerle denemeler yapmayı ve her denemenin performansını değerlendirmeyi içerir.

Ultralytics YOLOv8 ve Ray Tune ile Ayarlamayı Hızlandırın

Ultralytics YOLOv8 hiperparametre ayarı için Ray Tune'u içerir ve YOLOv8 model hiperparametrelerinin optimizasyonunu kolaylaştırır. Ray Tune ile ayarlama sürecini hızlandırmak için gelişmiş arama stratejilerini, paralelliği ve erken durdurmayı kullanabilirsiniz.

Ray Tune

Ray Tune Genel Bakış

Ray Tune, verimlilik ve esneklik için tasarlanmış bir hiperparametre ayarlama kütüphanesidir. Çeşitli arama stratejilerini, paralelliği ve erken durdurma stratejilerini destekler ve Ultralytics YOLOv8 dahil olmak üzere popüler makine öğrenimi çerçeveleriyle sorunsuz bir şekilde entegre olur.

ile Entegrasyon Weights & Biases

YOLOv8 ile isteğe bağlı entegrasyona da izin verir. Weights & Biases ayarlama sürecini izlemek için.

Kurulum

Gerekli paketleri yüklemek için çalıştırın:

Kurulum

# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]"

# Optionally install W&B for logging
pip install wandb

Kullanım

Kullanım

from ultralytics import YOLO

# Load a YOLOv8n model
model = YOLO('yolov8n.pt')

# Start tuning hyperparameters for YOLOv8n training on the COCO8 dataset
result_grid = model.tune(data='coco8.yaml', use_ray=True)

tune() Yöntem Parametreleri

Bu tune() YOLOv8 adresindeki yöntem, Ray Tune ile hiperparametre ayarı için kullanımı kolay bir arayüz sağlar. Ayarlama sürecini özelleştirmenize olanak tanıyan çeşitli argümanları kabul eder. Aşağıda her parametrenin ayrıntılı bir açıklaması bulunmaktadır:

Parametre Tip Açıklama Varsayılan Değer
data str Ayarlayıcıyı çalıştırmak için veri kümesi yapılandırma dosyası (YAML biçiminde). Bu dosya, eğitim ve doğrulama veri yollarının yanı sıra veri kümesine özgü diğer ayarları da belirtmelidir.
space dict, optional Ray Tune için hiperparametre arama alanını tanımlayan bir sözlük. Her anahtar bir hiperparametre adına karşılık gelir ve değer, ayarlama sırasında keşfedilecek değer aralığını belirtir. Sağlanmamışsa, YOLOv8 çeşitli hiperparametrelerle varsayılan bir arama alanı kullanır.
grace_period int, optional Ray Tune'da ASHA zaman layıcısı için epok cinsinden ödemesiz dönem. Zamanlayıcı, bu epok sayısından önce herhangi bir denemeyi sonlandırmayacak ve modelin erken durdurma kararı vermeden önce minimum eğitim almasına izin verecektir. 10
gpu_per_trial int, optional Ayarlama sırasında deneme başına tahsis edilecek GPU sayısı. Bu, özellikle çoklu GPU ortamlarında GPU kullanımını yönetmeye yardımcı olur. Sağlanmazsa, ayarlayıcı mevcut tüm GPU'ları kullanacaktır. Hiçbiri
iterations int, optional Ayarlama sırasında çalıştırılacak maksimum deneme sayısı. Bu parametre, test edilen hiperparametre kombinasyonlarının toplam sayısının kontrol edilmesine yardımcı olarak ayarlama sürecinin süresiz olarak çalışmamasını sağlar. 10
**train_args dict, optional 'ye iletilecek ek argümanlar train() ayarlama sırasında yöntem. Bu argümanlar eğitim epoklarının sayısı, yığın boyutu ve eğitime özgü diğer konfigürasyonlar gibi ayarları içerebilir. {}

Bu parametreleri özelleştirerek, hiperparametre optimizasyon sürecini özel ihtiyaçlarınıza ve mevcut hesaplama kaynaklarınıza uyacak şekilde ince ayar yapabilirsiniz.

Varsayılan Arama Alanı Açıklama

Aşağıdaki tabloda YOLOv8 adresinde Ray Tune ile hiperparametre ayarlama için varsayılan arama alanı parametreleri listelenmektedir. Her parametrenin şu şekilde tanımlanan belirli bir değer aralığı vardır tune.uniform().

Parametre Değer Aralığı Açıklama
lr0 tune.uniform(1e-5, 1e-1) İlk öğrenme oranı
lrf tune.uniform(0.01, 1.0) Nihai öğrenme oranı faktörü
momentum tune.uniform(0.6, 0.98) Momentum
weight_decay tune.uniform(0.0, 0.001) Ağırlık azalması
warmup_epochs tune.uniform(0.0, 5.0) Isınma dönemleri
warmup_momentum tune.uniform(0.0, 0.95) Isınma momentumu
box tune.uniform(0.02, 0.2) Kutu kilo kaybı
cls tune.uniform(0.2, 4.0) Sınıf kilo kaybı
hsv_h tune.uniform(0.0, 0.1) Ton büyütme aralığı
hsv_s tune.uniform(0.0, 0.9) Doygunluk artırma aralığı
hsv_v tune.uniform(0.0, 0.9) Değer (parlaklık) artırma aralığı
degrees tune.uniform(0.0, 45.0) Rotasyon büyütme aralığı (derece)
translate tune.uniform(0.0, 0.9) Çeviri büyütme aralığı
scale tune.uniform(0.0, 0.9) Ölçek büyütme aralığı
shear tune.uniform(0.0, 10.0) Kesme büyütme aralığı (derece)
perspective tune.uniform(0.0, 0.001) Perspektif büyütme aralığı
flipud tune.uniform(0.0, 1.0) Dikey çevirme büyütme olasılığı
fliplr tune.uniform(0.0, 1.0) Yatay çevirme büyütme olasılığı
mosaic tune.uniform(0.0, 1.0) Mozaik büyütme olasılığı
mixup tune.uniform(0.0, 1.0) Karışıklık artırma olasılığı
copy_paste tune.uniform(0.0, 1.0) Kopyalama-yapıştırma artırma olasılığı

Özel Arama Alanı Örneği

Bu örnekte, Ray Tune ve YOLOv8 ile hiperparametre ayarı için özel bir arama alanının nasıl kullanılacağını gösteriyoruz. Özel bir arama alanı sağlayarak, ayarlama sürecini ilgilenilen belirli hiperparametreler üzerine odaklayabilirsiniz.

Kullanım

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolov8n.pt")

# Run Ray Tune on the model
result_grid = model.tune(data="coco8.yaml",
                         space={"lr0": tune.uniform(1e-5, 1e-1)},
                         epochs=50,
                         use_ray=True)

Yukarıdaki kod parçasında, "yolov8n.pt" ön eğitimli ağırlıklarla bir YOLO modeli oluşturuyoruz. Daha sonra tune() yöntemini kullanarak, veri kümesi yapılandırmasını "coco8.yaml" ile belirtiyoruz. İlk öğrenme oranı için özel bir arama alanı sağlıyoruz lr0 "lr0" anahtarına ve değerine sahip bir sözlük kullanarak tune.uniform(1e-5, 1e-1). Son olarak, epok sayısı gibi ek eğitim argümanlarını doğrudan ayarlama yöntemine şu şekilde aktarıyoruz epochs=50.

Işın Ayarı Sonuçlarının İşlenmesi

Ray Tune ile bir hiperparametre ayarlama deneyi yürüttükten sonra, elde edilen sonuçlar üzerinde çeşitli analizler yapmak isteyebilirsiniz. Bu kılavuz, bu sonuçları işlemek ve analiz etmek için yaygın iş akışlarını size gösterecektir.

Dizinden Tune Deneyi Sonuçlarını Yükleme

ile ayarlama deneyini çalıştırdıktan sonra tuner.fit()'yi kullanarak sonuçları bir dizinden yükleyebilirsiniz. Bu, özellikle analizi ilk eğitim komut dosyasından çıktıktan sonra gerçekleştiriyorsanız kullanışlıdır.

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()

Temel Deney Seviyesi Analizi

Denemelerin nasıl yapıldığına dair genel bir bakış elde edin. Denemeler sırasında herhangi bir hata olup olmadığını hızlıca kontrol edebilirsiniz.

if result_grid.errors:
    print("One or more trials failed!")
else:
    print("No errors!")

Temel Deneme Seviyesi Analizi

Bireysel deneme hiperparametre konfigürasyonlarına ve son raporlanan metriklere erişin.

for i, result in enumerate(result_grid):
    print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")

Bir Deneme için Raporlanan Metriklerin Tüm Geçmişini Çizme

Metriklerin zaman içinde nasıl geliştiğini görmek için her bir deneme için raporlanan metriklerin geçmişini çizebilirsiniz.

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()

Özet

Bu belgede, Ultralytics adresini kullanarak Ray Tune ile yürütülen deneylerin sonuçlarını analiz etmek için yaygın iş akışlarını ele aldık. Temel adımlar arasında deney sonuçlarının bir dizinden yüklenmesi, deney düzeyinde ve deneme düzeyinde temel analizlerin gerçekleştirilmesi ve metriklerin çizilmesi yer almaktadır.

Hiperparametre ayarlama deneylerinizden en iyi şekilde yararlanmak için Ray Tune'un Sonuçları Analiz Et dokümanları sayfasını inceleyerek daha fazlasını keşfedin.



Oluşturma 2023-11-12, Güncelleme 2024-05-06
Yazarlar: glenn-jocher (5)

Yorumlar