تخصيص متقدم

تعد كل من واجهة سطر الأوامر وواجهة Python في Ultralytics YOLO تجريدات عالية المستوى مبنية على منفذي محرك أساسي. يركز هذا الدليل على محرك Trainer، موضحاً كيفية تخصيصه لتلبية احتياجاتك الخاصة.



Watch: Mastering Ultralytics YOLO: Advanced Customization
تلميحة

للحصول على أمثلة عملية لتخصيصات المدرب الشائعة - مثل المقاييس المخصصة، وخسارة فئة مرجحة (class-weighted loss)، وحفظ النموذج، وتجميد العمود الفقري (backbone freezing)، ومعدلات التعلم لكل طبقة - راجع دليل تخصيص المدرب.

BaseTrainer

توفر فئة BaseTrainer روتين تدريب عام قابل للتكيف مع مهام مختلفة. قم بتخصيصه عن طريق تجاوز وظائف أو عمليات محددة مع الالتزام بالتنسيقات المطلوبة. على سبيل المثال، قم بدمج نموذجك الخاص ومُحمّل البيانات الخاص بك عن طريق تجاوز هذه الوظائف:

  • get_model(cfg, weights): يبني النموذج المراد تدريبه.
  • get_dataloader(): يبني مُحمّل البيانات.

لمزيد من التفاصيل والكود المصدري، راجع مرجع BaseTrainer.

DetectionTrainer

إليك كيفية استخدام وتخصيص Ultralytics YOLO DetectionTrainer:

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, weights):
        """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, weights):
        """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 بشكل مشابه. لمزيد من المعلومات، راجع الوثائق الخاصة بـ Validators و Predictors.

استخدام YOLO مع مدربين مخصصين

توفر فئة النموذج YOLO غلافاً عالي المستوى لفئات المدرب. يمكنك الاستفادة من هذه البنية لمرونة أكبر في سير عمل تعلم الآلة الخاص بك:

from ultralytics import YOLO
from ultralytics.models.yolo.detect import DetectionTrainer

# Create a custom trainer
class MyCustomTrainer(DetectionTrainer):
    def get_model(self, cfg, weights):
        """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 مع تخصيص عملية التدريب الأساسية لتناسب متطلباتك المحددة.

الأسئلة الشائعة

كيف يمكنني تخصيص Ultralytics YOLO DetectionTrainer لمهام محددة؟

قم بتخصيص DetectionTrainer لمهام محددة عن طريق تجاوز طرقه للتكيف مع نموذجك المخصص ومُحمّل البيانات. ابدأ بالوراثة من DetectionTrainer وأعد تعريف طرق مثل get_model لتنفيذ وظائف مخصصة. إليك مثال:

from ultralytics.models.yolo.detect import DetectionTrainer

class CustomTrainer(DetectionTrainer):
    def get_model(self, cfg, weights):
        """Loads a custom detection model given configuration and weight files."""
        ...

trainer = CustomTrainer(overrides={...})
trainer.train()
trained_model = trainer.best  # Get the best model

لمزيد من التخصيص، مثل تغيير دالة الخسارة أو إضافة رد نداء، راجع دليل ردود النداء.

ما هي المكونات الرئيسية لـ BaseTrainer في Ultralytics YOLO؟

يعمل BaseTrainer كأساس لروتينات التدريب، وهو قابل للتخصيص لمهام مختلفة عن طريق تجاوز طرقه العامة. المكونات الرئيسية تشمل:

  • get_model(cfg, weights): يبني النموذج المراد تدريبه.
  • get_dataloader(): يبني مُحمّل البيانات.
  • preprocess_batch(): يتعامل مع المعالجة المسبقة للدفعة قبل تمرير النموذج للأمام.
  • set_model_attributes(): يحدد سمات النموذج بناءً على معلومات مجموعة البيانات.
  • get_validator(): يُرجع مدققاً لتقييم النموذج.

لمزيد من التفاصيل حول التخصيص والكود المصدري، راجع مرجع BaseTrainer.

كيف يمكنني إضافة رد نداء إلى Ultralytics YOLO DetectionTrainer؟

أضف ردود نداء لمراقبة وتعديل عملية التدريب في 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 لتدريب النماذج؟

يوفر Ultralytics YOLO تجريداً عالي المستوى فوق منفذي محرك أقوياء، مما يجعله مثالياً للتطوير السريع والتخصيص. تشمل الفوائد الرئيسية:

  • سهولة الاستخدام: تبسط كل من واجهات سطر الأوامر و Python المهام المعقدة.
  • الأداء: محسّن لـ اكتشاف الكائنات في الوقت الفعلي وتطبيقات ذكاء اصطناعي مرئي متنوعة.
  • التخصيص: قابل للتوسيع بسهولة للنماذج المخصصة، ودوال الخسارة، ومُحمّلات البيانات.
  • النمطية: يمكن تعديل المكونات بشكل مستقل دون التأثير على المسار بأكمله.
  • التكامل: يعمل بسلاسة مع الأطر والأدوات الشهيرة في نظام تعلم الآلة البيئي.

تعرف على المزيد حول قدرات YOLO من خلال استكشاف صفحة Ultralytics YOLO الرئيسية.

هل يمكنني استخدام Ultralytics YOLO DetectionTrainer للنماذج غير القياسية؟

نعم، يعتبر DetectionTrainer مرناً للغاية وقابلاً للتخصيص للنماذج غير القياسية. ورّث من DetectionTrainer وزِد حمل الطرق لدعم احتياجات نموذجك المحددة. إليك مثال بسيط:

from ultralytics.models.yolo.detect import DetectionTrainer

class CustomDetectionTrainer(DetectionTrainer):
    def get_model(self, cfg, weights):
        """Loads a custom detection model."""
        ...

trainer = CustomDetectionTrainer(overrides={...})
trainer.train()

للحصول على تعليمات وأمثلة شاملة، راجع مرجع DetectionTrainer.

التعليقات