Ultralytics YOLO27: Bekleme listesine katıl.
Başla

Özel Bir Veri Kümesinde YOLO Nasıl İnce Ayarlanır

İnce ayar, rastgele başlatma yerine öğrenilmiş ağırlıklardan başlayarak önceden eğitilmiş bir modeli yeni sınıfları tanıyacak şekilde uyarlar. Yüzlerce dönem boyunca sıfırdan eğitim yapmak yerine, ince ayar önceden eğitilmiş COCO özelliklerini yeniden kullanır ve özel verilerde çok daha kısa sürede yakınsar.

Bu kılavuz, temel kullanımdan katman dondurma ve iki aşamalı eğitim gibi ileri tekniklere kadar, özel veri kümelerinde YOLO26 için ince ayarı ele alır.

İnce Ayar ve Sıfırdan Eğitim Karşılaştırması#

Önceden eğitilmiş bir model; kenar algılama, doku tanıma ve şekil anlama gibi genel görsel özellikleri milyonlarca görüntüden öğrenmiştir. İnce ayar yoluyla yapılan aktarımı öğrenme, bu bilgiyi yeniden kullanır ve modele yalnızca yeni sınıfların neye benzediğini öğretir; bu nedenle model daha hızlı yakınsar ve daha az veri gerektirir. Sıfırdan eğitim ise bunların tümünü siler ve modeli her şeyi piksel düzeyindeki örüntülerden başlayarak öğrenmeye zorlar; bu da çok daha fazla kaynak gerektirir. Yalnızca mimariyi tanımlayan .yaml dosyalarının kontrol noktalarından nasıl farklı olduğunu öğrenmek için Model YAML Yapılandırma Kılavuzu sayfasına bak.

İnce AyarSıfırdan Eğitim
Başlangıç ağırlıklarıCOCO üzerinde önceden eğitilmiş (80 sınıf)Rastgele başlatma
KomutYOLO("yolo26n.pt")YOLO("yolo26n.yaml")
YakınsamaDaha hızlı - omurga zaten eğitilmiştirDaha yavaş - tüm katmanlar sıfırdan öğrenir
Veri gereksinimleriDaha düşük - önceden eğitilmiş özellikler daha az veriyi telafi ederDaha yüksek - model tüm özellikleri yalnızca veri kümesinden öğrenmelidir
Ne zaman kullanılırDoğal görüntüler içeren özel sınıflarCOCO'dan temelden farklı alanlar (tıp, uydu, radar)
İnce ayar için ek kod gerekmez

.pt dosyası YOLO("yolo26n.pt") ile yüklendiğinde, önceden eğitilmiş ağırlıklar modele kaydedilir. Sonrasında .train(data="custom.yaml") çağrıldığında, tüm uyumlu ağırlıklar otomatik olarak yeni model mimarisine aktarılır, eşleşmeyen katmanlar (sınıf sayısı farklı olduğunda son sınıflandırma katmanı gibi) yeniden başlatılır ve eğitim başlar. Elle ağırlık yüklemek, katmanları değiştirmek veya özel aktarım öğrenmesi kodu yazmak gerekmez.

Önceden Eğitilmiş Ağırlık Aktarımı Nasıl Çalışır?#

Önceden eğitilmiş bir model farklı sayıda sınıfa sahip bir veri kümesinde ince ayarlandığında (örneğin, COCO'nun 80 sınıfından 5 özel sınıfa geçildiğinde), Ultralytics şekil duyarlı ağırlık aktarımı gerçekleştirir:

  1. Omurga ve boyun tamamen aktarılır - bu katmanlar genel görsel özellikleri çıkarır ve şekilleri sınıf sayısından bağımsızdır.
  2. Algılama başlığı kısmen yeniden başlatılır - yalnızca her sınıflandırma dalının son evrişimi (cv3, one2one_cv3) sınıf sayısına (80'e karşı 5) bağlı bir şekle sahiptir; her iki model de aynı ölçeği kullanıyorsa dalın gizli katmanları aktarılır. Eşleşen sınıf adlarına sahip uyumlu satırlar, eşleşmeyen satırlar başlatılmadan önce yeniden eşlenir. Başlıktaki kutu regresyon katmanlarının (cv2, one2one_cv2) şekilleri sınıf sayısından bağımsız olarak sabittir; bu nedenle normal şekilde aktarılırlar.
  3. Sınıf sayısı değiştirilirken ağırlıkların büyük çoğunluğu aktarılır. Örneğin, YOLO26n COCO'dan (80 sınıf) 5 sınıflı bir veri kümesine ince ayarlandığında, ada göre eşleşen uyumlu sınıflandırma satırlarına ek olarak 708 ağırlık tensörünün 696'sı aktarılır.

Önceden eğitilmiş modelle aynı sayıda sınıfa sahip veri kümelerinde (örneğin, COCO üzerinde önceden eğitilmiş ağırlıklara başka bir 80 sınıflı veri kümesinde ince ayar yapılırken) algılama başlığı da dâhil olmak üzere ağırlıkların %100'ü aktarılır.

Ad Takma Adlarıyla Sınıfları Aktarma#

Ultralytics, büyük/küçük harf farkını ve baştaki ya da sondaki boşlukları göz ardı ederek veri kümeleri arasında eşleşen sınıflandırma başlığı satırlarını sınıf adına göre aktarır. Eşdeğer sınıflar farklı adlar kullanıyorsa yüklemeden önce kaynak kontrol noktasındaki sınıf adlarını bellekte yeniden adlandır. Böylece aksi hâlde eşleşmiyor olarak değerlendirilip rastgele başlatılacak ortak kavramlara ait önceden eğitilmiş sınıflandırma ağırlıkları korunur.

Bu Objects365 v2-COCO örneği, kaynak sınıfları yüklenen kontrol noktasında yeniden adlandırır; train() bu kontrol noktasını önceden eğitilmiş ağırlık olarak kullanır:

from ultralytics import YOLO

# Kaynak Objects365 v2 adı (küçük harfe dönüştürülmüş) -> hedef COCO adı
ALIASES = {
    "wild bird": "bird",
    "handbag/satchel": "handbag",
    "luggage": "suitcase",
    "bowl/basin": "bowl",
    "orange/tangerine": "orange",
    "monitor/tv": "tv",
    "stuffed toy": "teddy bear",
    "hair dryer": "hair drier",
}

model = YOLO("path/to/yolo26s-objects365.pt")
# Objects365 sınıf adları Baş Harfleri Büyük Yazılır; bu nedenle küçük harfe dönüştürülmüş adla eşleştirin
model.model.names = {i: ALIASES.get(name.lower(), name) for i, name in model.model.names.items()}
model.train(data="coco.yaml", epochs=100, imgsz=640)

cls_remap ayarı, bu ada dayalı aktarımı varsayılan olarak etkinleştirir. Uyumlu satırlar kopyalandığında eğitim sırasında Remapped N/M cls head rows from pretrained weights by class name yazdırılır; bu özelliği devre dışı bırakmak için cls_remap=False ayarını yap.

Temel İnce Ayar Örneği#

Örnek
from ultralytics import YOLO

model = YOLO("yolo26n.pt")  # önceden eğitilmiş modeli yükle
model.train(data="custom.yaml", epochs=50, imgsz=640)

Model Boyutu Seçimi#

Daha büyük modellerin kapasitesi daha yüksektir ancak güncellenecek parametre sayısı da fazladır; bu durum, eğitim verileri sınırlı olduğunda aşırı öğrenme riskini artırabilir. Daha küçük bir modelle (YOLO26n veya YOLO26s) başlayıp yalnızca doğrulama metrikleri sabitlenirse modeli büyütmek pratik bir yaklaşımdır. En uygun model boyutu; görevin karmaşıklığına, sınıf sayısına, veri kümesinin çeşitliliğine ve dağıtım için kullanılabilir donanıma bağlıdır.

Optimizasyon Algoritması ve Öğrenme Oranı Seçimi#

Varsayılan optimizer=auto ayarı, optimizasyon algoritmasını ve öğrenme oranını toplam eğitim iterasyonu sayısına göre seçer:

  • 10.000 veya daha az iterasyon (küçük veri kümeleri veya az sayıda epoch): Düşük ve otomatik hesaplanan öğrenme oranıyla AdamW
  • 10.000'den fazla yineleme (büyük veri kümeleri): lr=0.01 ile MuSGD (Muon+SGD hibrit optimize edicisi)

Çoğu ince ayar görevinde varsayılan ayar, elle ayarlama yapmaya gerek kalmadan iyi sonuç verir. Şu durumlarda optimizasyon algoritmasını açıkça ayarlamayı düşün:

  • Eğitim kararsızsa (kayıp sıçrıyor veya artmaya devam ediyorsa): daha kararlı yakınsama için optimizer=AdamW, lr0=0.001 değerini dene
  • Küçük bir veri kümesinde büyük bir modele ince ayar yapıyorsan: optimizer=AdamW, lr0=0.001 gibi daha düşük öğrenme oranına sahip, açıkça belirtilmiş bir optimizasyon algoritması önceden eğitilmiş özelliklerin korunmasına yardımcı olabilir
Otomatik optimizasyon algoritması elle ayarlanan lr0 değerini geçersiz kılar

optimizer=auto olduğunda lr0 değeri yok sayılır. Öğrenme oranını elle kontrol etmek için optimizasyon algoritmasını açıkça ayarla: optimizer=SGD, lr0=0.005.

Katmanları Dondurma#

Dondurma, eğitim sırasında belirli katmanların güncellenmesini önler. Veri kümesi model kapasitesine kıyasla küçük olduğunda bu işlem eğitimi hızlandırır ve aşırı öğrenmeyi azaltır.

freeze parametresi bir tam sayı veya liste kabul eder. freeze=10 tam sayısı, YOLO26 omurgasının büyük bölümünü kapsayan ilk 10 katmanı (0-9 indeksleri) dondurur. Omurga 0-10. katmanları kapsadığından freeze=10, son C2PSA bloğunu (10. katman) eğitilebilir durumda bırakır; tüm omurgayı dondurmak için freeze=11 kullan. Kısmi omurga dondurma için bir liste freeze=[0, 3, 5] gibi katman indeksleri veya daha hassas kontrol için freeze=["23.cv2", "23.one2one_cv2"] gibi modül adı dizeleri içerebilir; modül adları, bir katmandaki belirli dalları hedefler (burada algılama başlığının her iki kutu regresyon dalını).

Örnek
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(data="custom.yaml", epochs=50, freeze=10)

Uygun dondurma derinliği, hedef alanın önceden eğitilmiş veriye ne kadar benzediğine ve ne kadar eğitim verisi bulunduğuna bağlıdır:

SenaryoÖneriGerekçe
Büyük veri kümesi, benzer alanfreeze=None (varsayılan)Aşırı uyum olmadan tüm katmanları uyarlamaya yetecek kadar veri
Küçük veri kümesi, benzer alanfreeze=10Omurga özelliklerini korur, eğitilebilir parametre sayısını azaltır
Çok küçük veri kümesifreeze=23Yalnızca algılama başlığı eğitilir; aşırı uyum riski en aza iner
COCO'dan çok farklı alanfreeze=NoneOmurga özellikleri iyi aktarılmayabilir ve yeniden eğitilmeleri gerekebilir

Dondurma derinliği de bir hiperparametre olarak ele alınabilir. Birkaç değeri (0, 5, 10) deneyip doğrulama mAP sonuçlarını karşılaştırmak, belirli bir veri kümesi için en iyi ayarı bulmanın pratik bir yoludur.

İnce Ayar İçin Temel Hiperparametreler#

İnce ayar, genellikle sıfırdan eğitime kıyasla daha az hiperparametre ayarı gerektirir. En önemli parametreler şunlardır:

  • epochs: İnce ayar, sıfırdan eğitime kıyasla daha hızlı yakınsar. Orta düzeyde bir değerle başla ve doğrulama metrikleri durağanlaştığında erken durdurmak için patience kullan.
  • patience: Varsayılan 100 değeri, uzun eğitim çalışmaları için tasarlanmıştır. Bunu 10-20'ye düşürerek zaten yakınsamış çalışmalarda zaman kaybetmekten kaçınabilirsin.
  • warmup_epochs: Isınma, öğrenme oranını ilk epoch'lar boyunca zamanlanmış değerine kademeli olarak çıkarır; böylece ilk batch'lerin önceden eğitilmiş özellikleri bozma olasılığı azalır. İnce ayar yaparken bu değeri sıfırdan büyük tut, ancak varsayılan 3 epoch'un tamamı gerekli değildir: Objects365 ağırlıklarından çok epoch'lu devam eğitimi yapan resmî YOLO26 COCO ince ayarının arkasındaki evrimsel arama, tüm model boyutlarında yaklaşık bir epoch değerinde karar kıldı.

Eğitim parametrelerinin tam listesi için eğitim yapılandırması başvurusuna bak. Parametrelerin sunmadığı davranışlar (katman başına öğrenme oranları, gradyan kırpma veya özel doğrulama metrikleri) için eğitici sınıfını alt sınıf olarak genişlet.

İki Aşamalı İnce Ayar#

İki aşamalı ince ayar, eğitimi iki aşamaya böler. İlk aşamada omurga dondurulur ve yalnızca boyun ile başlık eğitilir; böylece algılama katmanları, önceden eğitilmiş özellikleri bozmadan yeni sınıflara uyum sağlayabilir. İkinci aşamada tüm katmanların dondurması kaldırılır ve hedef alana uyum sağlamak üzere omurgayı iyileştirmek için modelin tamamı daha düşük bir öğrenme oranıyla eğitilir.

Bu yaklaşım, omurganın uyarlanması gerekebileceği ancak her şeyi aynı anda eğitmenin kararsızlığa yol açtığı COCO'dan önemli ölçüde farklı hedef alanlarda (tıbbi görüntüler, hava görüntüleri, mikroskopi) özellikle yararlıdır. Geri çağırma tabanlı bir yaklaşımla dondurmayı otomatik olarak kaldırma hakkında bilgi için Omurgayı Dondurma ve Dondurmayı Kaldırma sayfasına bak.

İki aşamalı ince ayar
from ultralytics import YOLO

# Aşama 1: omurgayı dondur, başlığı ve boynu eğit
model = YOLO("yolo26n.pt")
model.train(data="custom.yaml", epochs=20, freeze=10, name="stage1", exist_ok=True)

# Aşama 2: tüm katmanların dondurmasını kaldır, daha düşük lr ile ince ayar yap
model = YOLO("runs/detect/stage1/weights/best.pt")
model.train(data="custom.yaml", epochs=30, optimizer="AdamW", lr0=0.001, name="stage2", exist_ok=True)

Sık Karşılaşılan Sorunlar#

Model hiçbir tahmin üretmiyor#

  • Yetersiz eğitim verisi: Çok az örnekle eğitim yapmak en yaygın nedendir; model, yetersiz veriden öğrenemez veya genelleme yapamaz. Diğer nedenleri araştırmadan önce her sınıf için yeterince çeşitli örnek bulunduğundan emin ol.

  • Veri kümesi yollarını kontrol et: Geçersiz görüntü yolları veri kümesi hatasına yol açar. Tek tek eksik veya boş etiket dosyaları arka plan görüntüsü olarak değerlendirilir ve tarama sırasında bildirilir; etiket içermeyen bir eğitim bölümü ise hataya neden olur. Eğitimden önce veri kümesini doğrula:

    yolo detect val model=yolo26n.pt data=custom.yaml
  • Güven eşiğini düşür: Tahminler üretiliyor ancak filtreleniyorsa çıkarım sırasında conf=0.1 değerini dene.

  • Sınıf sayısını doğrula: data.yaml içindeki nc değerinin etiket dosyalarındaki gerçek sınıf sayısıyla eşleştiğinden emin ol.

Doğrulama mAP değeri erken durağanlaşıyor#

  • Daha fazla veri ekle: İnce ayar, özellikle farklı açılara, ışıklandırmaya ve arka planlara sahip çeşitli örneklerle birlikte ek eğitim verilerinden önemli ölçüde yararlanır.
  • Sınıf dengesini kontrol et: Az temsil edilen sınıfların AP değeri düşük olur. Daha fazla örnek ekle veya doğrulama kümesinde cls_pw değerini ayarla.
  • Veri artırmayı azalt: Çok küçük veri kümelerinde yoğun veri artırma, yararından çok zarar verebilir. mosaic=0.5 veya mosaic=0.0 değerini dene.
  • Çözünürlüğü artır: Küçük nesneler içeren veri kümelerinde ayrıntıları korumak için imgsz=1280 değerini dene.

İnce ayardan sonra özgün sınıflardaki performans düşüyor#

Bu duruma felaket düzeyinde unutma denir: model yalnızca yeni verilerle ince ayar yapıldığında daha önce öğrendiği bilgileri kaybeder. Yeni verilerin yanında özgün veri kümesindeki görüntüler de kullanılmadıkça unutmayı önlemek çoğunlukla mümkün değildir. Bunu azaltmak için:

  • Veri kümelerini birleştir: İnce ayar sırasında yeni sınıfların yanına özgün sınıflara ait örnekleri de ekle. Unutmayı önlemenin güvenilir tek yolu budur.
  • Omurgayı ve boynu dondur: Yalnızca algılama başlığının eğitilmesi için hem omurgayı hem boynu dondurmak, çok düşük öğrenme oranıyla yapılan kısa ince ayar çalışmalarında yardımcı olur.
  • Daha az epoch eğit: Model yalnızca yeni verilerle ne kadar uzun süre eğitilirse unutma o kadar artar.

Sık Sorulan Sorular#

  • Sabit bir asgari sayı yoktur; sonuçlar görevin karmaşıklığına, sınıf sayısına ve alanın COCO'ya ne kadar benzediğine bağlıdır. Farklı ışıklandırma, açılar ve arka planlar içeren çeşitli görüntüler, ham miktardan daha önemlidir. Elindeki verilerle başla; doğrulama metrikleri yetersizse veri miktarını artır.

  • Önceden eğitilmiş bir .pt dosyası yükle ve özel data.yaml yolunu .train() ile ilet. Ultralytics, ağırlık aktarımını, sınıflandırma katmanının yeniden başlatılmasını ve eniyileyici seçimini otomatik olarak yönetir. Kod örneğinin tamamı için Temel İnce Ayar bölümüne bak.

  • En yaygın nedenler; geçersiz görüntü yolları, eksik veya boş etiket dosyaları, YAML içindeki nc ile gerçek etiket dosyaları arasında uyuşmazlık veya çok yüksek bir güven eşiğidir. Sorun giderme kontrol listesinin tamamı için Sık Karşılaşılan Sorunlar bölümüne bak.

  • Bu, veri kümesinin boyutuna ve alan benzerliğine bağlıdır. COCO'ya benzeyen bir alandaki küçük veri kümelerinde omurgayı (freeze=10) dondurmak aşırı uyumu önler. COCO'dan çok farklı alanlarda tüm katmanların dondurmasını kaldırmak (freeze=None), omurganın uyum sağlamasına olanak tanır. Ayrıntılı öneriler için Katmanları Dondurma bölümüne bak.

  • Yeni sınıfların yanında özgün sınıflara ait örnekleri de eğitim verilerine ekle. Bu mümkün değilse daha fazla katmanı dondurmak (freeze=10 veya daha yüksek bir değer) ve daha düşük bir öğrenme oranı kullanmak, önceden öğrenilen bilgilerin korunmasına yardımcı olur. Daha fazla bilgi için Özgün sınıflardaki performans düşüyor bölümüne bak.

Yorumlar4

Bir soru sor, sonuçlarını paylaş veya başka birine yardım et.

  1. Yuan Yao(düzenlendi)

    这是我在训练时遇到的一个问题,

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
    81/1000      6.68G          0          0          0        195        640: 100% ━━━━━━━━━━━━ 121/121 1.2s/it 2:20
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 23/23 2.1it/s 11.1s
                   all       1449       8364          0          0          0          0
    
      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
    82/1000      6.68G          0          0          0        184        640: 100% ━━━━━━━━━━━━ 121/121 1.2s/it 2:20
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 23/23 2.0it/s 11.3s
                   all       1449       8364          0          0          0          0
    
      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
    83/1000      6.68G          0          0          0        221        640: 100% ━━━━━━━━━━━━ 121/121 1.2s/it 2:19
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 23/23 2.1it/s 11.1s
                   all       1449       8364          0          0          0          0
    
      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
    84/1000      6.68G          0          0          0        212        640: 100% ━━━━━━━━━━━━ 121/121 1.2s/it 2:20
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 23/23 2.1it/s 11.2s
                   all       1449       8364          0          0          0          0
    
      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
    85/1000      6.68G          0          0          0        221        640: 100% ━━━━━━━━━━━━ 121/121 1.2s/it 2:20
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 23/23 2.1it/s 11.2s
                   all       1449       8364          0          0          0          0
    
      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
    86/1000      6.68G          0          0          0        216        640: 100% ━━━━━━━━━━━━ 121/121 1.2s/it 2:20
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 23/23 2.1it/s 11.0s
                   all       1449       8364          0          0          0          0
    
      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
    87/1000      6.68G          0          0          0        198        640: 100% ━━━━━━━━━━━━ 121/121 1.2s/it 2:19
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 23/23 2.0it/s 11.4s
                   all       1449       8364          0          0          0          0
    
      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
    88/1000      6.68G          0          0          0        229        640: 100% ━━━━━━━━━━━━ 121/121 1.2s/it 2:20
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 23/23 2.1it/s 11.2s
                   all       1449       8364          0          0          0          0
    
      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
    89/1000      6.68G          0          0          0        182        640: 100% ━━━━━━━━━━━━ 121/121 1.1s/it 2:18
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 23/23 2.1it/s 11.0s
                   all       1449       8364          0          0          0          0
    
      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
    90/1000      6.68G          0          0          0        218        640: 100% ━━━━━━━━━━━━ 121/121 1.2s/it 2:20
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 23/23 2.1it/s 11.0s
                   all       1449       8364          0          0          0          0
    
      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
    91/1000      6.68G          0          0          0        181        640: 100% ━━━━━━━━━━━━ 121/121 1.2s/it 2:19
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 23/23 2.1it/s 11.1s
                   all       1449       8364          0          0          0          0

    mAP一直是0。当时我用的是yaml文件用于训练模型,

    model_name = r"H:\1_yaoyuan\code\01_yolo26\yolo_Project\ultralytics-main\ultralytics\cfg\models\11\yolo11.yaml"

    之后改成了,

    model_name = 'yolo11n.pt' # 首次运行会自动下载

    然后训练才变的正常,

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
     2/1000      5.47G      2.825      1.856     0.8776        131        640: 100% ━━━━━━━━━━━━ 121/121 1.2s/it 2:20
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 23/23 2.0it/s 11.5s
                   all       1449       8364      0.554      0.314       0.32      0.117
    
      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size
     3/1000      5.47G      2.904      1.726     0.8738        206        640: 100% ━━━━━━━━━━━━ 121/121 1.1s/it 2:19
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100% ━━━━━━━━━━━━ 23/23 1.9it/s 11.9s
                   all       1449       8364      0.496       0.29      0.269      0.085

    这是为什么?微调和从头开始训练差别很大吗? 我问了deepseek,他说:“.yaml 路径迫使模型在毫无知识的情况下承受初始的梯度冲击,导致了数值崩溃;而 .pt 路径让模型从一个稳定的知识基础开始,顺利进入了正常的学习轨道。”

    可如果是这样,如果这个世界还没有yolo的pt文件,那么是不是mAP永远都是0了?

    1. Yuan Yao

      我还是刚学习的阶段,如果我问的问题很幼稚我非常抱歉

    2. Paula DerrengerUltralytics

      不用道歉,这是很合理的问题!不是的:从 .yaml 构建模型是随机初始化,从 yolo11n.pt 开始则利用预训练特征,通常收敛更快、需要的数据更少;YOLO11 官方示例也支持从零训练,并不需要已有 .pt 才能学会检测。你这里不仅 mAP 为 0,三个 loss 也连续为 0,这不能简单解释为“从零训练比较慢”,更应优先排查训练数值异常;仅凭这些日志,还不能确认 DeepSeek 所说的“梯度冲击”。建议保留 YAML,在原来的 model.train(...) 中加入 amp=False,重新启动训练以排查混合精度问题(AMP 检查说明)。如果仍然全为 0,请贴出完整训练代码、启动到首个异常 epoch 的文本日志,以及 GPU 型号、Ultralytics 和 PyTorch 版本。