Ultralytics YOLO27:
Get Started

Geri çağrılar#

Ultralytics çerçevesi, train, val, export ve predict modları sırasında stratejik aşamalarda giriş noktaları görevi gören geri çağrıları destekler. Her geri çağrı, işlem türüne bağlı olarak bir Trainer, Validator veya Predictor nesnesi kabul eder. Bu nesnelerin tüm özellikleri BaseTrainer, BaseValidator ve BasePredictor başvuru sayfalarında ayrıntılı olarak açıklanmıştır.



İzle: Ultralytics Callbacks Nasıl Kullanılır | Predict, Train, Validate ve Export Callbacks | Ultralytics YOLO26 🚀

Örnekler#

Tahminle Birlikte Ek Bilgi Döndürme#

Bu örnekte, her sonuç nesnesiyle birlikte orijinal kareyi nasıl döndüreceğini gösteriyoruz:

from ultralytics import YOLO

def on_predict_batch_end(predictor):
    """Combine prediction results with corresponding frames."""
    _, image, _ = predictor.batch

    # Görüntünün bir liste olduğundan emin ol
    image = image if isinstance(image, list) else [image]

    # Tahmin sonuçlarını ilgili karelerle birleştir
    predictor.results = zip(predictor.results, image)

# Bir YOLO model örneği oluştur
model = YOLO("yolo26n.pt")

# Özel geri çağrıyı modele ekle
model.add_callback("on_predict_batch_end", on_predict_batch_end)

# Sonuçlar ve kareler üzerinde yinele
for result, frame in model.predict():  # veya model.track()
    pass

Eğitimden Önce PyTorch İleri Geçiş Kancalarını Kaydetme#

model.train(), model yapılandırmasından bir eğitim modeli oluşturur ve yüklenen ağırlıkları bu modele aktarır. Bu çağrıdan önce doğrudan model.model üzerine kaydedilen PyTorch kancaları çalışma zamanı durumudur; bu nedenle yeniden oluşturulan eğitim modeli bunları devralmaz. Model kurulumu tamamlandıktan sonra on_pretrain_routine_end içine eğitim kancalarını kaydet:

from ultralytics import YOLO
from ultralytics.utils.torch_utils import unwrap_model

def preprocess_input(module, inputs):
    """Center each input channel before the first model layer."""
    images = inputs[0]
    return (images - images.mean(dim=(-2, -1), keepdim=True),)

def register_forward_pre_hook(trainer):
    """Attach preprocessing to the active training model."""
    train_model = unwrap_model(trainer.model)
    train_model.model[0].register_forward_pre_hook(preprocess_input)

model = YOLO("yolo26n.pt")
model.add_callback("on_pretrain_routine_end", register_forward_pre_hook)
model.train(data="coco8.yaml", epochs=1)

unwrap_model(), hem tek cihazlı hem de DistributedDataParallel eğitimini yönetir. Yerel olarak tanımlanmış bir kancayı trainer.ema.ema üzerine ekleme; çünkü eğitim kontrol noktaları EMA modelini serileştirir ve kontrol noktası yüklenirken başka bir işlem geri çağrıyı içe aktaramayabilir. Aynı ön işleme eğitim doğrulaması sırasında da çalışmalıysa çalışma zamanı kancası yerine içe aktarılabilir bir model bileşeni olarak uygula. NaN kurtarma, EMA'yı eğitim modelinden yeniden oluşturur; dolayısıyla bu şekilde kaydedilen bir kanca EMA'ya kopyalanır ve kurtarma sonrasında kaydedilen kontrol noktalarına eklenir. Kontrol noktalarının başka bir işlemde yüklenmesi gerekiyorsa kanca işlevini içe aktarılabilir bir modülde tanımla.

Bağımsız model.val(), her çağrı için yüklenen modelin bir kopyasını oluşturur. Tahmin, ilk çağrısında bir kopya oluşturup önbelleğe alır; bu nedenle kancaları ilk model.predict() veya model.track() çağrısından önce model.model üzerine kaydet. Daha sonra eklenen kancalar önbelleğe alınmış tahminciye ulaşmaz. Yeni bir işlemde kontrol noktası yükledikten sonra çalışma zamanı kancalarını yeniden kaydet.

Model metriklerine on_model_save geri çağrısını kullanarak eriş#

Bu örnek, on_model_save geri çağrısı kullanılarak bir kontrol noktası kaydedildikten sonra best_fitness puanı, total_loss ve diğer metrikler gibi eğitim ayrıntılarının nasıl alınacağını gösterir.

from ultralytics import YOLO

# Load a YOLO model
model = YOLO("yolo26n.pt")

def print_checkpoint_metrics(trainer):
    """Print trainer metrics and loss details after each checkpoint is saved."""
    print(
        f"Model details\n"
        f"Best fitness: {trainer.best_fitness}, "
        f"Loss names: {trainer.loss_names}, "  # List of loss names
        f"Metrics: {trainer.metrics}, "
        f"Total loss: {trainer.tloss}"  # Total loss value
    )

if __name__ == "__main__":
    # Add on_model_save callback.
    model.add_callback("on_model_save", print_checkpoint_metrics)

    # Run model training on custom dataset.
    results = model.train(data="coco8.yaml", epochs=3)

Tüm Geri Çağrılar#

Aşağıda desteklenen tüm geri çağrılar listelenmiştir. Daha fazla ayrıntı için geri çağrıların kaynak koduna bak.

Eğitici Geri Çağrıları#

Geri çağrıAçıklama
on_pretrain_routine_startVeri yükleme ve model kurulumu başlamadan önce, eğitim öncesi yordamın başında tetiklenir.
on_pretrain_routine_endVeri yükleme ve model kurulumu tamamlandıktan sonra, eğitim öncesi yordamın sonunda tetiklenir.
on_train_startEğitim başladığında, ilk epoch başlamadan önce tetiklenir.
on_train_epoch_startHer eğitim epoch başlangıcında, batch yinelemesi başlamadan önce tetiklenir.
on_train_batch_startHer eğitim batch'inin başında, ileri geçişten önce tetiklenir.
optimizer_stepOptimizasyon adımı sırasında tetiklenir. Özel entegrasyonlar için ayrılmıştır; varsayılan eğitim döngüsü tarafından çağrılmaz.
on_before_zero_gradGradyanlar sıfırlanmadan önce tetiklenir. Özel entegrasyonlar için ayrılmıştır; varsayılan eğitim döngüsü tarafından çağrılmaz.
on_train_batch_endGeri yayılım geçişinden sonra, her eğitim batch'inin sonunda tetiklenir. Gradyan biriktirme nedeniyle optimizasyon adımı ertelenebilir.
on_train_epoch_endTüm batch'ler işlendikten sonra, her eğitim epoch'unun sonunda ancak doğrulamadan önce tetiklenir. Doğrulama metrikleri ve uygunluk puanı henüz kullanılabilir olmayabilir.
on_model_saveModel kontrol noktası doğrulamadan sonra kaydedildiğinde tetiklenir.
on_fit_epoch_endHer fit epoch'unun (eğitim + doğrulama) sonunda, doğrulama ve kontrol noktası kaydetme işlemleri sonrasında tetiklenir. Doğrulama metrikleri kullanılabilir durumdadır ve her epoch'un eğitim çağrısı için uygunluk puanı kullanılabilir. Bu geri çağrı, en iyi modelin son değerlendirmesi sırasında da çağrılır; bu aşamada kontrol noktası kaydedilmez ve uygunluk puanı bulunmayabilir.
on_train_endEn iyi modelin son değerlendirmesinden sonra eğitim süreci sona erdiğinde tetiklenir.
on_params_updateModel parametreleri güncellendiğinde tetiklenir. Özel entegrasyonlar için ayrılmıştır; varsayılan eğitim döngüsü tarafından çağrılmaz.
teardownEğitim süreci temizlenirken tetiklenir.

Doğrulayıcı Geri Çağrıları#

Geri çağrıAçıklama
on_val_startDoğrulama başladığında tetiklenir.
on_val_batch_startHer doğrulama batch'inin başında tetiklenir.
on_val_batch_endHer doğrulama batch'inin sonunda tetiklenir.
on_val_endDoğrulama sona erdiğinde tetiklenir.

Tahminci Geri Çağrıları#

Geri çağrıAçıklama
on_predict_startTahmin süreci başladığında tetiklenir.
on_predict_batch_startHer tahmin batch'inin başında tetiklenir.
on_predict_postprocess_endTahmin son işleme aşamasının sonunda tetiklenir.
on_predict_batch_endHer tahmin batch'inin sonunda tetiklenir.
on_predict_endTahmin süreci sona erdiğinde tetiklenir.

Dışa Aktarıcı Geri Çağrıları#

Geri çağrıAçıklama
on_export_startDışa aktarma süreci başladığında tetiklenir.
on_export_endDışa aktarma süreci sona erdiğinde tetiklenir.

Sık Sorulan Sorular#

  • Ultralytics geri çağrıları, eğitim, doğrulama, dışa aktarma ve tahmin gibi model işlemlerinin önemli aşamalarında tetiklenen özel giriş noktalarıdır. Bu geri çağrılar, süreçte belirli noktalarda özel işlevler eklemeyi sağlayarak iş akışının geliştirilmesine ve değiştirilmesine olanak tanır. Her geri çağrı, işlem türüne bağlı olarak bir Trainer, Validator veya Predictor nesnesi kabul eder. Bu nesnelerin özellikleri hakkında ayrıntılı bilgi için BaseTrainer, BaseValidator ve BasePredictor başvuru sayfalarına bak.

    Bir geri çağrı kullanmak için bir işlev tanımla ve model.add_callback() yöntemini kullanarak bu işlevi modele ekle. Tahmin sırasında ek bilgi döndürmeye ilişkin bir örnek:

    from ultralytics import YOLO
    
    def on_predict_batch_end(predictor):
        """Handle prediction batch end by combining results with corresponding frames; modifies predictor results."""
        _, image, _ = predictor.batch
        image = image if isinstance(image, list) else [image]
        predictor.results = zip(predictor.results, image)
    
    model = YOLO("yolo26n.pt")
    model.add_callback("on_predict_batch_end", on_predict_batch_end)
    for result, frame in model.predict():
        pass
  • Eğitim sürecinin belirli aşamalarına mantık ekleyerek Ultralytics eğitim yordamını özelleştir. Ultralytics YOLO, özel metrikler, işleme veya günlük kaydı eklemene olanak tanıyan on_train_start, on_train_end ve on_train_batch_end gibi çeşitli eğitim geri çağrıları sunar.

    Her eğitim epoch'unun sonunda her optimizasyon parametre grubunun öğrenme oranını şu şekilde günlüğe kaydedebilirsin:

    from ultralytics import YOLO
    
    def log_learning_rates(trainer):
        """Print the current learning rates after each training epoch."""
        print(f"Epoch {trainer.epoch + 1}: {trainer.lr}")
    
    model = YOLO("yolo26n.pt")
    model.add_callback("on_train_epoch_end", log_learning_rates)
    model.train(data="coco8.yaml", epochs=3)
    İpucu

    freeze kullanırken BatchNorm istatistiklerini dondurmak için geri çağrıya ihtiyacın yok: eğitici, dondurulmuş katmanların BatchNorm katmanlarını her epoch'un başında otomatik olarak değerlendirme moduna alır.

    Eğitim geri çağrılarını etkili biçimde kullanma hakkında daha fazla ayrıntı için Eğitim Kılavuzu sayfasına bak.

  • Ultralytics YOLO'da doğrulama sırasında geri çağrı kullanmak, özel işleme, günlük kaydı veya metrik hesaplamayı mümkün kılarak model değerlendirmesini geliştirir. on_val_start, on_val_batch_end ve on_val_end gibi geri çağrılar, özel mantık eklemek için giriş noktaları sunarak ayrıntılı ve kapsamlı doğrulama süreçleri sağlar.

    Örneğin, yalnızca ilk üç doğrulama batch'ini değil tüm doğrulama batch'lerini çizmek için:

    import inspect
    
    from ultralytics import YOLO
    
    def plot_samples(validator):
        frame = inspect.currentframe().f_back.f_back
        v = frame.f_locals
        validator.plot_val_samples(v["batch"], v["batch_i"])
        validator.plot_predictions(v["batch"], v["preds"], v["batch_i"])
    
    model = YOLO("yolo26n.pt")
    model.add_callback("on_val_batch_end", plot_samples)
    model.val(data="coco.yaml")

    Doğrulama sürecine geri çağrıları ekleme hakkında daha fazla bilgi için Doğrulama Kılavuzu sayfasına bak.

  • Ultralytics YOLO'da tahmin modu için özel bir geri çağrı eklemek üzere bir geri çağrı işlevi tanımla ve tahmin sürecine kaydet. Yaygın tahmin geri çağrıları arasında on_predict_start, on_predict_batch_end ve on_predict_end bulunur. Bunlar, tahmin çıktılarını değiştirmene ve veri günlüğe kaydı veya sonuç dönüşümü gibi ek işlevleri entegre etmene olanak tanır.

    Belirli bir sınıfa ait bir nesnenin bulunup bulunmadığına göre tahminleri kaydeden özel bir geri çağrı örneği:

    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    
    class_id = 2
    
    def save_on_object(predictor):
        r = predictor.results[0]
        if class_id in r.boxes.cls:
            predictor.args.save = True
        else:
            predictor.args.save = False
    
    model.add_callback("on_predict_postprocess_end", save_on_object)
    results_stream = model("pedestrians.mp4", stream=True, save=True)
    
    for result in results_stream:
        pass

    Daha kapsamlı kullanım için ayrıntılı yönergeler ve ek özelleştirme seçenekleri içeren Tahmin Kılavuzu sayfasına bak.

  • Ultralytics YOLO, eğitim, doğrulama ve tahmin gibi farklı aşamaları geliştirmek ve özelleştirmek için geri çağrıların çeşitli pratik uygulamalarını destekler. Bazı pratik örnekler:

    • Özel Metrikleri Günlüğe Kaydetme: Eğitim veya doğrulama epoch'ları sonunda olduğu gibi farklı aşamalarda ek metrikleri günlüğe kaydet.
    • Veri Artırma: Tahmin veya eğitim batch'leri sırasında özel veri dönüşümleri ya da artırmaları uygula.
    • Ara Sonuçlar: Daha ileri analiz veya görselleştirme için tahminler ya da kareler gibi ara sonuçları kaydet.

    Örnek: Tahmin sırasında on_predict_batch_end kullanarak kareleri tahmin sonuçlarıyla birleştirme:

    from ultralytics import YOLO
    
    def on_predict_batch_end(predictor):
        """Combine prediction results with frames."""
        _, image, _ = predictor.batch
        image = image if isinstance(image, list) else [image]
        predictor.results = zip(predictor.results, image)
    
    model = YOLO("yolo26n.pt")
    model.add_callback("on_predict_batch_end", on_predict_batch_end)
    for result, frame in model.predict():
        pass

    Daha fazla seçenek ve örnek için geri çağrı kaynak kodunu incele.

Yorumlar