Başla

Bilgi Damıtımı

Hızlı Başlangıç#

distill_model argümanını ekleyerek daha büyük bir öğretmen modelinin rehberliğinde daha küçük bir öğrenci modeli eğit:

Örnek
from ultralytics import YOLO

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

Bilgi Damıtımı Nedir?#

Bilgi damıtımı, büyük ve doğru bir öğretmen modelindeki bilgiyi daha küçük bir öğrenci modele aktarır. Öğrenci, öğretmenin dahili özellik gösterimlerini taklit etmeyi öğrenir ve çoğu zaman sıfırdan eğitime kıyasla daha yüksek doğruluk elde eder.

Dondurulmuş bir öğretmen modelin daha küçük bir öğrenci modele rehberlik ettiği bilgi damıtma iş akışı

Damıtımı şu durumlarda kullan:

  • Dağıtım için daha küçük ve hızlı bir modele ihtiyacın varsa
  • Aynı veriler üzerinde eğitilmiş, yüksek doğruluklu bir öğretmen modelin varsa
  • Standart eğitimin sağladığından daha yüksek doğruluk istiyorsan
Not

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

Performans#

Bilgi damıtımı, COCO üzerinde tüm YOLO26 ailesinde öğrenci modellerin mAP değerini artırır ve çıkarım maliyetini artırmaz. Aşağıdaki tabloda standart YOLO26 modelleri (temel değer), önerilen öğretmenleriyle damıtım kullanılarak eğitilen aynı modellerle karşılaştırılır.

Modelboyut
(piksel)
mAPdoğr50-95
temel
mAPdoğr50-95
damıtılmış
mAPdoğr50-95
(e2e)
temel
mAPdoğr50-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ümesinde tek model ve tek ölçek için verilmiştir.
    Damıtılmış bir satırı yeniden üretmek için yolo val detect model=yolo26n-distill.pt data=coco.yaml device=0 kullan; e2e sütunu için nms=False ekle.
  • e2e değerleri NMS içermeyen çıkarım yolunu (nms=False) kullanır; e2e olmayan değerler varsayılan NMS son işlemesini (nms=None) kullanır. Ayrıntılar için Uçtan Uca Nesne Tespiti bölümüne bak.

Ön koşullar#

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

  • Eğitilmiş öğretmen modeli: Öğrenciyle aynı YOLO ailesinden bir .pt kontrol noktası.
  • Eşleşen görev: Öğrenciyle aynı görevi yapan ve ilgili veriler üzerinde eğitilmiş bir öğretmen kullan.
  • GPU kaynakları: Her iki modeli de bellekte tutmaya yetecek kaynak gerekir; öğretmen, gradyanlar veya optimize edici durumu olmadan yalnızca ileri geçiş çalıştırır.
ÖğrenciÖnerilen Öğretmen
yolo26n.ptyolo26s.pt
yolo26s.ptyolo26m.pt
yolo26m.ptyolo26x.pt
yolo26l.ptyolo26x.pt

Farklı aileler arasında damıtım (ör. YOLO11 öğretmeni ile YOLO26 öğrencisi) desteklenmez.

Temel Parametreler#

ParametreTürVarsayılanAçıklama
distill_modelstrNoneÖğretmen model dosyasının yolu (ör. yolo26x.pt). Bu ayar, bilgi damıtımını etkinleştirir.
disfloat6.0Damıtma kaybı ağırlığı. Damıtma kaybının toplam eğitim kaybına ne ölçüde katkı sağlayacağını belirler.

Nasıl Çalışır?#

  1. Öğretmen model, eval kipinde sabit kalır ve her yığında çıkarım yapar
  2. Öğrenci model, standart görev kayıplarına ek olarak damıtım rehberliğiyle eğitilir
  3. Özellikler, Detect ailesi başlığını besleyen üç boyun katmanında her iki modelden de çıkarılır
  4. İki 1×1 ReLU evrişiminden oluşan bir projektör, her öğrenci özellik haritasını öğretmenin kanallarına uyarlar
  5. Skor ağırlıklı L2 kaybı, yansıtılmış öğrenci özelliklerini öğretmen özellikleriyle karşılaştırır ve öğretmenin sınıflandırma güvenine göre ağırlıklandırılır
  6. Damıtma kaybı, dis ağırlığı kullanılarak standart kayıplarla birleştirilir

Görev Desteği#

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

Sınıflandırma, anlamsal bölütleme, derinlik kestirimi ve RT-DETR uyumlu bir Detect ailesi başlığı kullanmaz ve desteklenmez.

Uyarı

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

Diğer Görevler için Bilgi Damıtımı
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ıtımla eğitim, standart eğitimle aynıdır. Etkinleştirmek için distill_model yolunu belirt:

Bilgi Damıtımı Eğitimi
from ultralytics import YOLO

# Öğrenci modeli yükle
student = YOLO("yolo26m.pt")

# Daha büyük bir öğretmen modelinden bilgi damıtımı yaparak eğit
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ının 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ıtım Eğitimine Devam Etme#

Damıtım eğitimi, kontrol noktalarından devam etmeyi destekler. Öğretmen modeli, kontrol noktasında kayıtlı distill_model yolundan otomatik olarak yeniden oluşturulur:

Damıtım 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ıtım 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    l1_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 şekilde eğitilmiş bir öğrenci modeliyle aynıdır.

Sık Sorulan Sorular#

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

  • Evet. Öğretmen her yığın için bir ileri geçiş ekler; bu nedenle zaman ve bellek yükü öğretmen/öğrenci eşleşmesine bağlıdır. Öğretmen, gradyanlar veya optimize edici durumu olmadan eval kipinde çalışır.

  • Bilgi damıtımı, Detect ailesi başlığını besleyen üç boyun katmanındaki özellikleri damıttığı için detect, segment, pose ve obb görevleriyle çalışır. Classify, semantic, depth ve RT-DETR desteklenmez.

    Doğruluk iyileştirmeleri deneysel olarak yalnızca detect için doğrulanmıştır. Segment, pose ve obb teknik olarak uyumludur ancak henüz kıyaslama testlerinden geçirilmemiştir.

    Öğretmen ve öğrenci aynı YOLO ailesine ait olmalıdır (ör. YOLOv8, YOLO11 veya YOLO26). Farklı aileler arasında damıtma (ör. YOLO11 öğretmeni ve YOLO26 öğrencisi) desteklenmez.

Yorumlar5

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

  1. CharbelMsallemGitHub

    Cool! If same dataset, can the class mapping or the number of classes differ from parent to student but using the same images and split?

    1. Glenn JocherUltralytics

      Same images/splits can be reused, but for the supported distillation path the teacher and student should use the same task and data.yaml class configuration (nc, names, and class indices), per the Knowledge Distillation guide. If the student should learn only a subset, create a subset dataset/YAML with labels remapped to contiguous IDs and train or fine-tune a teacher on that same subset/mapping before using it as distill_model.