تدريب النماذج باستخدام Ultralytics YOLO
مقدمة
يتضمن تدريب نموذج تعلم عميق تزويده بالبيانات وضبط معاييره حتى يتمكن من إجراء تنبؤات دقيقة. تم تصميم وضع التدريب (Train mode) في Ultralytics YOLO26 لتدريب فعال وكفء لنماذج اكتشاف الكائنات، مع الاستفادة الكاملة من قدرات الأجهزة الحديثة. يهدف هذا الدليل إلى تغطية جميع التفاصيل التي تحتاجها للبدء في تدريب نماذجك الخاصة باستخدام مجموعة ميزات YOLO26 القوية.
Watch: How to Train a YOLO model on Your Custom Dataset in Google Colab.
لماذا تختار Ultralytics YOLO للتدريب؟
إليك بعض الأسباب المقنعة لاختيار وضع التدريب في YOLO26:
- الكفاءة: حقق أقصى استفادة من أجهزتك، سواء كنت تستخدم وحدة معالجة رسومات (GPU) واحدة أو تتوسع عبر وحدات متعددة.
- تعدد الاستخدامات: تدرب على مجموعات بيانات مخصصة بالإضافة إلى المجموعات المتاحة بسهولة مثل COCO وVOC وImageNet.
- سهولة الاستخدام: واجهات CLI وPython بسيطة وقوية لتجربة تدريب مباشرة.
- مرونة المعلمات الفائقة (Hyperparameter): مجموعة واسعة من المعلمات الفائقة القابلة للتخصيص لضبط أداء النموذج بدقة. لمزيد من التحكم، يمكنك تخصيص المدرب نفسه.
- التدريب السحابي: تدرب على وحدات GPU سحابية من خلال منصة Ultralytics مع مقاييس في الوقت الفعلي وحفظ نقاط التحقق التلقائي.
الميزات الرئيسية لوضع التدريب (Train Mode)
فيما يلي بعض الميزات البارزة لوضع التدريب في YOLO26:
- تنزيل مجموعة البيانات التلقائي: يتم تنزيل مجموعات البيانات القياسية مثل COCO وVOC وImageNet تلقائياً عند الاستخدام الأول.
- دعم وحدات GPU المتعددة: توسيع نطاق جهود التدريب الخاصة بك بسلاسة عبر وحدات GPU متعددة لتسريع العملية.
- تكوين المعلمات الفائقة: خيار تعديل المعلمات الفائقة من خلال ملفات تكوين YAML أو وسيطات CLI.
- التصور والمراقبة: تتبع مقاييس التدريب في الوقت الفعلي وتصور عملية التعلم للحصول على رؤى أفضل.
- مجموعات بيانات YOLO26 مثل COCO وVOC وImageNet والعديد غيرها يتم تنزيلها تلقائياً عند الاستخدام الأول، أي
yolo train data=coco.yaml
أمثلة على الاستخدام
قم بتدريب YOLO26n على مجموعة بيانات COCO8 لمدة 100 عصر بحجم صورة 640. يمكن تحديد جهاز التدريب باستخدام وسيطة device. إذا لم يتم تمرير أي وسيطة، فسيتم استخدام GPU device=0 عند توفره؛ وإلا سيتم استخدام device='cpu'. راجع قسم الوسيطات أدناه للحصول على قائمة كاملة بوسيطات التدريب.
على Windows، قد تتلقى RuntimeError عند تشغيل التدريب كبرنامج نصي. أضف كتلة if __name__ == "__main__": قبل كود التدريب الخاص بك لحل المشكلة.
يتم تحديد الجهاز تلقائياً. إذا كانت وحدة GPU متاحة، فسيتم استخدامها (جهاز CUDA الافتراضي 0)؛ وإلا سيبدأ التدريب على CPU.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.yaml") # build a new model from YAML
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n.yaml").load("yolo26n.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)التدريب باستخدام وحدات GPU متعددة
يسمح التدريب باستخدام وحدات GPU متعددة باستغلال أكثر كفاءة لموارد الأجهزة المتاحة من خلال توزيع حمل التدريب عبر وحدات GPU متعددة. هذه الميزة متاحة من خلال كل من Python API وواجهة سطر الأوامر. لتمكين التدريب باستخدام وحدات GPU متعددة، حدد معرفات جهاز GPU التي ترغب في استخدامها.
للتدريب باستخدام وحدتي GPU، تستخدم أجهزة CUDA 0 و1 الأوامر التالية. توسع إلى وحدات GPU إضافية حسب الحاجة.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model with 2 GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])
# Train the model with the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])عند تحديد أجهزة متعددة (مثلاً device=[0, 1])، يقوم Ultralytics داخلياً بإنشاء مثيل مدرب جديد وتنفيذ torch.distributed.run في الخلفية. يعمل هذا بسلاسة مع استخدام CLI القياسي ونصوص Python البرمجية غير المعدلة.
ومع ذلك، إذا كان برنامجك يحتوي على مكونات مخصصة—مثل مدرب مخصص، أو مدقق، أو مجموعة بيانات، أو خط أنابيب زيادة بيانات—فلا يمكن تسلسل هذه الكائنات ونقلها تلقائياً إلى عمليات DDP الفرعية. في هذه الحالة، يجب عليك تشغيل برنامجك مباشرة باستخدام torch.distributed.run:
python -m torch.distributed.run --nproc_per_node 2 your_training_script.pyالتدريب باستخدام GPU الخامل
يتيح التدريب باستخدام GPU الخامل الاختيار التلقائي لأقل وحدات GPU استخداماً في الأنظمة متعددة وحدات GPU، مما يؤدي إلى تحسين استخدام الموارد دون اختيار يدوي لـ GPU. تحدد هذه الميزة وحدات GPU المتاحة بناءً على مقاييس الاستخدام وتوفر VRAM.
لاختيار واستخدام أكثر وحدة GPU خمولاً للتدريب تلقائياً، استخدم وسيطة الجهاز -1. يعد هذا مفيداً بشكل خاص في بيئات الحوسبة المشتركة أو الخوادم التي تضم مستخدمين متعددين.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train using the single most idle GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)
# Train using the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])تعطي خوارزمية الاختيار التلقائي الأولوية لوحدات GPU ذات:
- نسب استخدام حالية أقل
- ذاكرة متاحة أعلى (VRAM فارغة)
- درجة حرارة واستهلاك طاقة أقل
تعد هذه الميزة ذات قيمة خاصة في بيئات الحوسبة المشتركة أو عند تشغيل مهام تدريب متعددة عبر نماذج مختلفة. وهي تتكيف تلقائياً مع ظروف النظام المتغيرة، مما يضمن التخصيص الأمثل للموارد دون تدخل يدوي.
التدريب على Apple Silicon عبر MPS
مع دعم شرائح Apple silicon المدمج في نماذج Ultralytics YOLO، أصبح من الممكن الآن تدريب نماذجك على الأجهزة التي تستخدم إطار عمل Metal Performance Shaders (MPS) القوي. يوفر MPS طريقة عالية الأداء لتنفيذ مهام الحوسبة ومعالجة الصور على شرائح Apple المخصصة.
لتمكين التدريب على شرائح Apple silicon، يجب عليك تحديد 'mps' كجهازك عند بدء عملية التدريب. فيما يلي مثال على كيفية القيام بذلك في Python وعبر سطر الأوامر:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model with MPS
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")أثناء الاستفادة من القوة الحسابية لشرائح Apple silicon، يتيح ذلك معالجة أكثر كفاءة لمهام التدريب. لمزيد من التوجيه التفصيلي وخيارات التكوين المتقدمة، يرجى الرجوع إلى وثائق PyTorch MPS.
استئناف التدريبات المقاطعة
يعد استئناف التدريب من حالة محفوظة مسبقاً ميزة حاسمة عند العمل مع نماذج التعلم العميق. يمكن أن يكون هذا مفيداً في سيناريوهات مختلفة، مثل عندما تتم مقاطعة عملية التدريب بشكل غير متوقع، أو عندما ترغب في مواصلة تدريب نموذج ببيانات جديدة أو لفترات تدريب إضافية.
عند استئناف التدريب، يقوم Ultralytics YOLO بتحميل الأوزان من آخر نموذج محفوظ ويستعيد أيضاً حالة المحسِّن، وجدولة معدل التعلم، ورقم العصر (epoch). يسمح لك هذا بمواصلة عملية التدريب بسلاسة من حيث توقفت.
يمكنك بسهولة استئناف التدريب في Ultralytics YOLO عن طريق ضبط وسيطة resume على True عند استدعاء طريقة train، وتحديد المسار إلى ملف .pt الذي يحتوي على أوزان النموذج المدرب جزئياً.
فيما يلي مثال على كيفية استئناف تدريب مقاطع باستخدام Python وعبر سطر الأوامر:
from ultralytics import YOLO
# Load a model
model = YOLO("path/to/last.pt") # load a partially trained model
# Resume training
results = model.train(resume=True)من خلال ضبط resume=True، ستستمر وظيفة train في التدريب من حيث توقفت، باستخدام الحالة المخزنة في ملف 'path/to/last.pt'. إذا تم حذف وسيطة resume أو ضبطها على False، فستبدأ وظيفة train جلسة تدريب جديدة.
تذكر أن نقاط التحقق تُحفظ في نهاية كل عصر افتراضياً، أو في فترات زمنية محددة باستخدام وسيطة save_period، لذا يجب عليك إكمال عصر واحد على الأقل لاستئناف تشغيل التدريب.
إعدادات التدريب
تشمل إعدادات التدريب لنماذج YOLO العديد من المعلمات الفائقة والتكوينات المستخدمة أثناء عملية التدريب. تؤثر هذه الإعدادات على أداء النموذج وسرعته ودقة التنبؤ. تشمل إعدادات التدريب الرئيسية حجم الدفعة (batch size)، ومعدل التعلم، والزخم (momentum)، وتلاشي الوزن (weight decay). بالإضافة إلى ذلك، يمكن أن يؤثر اختيار المحسِّن، ودالة الخسارة، وتكوين مجموعة بيانات التدريب على عملية التدريب. يعد الضبط الدقيق والتجربة بهذه الإعدادات أمراً حاسماً لتحسين الأداء.
محسِّن MuSGD
في YOLO26، يعتبر MuSGD محسِّناً هجيناً يجمع بين تحديثات SGD القياسية وتحديثات Muon-style orthogonalized.
يُوصى به لعمليات تدريب YOLO26 الأطول ومجموعات البيانات الأكبر، حيث يمكن لتحديثات Muon المتعامدة أن تساعد في استقرار التحسين.
تتلقى فقط المعلمات ذات param.ndim >= 2 (مثل أوزان التفاف) تحديث نمط Muon مع SGD، بينما تظل المعلمات ذات الأبعاد المنخفضة مثل طبقات تطبيع الدفعة (batch normalization) ومصطلحات الانحياز (bias terms) على SGD القياسي.
عند استخدام optimizer=auto، يختار Ultralytics تلقائياً MuSGD لعمليات التدريب الأطول (عادةً عندما تكون التكرارات > 10000). بالنسبة للعمليات الأقصر، يعود المدرب إلى AdamW.
مثال للاستخدام:
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGDانظر التنفيذ في ultralytics/optim/muon.py ومنطق الاختيار التلقائي للمحسِّن في BaseTrainer.build_optimizer.
| المعامل | النوع | الافتراضي | الوصف |
|---|---|---|---|
model | str | None | يحدد ملف النموذج للتدريب. يقبل مساراً إما لنموذج مدرب مسبقاً بصيغة .pt أو ملف تكوين بصيغة .yaml. ضروري لتحديد هيكل النموذج أو تهيئة الأوزان. |
data | str | None | مسار ملف تكوين مجموعة البيانات (مثل coco8.yaml). يحتوي هذا الملف على معاملات خاصة بمجموعة البيانات، بما في ذلك مسارات التدريب وبيانات التحقق، وأسماء الفئات، وعدد الفئات. |
epochs | int | 100 | إجمالي عدد دورات التدريب (epochs). تمثل كل epoch تمريرة كاملة على مجموعة البيانات بأكملها. يمكن أن يؤدي تعديل هذه القيمة إلى التأثير على مدة التدريب وأداء النموذج. |
time | float | None | أقصى وقت تدريب بالساعات. إذا تم تعيينه، فإنه يتجاوز معامل epochs، مما يسمح للتدريب بالتوقف تلقائياً بعد المدة المحددة. مفيد لسيناريوهات التدريب المقيدة زمنياً. |
patience | int | 100 | عدد الدورات التي يجب انتظارها دون تحسن في مقاييس التحقق قبل إيقاف التدريب مبكراً. يساعد في منع overfitting عن طريق إيقاف التدريب عندما يستقر الأداء. |
batch | int or float | 16 | Batch size، مع ثلاثة أنماط: التعيين كعدد صحيح (مثل batch=16)، أو النمط التلقائي لاستخدام 60% من ذاكرة GPU (batch=-1)، أو النمط التلقائي مع كسر استخدام محدد (batch=0.70). |
imgsz | int | 640 | حجم الصورة المستهدف للتدريب. يتم تغيير حجم الصور إلى مربعات ذات جوانب مساوية للقيمة المحددة (إذا كان rect=False)، مع الحفاظ على نسبة العرض إلى الارتفاع لنماذج YOLO ولكن ليس RT-DETR. يؤثر على دقة النموذج والتعقيد الحسابي. |
save | bool | True | تمكين حفظ نقاط فحص التدريب وأوزان النموذج النهائية. مفيد لاستئناف التدريب أو نشر النموذج. |
save_period | int | -1 | تكرار حفظ نقاط فحص النموذج، محدد بالدورات (epochs). قيمة -1 تعطل هذه الميزة. مفيد لحفظ النماذج المؤقتة خلال جلسات التدريب الطويلة. |
cache | bool | False | تمكين التخزين المؤقت لصور مجموعة البيانات في الذاكرة (True/ram)، أو على القرص (disk)، أو تعطيله (False). يحسن سرعة التدريب عن طريق تقليل الإدخال/الإخراج من القرص على حساب زيادة استخدام الذاكرة. |
device | int or str or list | None | يحدد الجهاز (الأجهزة) الحسابية للتدريب: GPU واحد (device=0)، أو وحدات GPU متعددة (device=[0,1])، أو CPU (device=cpu)، أو MPS لأجهزة Apple silicon (device=mps)، أو Huawei Ascend NPU (device=npu أو device=npu:0)، أو التحديد التلقائي لأكثر وحدة GPU خمولاً (device=-1) أو وحدات GPU خاملة متعددة (device=[-1,-1]) |
workers | int | 8 | عدد سلاسل العمليات (threads) لتحميل البيانات (لكل RANK في حالة التدريب متعدد وحدات GPU). يؤثر على سرعة معالجة البيانات وإدخالها إلى النموذج، وهو مفيد بشكل خاص في إعدادات وحدات GPU المتعددة. |
project | str | None | اسم دليل المشروع حيث يتم حفظ مخرجات التدريب. يسمح بتخزين منظم للتجارب المختلفة. |
name | str | None | اسم تشغيل التدريب. يُستخدم لإنشاء دليل فرعي داخل مجلد المشروع، حيث يتم تخزين سجلات التدريب والمخرجات. |
exist_ok | bool | False | إذا كان True، فإنه يسمح بالكتابة فوق دليل مشروع/اسم موجود. مفيد للتجارب التكرارية دون الحاجة إلى مسح المخرجات السابقة يدوياً. |
pretrained | bool or str | True | يحدد ما إذا كان يجب بدء التدريب من أوزان مدربة مسبقاً. يمكن أن يكون قيمة منطقية أو مساراً نصياً للأوزان لتحميلها. pretrained=False يدرب من أوزان مهيأة عشوائياً مع الحفاظ على هيكل النموذج. |
optimizer | str | 'auto' | اختيار المُحسن (optimizer) للتدريب. تشمل الخيارات SGD، وMuSGD، وAdam، وAdamax، وAdamW، وNAdam، وRAdam، وRMSProp، أو auto للاختيار التلقائي بناءً على تكوين النموذج. يؤثر على سرعة التقارب والاستقرار. |
seed | int | 0 | يعين البذرة العشوائية (random seed) للتدريب، مما يضمن تكرارية النتائج عبر التشغيلات بنفس التكوينات. |
deterministic | bool | True | يفرض استخدام خوارزمية حتمية، مما يضمن التكرارية ولكنه قد يؤثر على الأداء والسرعة بسبب القيود المفروضة على الخوارزميات غير الحتمية. |
verbose | bool | True | تمكين المخرجات المفصلة أثناء التدريب، لعرض أشرطة التقدم، ومقاييس كل دورة، ومعلومات تدريب إضافية في وحدة التحكم. |
single_cls | bool | False | يعامل جميع الفئات في مجموعات البيانات متعددة الفئات كفئة واحدة أثناء التدريب. مفيد لمهام التصنيف الثنائي أو عند التركيز على وجود الكائنات بدلاً من التصنيف. |
classes | list[int] | None | يحدد قائمة بمعرفات الفئات للتدريب عليها. مفيد لتصفية والتركيز فقط على فئات معينة أثناء التدريب. |
rect | bool | False | تمكين استراتيجية الحشو الدنيا—يتم حشو الصور في الدفعة (batch) بالحد الأدنى للوصول إلى حجم مشترك، مع تساوي الجانب الأطول مع imgsz. يمكن أن يحسن الكفاءة والسرعة ولكنه قد يؤثر على دقة النموذج. |
multi_scale | float | 0.0 | تغيير imgsz عشوائياً في كل دفعة بمقدار +/- multi_scale (مثال 0.25 -> 0.75x إلى 1.25x)، مع التقريب إلى مضاعفات خطوة النموذج (stride)؛ 0.0 يعطل التدريب متعدد المقاييس. |
cos_lr | bool | False | استخدام مجدول جيب تمام learning rate، مع تعديل معدل التعلم باتباع منحنى جيب تمام عبر الدورات. يساعد في إدارة معدل التعلم لتحقيق تقارب أفضل. |
close_mosaic | int | 10 | يعطل تعزيز البيانات بنمط الفسيفساء في آخر N حقبة (epochs) لتعزيز استقرار التدريب قبل الاكتمال. تعيين القيمة إلى 0 يعطل هذه الميزة. |
resume | bool | False | يستأنف التدريب من آخر نقطة تفتيش (checkpoint) تم حفظها. يقوم تلقائيًا بتحميل أوزان النموذج وحالة المحسن وعدد الحقب، ليتابع التدريب بسلاسة. |
amp | bool | True | يُفعل التدريب باستخدام الدقة المختلطة التلقائية (AMP)، مما يقلل من استخدام الذاكرة وربما يسرع عملية التدريب مع تأثير ضئيل على الدقة. |
fraction | float | 1.0 | يحدد جزءاً من مجموعة البيانات المراد استخدامه للتدريب. يسمح بالتدريب على مجموعة فرعية من مجموعة البيانات الكاملة، وهو مفيد للتجارب أو عند محدودية الموارد. |
profile | bool | False | يُفعل تحليل أداء سرعات ONNX و TensorRT أثناء التدريب، وهو مفيد لتحسين نشر النموذج. |
freeze | int أو list | None | يجمد أول N طبقة من النموذج أو الطبقات المحددة بواسطة الفهرس، مما يقلل من عدد المعلمات القابلة للتدريب. مفيد للضبط الدقيق (fine-tuning) أو التعلم بنقل المعرفة. |
lr0 | float | 0.01 | معدل التعلم الأولي (مثل SGD=1E-2, Adam=1E-3). يعد تعديل هذه القيمة أمراً بالغ الأهمية لعملية التحسين، حيث يؤثر على سرعة تحديث أوزان النموذج. |
lrf | float | 0.01 | معدل التعلم النهائي كجزء من المعدل الأولي = (lr0 * lrf)، ويستخدم بالتزامن مع المجدولات (schedulers) لضبط معدل التعلم بمرور الوقت. |
momentum | float | 0.937 | معامل الزخم (momentum) لـ SGD أو beta1 لـ محسنات Adam، مما يؤثر على دمج التدرجات السابقة في التحديث الحالي. |
weight_decay | float | 0.0005 | مصطلح التنظيم من نوع L2، والذي يعاقب الأوزان الكبيرة لمنع الإفراط في التخصيص (overfitting). |
warmup_epochs | float | 3.0 | عدد حقب الإحماء (warmup) لمعدل التعلم، حيث يتم رفع معدل التعلم تدريجياً من قيمة منخفضة إلى معدل التعلم الأولي لاستقرار التدريب في بدايته. |
warmup_momentum | float | 0.8 | الزخم الأولي لمرحلة الإحماء، والذي يتم تعديله تدريجياً ليصل إلى الزخم المحدد خلال فترة الإحماء. |
warmup_bias_lr | float | 0.1 | معدل التعلم لمعلمات الانحياز (bias parameters) أثناء مرحلة الإحماء، مما يساعد في استقرار تدريب النموذج في الحقب الأولى. |
box | float | 7.5 | وزن مكون خسارة الصندوق في دالة الخسارة، مما يؤثر على مدى التركيز الموضوع على التنبؤ الدقيق بإحداثيات صندوق الإحاطة. |
cls | float | 0.5 | وزن خسارة التصنيف في إجمالي دالة الخسارة، مما يؤثر على أهمية التنبؤ الصحيح بالفئة بالنسبة للمكونات الأخرى. |
cls_pw | float | 0.0 | قوة ترجيح الفئة للتعامل مع عدم توازن الفئات باستخدام التردد العكسي للفئة. تعطل القيمة 0.0 ترجيح الفئة، وتطبق القيمة 1.0 ترجيح التردد العكسي الكامل. توفر القيم بين 0 و 1 ترجيحاً جزئياً. |
dfl | float | 1.5 | وزن خسارة التوزيع البؤرية (distribution focal loss)، المستخدمة في إصدارات معينة من YOLO للتصنيف الدقيق. |
pose | float | 12.0 | وزن خسارة الوضعية في النماذج المدربة لتقدير الوضعية، مما يؤثر على التركيز على التنبؤ الدقيق بنقاط مفصل الوضعية. |
kobj | float | 1.0 | وزن خسارة كائنية النقاط الرئيسية في نماذج تقدير الوضعية، مما يوازن بين ثقة الكشف ودقة الوضعية. |
rle | float | 1.0 | وزن خسارة تقدير احتمالية اللوغاريتم المتبقي في نماذج تقدير الوضعية، مما يؤثر على دقة تحديد مواقع النقاط الرئيسية. |
angle | float | 1.0 | وزن خسارة الزاوية في نماذج obb، مما يؤثر على دقة تنبؤات زاوية صندوق الإحاطة الموجه. |
nbs | int | 64 | حجم الدفعة (batch size) الاسمي لتطبيع الخسارة. |
overlap_mask | bool | True | يحدد ما إذا كان يجب دمج أقنعة الكائنات في قناع واحد للتدريب، أو إبقاؤها منفصلة لكل كائن. في حالة التداخل، يتم تراكب القناع الأصغر فوق القناع الأكبر أثناء الدمج. |
mask_ratio | int | 4 | نسبة التقليل (downsample) لأقنعة التجزئة، مما يؤثر على دقة الأقنعة المستخدمة أثناء التدريب. |
dropout | float | 0.0 | معدل الإسقاط (dropout) للتنظيم في مهام التصنيف، مما يمنع الإفراط في التخصيص عن طريق حذف الوحدات عشوائياً أثناء التدريب. |
val | bool | True | يُفعل التحقق أثناء التدريب، مما يسمح بالتقييم الدوري لأداء النموذج على مجموعة بيانات منفصلة. |
plots | bool | True | يُنشئ ويحفظ مخططات مقاييس التدريب والتحقق، بالإضافة إلى أمثلة التنبؤ، مما يوفر رؤى مرئية حول أداء النموذج وتقدم التعلم. |
compile | bool or str | False | يُفعل تجميع الرسوم البيانية لـ PyTorch 2.x torch.compile باستخدام backend='inductor'. يقبل True → "default"، False → للتعطيل، أو وضع نصي مثل "default"، "reduce-overhead"، "max-autotune-no-cudagraphs". يعود إلى التنفيذ الفوري مع تحذير إذا كان غير مدعوم. |
max_det | int | 300 | يحدد الحد الأقصى لعدد الكائنات المحتفظ بها أثناء مرحلة التحقق من التدريب. |
يمكن تكوين وسيطة batch بثلاث طرق:
- حجم دفعة ثابت: قم بتعيين قيمة عدد صحيح (مثلاً
batch=16)، لتحديد عدد الصور لكل دفعة مباشرة. - وضع تلقائي (60% من ذاكرة GPU): استخدم
batch=-1لضبط حجم الدفعة تلقائياً لاستخدام حوالي 60% من ذاكرة CUDA. - وضع تلقائي مع جزء من الاستخدام: قم بتعيين قيمة كسرية (مثلاً
batch=0.70) لضبط حجم الدفعة بناءً على الجزء المحدد من استخدام ذاكرة GPU. - إعادة المحاولة التلقائية عند OOM: إذا حدث خطأ نفاد ذاكرة CUDA خلال العصر الأول، يقوم المدرب تلقائياً بتنصيف حجم الدفعة وإعادة المحاولة (حتى 3 مرات). ينطبق هذا فقط على التدريب باستخدام وحدة GPU واحدة؛ أما التدريب باستخدام وحدات GPU متعددة (DDP) فسيؤدي إلى رفع الخطأ فوراً.
إعدادات زيادة البيانات والمعلمات الفائقة
تعد تقنيات زيادة البيانات (Augmentation) ضرورية لتحسين قوة وأداء نماذج YOLO من خلال إدخال التباين في بيانات التدريب، مما يساعد النموذج على التعميم بشكل أفضل على البيانات غير المرئية. يوضح الجدول التالي الغرض من كل وسيطة زيادة وتأثيرها:
| المعامل | النوع | الافتراضي | المهام المدعومة | النطاق | الوصف |
|---|---|---|---|---|---|
hsv_h | float | 0.015 | detect, segment, pose, obb, classify | 0.0 - 1.0 | يضبط تدرج لون الصورة بجزء من عجلة الألوان، مما يؤدي إلى إدخال تباين في الألوان. يساعد النموذج على التعميم عبر ظروف الإضاءة المختلفة. |
hsv_s | float | 0.7 | detect, segment, pose, obb, classify | 0.0 - 1.0 | يغير تشبع الصورة بجزء معين، مما يؤثر على شدة الألوان. مفيد لمحاكاة ظروف بيئية مختلفة. |
hsv_v | float | 0.4 | detect, segment, pose, obb, classify | 0.0 - 1.0 | يعدل قيمة (سطوع) الصورة بجزء معين، مما يساعد النموذج على الأداء الجيد في ظل ظروف إضاءة متنوعة. |
degrees | float | 0 | detect, segment, pose, obb | 0.0 - 180 | يدور الصورة عشوائياً ضمن نطاق الدرجات المحدد، مما يحسن قدرة النموذج على التعرف على الكائنات في اتجاهات مختلفة. |
translate | float | 0.1 | detect, segment, pose, obb | 0.0 - 1.0 | ينقل الصورة أفقياً وعمودياً بجزء من حجم الصورة، مما يساعد في تعلم اكتشاف الكائنات المرئية جزئياً. |
scale | float | 0.5 | detect, segment, pose, obb, classify | 0 - 1 | يغير حجم الصورة بعامل كسب، لمحاكاة الكائنات على مسافات مختلفة من الكاميرا. |
shear | float | 0 | detect, segment, pose, obb | -180 - +180 | يقص الصورة بزاوية محددة، مما يحاكي تأثير رؤية الكائنات من زوايا مختلفة. |
perspective | float | 0 | detect, segment, pose, obb | 0.0 - 0.001 | يطبق تحويلاً منظورياً عشوائياً على الصورة، مما يعزز قدرة النموذج على فهم الكائنات في الفضاء ثلاثي الأبعاد. |
flipud | float | 0 | detect, segment, pose, obb, classify | 0.0 - 1.0 | يقلب الصورة رأساً على عقب باحتمالية محددة، مما يزيد من تباين البيانات دون التأثير على خصائص الكائن. |
fliplr | float | 0.5 | detect, segment, pose, obb, classify | 0.0 - 1.0 | يقلب الصورة من اليسار إلى اليمين باحتمالية محددة، وهو مفيد لتعلم الكائنات المتناظرة وزيادة تنوع مجموعة البيانات. |
bgr | float | 0 | detect, segment, pose, obb | 0.0 - 1.0 | يقلب قنوات الصورة من RGB إلى BGR باحتمالية محددة، وهو مفيد لزيادة القوة في التعامل مع ترتيب القنوات غير الصحيح. |
mosaic | float | 1 | detect, segment, pose, obb | 0.0 - 1.0 | يجمع بين أربع صور تدريبية في صورة واحدة، مما يحاكي تركيبات مشهد وتفاعلات كائنات مختلفة. فعال للغاية لفهم المشاهد المعقدة. |
mixup | float | 0 | detect, segment, pose, obb | 0.0 - 1.0 | يمزج بين صورتين وتسمياتهما، مما ينشئ صورة مركبة. يعزز قدرة النموذج على التعميم من خلال إدخال ضجيج في التسميات وتباين بصري. |
cutmix | float | 0 | detect, segment, pose, obb | 0.0 - 1.0 | يجمع بين أجزاء من صورتين، مما ينشئ مزيجاً جزئياً مع الحفاظ على مناطق مميزة. يعزز متانة النموذج من خلال خلق سيناريوهات انسداد. |
copy_paste | float | 0 | segment | 0.0 - 1.0 | ينسخ ويلصق الكائنات عبر الصور لزيادة حالات الكائنات. |
copy_paste_mode | str | flip | segment | - | يحدد استراتيجية copy-paste المراد استخدامها. تشمل الخيارات 'flip' و 'mixup'. |
auto_augment | str | randaugment | classify | - | يطبق سياسة تعزيز محددة مسبقاً ('randaugment', 'autoaugment', أو 'augmix') لتعزيز أداء النموذج من خلال التنوع البصري. |
erasing | float | 0.4 | classify | 0.0 - 1.0 | يمسح مناطق من الصورة عشوائياً أثناء التدريب لتشجيع النموذج على التركيز على ميزات أقل وضوحاً. |
augmentations | list | `` | detect, segment, pose, obb | - | تحويلات Albumentations مخصصة لتعزيز البيانات المتقدم (Python API فقط). يقبل قائمة من كائنات التحويل لاحتياجات التعزيز المتخصصة. |
يمكن تعديل هذه الإعدادات لتلبية المتطلبات المحددة لمجموعة البيانات والمهمة قيد التنفيذ. يمكن أن تساعد التجربة بقيم مختلفة في العثور على استراتيجية التعزيز المثلى التي تؤدي إلى أفضل أداء للنموذج.
لمزيد من المعلومات حول عمليات تعزيز التدريب، راجع قسم المراجع.
التسجيل (Logging)
عند تدريب نموذج YOLO26، قد تجد أنه من المفيد تتبع أداء النموذج بمرور الوقت. وهنا يأتي دور التسجيل. يوفر Ultralytics YOLO دعماً لثلاثة أنواع من المسجلات - Comet، و ClearML، و TensorBoard.
لاستخدام مسجل، حدده من القائمة المنسدلة في مقتطف الكود أعلاه وقم بتشغيله. سيتم تثبيت المسجل المختار وتهيئته.
Comet
Comet هي منصة تسمح لعلماء البيانات والمطورين بتتبع التجارب والنماذج ومقارنتها وتفسيرها وتحسينها. توفر وظائف مثل المقاييس في الوقت الفعلي، وفروق الكود، وتتبع المعاملات الفائقة.
لاستخدام Comet:
# pip install comet_ml
import comet_ml
comet_ml.init()تذكر تسجيل الدخول إلى حسابك في Comet على موقعهم الإلكتروني والحصول على مفتاح API الخاص بك. ستحتاج إلى إضافته إلى متغيرات البيئة الخاصة بك أو إلى البرنامج النصي الخاص بك لتسجيل تجاربك.
ClearML
ClearML هي منصة مفتوحة المصدر تعمل على أتمتة تتبع التجارب وتساعد في مشاركة الموارد بكفاءة. صُممت لمساعدة الفرق على إدارة وتنفيذ وإعادة إنتاج عملهم في تعلم الآلة بشكل أكثر كفاءة.
لاستخدام ClearML:
# pip install clearml
import clearml
clearml.browser_login()بعد تشغيل هذا البرنامج النصي، ستحتاج إلى تسجيل الدخول إلى حساب ClearML الخاص بك في المتصفح ومصادقة جلستك.
TensorBoard
TensorBoard هي مجموعة أدوات تصور لـ TensorFlow. تسمح لك بتصور مخطط TensorFlow الخاص بك، ورسم مقاييس كمية حول تنفيذ المخطط الخاص بك، وعرض بيانات إضافية مثل الصور التي تمر عبره.
لاستخدام TensorBoard في Google Colab:
load_ext tensorboard
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryلاستخدام TensorBoard محلياً، قم بتشغيل الأمر أدناه واعرض النتائج على localhost:6006.
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryسيؤدي هذا إلى تحميل TensorBoard وتوجيهه إلى الدليل الذي يتم فيه حفظ سجلات التدريب الخاصة بك.
بعد إعداد المسجل الخاص بك، يمكنك بعد ذلك المتابعة في تدريب نموذجك. سيتم تسجيل جميع مقاييس التدريب تلقائياً في المنصة التي اخترتها، ويمكنك الوصول إلى هذه السجلات لمراقبة أداء نموذجك بمرور الوقت، ومقارنة النماذج المختلفة، وتحديد مجالات التحسين.
الأسئلة الشائعة
هل يمكنني التدريب بدون GPU محلي؟
نعم. تدعم منصة Ultralytics التدريب السحابي مع أرصدة مجانية للبدء. قم بتحميل مجموعة البيانات الخاصة بك، واختر نموذجاً و GPU، وقم بالتدريب مباشرة من المتصفح. راجع دليل التدريب السحابي للحصول على التفاصيل.
كيف أقوم بتدريب نموذج كشف الكائنات باستخدام Ultralytics YOLO26؟
لتدريب نموذج كشف كائنات باستخدام Ultralytics YOLO26، يمكنك استخدام Python API أو CLI. فيما يلي مثال لكليهما:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)لمزيد من التفاصيل، راجع قسم إعدادات التدريب.
ما هي الميزات الرئيسية لوضع التدريب في Ultralytics YOLO26؟
تشمل الميزات الرئيسية لوضع التدريب في Ultralytics YOLO26 ما يلي:
- تنزيل مجموعة البيانات التلقائي: تنزيل مجموعات البيانات القياسية مثل COCO و VOC و ImageNet تلقائياً.
- دعم وحدات GPU المتعددة: توسيع نطاق التدريب عبر وحدات GPU متعددة لمعالجة أسرع.
- تكوين المعاملات الفائقة: تخصيص المعاملات الفائقة من خلال ملفات YAML أو وسائط CLI.
- التصور والمراقبة: تتبع مقاييس التدريب في الوقت الفعلي للحصول على رؤى أفضل.
هذه الميزات تجعل التدريب فعالاً وقابلاً للتخصيص وفقاً لاحتياجاتك. لمزيد من التفاصيل، راجع قسم الميزات الرئيسية لوضع التدريب.
كيف أستأنف التدريب من جلسة متقطعة في Ultralytics YOLO26؟
لاستئناف التدريب من جلسة متقطعة، اضبط وسيط resume على True وحدد مسار آخر نقطة تفتيش محفوظة.
from ultralytics import YOLO
# Load the partially trained model
model = YOLO("path/to/last.pt")
# Resume training
results = model.train(resume=True)تحقق من القسم الخاص بـ استئناف التدريبات المتقطعة لمزيد من المعلومات.
كيف أقوم بتدريب نموذج على مجموعة بيانات غير متوازنة؟
يحدث عدم توازن الفئات عندما تحتوي بعض الفئات على أمثلة أقل بكثير من غيرها في بيانات التدريب الخاصة بك. قد يؤدي هذا إلى ضعف أداء النموذج في الفئات النادرة. يدعم Ultralytics YOLO ترجيح الفئات من خلال وسيط cls_pw لمعالجة هذه المشكلة.
يتحكم وسيط cls_pw في قوة ترجيح الفئة بناءً على تكرار الفئة العكسي:
cls_pw=0.0(الافتراضي): يعطل ترجيح الفئةcls_pw=1.0: يطبق ترجيح التكرار العكسي الكامل- القيم بين
0.0و1.0: توفر ترجيحاً جزئياً لعدم التوازن المعتدل
يتم حساب أوزان الفئات كـ (1.0 / class_counts) ^ cls_pw ويتم تطبيعها بحيث يساوي متوسطها 1.0.
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n.pt")
# Train with full class weighting for severely imbalanced data
results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0)
# Or use partial weighting (0.25) for moderate imbalance
results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=0.25)ابدأ بـ cls_pw=0.25 لمجموعات البيانات غير المتوازنة بشكل معتدل وزدها إلى 1.0 إذا كانت الفئات النادرة لا تزال ضعيفة الأداء. يمكنك التحقق من أوزان الفئات المحسوبة في سجلات التدريب للتحقق من توزيع الوزن.
هل يمكنني تدريب نماذج YOLO26 على رقائق Apple silicon؟
نعم، يدعم Ultralytics YOLO26 التدريب على رقائق Apple silicon باستخدام إطار عمل Metal Performance Shaders (MPS). حدد 'mps' كجهاز تدريب خاص بك.
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n.pt")
# Train the model on Apple silicon chip (M1/M2/M3/M4)
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")لمزيد من التفاصيل، راجع قسم تدريب Apple Silicon MPS.
ما هي إعدادات التدريب الشائعة، وكيف أقوم بتكوينها؟
يسمح لك Ultralytics YOLO26 بتكوين مجموعة متنوعة من إعدادات التدريب مثل حجم الدفعة، ومعدل التعلم، والحقبات، والمزيد من خلال الوسائط. إليك نظرة عامة موجزة:
| المعامل | الافتراضي | الوصف |
|---|---|---|
model | None | مسار ملف النموذج للتدريب. |
data | None | مسار ملف تكوين مجموعة البيانات (على سبيل المثال، coco8.yaml). |
epochs | 100 | إجمالي عدد حقبات التدريب. |
batch | 16 | حجم الدفعة، قابل للتعديل كعدد صحيح أو وضع تلقائي. |
imgsz | 640 | حجم الصورة المستهدف للتدريب. |
device | None | الجهاز (الأجهزة) الحسابية للتدريب مثل cpu أو 0 أو 0,1 أو mps. |
save | True | يُمكّن حفظ نقاط تفتيش التدريب وأوزان النموذج النهائية. |
للحصول على دليل متعمق حول إعدادات التدريب، تحقق من قسم إعدادات التدريب.