التخصيص المتقدم#
واجهتا سطر الأوامر وPython في Ultralytics YOLO تجريدان عاليَا المستوى مبنيان على منفذات المحرك الأساسية. يركز هذا الدليل على المحرك Trainer، ويوضح كيفية تخصيصه لتلبية احتياجاتك المحددة.
شاهد: إتقان Ultralytics YOLO: التخصيص المتقدم
للاطلاع على أمثلة عملية لتخصيصات المدرب الشائعة — مثل المقاييس المخصصة، والخسارة الموزونة حسب الفئة، وحفظ النموذج، وتجميد العمود الفقري، ومعدلات التعلّم لكل طبقة — راجع دليل تخصيص المدرب.
BaseTrainer#
توفر الفئة BaseTrainer إجراءً عامًا للتدريب يمكن تكييفه مع مهام مختلفة. خصّصه بتجاوز دوال أو عمليات معينة مع الالتزام بالتنسيقات المطلوبة. على سبيل المثال، ادمج نموذجك ومحمّل البيانات المخصصين عبر تجاوز هذه الدوال:
get_model(cfg, weights): ينشئ النموذج المراد تدريبه.get_dataloader(dataset_path, batch_size, rank, mode): ينشئ محمّل البيانات.
لمزيد من التفاصيل والاطلاع على الشيفرة المصدرية، راجع مرجع BaseTrainer.
DetectionTrainer#
إليك كيفية استخدام DetectionTrainer في Ultralytics YOLO وتخصيصه:
from ultralytics.models.yolo.detect import DetectionTrainer
trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best # الحصول على أفضل نموذجتخصيص 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()يمكنك تخصيص المدرب أكثر من خلال تعديل دالة الخسارة أو إضافة رد نداء يُشغّل في نهاية كل حقبة، مثلًا لتسجيل أحدث الأوزان أو تحميلها. إليك مثالًا:
from ultralytics.models.yolo.detect import DetectionTrainer
from ultralytics.nn.tasks import DetectionModel
class MyCustomModel(DetectionModel):
def init_criterion(self):
"""Initializes a custom loss function for the model."""
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(...)
# رد نداء لتسجيل أوزان النموذج
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) # يُضاف إلى ردود النداء الحالية
trainer.train()لمزيد من المعلومات حول أحداث تشغيل ردود النداء ونقاط الدخول، راجع دليل ردود النداء.
مكونات المحرك الأخرى#
خصّص المكونات الأخرى مثل Validators وPredictors بالطريقة نفسها. لمزيد من المعلومات، راجع وثائق أدوات التحقق وأدوات التنبؤ.
استخدام YOLO مع مدربين مخصصين#
توفر فئة النموذج YOLO غلافًا عالي المستوى لفئات Trainer. يمكنك الاستفادة من هذه البنية لمزيد من المرونة في سير عمل تعلّم الآلة:
from ultralytics import YOLO
from ultralytics.models.yolo.detect import DetectionTrainer
# إنشاء مدرب مخصص
class MyCustomTrainer(DetectionTrainer):
def get_model(self, cfg=None, weights=None, verbose=True):
"""Custom code implementation."""
# تهيئة نموذج YOLO
model = YOLO("yolo26n.pt")
# التدريب باستخدام مدرب مخصص
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 # الحصول على أفضل نموذجلمزيد من التخصيص، مثل تغيير دالة الخسارة أو إضافة رد نداء، راجع دليل ردود النداء.
يشكّل
BaseTrainerأساس إجراءات التدريب، ويمكن تخصيصه لمهام مختلفة عبر تجاوز أساليبه العامة. تشمل مكوناته الرئيسية:get_model(cfg, weights): ينشئ النموذج المراد تدريبه.get_dataloader(dataset_path, batch_size, rank, mode): ينشئ محمّل البيانات.preprocess_batch(): يتولى المعالجة المسبقة للدفعة قبل التمرير الأمامي للنموذج.set_model_attributes(): يضبط سمات النموذج استنادًا إلى معلومات مجموعة البيانات.get_validator(): يعيد أداة تحقق لتقييم النموذج.
لمزيد من التفاصيل حول التخصيص والشيفرة المصدرية، راجع مرجع
BaseTrainer.أضف ردود نداء لمراقبة عملية التدريب وتعديلها في
DetectionTrainer. إليك كيفية إضافة رد نداء لتسجيل أوزان النموذج بعد كل حقبة تدريب:from ultralytics.models.yolo.detect import DetectionTrainer # رد نداء لتسجيل أوزان النموذج 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) # يُضاف إلى ردود النداء الحالية 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.