تدريب النماذج باستخدام Ultralytics YOLO#
مقدمة#
يتضمن تدريب نموذج التعلم العميق تزويده بالبيانات وضبط معلماته كي يتمكن من إجراء تنبؤات دقيقة. صُمّم وضع Train في Ultralytics YOLO26 لتدريب نماذج اكتشاف الأجسام بفعالية وكفاءة، مع الاستفادة الكاملة من إمكانات الأجهزة الحديثة. يهدف هذا الدليل إلى تغطية جميع التفاصيل التي تحتاج إليها لبدء تدريب نماذجك الخاصة باستخدام مجموعة الميزات القوية في YOLO26. إذا لم تكن قد ثبّتَّ Ultralytics بعد، فابدأ بـدليل البدء السريع.
راجع معاينة YOLO27 غير الإصدار الرسمي للاطلاع على أمثلة التدريب المخطط لها.
Watch: How to Train a YOLO model on Your Custom Dataset in Google Colab.
لماذا تختار Ultralytics YOLO للتدريب؟#
فيما يلي بعض الأسباب المقنعة لاختيار وضع Train في YOLO26:
- الكفاءة: حقّق أقصى استفادة من أجهزتك، سواء كنت تستخدم إعدادًا بوحدة GPU واحدة أو تتوسع عبر وحدات GPU متعددة.
- تعدد الاستخدامات: درّب النماذج على مجموعات بيانات مخصصة، بالإضافة إلى مجموعات البيانات المتاحة بسهولة مثل COCO وVOC وImageNet.
- سهولة الاستخدام: واجهتا CLI وPython بسيطتان وقويتان لتوفير تجربة تدريب مباشرة.
- مرونة المعلمات الفائقة: مجموعة واسعة من المعلمات الفائقة القابلة للتخصيص لضبط أداء النموذج بدقة. ولمزيد من التحكم، يمكنك تخصيص أداة التدريب نفسها.
- التدريب السحابي: درّب النماذج على وحدات GPU السحابية عبر Ultralytics Platform مع مقاييس آنية وحفظ تلقائي لنقاط التحقق.
الميزات الأساسية لوضع Train#
فيما يلي بعض الميزات البارزة لوضع Train في YOLO26:
- التنزيل التلقائي لمجموعة البيانات: تُنزَّل إعدادات مجموعات البيانات التي تتضمن مصدر تنزيل تلقائيًا عند استخدامها لأول مرة، مثل
yolo train data=coco8.yaml. راجع نظرة عامة على مجموعات البيانات لمعرفة التنسيقات ومجموعات البيانات المدعومة. - دعم وحدات GPU المتعددة: وسّع عمليات التدريب بسلاسة عبر وحدات GPU متعددة لتسريع العملية.
- إعداد المعلمات الفائقة: إمكانية تعديل المعلمات الفائقة من خلال ملفات إعداد YAML أو وسيطات CLI.
- التصور والمراقبة: تتبع مقاييس التدريب في الوقت الفعلي وتصور عملية التعلم للحصول على رؤى أفضل.
أمثلة على الاستخدام#
درّب 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])لا يعمل التدريب باستخدام وحدات GPU متعددة على Windows مع حزم PyTorch الرسمية لـtorch>=2.4. يطلق Ultralytics نظام DDP عبر torch.distributed.run، إذ تنشئ خطوة rendezvous فيه TCPStore التي تستخدم الواجهة الخلفية libuv افتراضيًا منذ PyTorch 2.4، بينما تُبنى حزم Windows الرسمية دون libuv. يخرج التدريب فورًا مع:
RuntimeError: use_libuv was requested but PyTorch was built without libuv support
لا يؤدي ضبط USE_LIBUV=0 إلى حل المشكلة، لأن rendezvous تنشئ TCPStore مباشرةً، ومسار الشفرة هذا لا يقرأ المتغير مطلقًا. درّب على Linux أو WSL2 لاستخدام وحدات GPU متعددة، أو درّب باستخدام GPU واحدة مع device=0 على Windows.
عند تحديد أجهزة متعددة (مثل 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يستخدِم التدريب على وحدة معالجة الرسومات AMD إصدار PyTorch ROCm مع بناء الجملة القياسي device=0 أو device=cuda:0. راجع دليل تكامل AMD لمعرفة التثبيت وحالة دعم MIGraphX وDirectML وRyzen AI NPU الحالية.
يستخدم تدريب GPU من Intel device=xpu:0، أو معرّفات XPU متعددة مع إصدار PyTorch يوفر XCCL.
تدريب Huawei Ascend NPU#
تدعم Ultralytics التدريب والتحقق من الصحة على وحدات المعالجة العصبية Ascend من Huawei من خلال 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 والتحقق من الصحة وحفظ نقاط التحقق والاستئناف، وحدة المعالجة العصبية النشطة. تتوفّر ميزة AutoBatch للتدريب على وحدة معالجة عصبية مفردة، بينما تُطلق معرفات وحدات المعالجة العصبية المتعددة التدريب الموزع من خلال HCCL. راجع دليل تكامل Huawei Ascend لتصدير النماذج ونشرها بعد التدريب.
التدريب باستخدام 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 بتحميل الأوزان من آخر نموذج محفوط ويستعيد أيضاً حالة المُحسِّن، ومجدول معدل التعلم، ورقم الحقبة، ومجموعة البيانات. يتيح لك هذا متابعة عملية التدريب بسلاسة من حيث توقفت. قم تمرير data= صريح إلى جانب resume للمتابعة على مجموعة بيانات مختلفة بدلاً من نقطة التحقق.
يمكنك بسهولة استئناف التدريب في 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 لعمليات التدريب الأطول (عادةً عندما تكون iterations > 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 | إجمالي عدد حقب التدريب. تمثل كل حقبة مرورًا كاملًا على مجموعة البيانات بأكملها. وقد يؤثر ضبط هذه القيمة في مدة التدريب وأداء النموذج. |
time | float | None | الحد الأقصى لمدة التدريب بالساعات. إذا عُيّنت هذه القيمة، فإنها تتجاوز الوسيطة epochs، مما يسمح بإيقاف التدريب تلقائيًا بعد المدة المحددة. ويفيد ذلك في سيناريوهات التدريب المقيّدة زمنيًا. |
patience | int | 100 | عدد الحقب التي ينتظرها التدريب دون تحسن في مقاييس التحقق قبل إيقافه مبكرًا. ويساعد ذلك على منع فرط التكيّف بإيقاف التدريب عندما يستقر الأداء. |
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 silicon (device=mps)، أو Huawei Ascend NPU (device=npu:0 أو device=npu:0,1)، أو الاختيار التلقائي لـGPU الخاملة (device=-1) أو وحدات GPU الخاملة المتعددة (device=[-1,-1]). |
workers | int | 8 | عدد خيوط العامل لتحميل البيانات (لكل RANK عند التدريب باستخدام وحدات GPU متعددة). ويؤثر ذلك في سرعة المعالجة المسبقة للبيانات وإدخالها إلى النموذج، ويفيد خصوصًا في إعدادات وحدات GPU المتعددة. |
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 لاختيار AdamW أو MuSGD استنادًا إلى عدد تكرارات التدريب. ويؤثر ذلك في سرعة التقارب واستقراره. |
seed | int | 0 | يحدد البذرة العشوائية للتدريب، مما يضمن قابلية إعادة إنتاج النتائج عبر العمليات التي تستخدم الإعدادات نفسها. |
deterministic | bool | True | يفرض استخدام خوارزميات حتمية، مما يضمن قابلية إعادة الإنتاج، لكنه قد يؤثر في الأداء والسرعة بسبب تقييد استخدام الخوارزميات غير الحتمية. |
verbose | bool | True | يمكّن الإخراج المطوّل أثناء التدريب، إذ يعرض أشرطة التقدم ومقاييس كل حقبة ومعلومات تدريب إضافية في وحدة التحكم. |
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 | يستخدم مُجدوِل معدل تعلّم جيبيًا، فيضبط معدل التعلّم باتباع منحنى جيبي على مدى العصور. ويساعد ذلك في إدارة معدل التعلّم لتحقيق تقارب أفضل. |
close_mosaic | int | 10 | يعطّل زيادة البيانات بطريقة الفسيفساء في آخر N من العصور لتحقيق استقرار التدريب قبل اكتماله. ويؤدي ضبطها على 0 إلى تعطيل هذه الميزة. |
resume | bool | False | يستأنف التدريب من آخر نقطة تحقق محفوظة. ويحمّل تلقائيًا أوزان النموذج وحالة المُحسِّن وعدد العصور، مواصلًا التدريب بسلاسة. |
amp | bool أو str | True | يضبط دقة التدريب: يستخدم True أو "fp16" الدقة FP16، ويستخدم "bf16" الدقة BF16 على أجهزة CUDA المدعومة، بينما يستخدم False أو "fp32" الدقة FP32. |
quantize | int أو str | None | اضبطه على 8 (أو "int8") من أجل التدريب الواعي بالكمية INT8 (QAT)، والذي يعمل على الضبط الدقيق مع التكميم الوهمي في الحلقة لكي تتحمل الأوزان تصدير INT8. انظر الالتزام بالتدريب الواعي بالكمية. |
fraction | float أو int أو list | 1.0 | مجموعة فرعية من البيانات على شكل نسبة/عدد أو قائمة [train, val, test]. يعني 1 التقسيم الكامل، وتمثل الأعداد الصحيحة الأكبر من 1 أعداد الصور، ولا يقبل سوى إدخال الاختبار الاختياري 0/0.0 للدلالة على عدم وجوده. وتحافظ القوائم المكوّنة من عنصرين على اكتمال الاختبار. |
profile | bool | False | يمكّن تحليل سرعتي ONNX وTensorRT أثناء التدريب، وهو مفيد لتحسين نشر النموذج. |
freeze | int أو list | None | يجمّد أول N طبقات من النموذج، أو طبقات محددة حسب الفهرس أو اسم الوحدة (23.cv2، من دون model. البادئ)، مما يقلل عدد المعلمات القابلة للتدريب. ويُفيد ذلك في الضبط الدقيق أو التعلّم بالنقل. |
lr0 | float | 0.01 | معدل التعلّم الأولي (أي SGD=1E-2 وAdam=1E-3). ويُعد ضبط هذه القيمة بالغ الأهمية لعملية التحسين، إذ يؤثر في سرعة تحديث أوزان النموذج. |
lrf | float | 0.01 | معدل التعلّم النهائي باعتباره كسرًا من المعدل الأولي = (lr0 * lrf)، ويُستخدم بالاقتران مع المُجدوِلات لضبط معدل التعلّم بمرور الوقت. |
momentum | float | 0.937 | عامل الزخم لـ SGD أو beta1 لـ مُحسّنات Adam، بما يؤثر في إدماج التدرجات السابقة في التحديث الحالي. |
weight_decay | float | 0.0005 | حد انتظام من النوع L2، يعاقب الأوزان الكبيرة لمنع فرط التعلّم. |
warmup_epochs | float | 3.0 | عدد عصور الإحماء لمعدل التعلّم، إذ يزيد معدل التعلّم تدريجيًا من قيمة منخفضة إلى معدل التعلّم الأولي لتحقيق استقرار التدريب في مراحله المبكرة. |
warmup_momentum | float | 0.8 | الزخم الأولي لمرحلة الإحماء، مع ضبطه تدريجيًا ليتوافق مع الزخم المحدد خلال فترة الإحماء. |
warmup_bias_lr | float | 0.1 | معدل التعلّم لمعلمات التحيّز أثناء مرحلة الإحماء، مما يساعد في استقرار تدريب النموذج خلال العصور الأولية. يُضبط تلقائيًا على 0.0 ضمن optimizer='auto' الافتراضي، لذا يجب تسمية مُحسِّن صراحةً لاستخدامه. |
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) عندما يستخدم رأس الكشف reg_max > 1، وخسارة L1 لمسافات الصندوق المُطبَّعة في YOLO26 الخالي من DFL (reg_max: 1). |
pose | float | 12.0 | وزن خسارة الوضعية في النماذج المدرَّبة لتقدير الوضعية، مما يؤثر في التركيز على التنبؤ الدقيق بالنقاط المفتاحية للوضعية. |
kobj | float | 1.0 | وزن خسارة احتمالية الكائن للنقاط المفتاحية في نماذج تقدير الوضعية، لتحقيق التوازن بين ثقة الكشف ودقة الوضعية. |
rle | float | 1.0 | وزن خسارة تقدير الاحتمالية اللوغاريتمية المتبقية في نماذج تقدير الوضعية، مما يؤثر في دقة تحديد مواقع النقاط المفتاحية. |
angle | float | 1.0 | وزن خسارة الزاوية في نماذج obb، مما يؤثر في دقة التنبؤ بزوايا الصناديق المحيطة الموجّهة. |
dlog | float | 1.0 | وزن خسارة اللوغاريتم ثابت المقياس (SILog) في نماذج تقدير العمق، وهو الحد الأساسي الذي يوجّه دقة العمق. |
dgrad | float | 0.5 | وزن خسارة التدرج في نماذج تقدير العمق، إذ تعاقب الأخطاء في حواف العمق وتشجع على حدود سطحية أكثر حدة. |
dlam | float | 1.0 | عامل التركيز على التباين في خسارة SILog في نماذج تقدير العمق. يجعل 1.0 الخسارة ثابتة المقياس بالكامل، بينما يختزلها 0.0 إلى RMSE لوغاريتمي عادي. |
nbs | int | 64 | حجم الدفعة الاسمي لتطبيع الخسارة. |
overlap_mask | bool | True | يحدد ما إذا كان ينبغي دمج أقنعة الكائنات في قناع واحد أثناء التدريب أو إبقاؤها منفصلة لكل كائن. وفي حال التداخل، يوضع القناع الأصغر فوق القناع الأكبر أثناء الدمج. |
mask_ratio | int | 4 | نسبة تصغير أقنعة التجزئة، مما يؤثر في دقة الأقنعة المستخدمة أثناء التدريب. |
dropout | float | 0.0 | معدل الإسقاط للانتظام في مهام التصنيف، إذ يمنع فرط التعلّم من خلال حذف الوحدات عشوائيًا أثناء التدريب. |
val | bool | True | يمكّن التحقق أثناء التدريب، مما يسمح بالتقييم الدوري لأداء النموذج على مجموعة بيانات منفصلة. |
nms | bool، اختياري | None | يحدد رأس الاستدلال المستخدم للتحقق من صحة العصر، وتحديد نقاط التحقق، والإيقاف المبكر. يستخدم None أو True النهج من واحد إلى متعدد مع NMS؛ ويستخدم False الرأس الخالي من NMS عند توفره. يحافظ كلا الرأسين على خسائر التدريب الخاصة بهما. |
plots | bool | True | ينشئ ويحفظ مخططات لمقاييس التدريب والتحقق، بالإضافة إلى أمثلة التنبؤ، مما يوفر رؤى مرئية حول أداء النموذج وتقدم التعلّم. |
compile | bool أو str | False | يمكّن تجميع الرسم البياني باستخدام torch.compile في PyTorch 2.x مع backend='inductor'. يقبل True → "default"، أو False → للتعطيل، أو وضعًا نصيًا مثل "default" و"reduce-overhead" و"max-autotune-no-cudagraphs". ويعود إلى التنفيذ الفوري مع إصدار تحذير إذا لم يكن مدعومًا. |
channels_last | bool | None | يستخدم تنسيق الذاكرة channels_last (NHWC) لعمليات الالتفاف أثناء التدريب. يقوم None بتمكينه تلقائياً على CUDA باستخدام PyTorch 1.11 أو الأحدث، باستثناء نظام Windows حيث أدى إلى قياسات أبطأ. يقوم False بتعطيله، بينما يطلب True ذلك صراحة. تظل الإصدارات PyTorch 1.10 والأقدم، وCPU، وMPS تستخدم تنسيق NCHW افتراضياً. |
max_det | int | 300 | الحد الأقصى لعدد الاكتشافات لكل صورة أثناء التحقق من التدريب. بالنسبة لـ detect، وsegment، وpose، وOBB، يرتفع الافتراضي البالغ 300 إلى أكبر عدد من الكائنات الموسومة في التدريب/التحقق فقط عندما يتجاوز هذا العدد 300. تظل القيم الأخرى ثابتة؛ ويؤدي تجاوز الحد إلى إطلاق تحذير. |
يمكن تهيئة الوسيطة batch بثلاث طرق:
- حجم دفعة ثابت: عيّن قيمة صحيحة (مثلًا
batch=16) لتحديد عدد الصور في كل دفعة مباشرةً. - الوضع التلقائي (60% من ذاكرة GPU): استخدم
batch=-1لضبط حجم الدفعة تلقائيًا لاستخدام نحو 60% من ذاكرة CUDA. - الوضع التلقائي مع كسر الاستخدام: عيّن قيمة كسرية (مثلًا
batch=0.70) لضبط حجم الدفعة استنادًا إلى الكسر المحدد من استخدام ذاكرة GPU. - إعادة المحاولة التلقائية عند نفاد الذاكرة: إذا حدث خطأ نفاد ذاكرة CUDA أثناء العصر الأول، يخفض المدرّب حجم الدفعة إلى النصف تلقائيًا ويعيد المحاولة (حتى 3 مرات). ينطبق ذلك على التدريب باستخدام GPU واحد فقط؛ أما التدريب متعدد وحدات GPU (DDP) فيُصدر الخطأ فورًا.
- لم يُعثر على ملاءمة: إذا لم ينتج أي حجم دفعة مرشح ملفًا توصيفيًا قابلًا للاستخدام، ترفع AutoBatch خطأ
RuntimeErrorواضحًا بدلًا من الرجوع بصمت إلى قيمة افتراضية غير ذات صلة.
إعدادات زيادة البيانات والمعلمات الفائقة#
تُعد تقنيات زيادة البيانات ضرورية لتحسين متانة نماذج YOLO وأدائها من خلال إدخال التنوع في بيانات التدريب، مما يساعد النموذج على التعميم بصورة أفضل على البيانات غير المرئية. يوضح الجدول التالي الغرض من كل وسيطة لزيادة البيانات وتأثيرها:
| الوسيطة | النوع | الافتراضي | المهام المدعومة | النطاق | الوصف |
|---|---|---|---|---|---|
hsv_h | float | 0.015 | detect، segment، semantic، depth، classify، pose، obb | 0.0 - 1.0 | يضبط تدرج لون الصورة بكسر من عجلة الألوان، مما يضيف تنوعًا لونيًا. ويساعد النموذج على التعميم عبر ظروف الإضاءة المختلفة. بالنسبة إلى classify، ينطبق ذلك فقط عندما يكون auto_augment=None. |
hsv_s | float | 0.7 | detect، segment، semantic، depth، classify، pose، obb | 0.0 - 1.0 | يغيّر تشبع الصورة بكسر معين، مما يؤثر في شدة الألوان. ويُفيد ذلك في محاكاة الظروف البيئية المختلفة. بالنسبة إلى classify، ينطبق ذلك فقط عندما يكون auto_augment=None. |
hsv_v | float | 0.4 | detect، segment، semantic، depth، classify، pose، obb | 0.0 - 1.0 | يعدّل قيمة الصورة (السطوع) بكسر معين، مما يساعد النموذج على الأداء جيدًا في ظروف الإضاءة المتنوعة. بالنسبة إلى classify، ينطبق ذلك فقط عندما يكون auto_augment=None. |
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 | tuple | 0.5 | detect، segment، semantic، depth، classify، pose، obb | 0 - 1، أو صف صريح (min, max) (ليس لـ classify) | يغيّر مقياس الصورة بعامل كسب، محاكيًا وجود الكائنات على مسافات مختلفة من الكاميرا. |
shear | float | 0 | detect، segment، semantic، depth، pose، obb | -180 - +180 | يقص الصورة بزاوية محددة، محاكيًا تأثير رؤية الكائنات من زوايا مختلفة. |
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، obb | 0.0 - 1.0 | كسر الكائنات المؤهلة التي تُلصق؛ إذ يعكسها flip داخل الصورة، بينما يستخدم mixup القيمة أيضًا باعتبارها احتمال تطبيق بين الصور. |
copy_paste_mode | str | flip | segment، obb | - | يحدد استراتيجية 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، depth، pose، obb | - | تحويلات Albumentations مخصصة لزيادة البيانات المتقدمة (واجهة Python فقط). ويقبل قائمة من كائنات التحويل لتلبية احتياجات زيادة البيانات المتخصصة. |
يمكن ضبط هذه الإعدادات لتلبية المتطلبات المحددة لمجموعة البيانات والمهمة المعنية. وقد يساعد اختبار قيم مختلفة في العثور على استراتيجية زيادة البيانات المثلى التي تؤدي إلى أفضل أداء للنموذج.
لمزيد من المعلومات حول عمليات زيادة البيانات أثناء التدريب، راجع قسم المرجع.
التسجيل#
يتم دائماً كتابة مقاييس التدريب والرسوم البيانية ونقاط التحقق في دليل التشغيل، كما تقوم Ultralytics ببثها إلى أي متعقب تجارب قمت بتثبيته وتفعيله: Comet وClearML وTensorBoard وMLflow وWeights & Biases وDVCLive. يتم تبديل كل مسجل من خلال إعدادات Ultralytics، على سبيل المثال yolo settings tensorboard=True. تُظهر الإعدادات الثلاثة الأكثر شيوعاً أدناه.
Comet#
Comet منصة تتيح لعلماء البيانات والمطورين تتبع التجارب والنماذج ومقارنتها وشرحها وتحسينها. وتوفر وظائف مثل المقاييس في الوقت الفعلي، وفروق الشفرة، وتتبع المعلمات الفائقة.
لاستخدام Comet:
# pip install comet_ml
import comet_ml
comet_ml.init()تذكّر تسجيل الدخول إلى حساب Comet على موقعهم الإلكتروني والحصول على مفتاح API الخاص بك. وستحتاج إلى إضافته إلى متغيرات البيئة أو إلى البرنامج النصي لتسجيل تجاربك.
ClearML#
ClearML منصة مفتوحة المصدر تعمل على أتمتة تتبع التجارب وتساعد في مشاركة الموارد بكفاءة. وقد صُممت لمساعدة الفرق على إدارة أعمال ML وتنفيذها وإعادة إنتاجها بكفاءة أكبر.
لاستخدام 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؟ نسّقها أولًا باستخدام دليل مجموعات البيانات.
الأسئلة الشائعة#
نعم. يتضمن التدريب السحابي على منصة Ultralytics أرصدة مجانية لبدء الاستخدام. ارفع مجموعة البيانات، وحدد نموذجًا وGPU، وابدأ التدريب مباشرةً من المتصفح.
لتدريب نموذج لاكتشاف الكائنات باستخدام Ultralytics YOLO26، يمكنك استخدام Python API أو CLI. فيما يلي مثال لكل منهما:
مثال على التدريب باستخدام GPU واحدة وCPUfrom 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 ما يلي:
- التنزيل التلقائي لمجموعة البيانات: ينزّل تلقائيًا مجموعات بيانات قياسية مثل COCO وVOC وImageNet.
- دعم وحدات GPU المتعددة: وسّع نطاق التدريب عبر عدة وحدات GPU لمعالجة أسرع.
- تهيئة المعلمات الفائقة: خصّص المعلمات الفائقة من خلال ملفات YAML أو وسيطات CLI.
- التصور والمراقبة: تتبّع مقاييس التدريب في الوقت الفعلي للحصول على رؤى أفضل.
تجعل هذه الميزات التدريب فعالًا وقابلًا للتخصيص وفقًا لاحتياجاتك. لمزيد من التفاصيل، راجع قسم الميزات الرئيسية لوضع التدريب.
لاستئناف التدريب من جلسة متوقفة، عيّن الوسيطة
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إذا ظل أداء الفئات النادرة ضعيفًا. يمكنك التحقق من أوزان الفئات المحسوبة في سجلات التدريب للتأكد من توزيع الأوزان.نعم، يدعم Ultralytics YOLO26 التدريب على شرائح Apple silicon باستخدام إطار عمل Metal Performance Shaders (MPS). حدِّد 'mps' جهازًا للتدريب.
مثال على تدريب MPSfrom 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 تهيئة مجموعة متنوعة من إعدادات التدريب، مثل حجم الدفعة ومعدل التعلم وعدد الحِقَب وغير ذلك، من خلال الوسيطات. فيما يلي نظرة عامة موجزة:
الوسيطة الافتراضي الوصف modelNoneمسار ملف النموذج المخصص للتدريب. dataNoneمسار YAML لمجموعة البيانات (مثل coco8.yaml)، أو دليل مجموعة البيانات أو اسمها (مثلimagenet10) للتصنيف.epochs100إجمالي عدد حِقَب التدريب. batch16حجم الدفعة، ويمكن ضبطه كعدد صحيح أو في الوضع التلقائي. imgsz640حجم الصورة المستهدف للتدريب. deviceNoneجهاز أو أجهزة الحوسبة المستخدمة للتدريب، مثل cpuأو0أو0,1أوmps.saveTrueيُمكّن من حفظ نقاط تحقق التدريب وأوزان النموذج النهائية. للاطلاع على دليل متعمق حول إعدادات التدريب، راجع قسم إعدادات التدريب.