YOLO Vision 2026:

Bilgi Damıtma#

Hızlı Başlangıç#

distill_model argümanını ekleyerek daha büyük bir öğretmen modelin rehberliğinde daha küçük bir öğrenci model eğitin:

Örnek
from ultralytics import YOLO

model = YOLO("yolo26n.pt")
model.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt")

Bilgi Damıtma Nedir?#

Bilgi damıtma, bilgiyi büyük ve doğru bir öğretmen modelden daha küçük bir öğrenci modele aktarır. Öğrenci, öğretmenin dahili özellik temsillerini taklit etmeyi öğrenir ve genellikle sıfırdan eğitilmeye kıyasla daha iyi doğruluk elde eder.

Bilgi damıtma iş akışı görseli

Şu durumlarda damıtma kullanın:

  • Dağıtım için daha küçük ve daha hızlı bir modele ihtiyacınız olduğunda
  • Aynı veri üzerinde eğitilmiş yüksek doğruluklu bir öğretmen modeliniz olduğunda
  • Standart eğitimin sunduğundan daha iyi bir doğruluk elde etmek istediğinizde
Not

Bilgi damıtma; detect, segment, pose ve obb görevleri için uygulanmıştır. Şimdilik yalnızca detect görevi için doğruluk iyileştirmeleri deneysel olarak doğrulanmıştır.

Performans#

Bilgi damıtma, ek bir çıkarım maliyeti olmaksızın COCO üzerindeki tüm YOLO26 ailesinde öğrenci mAP değerini artırır. Aşağıdaki tablo, standart YOLO26 modellerini (temel çizgi) önerilen öğretmenlerinden damıtma ile eğitilmiş aynı modellerle karşılaştırır.

Modelboyut
(piksel)
mAPval
50-95

temel hat
mAPval
50-95

damıtılmış
mAPval
50-95 (e2e)

temel hat
mAPval
50-95 (e2e)

damıtılmış
YOLO26n-distill64040.941.540.140.9
YOLO26s-distill64048.649.247.848.6
YOLO26m-distill64053.153.952.553.3
YOLO26l-distill64055.056.054.455.5
YOLO26x-distill64057.557.956.957.4
  • mAPval değerleri, COCO val2017 veri kümesi üzerindeki tek model ve tek ölçek içindir.
    yolo val detect data=coco.yaml device=0 ile yeniden üretin
  • e2e değerleri varsayılan NMS'siz çıkarım yolunu kullanır; e2e olmayan değerler ise geleneksel NMS son işleme adımlarını (end2end=False) kullanır. Ayrıntılar için Uçtan Uca Algılama bölümüne bakın.

Ön koşullar#

Başlamadan önce aşağıdaki gereksinimleri karşıladığından emin ol:

  • Eğitilmiş Öğretmen Modeli: Öğrenci modeliyle aynı YOLO ailesinden (örneğin YOLO26) önceden eğitilmiş, yüksek doğruluklu bir öğretmen modeli.
  • Eşleşen Veri Kümesi ve Görev: Hem öğretmen hem de öğrenci modelleri tamamen aynı veri kümesini ve görev yapılandırmasını kullanmalıdır.
  • GPU Kaynakları: Eğitim sırasında her iki modeli aynı anda yükleyip çalıştırmak için yeterli GPU belleği (VRAM) (tipik VRAM yükü için SSS bölümüne bakın).

Önerilen Model Çiftleri#

ÖğrenciÖnerilen Öğretmen
yolo26n.ptyolo26s.pt
yolo26s.ptyolo26m.pt
yolo26m.ptyolo26x.pt
yolo26l.ptyolo26x.pt

Aileler arası damıtma (örneğin YOLO11 öğretmeni ile YOLO26 öğrencisi) desteklenmez.

Anahtar Parametreler#

ParametreTipVarsayılanAçıklama
distill_modelstrNoneÖğretmen model dosyasına giden yol (örn. yolo26x.pt). Bunu ayarlamak bilgi damıtmaya olanak tanır.
disfloat6.0Damıtma kaybı ağırlığı. Damıtma kaybının toplam eğitim kaybına ne kadar katkıda bulunacağını kontrol eder.

Nasıl Çalışır#

  1. Öğretmen model eval modunda dondurulmuş olarak kalır ve her yığın üzerinde çıkarım çalıştırır
  2. Öğrenci model, standart görev kayıpları artı damıtma rehberliği ile eğitilir.
  3. Özellikler, her iki modelden de Detect ailesi başlığını besleyen üç boyun katmanından çıkarılır.
  4. Bir yansıtıcı ağ (projeksiyon ağı) (hafif bir MLP), öğrenci özellik boyutlarını öğretmene uyacak şekilde hizalar.
  5. Bir skor ağırlıklı L2 kaybı, yansıtılan öğrenci özelliklerini öğretmen özellikleriyle karşılaştırır ve öğretmenin sınıflandırma güveniyle ağırlıklandırır.
  6. Damıtma kaybı, dis ağırlığı kullanılarak standart kayıplarla birleştirilir
flowchart TD
    A[Input Image Batch]:::start --> T[Teacher Model<br/>frozen, eval mode]:::extern
    A --> S[Student Model<br/>trainable]:::proc

    T --> |Detect head inputs| TF[Teacher Features]:::extern
    S --> |Detect head inputs| SF[Student Features]:::proc

    SF --> P[1×1 Conv Projector<br/>with ReLU]:::decide
    P --> AF[Aligned Student Features]:::proc

    TF --> SW[Score-weighted L2 Loss]:::proc
    AF --> SW

    S --> D[Detection Head]:::proc
    D --> DL[box_loss + cls_loss + dfl_loss]:::proc

    SW --> |× dis| DIS[distillation loss]:::proc
    DL --> TOTAL[Total Loss]:::out
    DIS --> TOTAL

    TOTAL --> BP[Backpropagate<br/>Student + Projector only]:::out

    classDef start fill:#4CAF50,color:#fff
    classDef proc fill:#2196F3,color:#fff
    classDef decide fill:#FF9800,color:#fff
    classDef out fill:#9C27B0,color:#fff
    classDef extern fill:#607D8B,color:#fff

Görev Desteği#

Damıtma uygulaması, modelin Detect ailesi başlığını besleyen üç boyun katmanından özellikleri çıkarır. segment, pose ve obb başlıkları aynı Detect mimarisinden türediğinden, damıtma teknik olarak bu görevlerle de uyumludur.

Uyarı

Sadece detect görevi deneysel olarak kıyaslanmış ve doğrulanmıştır. segment, pose veya obb için damıtma çalıştırabilirsin, ancak bu görevler için doğruluk iyileştirmeleri henüz doğrulanmamıştır.

Diğer Görevler için Bilgi Damıtma
from ultralytics import YOLO

# Segment
model = YOLO("yolo26n-seg.pt")
model.train(data="coco8-seg.yaml", epochs=100, distill_model="yolo26s-seg.pt")

# Pose
model = YOLO("yolo26n-pose.pt")
model.train(data="coco8-pose.yaml", epochs=100, distill_model="yolo26s-pose.pt")

# OBB
model = YOLO("yolo26n-obb.pt")
model.train(data="dota8.yaml", epochs=100, distill_model="yolo26s-obb.pt")

Eğitim#

Temel Eğitim#

Damıtma ile eğitim, standart eğitimle aynıdır. Etkinleştirmek için distill_model yolunu sağlayın:

Bilgi Damıtma Eğitimi
from ultralytics import YOLO

# Load a student model
student = YOLO("yolo26m.pt")

# Train with knowledge distillation from a larger teacher model
results = student.train(data="coco8.yaml", epochs=100, distill_model="yolo26x.pt")

Damıtma Kaybı Ağırlığını Ayarlama#

dis parametresi (varsayılan: 6.0) damıtma kaybı katkısını kontrol eder:

Özel Damıtma Ağırlığı
from ultralytics import YOLO

student = YOLO("yolo26n.pt")
results = student.train(data="coco8.yaml", epochs=100, distill_model="yolo26s.pt", dis=10.0)

Damıtma Eğitimine Kaldığı Yerden Devam Etme#

Damıtma eğitimi, kontrol noktalarından devam ettirmeyi destekler. Öğretmen model, distill_model yolundan otomatik olarak yeniden oluşturulur:

Damıtma Eğitimine Devam Et
from ultralytics import YOLO

student = YOLO("runs/detect/train/weights/last.pt")
results = student.train(resume=True)

Eğitim Çıktısı#

Damıtma etkinleştirildiğinde, eğitim günlüklerinde ek bir dis_loss sütunu görünür:

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss   dis_loss  Instances       Size
      1/80      46.2G      1.566      5.404    0.003249      6.658        231        640

Dışa aktarılan model yalnızca öğrenci ağırlıklarını içerir; dosya boyutu ve çıkarım hızı normal eğitilmiş bir öğrenci modeliyle aynıdır.

SSS#

    • Öğretmen ve öğrencinin aynı YOLO neslinden olduğunu doğrula.
    • distill_model yolunun doğru olduğunu ve dosyanın yüklendiğini doğrulayın
    • Kayıp değeri çok küçükse dis değerini artırmayı deneyin
    • Öğretmen modelin aynı veri kümesiyle eğitildiğinden emin ol.
  • distill_model parametresini ekleyin; diğer her şey aynı şekilde çalışır. Eğitim sırasında ekstra bir damıtma kaybı hesaplanır, ancak kaydedilen model ek yükü olmayan standart bir YOLO modelidir.

  • Evet. Öğretmen model her yığın üzerinde çıkarım çalıştırdığı için 1.2-1.5 kat daha yavaş eğitim ve ~1.1 kat daha fazla GPU belleği bekleyin. Öğretmen, gradyanlar olmadan eval modunda çalışır ve ek yükü yönetilebilir tutar. Etkiyi azaltmak için amp=True kullanın.

  • Bilgi damıtma, Detect ailesi başlığını besleyen üç boyun katmanından özellikleri damıttığı için detect, segment, pose ve obb görevleriyle çalışır. Classify ve semantic görevleri desteklenmez.

    Sadece detect görevi doğruluk iyileştirmeleri için deneysel olarak doğrulanmıştır. Segment, pose ve obb teknik olarak uyumludur ancak henüz kıyaslanmamıştır.

    Öğretmen ve öğrenci aynı YOLO ailesine (örneğin YOLOv8, YOLO11 veya YOLO26) ait olmalıdır. Aileler arası damıtma (örneğin bir YOLO11 öğretmeni ile YOLO26 öğrencisi) desteklenmez.

Yorumlar