التخصيص المتقدم#
تعتبر كل من واجهة سطر الأوامر الخاصة بـ Ultralytics YOLO وواجهة Python تجريدات عالية المستوى مبنية على منفذي محرك الأساس. يركز هذا الدليل على محرك Trainer، موضحاً كيفية تخصيصه ليناسب احتياجاتك الخاصة.
Watch: Mastering Ultralytics YOLO: Advanced Customization
للحصول على أمثلة عمليّة لتخصيصات المدرب الشائعة — مثل المقاييس المخصصة، والدالة التخسرية الموزونة حسب الفئات، وحفظ النماذج، وتجميد الهيكل الأساسي، ومعدلات التعلم لكل طبقة — راجع دليل تخصيص المدرب.
BaseTrainer#
توفر فئة BaseTrainer روتين تدريب عام قابل للتكيف مع مهام مختلفة. قم بتخصيصه عن طريق تجاوز وظائف أو عمليات محددة مع الالتزام بالصيغ المطلوبة. على سبيل المثال، قم بدمج نموذجك ومحمّل البيانات المخصصين من خلال تجاوز هذه الوظائف:
get_model(cfg, weights): ينشئ النموذج المراد تدريبه.get_dataloader(): ينشئ محمّل البيانات.
لمزيد من التفاصيل والشفرة المصدرية، راجع مرجع BaseTrainer.
DetectionTrainer#
إليك كيفية استخدام وتخصيص DetectionTrainer الخاص بـ Ultralytics YOLO:
from ultralytics.models.yolo.detect import DetectionTrainer
trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best # Get the best modelتخصيص مدرب الكشف (DetectionTrainer)#
لتدريب نموذج كشف مخصص غير مدعوم مباشرةً، قم بتحميل وظائف get_model الحالية بشكل زائد:
from ultralytics.models.yolo.detect import DetectionTrainer
class CustomTrainer(DetectionTrainer):
def get_model(self, cfg=None, weights=None, verbose=True):
"""Loads a custom detection model given configuration and weight files."""
trainer = CustomTrainer(overrides={...})
trainer.train()قم بتخصيص مدرب الكشف بشكل أكبر عن طريق تعديل دالة الخسارة أو إضافة رد نداء لرفع النموذج إلى Google Drive كل 10 عصور تدريب. إليك مثال على ذلك:
from ultralytics.models.yolo.detect import DetectionTrainer
from ultralytics.nn.tasks import DetectionModel
class MyCustomModel(DetectionModel):
def init_criterion(self):
"""Initializes the loss function and adds a callback for uploading the model to Google Drive every 10 epochs."""
class CustomTrainer(DetectionTrainer):
def get_model(self, cfg=None, weights=None, verbose=True):
"""Returns a customized detection model instance configured with specified config and weights."""
return MyCustomModel(...)
# Callback to upload model weights
def log_model(trainer):
"""Logs the path of the last model weight used by the trainer."""
last_weight_path = trainer.last
print(last_weight_path)
trainer = CustomTrainer(overrides={...})
trainer.add_callback("on_train_epoch_end", log_model) # Adds to existing callbacks
trainer.train()لمزيد من المعلومات حول أحداث تشغيل ردود النداء ونقاط الدخول، راجع دليل ردود النداء.
مكونات المحرك الأخرى#
قم بتخصيص المكونات الأخرى مثل Validators و Predictors بطريقة مشابهة. لمزيد من المعلومات، راجع وثائق المُقوّمات والمتنبئات.
استخدام YOLO مع المدربين المخصصين#
توفر فئة نموذج YOLO غلافاً عالي المستوى لفئات المدرب (Trainer). يمكنك الاستفادة من هذه البنية لتحقيق مرونة أكبر في سير عمل التعلم الآلي الخاص بك:
from ultralytics import YOLO
from ultralytics.models.yolo.detect import DetectionTrainer
# Create a custom trainer
class MyCustomTrainer(DetectionTrainer):
def get_model(self, cfg=None, weights=None, verbose=True):
"""Custom code implementation."""
# Initialize YOLO model
model = YOLO("yolo26n.pt")
# Train with custom trainer
results = model.train(trainer=MyCustomTrainer, data="coco8.yaml", epochs=3)يتيح لك هذا النهج الحفاظ على بساطة واجهة YOLO مع تخصيص عملية التدريب الأساسية لتناسب متطلباتك المحددة.
الأسئلة الشائعة#
قم بتخصيص
DetectionTrainerلمهام محددة عن طريق تجاوز طرقه للتكيف مع نموذجك ومحمّل البيانات المخصصين. ابدأ بالوراثة منDetectionTrainerوأعد تعريف طرق مثلget_modelلتنفيذ وظائف مخصصة. إليك مثال على ذلك:from ultralytics.models.yolo.detect import DetectionTrainer class CustomTrainer(DetectionTrainer): def get_model(self, cfg=None, weights=None, verbose=True): """Loads a custom detection model given configuration and weight files.""" trainer = CustomTrainer(overrides={...}) trainer.train() trained_model = trainer.best # Get the best modelلمزيد من التخصيص، مثل تغيير دالة الخسارة أو إضافة رد نداء، راجع دليل ردود النداء.
يعمل
BaseTrainerكأساس لروتينات التدريب، وهو قابل للتخصيص لمهام مختلفة عن طريق تجاوز طرقه العامة. تشمل المكونات الرئيسية:get_model(cfg, weights): ينشئ النموذج المراد تدريبه.get_dataloader(): ينشئ محمّل البيانات.preprocess_batch(): يتعامل مع المعالجة المسبقة للدفعات قبل تمرير النموذج إلى الأمام.set_model_attributes(): يحدد سمات النموذج بناءً على معلومات مجموعة البيانات.get_validator(): يعيد مُقوّماً لتقييم النموذج.
لمزيد من التفاصيل حول التخصيص والشفرة المصدرية، راجع مرجع
BaseTrainer.أضف ردود نداء لمراقبة وتعديل عملية التدريب في
DetectionTrainer. إليك كيفية إضافة رد نداء لتسجيل أوزان النموذج بعد كل عصر تدريب:from ultralytics.models.yolo.detect import DetectionTrainer # Callback to upload model weights def log_model(trainer): """Logs the path of the last model weight used by the trainer.""" last_weight_path = trainer.last print(last_weight_path) trainer = DetectionTrainer(overrides={...}) trainer.add_callback("on_train_epoch_end", log_model) # Adds to existing callbacks trainer.train()لمزيد من التفاصيل حول أحداث ردود النداء ونقاط الدخول، راجع دليل ردود النداء.
يوفر Ultralytics YOLO تجريداً عالي المستوى فوق منفذي محرك أقوياء، مما يجعله مثاليًا للتطوير السريع والتخصيص. وتشمل الفوائد الرئيسية:
- سهولة الاستخدام: تعمل كل من واجهات سطر الأوامر وPython على تبسيط المهام المعقدة.
- الأداء: مُحسَّن لاكتشاف الكائنات في الوقت الفعلي ومختلف تطبيقات الرؤية الحاسوبية.
- التخصيص: قابل للتوسيع بسهولة للنماذج المخصصة، ودوال الخسارة، ومحمّلات البيانات.
- النموذجية: يمكن تعديل المكونات بشكل مستقل دون التأثير على خط الأنابيب بأكمله.
- التكامل: يعمل بسلاسة مع الأطر والأدوات الشائعة في النظام البيئي للتعلم الآلي.
تعرف على المزيد حول قدرات YOLO من خلال استكشاف صفحة Ultralytics YOLO الرئيسية.
نعم، يعتبر
DetectionTrainerمرناً للغاية وقابلاً للتخصيص للنماذج غير القياسية. ورث منDetectionTrainerوحمّل الطرق بشكل زائد لدعم احتياجات نموذجك المحدد. إليك مثال بسيط:from ultralytics.models.yolo.detect import DetectionTrainer class CustomDetectionTrainer(DetectionTrainer): def get_model(self, cfg=None, weights=None, verbose=True): """Loads a custom detection model.""" trainer = CustomDetectionTrainer(overrides={...}) trainer.train()للحصول على إرشادات وأمثلة شاملة، راجع مرجع
DetectionTrainer.