Bilgi Damıtma#
Hızlı başlangıç#
distill_model bağımsız değişkenini ekleyerek daha büyük bir öğretmen modelinin rehberliğinde daha küçük bir öğrenci modeli eğit:
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, büyük ve doğru öğretmen modelindeki bilgiyi daha küçük bir öğrenci modeline aktarır. Öğrenci, öğretmenin dahili özellik temsillerini taklit etmeyi öğrenir ve çoğu zaman sıfırdan eğitime kıyasla daha iyi doğruluk elde eder.

Damıtmayı ş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 iyi doğruluk istiyorsan
Bilgi damıtma detect, segment, pose ve obb görevleri için uygulanmıştır. Şimdilik doğruluk iyileştirmeleri yalnızca detect görevi için deneysel olarak doğrulanmıştır.
Performans#
Bilgi damıtma, COCO üzerinde tüm YOLO26 ailesinde öğrenci mAP değerini artırır ve çıkarım maliyetine ek yük getirmez. Aşağıdaki tablo, standart YOLO26 modellerini (temel çizgi) önerilen öğretmenlerinden damıtma ile eğitilmiş aynı modellerle karşılaştırır.
| Model | boyut (piksel) | mAPval 50-95 temel çizgi | mAPval 50-95 damıtılmış | mAPval 50-95 (e2e) temel çizgi | mAPval 50-95 (e2e) damıtılmış |
|---|---|---|---|---|---|
| YOLO26n-distill | 640 | 40.9 | 41.5 | 40.1 | 40.9 |
| YOLO26s-distill | 640 | 48.6 | 49.2 | 47.8 | 48.6 |
| YOLO26m-distill | 640 | 53.1 | 53.9 | 52.5 | 53.3 |
| YOLO26l-distill | 640 | 55.0 | 56.0 | 54.4 | 55.5 |
| YOLO26x-distill | 640 | 57.5 | 57.9 | 56.9 | 57.4 |
- mAPval değerleri, COCO val2017 veri kümesi üzerinde tek model ve tek ölçek içindir.
yolo val detect model=yolo26n-distill.pt data=coco.yaml device=0ile damıtılmış bir satırı yeniden üret; e2e sütunu içinnms=Falseekle. - e2e değerleri, NMS'siz çıkarım yolunu (
nms=False) kullanır; e2e olmayan değerler ise varsayılan NMS son işlemeyi (nms=None) kullanır. Ayrıntılar için End-to-End Detection bölümüne göz at.
Ön koşullar#
Başlamadan önce aşağıdaki gereksinimleri karşıladığından emin ol:
- Eğitilmiş öğretmen modeli: Öğrenciyle aynı YOLO ailesinden bir
.ptcheckpoint'i. - Eşleşen görev: Öğrenciyle aynı görev için bir öğretmen kullan ve bu öğretmeni ilgili veriler üzerinde eğit.
- GPU kaynakları: Her iki modeli de bellekte tutmaya yetecek kadar bellek; öğretmen, gradyanlar veya optimizer durumu olmadan yalnızca ileri yönlü çalışır.
Önerilen Model Çiftleri#
| Öğrenci | Önerilen Öğretmen |
|---|---|
yolo26n.pt | yolo26s.pt |
yolo26s.pt | yolo26m.pt |
yolo26m.pt | yolo26x.pt |
yolo26l.pt | yolo26x.pt |
Aileler arası damıtma (ör. YOLO11 öğretmeni ile YOLO26 öğrencisi) desteklenmez.
Temel Parametreler#
| Parametre | Tür | Varsayılan | Açıklama |
|---|---|---|---|
distill_model | str | None | Öğretmen model dosyasının yolu (ör. yolo26x.pt). Bu ayarın yapılması bilgi damıtmayı etkinleştirir. |
dis | float | 6.0 | Damıtma kaybı ağırlığı. Damıtma kaybının toplam eğitim kaybına ne ölçüde katkıda bulunacağını kontrol eder. |
Nasıl Çalışır?#
- Öğretmen modeli,
evalmodunda sabit kalır ve her batch üzerinde çıkarım yapar - Öğrenci modeli, standart görev kayıplarına ek olarak damıtma rehberliğiyle eğitilir
- Özellikler, Detect ailesi başlığına girdi sağlayan üç neck katmanında her iki modelden çıkarılır
- İki 1×1 evrişim ve ReLU içeren bir projektör, her öğrenci özellik haritasını öğretmenin kanallarına hizalar
- Bir skor ağırlıklı L2 kaybı, yansıtılmış öğrenci özelliklerini öğretmen özellikleriyle karşılaştırır; ağırlıklandırma öğretmenin sınıflandırma güvenine göre yapılır
- Damıtma kaybı,
disağı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 + l1_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:#fffGörev Desteği#
Damıtma uygulaması, modelin Detect ailesi başlığına girdi sağlayan üç neck katmanından özellikler çıkarır. segment, pose ve obb başlıkları aynı Detect mimarisinden türediği için damıtma teknik olarak bu görevlerle de uyumludur.
Sınıflandırma, anlamsal segmentasyon, derinlik tahmini ve RT-DETR uyumlu bir Detect ailesi başlığı kullanmaz ve desteklenmez.
Şimdiye kadar yalnızca detect görevi deneysel olarak kıyaslanmış ve doğrulanmıştır. segment, pose veya obb için damıtmayı çalıştırabilirsin, ancak bu görevlerdeki doğruluk iyileştirmeleri henüz doğrulanmamıştır.
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 belirt:
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ının katkısını kontrol eder:
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 Devam Etme#
Damıtma eğitimi checkpoint'lerden devam etmeyi destekler. Öğretmen modeli, checkpoint'te kayıtlı distill_model yolundan otomatik olarak yeniden oluşturulur:
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 l1_loss dis_loss Instances Size
1/80 46.2G 1.566 5.404 0.003249 6.658 231 640Dış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.
SSS#
- Öğretmen ve öğrencinin aynı YOLO neslinden olduğunu doğrula
distill_modelyolunun doğru olduğunu ve dosyanın yüklendiğini doğrula- Kayıp değeri çok küçükse
disdeğerini artırmayı dene - Öğretmen modelinin aynı veri kümesi üzerinde eğitildiğinden emin ol
distill_modelparametresini ekle; diğer her şey aynı şekilde çalışır. Eğitim sırasında ek bir damıtma kaybı hesaplanır, ancak kaydedilen model ek yük içermeyen standart bir YOLO modelidir.Evet. Öğretmen her batch için bir ileri yönlü geçiş ekler; dolayısıyla zaman ve bellek ek yükü öğretmen/öğrenci çiftine bağlıdır. Öğretmen, gradyanlar veya optimizer durumu olmadan
evalmodunda çalışır.Bilgi damıtma, Detect ailesi başlığına girdi sağlayan üç neck 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 yalnızca detect görevi 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 ait olmalıdır (ör. YOLOv8, YOLO11 veya YOLO26). Aileler arası damıtma (ör. YOLO11 öğretmeni ile YOLO26 öğrencisi) desteklenmez.