التعديل المتقدم#
كل من واجهة سطر الأوامر الخاصة بـ Ultralytics YOLO وواجهات Python هي تجريدات عالية المستوى مبنية على منفذي محرك أساسيين. يركز هذا الدليل على محرك Trainer، موضحًا كيفية تخصيصه لتلبية احتياجاتك الخاصة.
Watch: Mastering Ultralytics YOLO: Advanced Customization
للحصول على أمثلة عملية لتخصيصات المدرب الشائعة — المقاييس المخصصة، الخسارة المرجحة للفئات، حفظ النموذج، تجميد الهيكل الأساسي، ومعدلات التعلم لكل طبقة — راجع دليل Customizing Trainer.
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=None, weights=None, verbose=True):
"""Loads a custom detection model given configuration and weight files."""
trainer = CustomTrainer(overrides={...})
trainer.train()قم بتخصيص المدرب بشكل أكبر عن طريق تعديل دالة الخسارة أو إضافة رد نداء لتحميل النموذج إلى Google Drive كل 10 دورات تدريبية (epochs). إليك مثال:
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 بطريقة مماثلة. لمزيد من المعلومات، راجع وثائق المُحققين (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. إليك كيفية إضافة رد نداء لتسجيل أوزان النموذج بعد كل دورة تدريبية (epoch):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.