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:
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.

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
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.
| Model | boyut (piksel) | mAPval 50-95 temel | mAPval 50-95 damıtılmış | mAPval 50-95 (e2e) temel | 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ümesinde tek model ve tek ölçek için verilmiştir.
Damıtılmış bir satırı yeniden üretmek içinyolo val detect model=yolo26n-distill.pt data=coco.yaml device=0kullan; e2e sütunu içinnms=Falseekle. - 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
.ptkontrol 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.
Önerilen Model Eşleşmeleri#
| Öğrenci | Önerilen Öğretmen |
|---|---|
yolo26n.pt | yolo26s.pt |
yolo26s.pt | yolo26m.pt |
yolo26m.pt | yolo26x.pt |
yolo26l.pt | yolo26x.pt |
Farklı aileler arasında damıtım (ö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, bilgi damıtımını 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ı sağlayacağını belirler. |
Nasıl Çalışır?#
- Öğretmen model,
evalkipinde sabit kalır ve her yığında çıkarım yapar - Öğrenci model, standart görev kayıplarına ek olarak damıtım rehberliğiyle eğitilir
- Özellikler, Detect ailesi başlığını besleyen üç boyun katmanında her iki modelden de çıkarılır
- İki 1×1 ReLU evrişiminden oluşan bir projektör, her öğrenci özellik haritasını öğretmenin kanallarına uyarlar
- 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
- 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ı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.
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.
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:
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:
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:
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 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.
Sık Sorulan Sorular#
- Öğ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 modelin 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ü 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
evalkipinde ç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.