Geri Çağırmalar (Callbacks)
Ultralytics çerçevesi, train, val, export ve predict modları sırasında stratejik aşamalarda giriş noktaları görevi gören geri çağırmaları (callbacks) destekler. Her geri çağırma, işlem türüne bağlı olarak bir Trainer, Validator veya Predictor nesnesini kabul eder. Bu nesnelerin tüm özellikleri dokümantasyonun Referans bölümünde detaylandırılmıştır.
Watch: How to use Ultralytics Callbacks | Predict, Train, Validate and Export Callbacks | Ultralytics YOLO🚀
Örnekler
Tahmin ile Ek Bilgi Döndürme
Bu örnekte, her sonuç nesnesiyle birlikte orijinal kareyi nasıl döndüreceğimizi gösteriyoruz:
from ultralytics import YOLO
def on_predict_batch_end(predictor):
"""Combine prediction results with corresponding frames."""
_, image, _, _ = predictor.batch
# Ensure that image is a list
image = image if isinstance(image, list) else [image]
# Combine the prediction results with the corresponding frames
predictor.results = zip(predictor.results, image)
# Create a YOLO model instance
model = YOLO("yolo26n.pt")
# Add the custom callback to the model
model.add_callback("on_predict_batch_end", on_predict_batch_end)
# Iterate through the results and frames
for result, frame in model.predict(): # or model.track()
passon_model_save geri çağırmasını kullanarak Model metriklerine erişme
Bu örnek, on_model_save geri çağırması kullanılarak bir kontrol noktası kaydedildikten sonra best_fitness skoru, total_loss ve diğer metrikler gibi eğitim detayları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ğırmalar
Desteklenen tüm geri çağırmalar aşağıdadır. Daha fazla detay için geri çağırma kaynak koduna bakabilirsin.
Eğitici (Trainer) Geri Çağırmaları
| Geri Çağırma | Açıklama |
|---|---|
on_pretrain_routine_start | Ön eğitim rutininde, veri yükleme ve model kurulumundan önce tetiklenir. |
on_pretrain_routine_end | Ön eğitim rutininde, veri yükleme ve model kurulumu tamamlandıktan sonra tetiklenir. |
on_train_start | Eğitim başladığında, ilk epoch başlamadan önce tetiklenir. |
on_train_epoch_start | Her eğitim epochunun başında, yığın yinelemesi (batch iteration) başlamadan önce tetiklenir. |
on_train_batch_start | Her eğitim yığınının (batch) başında, ileri geçişten (forward pass) önce tetiklenir. |
optimizer_step | Optimize edici 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_grad | Gradyanlar 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_end | Her eğitim yığınının sonunda, geri geçişten (backward pass) sonra tetiklenir. Gradyan birikimi nedeniyle optimize edici adımı ertelenebilir. |
on_train_epoch_end | Her eğitim epoch'unun sonunda, tüm yığınlar işlendikten sonra ancak doğrulama işleminden önce tetiklenir. Doğrulama metrikleri ve uygunluk (fitness) henüz hazır olmayabilir. |
on_model_save | Model kontrol noktası doğrulama işleminden sonra kaydedildiğinde tetiklenir. |
on_fit_epoch_end | Her fit epoch'unun (eğitim + doğrulama) sonunda, doğrulama ve herhangi bir kontrol noktası kaydından sonra tetiklenir. Doğrulama metrikleri ve uygunluk verileri mevcuttur. Bu geri çağırma, kontrol noktası kaydının gerçekleşmediği ve uygunluk verisinin bulunmayabileceği nihai en iyi model değerlendirmesi sırasında da çağrılır. |
on_train_end | Eğitim süreci, en iyi modelin nihai değerlendirmesinden sonra sona erdiğinde tetiklenir. |
on_params_update | Model 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. |
teardown | Eğitim süreci temizlendiğinde tetiklenir. |
Doğrulayıcı (Validator) Geri Çağırmaları
| Geri Çağırma | Açıklama |
|---|---|
on_val_start | Doğrulama başladığında tetiklenir. |
on_val_batch_start | Her doğrulama yığınının başında tetiklenir. |
on_val_batch_end | Her doğrulama yığınının sonunda tetiklenir. |
on_val_end | Doğrulama sona erdiğinde tetiklenir. |
Tahminleyici (Predictor) Geri Çağırmaları
| Geri Çağırma | Açıklama |
|---|---|
on_predict_start | Tahmin süreci başladığında tetiklenir. |
on_predict_batch_start | Her tahmin yığınının başında tetiklenir. |
on_predict_postprocess_end | Tahmin sonrası işlemlerin (post-processing) sonunda tetiklenir. |
on_predict_batch_end | Her tahmin yığınının sonunda tetiklenir. |
on_predict_end | Tahmin süreci sona erdiğinde tetiklenir. |
Dışa Aktarıcı (Exporter) Geri Çağırmaları
| Geri Çağırma | Açıklama |
|---|---|
on_export_start | Dışa aktarma süreci başladığında tetiklenir. |
on_export_end | Dışa aktarma süreci sona erdiğinde tetiklenir. |
SSS
Ultralytics geri çağırmaları nelerdir ve bunları nasıl kullanabilirim?
Ultralytics geri çağırmaları, 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ğırmalar, süreçteki belirli noktalarda özel işlevselliği etkinleştirerek iş akışında geliştirmelere ve değişikliklere izin verir. Her geri çağırma, işlem türüne bağlı olarak bir Trainer, Validator veya Predictor nesnesini kabul eder. Bu nesnelerin detaylı özellikleri için Referans bölümüne bakabilirsin.
Bir geri çağırmayı kullanmak için bir fonksiyon tanımla ve bunu model.add_callback() yöntemini kullanarak modele ekle. İşte tahmin sırasında ek bilgi döndürmeye dair 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():
passGeri çağırmaları kullanarak Ultralytics eğitim rutinini nasıl özelleştirebilirim?
Eğitim sürecinin belirli aşamalarında mantık ekleyerek Ultralytics eğitim rutinini özelleştirebilirsin. Ultralytics YOLO, özel metrikler, işleme veya günlüğe kaydetme eklemene olanak tanıyan on_train_start, on_train_end ve on_train_batch_end gibi çeşitli eğitim geri çağırmaları sağlar.
İşte geri çağırmalarla katmanları dondururken BatchNorm istatistiklerini dondurmanın yolu:
from ultralytics import YOLO
# Add a callback to put the frozen layers in eval mode to prevent BN values from changing
def put_in_eval_mode(trainer):
n_layers = trainer.args.freeze
if not isinstance(n_layers, int):
return
for i, (name, module) in enumerate(trainer.model.named_modules()):
if name.endswith("bn") and int(name.split(".")[1]) < n_layers:
module.eval()
module.track_running_stats = False
model = YOLO("yolo26n.pt")
model.add_callback("on_train_epoch_start", put_in_eval_mode)
model.train(data="coco.yaml", epochs=10)Eğitim geri çağırmalarını etkili bir şekilde kullanma hakkında daha fazla detay için Eğitim Kılavuzuna göz at.
Ultralytics YOLO'da doğrulama sırasında neden geri çağırmaları kullanmalıyım?
Ultralytics YOLO'da doğrulama sırasında geri çağırmaları kullanmak; özel işleme, günlüğe kaydetme 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ğırmalar, detaylı ve kapsamlı doğrulama süreçleri sağlamak amacıyla özel mantık eklemek için giriş noktaları sunar.
Örneğin, sadece ilk üçü yerine tüm doğrulama yığınlarını çizdirmek 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")Geri çağırmaları doğrulama sürecine dahil etmekle ilgili daha fazla bilgi için Doğrulama Kılavuzuna bak.
Ultralytics YOLO'da tahmin modu için özel bir geri çağırmayı nasıl eklerim?
Ultralytics YOLO'da tahmin modu için özel bir geri çağırma eklemek için bir geri çağırma fonksiyonu tanımla ve onu tahmin süreciyle kaydet. Yaygın tahmin geri çağırmaları arasında on_predict_start, on_predict_batch_end ve on_predict_end bulunur. Bunlar, tahmin çıktılarının değiştirilmesine ve veri kaydı veya sonuç dönüştürme gibi ek işlevlerin entegrasyonuna olanak tanır.
İşte belirli bir sınıfa ait bir nesnenin var olup olmadığına bağlı olarak tahminleri kaydeden özel bir geri çağırma ö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 = model("pedestrians.mp4", stream=True, save=True)
for results in results:
passDaha kapsamlı kullanım için, detaylı talimatlar ve ek özelleştirme seçenekleri içeren Tahmin Kılavuzuna bakabilirsin.
Ultralytics YOLO'da geri çağırmaları kullanmaya dair bazı pratik örnekler nelerdir?
Ultralytics YOLO, eğitim, doğrulama ve tahmin gibi farklı aşamaları geliştirmek ve özelleştirmek için geri çağırmaların çeşitli pratik uygulamalarını destekler. Bazı pratik örnekler şunlardır:
- Özel Metrikleri Günlüğe Kaydetme: Eğitim veya doğrulama epochlarının sonu gibi farklı aşamalarda ek metrikleri günlüğe kaydet.
- Veri Çoğaltma: Tahmin veya eğitim yığınları sırasında özel veri dönüşümleri veya çoğaltmalar uygula.
- Ara Sonuçlar: Daha fazla analiz veya görselleştirme için tahminler veya kareler gibi ara sonuçları kaydet.
Örnek: on_predict_batch_end kullanarak tahmin sırasında 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():
passDaha fazla seçenek ve örnek için geri çağırma kaynak kodunu keşfet.