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.
Uygulamalı
Doğru Çalıştırma Türünü Seç#

| Durum | Çalıştırma türü | Başlangıç noktası |
|---|---|---|
| Çalışmanın ortasında elektrik kesintisi, bağlantının kopması veya bellek yetersizliği | Sürdür | Optimizer 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şmesi | Sıfırdan başla | yolo26n.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.pt2. 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.dataveyaepochsdeğerini belirtmedin: tüm argümanlar kontrol noktasından alındı.batch,deviceveworkersgibi bazı çalışma zamanı ayarları sürdürme sırasında geçersiz kılınabilir; diğer her şey yok sayılır veResume 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 | Örnek | Etki |
|---|---|---|
fraction | fraction=0.5 | Eğitim görüntülerinin ilk yarısıyla çalışır (dosya adına göre sıralanmış) |
time | time=0.25 | 0.25 saat sonra durur ve epochs değerini geçersiz kılar |
patience | patience=10 | Doğrulama başarım ölçütü 10 epoch boyunca iyileşmediğinde durur |
imgsz | imgsz=320 | 640 boyutundaki piksel sayısının dörtte biri; çalıştırmaları yalnızca aynı boyutta karşılaştır |
cache | cache=True | Sonraki 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#
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.
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.
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.
Çö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.pypills_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.