قياس أداء النماذج باستخدام Ultralytics YOLO#
تصوير نتائج قياس الأداء#
مقدمة#
بعد تدريب النموذج والتحقق من صحته، تتمثل الخطوة المنطقية التالية في تقييم أدائه في سيناريوهات واقعية متنوعة. يتيح وضع قياس الأداء في Ultralytics YOLO26 ذلك من خلال توفير إطار عمل متين لتقييم سرعة النموذج ودقته عبر مجموعة من تنسيقات التصدير.
اطّلع على معاينة YOLO27 غير المُصدرة للاطلاع على نتائج أولية لقياس السرعة.
شاهد: قياس أداء نماذج Ultralytics YOLO26 | كيفية مقارنة أداء النماذج على أجهزة مختلفة؟
لماذا يُعد قياس الأداء ضروريًا؟#
- اتخاذ قرارات مستنيرة: اكتساب فهم للمفاضلات بين السرعة والدقة.
- تخصيص الموارد: فهم أداء تنسيقات التصدير المختلفة على العتاد المختلف.
- التحسين: معرفة تنسيق التصدير الذي يوفّر أفضل أداء لحالة الاستخدام المحددة.
- كفاءة التكلفة: استخدام موارد العتاد بكفاءة أكبر استنادًا إلى نتائج قياس الأداء.
المقاييس الأساسية في وضع قياس الأداء#
- mAP50-95: لمهام اكتشاف الكائنات، وتقسيم المثيلات، وتقدير الوضعيات، وOBB.
- mIoU: للتقسيم الدلالي.
- delta1: لتقدير العمق.
- accuracy_top1: لـتصنيف الصور.
- زمن الاستدلال: الوقت المستغرق لمعالجة كل صورة، بالمللي ثانية.
تنسيقات التصدير المدعومة#
- ONNX: لتحقيق أفضل أداء على CPU
- TensorRT: لتحقيق أقصى كفاءة على GPU
- OpenVINO: لتحسين الأداء على عتاد Intel
- CoreML وTensorFlow SavedModel وغيرهما: لتلبية احتياجات النشر المتنوعة.
- صدّر إلى ONNX أو OpenVINO لتحقيق تسريع يصل إلى 3 أضعاف على CPU.
- صدّر إلى TensorRT لتحقيق تسريع يصل إلى 5 أضعاف على GPU.
أمثلة الاستخدام#
ثبّت Ultralytics مع تبعيات التصدير قبل قياس الأداء لتجنّب نقص الحزم.
pip install ultralytics[export]شغّل قياس أداء YOLO26n عبر جميع تنسيقات التصدير المدعومة (ONNX وTensorRT وغيرها). راجع قسم الوسيطات أدناه للاطلاع على القائمة الكاملة لخيارات التصدير.
from ultralytics.utils.benchmarks import benchmark
# قياس الأداء على GPU
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)
# قياس أداء تنسيق تصدير محدد
benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, format="onnx")الوسيطات#
تمنح الوسيطات مثل model وdata وimgsz وquantize وdevice وverbose وformat المستخدمين مرونة ضبط قياسات الأداء بدقة لتلبية احتياجاتهم الخاصة ومقارنة أداء تنسيقات التصدير المختلفة بسهولة.
| المفتاح | القيمة الافتراضية | الوصف |
|---|---|---|
model | None | يحدد مسار ملف النموذج. يقبل تنسيقي .pt و.yaml، مثل "yolo26n.pt" للنماذج المدرّبة مسبقًا أو ملفات الإعداد. |
data | None | مسار ملف YAML لمجموعة البيانات المستخدَمة في قياس الأداء، ويشمل عادةً المسارات والإعدادات الخاصة بـبيانات التحقق. مثال: "coco8.yaml". أما التصنيف فيتطلب دليل مجموعة بيانات أو اسم مجموعة بيانات مضمّنة (مثل imagenet10). |
imgsz | 640 | حجم صورة الإدخال للنموذج. يجب أن يكون عددًا صحيحًا واحدًا للصور المربعة (مثل 640)؛ ولا يدعم benchmark() سوى أحجام الصور المربعة. |
quantize | None | الدقة المطلوبة: 16 (FP16) أو 8 (INT8؛ تتطلب مخططات PTQ بيانات معايرة data/fraction، بينما لا تتطلبها مخططات أوزان فقط)؛ أما 32/غير المحدد فيعني FP32 إذا كان التنسيق يدعمه — ويرفض التنسيق الذي لا يستطيع التصدير بدقة FP32 قيمة 32 الصريحة أو يعود إلى الدقة التي يتطلبها. لا يُصدَّر صف PyTorch الأصلي: يؤثر 16 وحده فيه، إذ يحدد الاستدلال بدقة FP16، بينما يشغّل 8 و32 والقيمة غير المحددة الاستدلال بدقة FP32. بعد ذلك، ينفّذ كل تنسيق الاستدلال بدقة وقت التشغيل الخاصة به. يحل هذا محل العلمين المهجورين half/int8. |
device | None | يحدد جهاز الحوسبة لقياس الأداء، مثل "cpu" أو "cuda:0"؛ وإذا لم يُحدَّد، يُستخدم أول GPU متاح، وإلا فـCPU. |
verbose | False | إذا كانت القيمة True أو عددًا عشريًا، فإن إخفاقات قياس الأداء (باستثناء أخطاء التأكيد) تؤدي إلى رفع استثناء بدلًا من تسجيل خطأ؛ كما أن العدد العشري مثل 0.25 يؤكد تجاوز مقياس كل تنسيق ناجح ذلك الحد الأدنى. |
eps | 0.001 | قيمة إبسيلون صغيرة (بالمللي ثانية) تُضاف إلى زمن الاستدلال لكل صورة قبل تحويله إلى FPS، منعًا للقسمة على صفر. نادرًا ما تتغير. |
format | '' | يقيس أداء تنسيق التصدير المحدد فقط (مثل format=onnx). اتركه فارغًا لاختبار جميع التنسيقات المدعومة تلقائيًا. |
تستخدم دالة benchmark() المستقلة (from ultralytics.utils.benchmarks import benchmark) القيم الافتراضية الخاصة بتوقيعها بدلًا من قيم الجدول أعلاه، ولا سيما model="yolo26n.pt" وimgsz=160 وdevice="cpu"؛ مرّر imgsz وdevice صراحةً لمطابقة CLI الخاص بـyolo benchmark.
تنسيقات التصدير#
ستحاول اختبارات قياس الأداء التشغيل تلقائيًا على جميع تنسيقات التصدير الممكنة المدرجة أدناه. ويمكنك بدلًا من ذلك قياس الأداء لتنسيق محدد باستخدام الوسيطة format، التي تقبل أيًا من التنسيقات المذكورة أدناه.
| التنسيق | وسيط format | النموذج | البيانات الوصفية | الوسيطات |
|---|---|---|---|---|
| PyTorch | - | yolo26n.pt | ✅ | - |
| TorchScript | torchscript | yolo26n.torchscript | ✅ | imgsz, quantize, dynamic, nms, batch, device |
| ONNX | onnx | yolo26n.onnx | ✅ | imgsz, quantize, dynamic, simplify, opset, nms, batch, data, fraction, device |
| OpenVINO | openvino | yolo26n_openvino_model/ | ✅ | imgsz, quantize, dynamic, nms, batch, data, fraction, device |
| TensorRT | engine | yolo26n.engine | ✅ | imgsz, quantize, dynamic, simplify, opset, workspace, nms, batch, data, fraction, device |
| CoreML | coreml | yolo26n.mlpackage | ✅ | imgsz, dynamic, quantize, nms, batch, device |
| Apple Core AI | coreai | yolo26n.aimodel | ✅ | imgsz, batch, quantize |
| TF SavedModel | saved_model | yolo26n_saved_model/ | ✅ | imgsz, quantize, opset, nms, batch, data, fraction, device |
| TF GraphDef | pb | yolo26n.pb | ❌ | imgsz, opset, batch, device |
| TF Edge TPU | edgetpu | yolo26n_edgetpu.tflite | ✅ | imgsz, quantize, opset, data, fraction, device |
| LiteRT | litert | yolo26n.tflite | ✅ | imgsz, quantize, batch, data, fraction, device |
| PaddlePaddle | paddle | yolo26n_paddle_model/ | ✅ | imgsz, batch, device |
| MNN | mnn | yolo26n.mnn | ✅ | imgsz, batch, dynamic, quantize, simplify, opset, nms, device |
| NCNN | ncnn | yolo26n_ncnn_model/ | ✅ | imgsz, quantize, batch, device |
| IMX500 | imx | yolo26n_imx_model/ | ✅ | imgsz, quantize, data, fraction, nms, device |
| RKNN | rknn | yolo26n_rknn_model/ | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| ExecuTorch | executorch | yolo26n_executorch_model/ | ✅ | imgsz, batch, device |
| Axelera | axelera | yolo26n_axelera_model/ | ✅ | imgsz, batch, quantize, data, fraction, device |
| DEEPX | deepx | yolo26n_deepx_model/ | ✅ | imgsz, quantize, simplify, opset, data, optimize, device |
| Qualcomm QNN | qnn | yolo26n_qnn.onnx | ✅ | imgsz, batch, name, quantize, simplify, opset, data, fraction, device |
| Hailo | hailo | yolo26n_hailo_model/ | ✅ | imgsz, name, quantize, data, fraction, simplify, conf, iou, device |
| Huawei Ascend | ascend | yolo26n_ascend_model/ | ✅ | imgsz, batch, name, quantize, opset, simplify, nms, device |
| AMD Xilinx | xilinx | yolo26n_xilinx_model/ | ✅ | imgsz, name, quantize, data, fraction, opset, simplify, device |
يعتمد nms=None على المخرجات الأولية لإجراء NMS خارجي. اضبط nms=False لتحديد رأس متاح خالٍ من NMS؛ وتعود التنسيقات غير المدعومة إلى مسار المخرجات الأصلي الخاص بها. تحدد إدخالات nms أعلاه التنسيقات التي يمكنها تضمين NMS باستخدام nms=True.
اطّلع على التفاصيل الكاملة لـexport في صفحة التصدير.
الأسئلة الشائعة#
يوفر Ultralytics YOLO26 وضع قياس الأداء لتقييم أداء النموذج عبر تنسيقات تصدير مختلفة. ويعرض هذا الوضع معلومات عن مقاييس أساسية مثل متوسط الدقة (mAP50-95)، والدقة، وزمن الاستدلال بالمللي ثانية. لتشغيل قياس الأداء، يمكنك استخدام أوامر Python أو CLI. على سبيل المثال، لقياس الأداء على GPU:
مثالfrom ultralytics.utils.benchmarks import benchmark # قياس الأداء على GPU benchmark(model="yolo26n.pt", data="coco8.yaml", imgsz=640, device=0)لمزيد من التفاصيل حول وسيطات قياس الأداء، راجع قسم الوسيطات.
يتيح تصدير نماذج YOLO26 إلى تنسيقات مختلفة مثل ONNX وTensorRT وOpenVINO تحسين الأداء وفقًا لبيئة النشر. على سبيل المثال:
- ONNX: يوفّر تسريعًا يصل إلى 3 أضعاف على CPU.
- TensorRT: يوفّر تسريعًا يصل إلى 5 أضعاف على GPU.
- OpenVINO: محسّن خصيصًا لعتاد Intel.
تحسّن هذه التنسيقات سرعة الاستدلال على العتاد المستهدف، ما يجعل نماذجك أكثر كفاءة في تطبيقات واقعية متنوعة. تفضّل بزيارة صفحة التصدير للاطلاع على التفاصيل الكاملة.
يُعد قياس أداء نماذج YOLO26 أمرًا أساسيًا لعدة أسباب:
- اتخاذ قرارات مستنيرة: فهم المفاضلات بين السرعة والدقة.
- تخصيص الموارد: تقييم الأداء عبر خيارات العتاد المختلفة.
- التحسين: تحديد تنسيق التصدير الذي يوفّر أفضل أداء لحالات استخدام محددة.
- كفاءة التكلفة: تحسين استخدام العتاد استنادًا إلى نتائج قياس الأداء.
تساعد المقاييس الأساسية، مثل mAP50-95 ودقة Top-1 وزمن الاستدلال، في إجراء هذه التقييمات. راجع قسم المقاييس الأساسية لمزيد من المعلومات.
يدعم YOLO26 مجموعة متنوعة من تنسيقات التصدير، صُمم كل منها لعتاد وحالات استخدام محددة:
- ONNX: الأفضل لأداء CPU.
- TensorRT: مثالي لكفاءة GPU.
- OpenVINO: محسّن لعتاد Intel.
- CoreML وTensorFlow: مفيدان لتطبيقات iOS وتطبيقات تعلم الآلة عمومًا.
للاطلاع على القائمة الكاملة للتنسيقات المدعومة ومزايا كل منها، راجع قسم تنسيقات التصدير المدعومة.
عند تشغيل قياسات الأداء، يمكن تخصيص عدة وسيطات لتلبية احتياجات محددة:
- model: مسار ملف النموذج (مثل "yolo26n.pt").
- data: مسار ملف YAML لمجموعة البيانات (مثل
"coco8.yaml")؛ أما التصنيف فيتطلب دليل مجموعة بيانات أو اسم مجموعة بيانات مضمّنة (مثلimagenet10). - imgsz: حجم صورة الإدخال المربعة كعدد صحيح واحد، مثل
640. يستخدم وضع قياس الأداء حجم الصورة المربعة نفسه في PyTorch والتنسيقات المُصدَّرة لضمان عدالة المقارنة. - quantize: الدقة المطلوبة:
16لـFP16، و8لـINT8 (مفيد للأجهزة الطرفية)؛ وتعني32/القيمة غير المحددة دقة FP32 إذا كان التنسيق يدعمها — ويرفض التنسيق الذي لا يستطيع التصدير بدقة FP32 القيمة32الصريحة أو يعود إلى الدقة التي يتطلبها. لا يُصدَّر صف PyTorch الأصلي: يؤثر16وحده فيه، إذ يحدد الاستدلال بدقة FP16، بينما يشغّل8و32والقيمة غير المحددة الاستدلال بدقة FP32. بعد ذلك، ينفّذ كل تنسيق الاستدلال بدقة وقت التشغيل الخاصة به. - device: حدّد جهاز الحوسبة (مثل "cpu" و"cuda:0").
- verbose: ارفع استثناءً عند إخفاق قياس الأداء بدلًا من تسجيله؛ ومرّر عددًا عشريًا لاشتراط تجاوز مقياس كل تنسيق ذلك الحد الأدنى أيضًا.
للاطلاع على القائمة الكاملة للوسيطات، راجع قسم الوسيطات.