Ultralytics YOLO27: Bekleme listesine katıl.
Get Started
İlk YOLO modelini eğit·Eğit·Ders 8/10
Dersbaşlangıç düzeyi

Sürdür ve Yinele

Kesintiye uğrayan bir çalıştırmayı aynen sürdür, en iyi model olan best.pt dosyasından gerçekten uygulanan bir öğrenme oranıyla yeni tur başlat ve çalıştırmaları yan yana karşılaştır.

Gerçek projeler, bir dizi eğitim çalıştırmasından oluşur. Bazıları yarıda kalır — kapanan bir dizüstü bilgisayar, kopan bir SSH oturumu veya önceliği kaldırılan bir bulut GPU — ve sıfırdan başlamak saatlerce süren emeği boşa harcar. Diğerleri tamamlanır; sonraki tur da yeniden COCO'dan başlamak yerine bunların üzerine kurulmalıdır.

Bu derste bir çalıştırmayı kesintiye uğratıp sürdürecek, gerçekten uygulanan bir öğrenme oranıyla ikinci turu best.pt üzerinden başlatacak ve tüm çalıştırmaları tek bir tabloda karşılaştıracaksın. Ayrıca çalıştırmaların sessizce boşa gitmesine neden olan iki resume davranışını öğreneceksin.

Sonuç

Sürdürme, önceki ağırlıklardan başlatma ve sıfırdan başlama arasında doğru seçimi yapabilir, her birini çalıştırabilir ve çalıştırmaları bir tabloda karşılaştırabilirsin.

Hızlı Başlangıç
Nasıl ilerleyeceğini zaten biliyorsan, işte kısa sürüm.
  1. Kesintiye uğradı, hiçbir şey değişmedi mi? yolo train resume=True model=.../weights/last.pt.

  2. Tamamlandı mı ya da veri veya ayarlar mı değişiyor? .../weights/best.pt üzerinden yeni bir çalıştırma başlat.

  3. lr0 değerini ayarlamak için optimizer değerini de ayarla; optimizer=auto kullanıldığında lr0 yok sayılır.

  4. Çalıştırmaları yapılan değişikliğe göre adlandır, ardından results.csv dosyalarını karşılaştır.

Uygulamalı

Doğru Çalıştırma Türünü Seç#

Bir çalıştırmanın epoch'lar boyunca kayıp ve metrik eğrilerini izleyen Ultralytics Platform eğitim grafikleri

DurumÇalıştırma türüBaşlangıç noktası
Çalışmanın ortasında elektrik kesintisi, bağlantının kopması veya bellek yetersizliğiSürdürOptimizer durumu ve çizelgesiyle birlikte last.pt
Çalıştırma tamamlandı; daha fazla veri, etiketleme düzeltmesi veya daha uzun eğitimÖnceki ağırlıklardan başlatÖnceden eğitilmiş model olarak best.pt
Sınıf eklenmesi veya kaldırılması, çok sayıda etiketin değişmesi ya da imgsz dosyasının büyük ölçüde değişmesiSıfırdan başlayolo26n.pt

Uygulamalı Örnek: Kesintiye Uğrayan Bir Çalıştırmayı Sürdür#

resume=True, model durumunu, optimizer durumunu, öğrenme oranı çizelgesini ve epoch sayacını last.pt dosyasından geri yükler, ardından özgün plana devam eder:

yolo train resume=True model=runs/detect/pills_resume/weights/last.pt

2. epoch'tan sonra durdurulan 5 epoch'luk bir çalıştırmanın gerçek çıktısı:

Resuming training runs/detect/pills_resume/weights/last.pt from epoch 3 to 5 total epochs
        3/5         0G      1.232      2.393   0.005478        206        320: 100% 6/6 4.5s
        4/5         0G      1.345      1.859   0.005833        208        320: 100% 6/6 4.5s
        5/5         0G       1.31      1.625   0.005854        191        320: 100% 6/6 4.4s
3 epochs completed in 0.004 hours.
  • from epoch 3 to 5 total epochs: kaydedilen son epoch'un hemen ardından, belirlenen özgün hedefle devam etti.
  • data veya epochs değerini belirtmedin: tüm argümanlar kontrol noktasından alındı. batch, device ve workers gibi bazı çalışma zamanı ayarları sürdürme sırasında geçersiz kılınabilir; diğer her şey yok sayılır ve Resume ignores ... uyarısı verilir.

Uygulamalı Örnek: İkinci Turu Önceki Ağırlıklardan Başlat#

"Sonraki tur" deneylerinin çoğu sürdürme değildir; son iyi modelinden başlayan yeni çalıştırmalardır — kendi projen içinde doğrudan transfer öğrenmesi. Modelin yeniden öğrenmek yerine ince ayar yapması için daha düşük bir öğrenme oranı kullan:

from ultralytics import YOLO

model = YOLO("runs/detect/pills_v1/weights/best.pt")  # 1. turdan ağırlıklarla başlat
model.train(
    data="my_dataset/data.yaml",
    epochs=5,
    imgsz=320,
    optimizer="AdamW",  # açıkça ayarla: optimizer="auto", lr0 değerini yok sayar
    lr0=0.0005,  # 1. turda otomatik seçilen 0.002 değerinden daha düşük
    name="pills_v2_warm",
)

Günlük, ayarın etkili olduğunu doğruluyor: optimizer: AdamW(lr=0.0005, momentum=0.937). İnce ayar kılavuzu, katmanları dondurmayı ve iki aşamalı eğitimi ele alır; hiperparametre ayarlama kılavuzu ise taramaları ele alır.

Uygulamalı Örnek: Çalıştırmaları Karşılaştır#

Her çalıştırmayı yapılan değişikliğe göre adlandır — pills_v2_warm, pills_v3_imgsz640, pills_v4_edge_frames — asla train2 veya final olarak adlandırma. Her çalıştırma bir results.csv dosyası yazar; bu nedenle karşılaştırma için birkaç satır yeterlidir:

from pathlib import Path

import pandas as pd

for csv in sorted(Path("runs/detect").glob("*/results.csv")):
    df = pd.read_csv(csv)
    best = df["metrics/mAP50-95(B)"].max()
    print(f"{csv.parent.name:<14} epochs={len(df):<3} best mAP50-95={best:.3f}")
pills_resume   epochs=5   best mAP50-95=0.579
pills_v1       epochs=10  best mAP50-95=0.659
pills_v2_warm  epochs=5   best mAP50-95=0.694

Önceki ağırlıklardan başlatılan beş epoch, mAP50-95 değerini 0.659'dan 0.694'e yükseltirken COCO ağırlıklarıyla (pills_resume) yapılan beş epoch'luk eğitim yalnızca 0.579'a ulaştı. Sınıflar ve etiketler bu sırada değişmediği sürece, önceki ağırlıklardan başlatmak daha düşük maliyetle ilerleme sağlar. Birkaç çalıştırmadan sonra bir izleme aracı masrafını çıkarır: Ultralytics Platform (Çalıştırmaları Karşılaştır ve Kazananı Seç sayfasına bak) veya Comet ve Weights & Biases entegrasyonları her çalıştırmayı otomatik olarak kaydeder.

Her Turu Ucuza Getir#

Çoğu tur, "yeni kareler işe yaradı mı?" gibi tek bir soruyu yanıtlar. Keşif yaparken bu argümanlar yanıtları daha hızlı almanı sağlar:

ArgümanÖrnekEtki
fractionfraction=0.5Eğitim görüntülerinin ilk yarısıyla çalışır (dosya adına göre sıralanmış)
timetime=0.250.25 saat sonra durur ve epochs değerini geçersiz kılar
patiencepatience=10Doğrulama başarım ölçütü 10 epoch boyunca iyileşmediğinde durur
imgszimgsz=320640 boyutundaki piksel sayısının dörtte biri; çalıştırmaları yalnızca aynı boyutta karşılaştır
cachecache=TrueSonraki epoch'ların daha hızlı yüklenmesi için çözümlenmiş görüntüleri RAM'de tutar

Her turda tek bir şeyi değiştir ve dağıtıma almadan önce kazananı tam boyutlu bir çalıştırmayla doğrula. Sıfırdan başlaman gerektiğinde, önceden eğitilmiş ağırlıkları kullanan aynı komutu çalıştır:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # COCO üzerinde önceden eğitilmiş ağırlıklara geri dön
model.train(data="my_dataset/data.yaml", epochs=10, imgsz=320, name="pills_v3_relabeled")

Bu Hatalardan Kaçın#

Tamamlanmış bir çalıştırmayı sürdürmek

Belirti: WARNING ⚠️ model '.../last.pt' is not a resumable training checkpoint ... Starting new training instead ve ardından yepyeni bir çalıştırma — data parametresini geçmediysen varsayılan coco8 veri kümesinde. Neden: resume=True yalnızca erken durdurulan çalıştırmaları sürdürür. Çözüm: Bunu durdur ve bilerek best.pt üzerinden yeni bir çalıştırma başlat.

lr0 sessizce yok sayılıyor

Belirti: optimizer: 'optimizer=auto' found, ignoring 'lr0=0.0005' and determining best 'optimizer' and 'lr0' automatically... Neden: Varsayılan optimizer=auto kendi öğrenme oranını seçer. Çözüm: lr0 değerini ayarladığında optimizer değerini açıkça belirt (örneğin "AdamW" veya "SGD") ve optimizer: günlük satırını doğrula.

Yeniden kullanılan adlar üzerine yazmaz

name="pills_v1" ile ikinci kez eğitim yapmak, pills_v1-2 konumuna yazar; bunu daha sonra karıştırmak kolaydır. Her çalıştırma için yeni ve açıklayıcı bir ad kullan.

Dene

Her üç çalıştırma türünü de dene. pills_resume adlı 5 epoch'luk bir çalıştırma başlat, 2. epoch'tan sonra durdur (Ctrl+C veya çözümdeki callback ile) ve devam ettir. pills_v1 en iyi ağırlıklarını, optimizer="AdamW" ve lr0=0.0005 ile pills_v2_warm üzerinde eğit. compare_runs.py tablosunu ve hangi çalıştırmadan devam edeceğine ve nedenine dair tek cümlelik bir açıklamayı sun.

Tamamlanma ölçütü
Aşağıdakilerin tümü doğru olduğunda dersi tamamlamış olursun.
  • Devam ettirdiğin çalıştırma Resuming training ... from epoch 3 çıktısını verdi ve 5 epoch'un tamamını bitirdi.

  • pills_v2_warm günlüğünde otomatik optimizer mesajı değil, AdamW(lr=0.0005, ...) görünüyor.

  • Her çalıştırmayı açıklayıcı adlarla gösteren yazdırılmış bir karşılaştırma tablon ve tek cümlelik bir kararın var.

Çözümü göster

Ctrl+C'ye hızlı bir makinede doğru anda basmak zorsa, bir callback çalıştırmayı 2. epoch'tan sonra senin için durdurabilir:

from ultralytics import YOLO

def power_cut(trainer):
    if trainer.epoch == 1:  # 0 tabanlı indeksleme: 2. epoch kaydedildikten sonra durdur
        raise KeyboardInterrupt

model = YOLO("yolo26n.pt")
model.add_callback("on_model_save", power_cut)
model.train(data="my_dataset/data.yaml", epochs=5, imgsz=320, name="pills_resume")
yolo train resume=True model=runs/detect/pills_resume/weights/last.pt
python round2.py
python compare_runs.py
pills_v2_warm has the best mAP50-95 (0.694 vs 0.659 for pills_v1), with the same
classes and labels, so round three warm-starts from pills_v2_warm/weights/best.pt.
Sırada ne var

Eğitebilir, sorunları teşhis edebilir ve yinelemeler yapabilirsin. Sırada modelleri sabit görüntülerden alıp gerçek dağıtımların çoğunun gerçekleştiği videoya taşıma var.

İlerlemeni kaydetmek için giriş yap