تدريب النموذج باستخدام Ultralytics YOLO#
مقدمة#
يتضمن تدريب نموذج التعلم العميق تزويده بالبيانات وضبط معاملاته لتمكينه من تقديم تنبؤات دقيقة. تم تصميم وضع التدريب في Ultralytics YOLO26 لتدريب نماذج الكشف عن الكائنات بفعالية وكفاءة، مع الاستفادة الكاملة من إمكانيات الأجهزة الحديثة. يهدف هذا الدليل إلى تغطية جميع التفاصيل التي تحتاجها للبدء في تدريب نماذجك الخاصة باستخدام مجموعة ميزات YOLO26 القوية. إذا لم تقم بتثبيت Ultralytics بعد، فابدأ بـ دليل البدء السريع.
Watch: How to Train a YOLO model on Your Custom Dataset in Google Colab.
لماذا تختار Ultralytics YOLO للتدريب؟#
إليك بعض الأسباب المقنعة لاختيار وضع التدريب في YOLO26:
- الكفاءة: حقق أقصى استفادة من أجهزتك، سواء كنت تستخدم وحدة معالجة رسومات (GPU) واحدة أو كنت توسع نطاق العمل عبر وحدات GPU متعددة.
- تعدد الاستخدامات: تدرب على مجموعات بيانات مخصصة بالإضافة إلى المجموعات المتاحة بسهولة مثل COCO وVOC وImageNet.
- سهولة الاستخدام: واجهات CLI و Python بسيطة وقوية لتجربة تدريب مباشرة.
- مرونة المعاملات الفائقة: مجموعة واسعة من المعاملات الفائقة القابلة للتخصيص لتحسين أداء النموذج بدقة. للتحكم بشكل أعمق، يمكنك تخصيص المدرب نفسه.
- التدريب السحابي: التدريب على وحدات معالجة الرسوميات السحابية من خلال منصة Ultralytics مع مقاييس في الوقت الفعلي وحفظ تلقائي لنقاط التفتيش.
الميزات الرئيسية لوضع التدريب#
فيما يلي بعض الميزات البارزة لوضع التدريب في YOLO26:
- التنزيل التلقائي لمجموعات البيانات: يتم تنزيل تكوين مجموعات البيانات التي تحتوي على مصدر تنزيل تلقائياً عند الاستخدام الأول، على سبيل المثال،
yolo train data=coco8.yaml. راجع نظرة عامة على مجموعات البيانات لمعرفة التنسيقات ومجموعات البيانات المدعومة. - دعم تعدد وحدات GPU: وسع نطاق جهود التدريب الخاصة بك بسلاسة عبر وحدات GPU متعددة لتسريع العملية.
- تكوين المعاملات الفائقة: خيار تعديل المعاملات الفائقة من خلال ملفات تكوين YAML أو وسائط CLI.
- التصور والمراقبة: تتبع فوري لمقاييس التدريب وتصور عملية التعلم للحصول على رؤى أفضل.
أمثلة الاستخدام#
تدريب YOLO26n على مجموعة البيانات COCO8 لمدة 100 عصر تدريب بحجم صورة 640. يمكن تحديد جهاز التدريب باستخدام الوسيطة device. إذا لم يتم تمرير أي وسيطة، سيتم استخدام وحدة معالجة الرسوميات 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 التي ترغب في استخدامها.
للتدريب باستخدام 2 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 في الخلفية. يعمل هذا بسلاسة مع استخدام واجهة سطر الأوامر القياسية والنقاط البرمجية البايثونية غير المعدلة.
ومع ذلك، إذا كان برنامجك النصي يحتوي على مكونات مخصصة - مثل مدرب مخصّص أو مقيّم أو مجموعة بيانات أو خط أنابيب تعزيز - فلا يمكن تسلسل هذه الكائنات تلقائيًا ونقلها إلى العمليات الفرعية لـ DDP. في هذه الحالة، يجب عليك تشغيل برنامجك النصي مباشرةً باستخدام torch.distributed.run:
python -m torch.distributed.run --nproc_per_node 2 your_training_script.pyيستخدم تدريب وحدات معالجة الرسوميات من AMD إصدار PyTorch ROCm مع بناء الجملة القياسي device=0 أو device=cuda:0. راجع
دليل تكامل AMD للتثبيت وحالة دعم MIGraphX و DirectML و Ryzen AI NPU الحالية.
يستخدم تدريب وحدات معالجة الرسوميات من Intel device=xpu:0، أو معرفات XPU متعددة مع إصدار PyTorch الذي يوفر XCCL.
تدريب وحدة معالجة العصبيات Huawei Ascend NPU#
تدعم Ultralytics التدريب والتحقق على وحدات NPU من Huawei Ascend من خلال
torch_npu. قم بتثبيت إصدارات CANN و PyTorch و torch_npu المتوافقة متبادلاً
باتباع دليل تثبيت ملحق Ascend لـ PyTorch،
ثم قم بتفعيل بيئة CANN قبل بدء Ultralytics:
source /usr/local/Ascend/ascend-toolkit/set_env.shfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Train on one Ascend NPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")
# Train across two Ascend NPUs with HCCL
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0,1")تستخدم ميزات التدريب القياسية، بما في ذلك AMP والتحقق وحفظ نقاط التفتيش والاستئناف، وحدة NPU النشطة. تتوفر ميزة AutoBatch للتدريب أحادي وحدة NPU، بينما تطلق معرفات NPU المتعددة تدريباً موزَّعاً من خلال HCCL. راجع دليل تكامل Huawei Ascend لتصدير النموذج ونشره بعد التدريب.
تدريب GPU الخاملة#
يتيح تدريب GPU الخاملة الاختيار التلقائي لوحدات GPU الأقل استخداماً في الأنظمة متعددة وحدات GPU، مما يحسن استخدام الموارد دون اختيار يدوي لوحدات GPU. تحدد هذه الميزة وحدات GPU المتاحة بناءً على مقاييس الاستخدام وتوافر VRAM.
تلقائيًا لتحديد واستخدام وحدة (وحدات) معالجة الرسوميات الأكثر خمولاً للتدريب، استخدم وسيطة الجهاز -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 بتحميل الأوزان من آخر نموذج محفوظ ويستعيد أيضًا حالة المُحسِّن، ومجدول معدل التعلم، ورقم العصر. يتيح لك ذلك مواصلة عملية التدريب بسلاسة من حيث توقفت.
يمكنك بسهولة استئناف التدريب في 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 مختلف المعاملات الفائقة والتكوينات المستخدمة أثناء عملية التدريب. تؤثر هذه الإعدادات على أداء النموذج وسرعته وداقته. تشمل إعدادات التدريب الرئيسية حجم الدُفعة، ومعدل التعلم، والزخم، واضمحلال الوزن. بالإضافة إلى ذلك، يمكن أن يؤثر اختيار المُحسِّن، ودالة الخسارة، وتكوين مجموعة بيانات التدريب على عملية التدريب. يُعد الضبط الدقيق والتجريب باستخدام هذه الإعدادات أمرًا بالغ الأهمية لتحسين الأداء.
مُحسن MuSGD#
في YOLO26، MuSGD هو مُحسن هجين يجمع بين تحديثات SGD القياسية مع تحديثات متعامدة بنمط Muon.
يُوصى به لتشغيلات تدريب YOLO26 الأطول ومجموعات البيانات الأكبر، حيث يمكن لتحديثات Muon المتعامدة أن تساعد في استقرار التحسين.
تتلقى الأوزان الخطية ثنائية الأبعاد فقط وفلاتر الالتفاف رباعية الأبعاد (التي يتم إعادة تشكيلها إلى ثنائية الأبعاد) تحديث نمط Muon مع SGD، بينما تظل جميع المعلمات الأخرى، مثل أوزان التطبيع الدفعي ومصطلحات الانحياز، على خوارزمية 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 | المسار إلى ملف YAML لمجموعة البيانات (مثل coco8.yaml)، والذي يحمل مسارات بيانات التدريب وبيانات التحقق، وأسماء الفئات، وعدد الفئات. وبدلاً من ذلك، يقبل التصنيف دليل مجموعة البيانات أو اسم مجموعة بيانات مدمج (مثل imagenet10). |
epochs | int | 100 | إجمالي عدد دورات التدريب (epochs). يمثل كل عصر (epoch) تمريرة كاملة على مجموعة البيانات بأكملها. يمكن أن يؤثر ضبط هذه القيمة على مدة التدريب وأداء النموذج. |
time | float | None | الحد الأقصى لوقت التدريب بالساعات. إذا تم تعيينه، فإنه يتجاوز وسيطة epochs، مما يسمح للتدريب بالتوقف تلقائيًا بعد المدة المحددة. مفيد لسيناريوهات التدريب المقيدة بالوقت. |
patience | int | 100 | عدد الدورات المراد انتظارها بدون تحسن في مقاييس التحقق قبل إيقاف التدريب مبكرًا. يساعد في منع التفراط في التخصيص (overfitting) عن طريق إيقاف التدريب عندما يستقر الأداء. |
batch | int أو float | 16 | حجم الدفعة، بثلاثة أوضاع: مُحدد كعدد صحيح (على سبيل المثال، batch=16)، أو وضع تلقائي لاستخدام 60% من ذاكرة وحدة معالجة الرسومات GPU (batch=-1)، أو وضع تلقائي مع كسر استخدام مُحدد (batch=0.70). |
imgsz | int | 640 | حجم الصورة المستهدف للتدريب. يتم تغيير حجم الصور إلى مربعات ذات جوانب تساوي القيمة المحددة (إذا كانت rect=False)، مع الحفاظ على نسبة العرض إلى الارتفاع لنماذج YOLO ولكن ليس RT-DETR. يؤثر على دقة النموذج والتعقيد الحسابي. |
save | bool | True | يمكن حفظ نقاط تفتيش التدريب وأوزان النموذج النهائية. مفيد لاستئناف التدريب أو نشر النموذج. |
save_period | int | -1 | تكرار حفظ نقاط تحقق النموذج، محددة بالحقبات. قيمة -1 تعطل هذه الميزة. مفيدة لحفظ النماذج المؤقتة خلال جلسات التدريب الطويلة. |
cache | bool | False | يمكّن التخزين المؤقت لصور مجموعة البيانات في الذاكرة (True/ram)، أو على القرص (disk)، أو يعطله (False). يحسن سرعة التدريب عن طريق تقليل إدخال/إخراج القرص على حساب زيادة استخدام الذاكرة. |
device | int أو str أو list | None | يحدد الجهاز (الأجهزة) الحسابية للتدريب: وحدة معالجة رسومات GPU مفردة (device=0)، أو وحدات معالجة رسومات GPU متعددة (device=[0,1])، أو وحدة معالجة مركزية CPU (device=cpu)، أو MPS لسيليكون Apple (device=mps)، أو وحدة NPU من Huawei Ascend (device=npu:0 أو device=npu:0,1)، أو التحديد التلقائي لوحدة معالجة رسومات خاملة (device=-1) أو وحدات معالجة رسومات خاملة متعددة (device=[-1,-1]). |
workers | int | 8 | عدد خيوط العمال (worker threads) لتحميل البيانات (لكل RANK في حالة التدريب متعدد وحدات معالجة الرسومات). يؤثر على سرعة المعالجة المسبقة للبيانات وتغذيتها في النموذج، وهو مفيد بشكل خاص في الإعدادات متعددة وحدات معالجة الرسومات. |
project | str | None | اسم دليل المشروع حيث يتم حفظ مخرجات التدريب. يسمح بتخزين منظم للتجارب المختلفة. |
name | str | None | اسم تشغيل التدريب. يستخدم لإنشاء دليل فرعي داخل مجلد المشروع، حيث يتم تخزين سجلات ومخرجات التدريب. |
exist_ok | bool | False | إذا كان True، يسمح بالكتابة فوق دليل مشروع/اسم موجود. مفيد للتجارب التكرارية دون الحاجة إلى مسح المخرجات السابقة يدوياً. |
save_dir | str | None | يحدد الدليل الدقيق حيث يتم حفظ مخرجات التشغيل، متجاوزًا مجموعة project/name. يُستخدم المسار كما هو دون زيادات تلقائية، لذا تعيد التشغيلات المتتالية استخدام نفس الدليل. |
pretrained | bool أو str | True | يحدد ما إذا كان سيتم بدء التدريب من أوزان مُدرَّبة مسبقًا. يمكن أن يكون قيمة منطقية أو مسار نصي للأوزان المراد تحميلها. يقوم pretrained=False بالتدريب من أوزان مُهيئة عشوائيًا مع الاحتفاظ بهيكل النموذج. |
cls_remap | bool | True | عند الضبط الدقيق عبر مجموعات البيانات، ينسخ صفوف رأس التصنيف المدرب مسبقًا إلى النموذج الجديد حيثما تتطابق أسماء الفئات، بحيث تحتفظ الفئات المتداخلة بانحيازها المتعلم، بالإضافة إلى أوزانها عندما يكون عرض الرأس ثابتًا. ينطبق بغض النظر عما إذا كانت عدد الفئات تختلف أو تتطابق مع ترتيب فئات مختلف. |
optimizer | str | 'auto' | اختيار المُحسِّن للتدريب. تتضمن الخيارات SGD، أو MuSGD، أو Adam، أو Adamax، أو AdamW، أو NAdam، أو RAdam، أو RMSProp، أو auto للتحديد التلقائي استنادًا إلى تكوين النموذج. يؤثر على سرعة التقارب والاستقرار. |
seed | int | 0 | يضبط البذرة العشوائية (random seed) للتدريب، مما يضمن قابلية تكرار النتائج عبر التشغيلات بنفس التكوينات. |
deterministic | bool | True | يفرض استخدام خوارزمية حتمية، مما يضمن قابلية التكرار ولكنه قد يؤثر على الأداء والسرعة بسبب القيود على الخوارزميات غير الحتمية. |
verbose | bool | True | يُمكّن المخرجات التفصيلية أثناء التدريب، حيث يعرض أشرطة التقدم، والمقاييس لكل دورة (epoch)، ومعلومات تدريب إضافية في وحدة التحكم. |
single_cls | bool | False | يعامل جميع الفئات في مجموعات البيانات متعددة الفئات كفئة واحدة أثناء التدريب. مفيد لمهام التصنيف الثنائي أو عند التركيز على وجود الكائن بدلاً من تصنيفه. |
classes | list[int] | None | يحدد قائمة بمعرفات الفئات للتدريب عليها. مفيد لتصفية والتركيز فقط على فئات معينة أثناء التدريب. |
rect | bool | False | يمكّن استراتيجية الحشو الأدنى - يتم حشو الصور في الدفعة بحد أدنى لتوصيلها إلى حجم مشترك، بحيث يكون الجانب الأطول مساويًا لـ imgsz. يمكن أن يحسن الكفاءة والسرعة ولكنه قد يؤثر على دقة النموذج. |
multi_scale | float | 0.0 | تغيير imgsz عشوائيًا لكل دفعة بواسطة +/- multi_scale (على سبيل المثال، 0.25 -> 0.75x إلى 1.25x)، والتقريب إلى مضاعفات خطوة النموذج؛ يقوم 0.0 بتعطيل التدريب متعدد المقاييس. |
cos_lr | bool | False | يستخدم جدولة معدل تعلم جيبية (cosine)، مما يؤدي إلى ضبط معدل التعلم باتباع منحنى جيب عبر العصور. يساعد في إدارة معدل التعلم لتقارب أفضل. |
close_mosaic | int | 10 | يعطل تعزيز بيانات الفسيفساء (mosaic) في آخر N عصور لتثبيت التدريب قبل الانتهاء. التعيين إلى 0 يعطل هذه الميزة. |
resume | bool | False | يستأنف التدريب من آخر نقطة تفتيش محفوظة. يقوم تلقائياً بتحميل أوزان النموذج، وحالة المُحسِّن، وعدد الدورات، مما يتيح متابعة التدريب بسلاسة. |
amp | bool | True | يمكّن التدريب بـ الدقة المختلطة التلقائية (AMP)، مما يقلل من استخدام الذاكرة وربما يسرع التدريب مع الحد الأدنى من التأثير على الدقة. |
fraction | float | 1.0 | يحدد جزءاً من مجموعة البيانات لاستخدامه في التدريب. يسمح بالتدريب على مجموعة فرعية من مجموعة البيانات الكاملة، وهو مفيد للتجارب أو عند محدودية الموارد. |
profile | bool | False | يُفعّل تتبع سرعات ONNX و TensorRT أثناء التدريب، وهو مفيد لتحسين نشر النموذج. |
freeze | int أو list | None | يُجمد أول N طبقات من النموذج أو طبقات محددة حسب الفهرس، مما يقلل من عدد المعلمات القابلة للتدريب. مفيد للضبط الدقيق أو التعلم النقلي. |
lr0 | float | 0.01 | معدل التعلم الأولي (أي SGD=1E-2، Adam=1E-3). يعد ضبط هذه القيمة أمرًا بالغ الأهمية لعملية التحسين، حيث يؤثر على مدى سرعة تحديث أوزان النموذج. |
lrf | float | 0.01 | معدل التعلم النهائي ككسر من المعدل الأولي = (lr0 * lrf)، يُستخدم بالkتزامن مع الجدولات لضبط معدل التعلم بمرور الوقت. |
momentum | float | 0.937 | عامل الزخم لـ SGD أو beta1 لـ مُحسِّنات Adam، مما يؤثر على دمج التدرجات السابقة في التحديث الحالي. |
weight_decay | float | 0.0005 | مصطلح الانتظام (regularization) L2، الذي يعاقب الأوزان الكبيرة لمنع الإفراط في التخصيص (overfitting). |
warmup_epochs | float | 3.0 | عدد الدورات لتهيئة معدل التعلم (warmup)، حيث يزداد معدل التعلم تدريجياً من قيمة منخفضة إلى معدل التعلم الأولي لتحقيق استقرار التدريب في بدايته. |
warmup_momentum | float | 0.8 | الزخم الأولي لمرحلة التهيئة، والذي يتم ضبطه تدريجياً ليصل إلى الزخم المحدد عبر فترة التهيئة. |
warmup_bias_lr | float | 0.1 | معدل التعلم لمعلمات التحيز (bias) أثناء مرحلة التهيئة، مما يساعد في استقرار تدريب النموذج في الدورات الأولى. |
distill_model | str | None | مسار إلى نقطة تفتيش نموذج المعلم (على سبيل المثال، yolo26x.pt) لتقطير المعرفة. عند التعيين، يتم تدريب نموذج الطالب بخسارة تقطير إضافية موجهة بواسطة المعلم المُجمد. |
dis | float | 6.0 | وزن خسارة التقطير المضافة إلى خسائر الكشف القياسية. القيم الأعلى تزيد من تأثير توجيه الميزات الخاص بنموذج المعلم. |
box | float | 7.5 | وزن مكون خسارة الصندوق في دالة الخسارة، مما يؤثر على مقدار التركيز الموضع على التنبؤ الدقيق بإحداثيات صندوق الإحاطة. |
cls | float | 0.5 | وزن خسارة التصنيف في دالة الخسارة الإجمالية، مما يؤثر على أهمية التنبؤ الصحيح بالفئة بالنسبة للمكونات الأخرى. |
cls_pw | float | 0.0 | عامل تركيز الفئة للتعامل مع عدم توازن الفئات باستخدام تكرار الفئة العكسي. يقوم 0.0 بتعطيل ترجيح الفئة، ويطبق 1.0 ترجيح التكرار العكسي الكامل. توفر القيم بين 0 و 1 ترجيحًا جزئيًا. |
dfl | float | 1.5 | وزن دالة فقدان التوزيع (DFL)، وهو مصطلح لتحديد موقع صندوق الإحاطة (bounding box) يقوم بحساب مسافات حواف الصندوق. |
pose | float | 12.0 | وزن خسارة الوضعية (pose loss) في النماذج المدربة لتقدير الوضعية، مما يؤثر على التركيز على التنبؤ الدقيق للنقاط الرئيسية للوضعية. |
kobj | float | 1.0 | وزن خسارة موضوعية النقاط الرئيسية في نماذج تقدير الوضعية، مما يوازن بين ثقة الكشف ودقة الوضعية. |
rle | float | 1.0 | وزن خسارة تقدير احتمالية اللوغاريتم المتبقية (residual log-likelihood estimation loss) في نماذج تقدير الوضعية، مما يؤثر على دقة تحديد مواقع النقاط الرئيسية. |
angle | float | 1.0 | وزن خسارة الزاوية في نماذج obb، مما يؤثر على دقة توقعات زاوية صندوق الإحاطة الموجه. |
dlog | float | 1.0 | وزن الخسارة اللوغاريتمية الثابتة للمقياس (SILog) في نماذج تقدير العمق، وهو المصدر الأساسي لدقة العمق. |
dgrad | float | 0.5 | وزن خسارة التدرج في نماذج تقدير العمق، مما يعاقب الأخطاء في حواف العمق ويشجع حدود سطح أكثر حدة. |
dlam | float | 1.0 | عامل تركيز التباين لخسارة SILog في نماذج تقدير العمق. يجعل 1.0 الخسارة ثابتة النطاق تمامًا، بينما يقللها 0.0 إلى log-RMSE العادي. |
nbs | int | 64 | حجم الدفعة الاسمي لتطبيع الخسارة. |
overlap_mask | bool | True | يحدد ما إذا كان يجب دمج أقنعة الكائنات في قناع واحد للتدريب، أو الاحتفاظ بها منفصلة لكل كائن. في حالة التداخل، يتم وضع القناع الأصغر فوق القناع الأكبر أثناء الدمج. |
mask_ratio | int | 4 | نسبة التقليص لأقنعة التجزئة (segmentation masks)، مما يؤثر على دقة الأقنعة المستخدمة أثناء التدريب. |
dropout | float | 0.0 | معدل الإسقاط (dropout) للتنظيم في مهام التصنيف، مما يمنع الإفراط في التخصيص عن طريق حذف الوحدات عشوائياً أثناء التدريب. |
val | bool | True | يُفعّل التحقق أثناء التدريب، مما يسمح بالتقييم الدوري لأداء النموذج على مجموعة بيانات منفصلة. |
plots | bool | True | يُنشئ ويحفظ مخططات لمقاييس التدريب والتحقق، بالإضافة إلى أمثلة للتنبؤ، مما يوفر رؤى مرئية حول أداء النموذج وتقدم التعلم. |
compile | bool أو str | False | يمكّن تجميع رسم البياني PyTorch 2.x torch.compile باستخدام backend='inductor'. يقبل True ← "default"، False ← تعطيل، أو وضع نصي مثل "default"، "reduce-overhead"، "max-autotune-no-cudagraphs". يتراجع إلى الوضع الحماسي (eager) مع تحذير إذا كان غير مدعوم. |
channels_last | bool | False | يستخدم تنسيق الذاكرة channels_last (NHWC) لعمليات الالتفاف أثناء التدريب، مما يسّرع وحدات معالجة الرسومات CUDA Tensor Core دون أي تغيير في النتائج. يتم تجاهله تلقائياً على وحدة المعالجة المركزية (CPU) و MPS، حيث لا يقدم أي فائدة. |
max_det | int | 300 | يحدد الحد الأقصى لعدد الكائنات المحتفظ بها أثناء مرحلة التحقق من التدريب. |
يمكن تكوين وسيطة batch بثلاث طرق:
- حجم الدُفعة الثابت: تعيين قيمة صحيحة (على سبيل المثال،
batch=16)، مع تحديد عدد الصور لكل دُفعة مباشرةً. - الوضع التلقائي (60% من ذاكرة وحدة معالجة الرسوميات): استخدم
batch=-1لضبط حجم الدُفعة تلقائيًا لاستخدام ما يقريبًا 60% من ذاكرة CUDA. - الوضع التلقائي مع نسبة الاستخدام: قم بتعيين قيمة كسرية (على سبيل المثال،
batch=0.70) لضبط حجم الدُفعة بناءً على النسبة المحددة لاستخدام ذاكرة وحدة معالجة الرسوميات. - إعادة المحاولة التلقائية عند نفاد الذاكرة (OOM): إذا حدث خطأ نفاد ذاكرة CUDA أثناء الدورة الأولى، يقوم المدرب تلقائياً بتقسيم حجم الدفعة إلى النصف وإعادة المحاولة (حتى 3 مرات). هذا ينطبق فقط على التدريب بـ GPU واحد؛ التدريب متعدد GPUs (DDP) سيؤدي إلى ظهور الخطأ فوراً.
إعدادات الزيادة (Augmentation) والمعلمات الفائقة (Hyperparameters)#
تعتبر تقنيات التعزيز ضرورية لتحسين متانة وأداء نماذج YOLO من خلال إدخال التباين في بيانات التدريب، مما يساعد النموذج على التعميم بشكل أفضل على البيانات غير المكتشفة سابقًا. يوضح الجدول التالي الغرض والتأثير لكل وسيطة تعزيز:
| الوسيط | النوع | الافتراضي | المهام المدعومة | النطاق | الوصف |
|---|---|---|---|---|---|
hsv_h | float | 0.015 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | يضبط تدرج لون الصورة بجزء من عجلة الألوان، مما يدخل تبايناً لونياً. يساعد النموذج على التعميم عبر ظروف الإضاءة المختلفة. |
hsv_s | float | 0.7 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | يغير تشبع الصورة بجزء معين، مما يؤثر على كثافة الألوان. مفيد لمحاكاة ظروف بيئية مختلفة. |
hsv_v | float | 0.4 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | يعدل قيمة (سطوع) الصورة بجزء معين، مما يساعد النموذج على الأداء الجيد في ظل ظروف إضاءة متنوعة. |
degrees | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 180 | يقوم بتدوير الصورة عشوائياً ضمن نطاق الدرجات المحدد، مما يحسن قدرة النموذج على التعرف على الكائنات في اتجاهات مختلفة. |
translate | float | 0.1 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | يقوم بإزاحة الصورة أفقياً ورأسياً بجزء من حجم الصورة، مما يساعد في تعلم اكتشاف الكائنات المرئية جزئياً. |
scale | float | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0 - 1 | يقوم بتحجيم الصورة بمعامل زيادة، مما يحاكي الكائنات على مسافات مختلفة من الكاميرا. |
shear | float | 0 | detect, segment, semantic, depth, pose, obb | -180 - +180 | يقوم بقص الصورة (shear) بدرجة محددة، مما يحاكي تأثير رؤية الكائنات من زوايا مختلفة. |
perspective | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 0.001 | يطبق تحويلاً منظورياً عشوائياً على الصورة، مما يعزز قدرة النموذج على فهم الكائنات في الفضاء ثلاثي الأبعاد. |
flipud | float | 0 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | يقلب الصورة رأساً على عقب بالاحتمال المحدد، مما يزيد من تباين البيانات دون التأثير على خصائص الكائن. |
fliplr | float | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | يقلب الصورة من اليسار إلى اليمين بالاحتمال المحدد، وهو مفيد لتعلم الكائنات المتناظرة وزيادة تنوع مجموعة البيانات. |
bgr | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | يقلب قنوات الصورة من RGB إلى BGR بالاحتمال المحدد، وهو مفيد لزيادة المتانة ضد ترتيب القنوات غير الصحيح. |
mosaic | float | 1 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | يجمع أربع صور تدريبية في صورة واحدة، مما يحاكي تركيبات مشهد مختلفة وتفاعلات بين الكائنات. فعال للغاية لفهم المشاهد المعقدة. |
mixup | float | 0 | detect, segment, semantic, 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 | None | detect, segment, semantic, pose, obb | - | تحويلات Albumentations مخصصة لتعزيز البيانات المتقدم (Python API فقط). يقبل قائمة من كائنات التحويل لاحتياجات التعزيز المتخصصة. |
يمكن تعديل هذه الإعدادات لتلبية المتطلبات المحددة لمجموعة البيانات والمهمة المطروحة. يمكن أن تساعد التجربة بقيم مختلفة في العثور على استراتيجية التعزيز المثلى التي تؤدي إلى أفضل أداء للنموذج.
لمزيد من المعلومات حول عمليات تعزيز التدريب، راجع قسم المراجع.
التسجيل#
عند تدريب نموذج 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 وتوجيهه إلى الدليل حيث يتم حفظ سجلات التدريب الخاصة بك.
بعد إعداد المسجل الخاص بك، يمكنك المتابعة في تدريب نموذجك. سيتم تسجيل جميع مقاييس التدريب تلقائياً في المنصة التي اخترتها، ويمكنك الوصول إلى هذه السجلات لمراقبة أداء نموذجك بمرور الوقت، ومقارنة النماذج المختلفة، وتحديد مجالات التحسين.
ما هي الخطوة التالية#
تحقق من صحة نموذجك المدرب مقابل البيانات المحتفظ بها للتحقق من دقته في العالم الحقيقي، ثم قم بتصديره إلى ONNX أو TensorRT أو تنسيق نشر آخر. هل تدرب على بياناتك الخاصة بدلاً من COCO8؟ قم بتنسيقها أولاً باستخدام دليل مجموعات البيانات.
الأسئلة الشائعة#
هل يمكنني التدريب بدون GPU محلي؟#
نعم. يتضمن التدريب السحابي لمنصة Ultralytics أرصدة مجانية للبدء. قم بتحميل مجموعة البيانات الخاصة بك، وحدد نموذجًا ووحدة معالجة رسوميات، وتدرب مباشرة من المتصفح.
كيف أقوم بتدريب نموذج الكشف عن الكائنات باستخدام 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 بتكوين مجموعة متنوعة من إعدادات التدريب مثل حجم الدفعة، ومعدل التعلم، والحقب (epochs)، والمزيد من خلال الوسائط. إليك نظرة عامة موجزة:
| الوسيط | الافتراضي | الوصف |
|---|---|---|
model | None | مسار ملف النموذج للتدريب. |
data | None | مسار ملف YAML لمجموعة البيانات (على سبيل المثال، coco8.yaml)، أو دليل مجموعة البيانات أو اسمها (على سبيل المثال، imagenet10) للتصنيف. |
epochs | 100 | إجمالي عدد حقب التدريب. |
batch | 16 | حجم الدفعة، قابل للتعديل كعدد صحيح أو وضع تلقائي. |
imgsz | 640 | حجم الصورة المستهدف للتدريب. |
device | None | أجهزة الحوسبة للتدريب مثل cpu، أو 0، أو 0,1، أو mps. |
save | True | يُمكّن حفظ نقاط فحص التدريب وأوزان النموذج النهائية. |
للحصول على دليل متعمق حول إعدادات التدريب، تحقق من قسم إعدادات التدريب.