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

Ş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
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.
| Model | boyut (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-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 üzerindeki tek model ve tek ölçek içindir.
yolo val detect data=coco.yaml device=0ile 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.pt | yolo26s.pt |
yolo26s.pt | yolo26m.pt |
yolo26m.pt | yolo26x.pt |
yolo26l.pt | yolo26x.pt |
Aileler arası damıtma (örneğin YOLO11 öğretmeni ile YOLO26 öğrencisi) desteklenmez.
Anahtar Parametreler#
| Parametre | Tip | Varsayılan | Açıklama |
|---|---|---|---|
distill_model | str | None | Öğretmen model dosyasına giden yol (örn. yolo26x.pt). Bunu ayarlamak bilgi damıtmaya olanak tanır. |
dis | float | 6.0 | Damı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#
- Öğretmen model
evalmodunda dondurulmuş olarak kalır ve her yığın üzerinde çıkarım çalıştırır - Öğrenci model, standart görev kayıpları artı damıtma rehberliği ile eğitilir.
- Özellikler, her iki modelden de Detect ailesi başlığını besleyen üç boyun katmanından çıkarılır.
- Bir yansıtıcı ağ (projeksiyon ağı) (hafif bir MLP), öğrenci özellik boyutlarını öğretmene uyacak şekilde hizalar.
- 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.
- 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 + 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:#fffGö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.
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.
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:
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:
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:
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 640Dış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_modelyolunun doğru olduğunu ve dosyanın yüklendiğini doğrulayın- Kayıp değeri çok küçükse
disdeğerini artırmayı deneyin - Öğretmen modelin aynı veri kümesiyle eğitildiğinden emin ol.
distill_modelparametresini 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
evalmodunda çalışır ve ek yükü yönetilebilir tutar. Etkiyi azaltmak içinamp=Truekullanı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.