Ultralytics YOLO27:

التحقق من صحة النماذج باستخدام Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

مقدمة#

يُعدّ التحقق من الصحة خطوةً حاسمةً في مسار التعلّم الآلي، إذ يتيح لك تقييم جودة النماذج التي درّبتها. يوفر وضع Val في Ultralytics YOLO26 مجموعةً قويةً من الأدوات والمقاييس لتقييم أداء نماذج كشف الأجسام. ويُعد هذا الدليل مرجعًا شاملًا لفهم كيفية استخدام وضع Val بفعالية لضمان دقة نماذجك وموثوقيتها.

راجع معاينة YOLO27 غير الإصدار الرسمي للحصول على نتائج التحقق الأولية.



Watch: Ultralytics Modes Tutorial: Validation

لماذا نتحقق من الصحة باستخدام Ultralytics YOLO؟#

إليك أسباب أفضلية استخدام وضع Val في YOLO26:

  • الدقة: احصل على مقاييس دقيقة مثل mAP50 وmAP75 وmAP50-95 لتقييم نموذجك تقييمًا شاملًا.
  • السهولة: استفد من الميزات المضمنة التي تتذكر إعدادات التدريب، مما يبسّط عملية التحقق.
  • المرونة: تحقّق من صحة نموذجك باستخدام مجموعات البيانات نفسها أو مجموعات مختلفة، وبأحجام صور متباينة.
  • ضبط المعلمات الفائقة: استخدم مقاييس التحقق لضبط نموذجك بدقة وتحسين أدائه.

الميزات الرئيسية لوضع Val#

فيما يلي الوظائف البارزة التي يوفرها وضع Val في YOLO26:

  • الإعدادات التلقائية: تتذكر النماذج إعدادات التدريب الخاصة بها، مما يسهّل التحقق.
  • دعم مقاييس متعددة: قيّم نموذجك استنادًا إلى مجموعة من مقاييس الدقة.
  • CLI وPython API: اختر بين واجهة سطر الأوامر أو Python API وفقًا لتفضيلاتك في التحقق.
  • توافق البيانات: يعمل بسلاسة مع مجموعات البيانات المستخدمة أثناء التدريب، وكذلك مع مجموعات البيانات المخصصة.
نصيحة
  • تتذكر نماذج YOLO26 إعدادات التدريب تلقائيًا، لذا يمكنك بسهولة التحقق من صحة نموذج بالحجم نفسه للصور وعلى مجموعة البيانات الأصلية باستخدام yolo val model=yolo26n.pt أو YOLO("yolo26n.pt").val() فقط.

أمثلة على الاستخدام#

تحقّق من دقة نموذج YOLO26n المدرَّب على مجموعة بيانات COCO8. لا حاجة إلى أي وسائط، إذ يحتفظ model بـ data ووسائط التدريب كسمات للنموذج. راجع قسم Arguments أدناه للاطلاع على القائمة الكاملة لوسائط التحقق.

خطأ المعالجة المتعددة في Windows

في Windows، قد تتلقى RuntimeError عند تشغيل التحقق كنص برمجي. أضف كتلة if __name__ == "__main__": قبل كود التحقق لحل المشكلة.

مثال
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # a list containing mAP50-95 for each category
metrics.box.image_metrics  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

وسائط التحقق من صحة نموذج YOLO#

عند التحقق من صحة نماذج YOLO، يمكن ضبط عدة وسائط بدقة لتحسين عملية التقييم. تتحكم هذه الوسائط في جوانب مثل حجم صورة الإدخال، ومعالجة الدُفعات، وعتبات الأداء. فيما يلي تفصيل دقيق لكل وسيطة لمساعدتك على تخصيص إعدادات التحقق بفعالية.

الوسيطةالنوعالافتراضيالوصف
datastrNoneيحدد مسار YAML لمجموعة البيانات (مثل coco8.yaml)، الذي ينبغي أن يتضمن مسار بيانات التحقق. أما التصنيف فيتطلب دليل مجموعة بيانات أو اسم مجموعة بيانات مضمنًا (مثل imagenet10).
imgszint640يحدد حجم صور الإدخال. تُعاد تحجيم جميع الصور إلى هذا البعد قبل المعالجة. قد تحسّن الأحجام الأكبر الدقةَ للأجسام الصغيرة، لكنها تزيد زمن الحساب.
batchint16يحدد عدد الصور في كل دفعة. تستفيد القيم الأعلى من ذاكرة GPU بكفاءة أكبر، لكنها تتطلب قدرًا أكبر من VRAM. اضبط القيمة وفق موارد الأجهزة المتاحة.
save_jsonboolFalseإذا True، يتم حفظ النتائج في ملف JSON لمزيد من التحليل، أو التكامل مع أدوات أخرى، أو الإرسال إلى خوادم التقييم مثل COCO. على مجموعات بيانات الكشف، يتم أيضاً تقييم التنبؤات باستخدام faster-coco-eval والإبلاغ عن مقياس mAP للكائنات الصغيرة والمتوسطة والكبيرة، والذي يتم تسجيله أثناء التدريب كـ metrics/mAP_small(B) وmetrics/mAP_medium(B) وmetrics/mAP_large(B) في results.csv.
conffloat0.001يحدد الحد الأدنى لعتبة الثقة لعمليات الكشف. تزيد القيم الأقل من الاستدعاء، لكنها قد تؤدي إلى مزيد من الإيجابيات الكاذبة. تُضبط منحنيات الدقة-الاستدعاء افتراضيًا على 0.001؛ وتستخدم مصفوفات الالتباس الخاصة بالكشف قيمة conf الصريحة، أو 0.25 عند حذفها. يستخدم ملخص الدقة والاستدعاء قيمة الثقة عند max-F1، لذلك قد يختلفان عن القيم المشتقة من confusion_matrix.png. القيمة الافتراضية هي 0.01 للتحقق من OBB لتقليل استخدام الذاكرة.
ioufloat0.7يحدد عتبة التقاطع على الاتحاد لـكبت غير الأعظم. ويتحكم في إزالة عمليات الكشف المكررة.
max_detint300يحد من الحد الأقصى لعدد الاكتشافات لكل صورة. بالنسبة لـ detect، وsegment، وpose، وOBB، إذا تُرِك عند 300، فسيتم رفعه إلى أكبر عدد من الكائنات الموسومة في التقسيم المُتحقَّق منه عندما تتجاوز الصورة ذلك، مع إصدار تحذير؛ بينما يتم الاحتفاظ بأي قيمة أخرى، مع تحذير من أن الاسترجاع قد يكون محدوداً عندما تتجاوز الصورة ذلك.
quantizeint أو strNoneدقة التحقق: 16/"fp16" و 32/"fp32"/غير المحدد تحدد حساب FP16 أو FP32 لنماذج PyTorch و TorchScript؛ بينما تحسب التنسيقات الأخرى بالدقة التي تحددها ملفاتها ووقت تشغيلها. عند 16 تقوم OpenVINO بتقريب المدخلات إلى FP16 على العميل وتوسيعها مرة أخرى إلى FP32، دون تغيير ما يحسبه وقت التشغيل. يتم تكوين الكمي INT8/PTQ أثناء التصدير، ثم يُستخدَم عن طريق التحقق من النموذج المصدر. يحل محل علامة half المهملة.
devicestrNoneيحدد الجهاز المستخدم للتحقق (cpu وcuda:0 وnpu وnpu:0 وغير ذلك). عند اختيار None، يُحدد أفضل جهاز متاح تلقائيًا. ويمكن تحديد أجهزة CUDA متعددة بالفصل بينها بفواصل.
dnnboolFalseإذا كانت True، تُستخدم وحدة DNN في OpenCV لاستدلال نموذج ONNX، مما يوفر بديلًا لأساليب الاستدلال في PyTorch.
plotsboolTrueعند ضبطها على True، تُنشأ مخططات التنبؤات مقابل القيم الحقيقية، ومصفوفات الالتباس، ومنحنيات PR وتُحفظ لتقييم أداء النموذج بصريًا.
classeslist[int]Noneيحدد قائمة بمعرّفات الفئات المراد تقييمها. ويفيد في تصفية الفئات المعينة والتركيز عليها فقط أثناء التقييم.
rectboolTrueإذا كانت True، يُستخدم الاستدلال المستطيل لمعالجة الدُفعات، مما يقلل الحشو وقد يزيد السرعة والكفاءة عبر معالجة الصور بنسبة أبعادها الأصلية. ويُتجاهل ذلك في التحقق من depth، الذي يمدد كل صورة إلى مربع ثابت بحجم imgsz بدلًا من إضافة الحشو.
splitstr'val'يحدد تقسيم مجموعة البيانات المستخدم للتحقق (val أو test أو train). ويتيح المرونة في اختيار جزء البيانات لتقييم الأداء.
fractionfloat أو int أو list1.0مجموعة فرعية من التقسيم الذي تم التحقق من صحته. باستخدام قائمة [train, val, test]، ينطبق المدخل المطابق لـ split (حيث 1 = التقسيم الكامل، والأعداد الصحيحة الأكبر من 1 = عدد الصور؛ المدخلات المستبعدة هي التقسيم الكامل). ينطبق العدد القياسي فقط مع split=train؛ وعندها يستخدم كل من val و test التقسيم الكامل.
projectstrNoneاسم دليل المشروع الذي تُحفظ فيه مخرجات التحقق. ويساعد على تنظيم نتائج التجارب أو النماذج المختلفة.
namestrNoneاسم تشغيل التحقق. ويُستخدم لإنشاء دليل فرعي داخل مجلد المشروع تُخزَّن فيه سجلات التحقق ومخرجاته.
verboseboolTrueإذا كانت True، تُعرض معلومات تفصيلية أثناء عملية التحقق، بما في ذلك المقاييس لكل فئة، وتقدم الدُفعات، ومعلومات تصحيح إضافية.
save_txtboolFalseإذا كانت True، تُحفظ نتائج الكشف في ملفات نصية، بملف واحد لكل صورة، للاستفادة منها في مزيد من التحليل أو المعالجة اللاحقة المخصصة أو التكامل مع الأنظمة الأخرى.
save_confboolFalseإذا كانت True، فتُضمَّن قيم الثقة في الملفات النصية المحفوظة عند تمكين save_txt، مما يوفر مخرجات أكثر تفصيلًا للتحليل والتصفية.
workersint8عدد خيوط العاملين لتحميل البيانات. قد تسرّع القيم الأعلى المعالجة المسبقة للبيانات، لكنها قد تزيد استخدام CPU. يؤدي الضبط على 0 إلى استخدام الخيط الرئيسي، وهو ما قد يكون أكثر استقرارًا في بعض البيئات.
augmentboolFalseيمكّن زيادة البيانات وقت الاختبار (TTA) أثناء التحقق، مما قد يحسّن دقة الكشف على حساب سرعة الاستدلال عبر تشغيل الاستدلال على نسخ محوّلة من الإدخال. ولا يتوفر إلا لنماذج Ultralytics PyTorch.
agnostic_nmsboolFalseيمكن عملية Non-Maximum Suppression غير المرتبط بالفئة، حيث يتم قمع المربعات المتداخلة الأقل تسجيلًا بغض النظر عن فئتها المتوقعة. مفيد للتطبيقات التي تركز على المثيلات. مع الاستدلال الخالي من NMS (nms=False على YOLO26 أو YOLOv10)، يمنع هذا فقط نفس الاكتشاف من الظهور بتسميات فئات متعددة (تكرارات IoU=1.0) ولا يقوم بقمع يعتمد على عتبة IoU بين المربعات المتميزة.
single_clsboolFalseيعامل جميع الفئات كفئة واحدة أثناء التحقق. ويفيد في تقييم أداء النموذج في مهام الكشف الثنائي أو عندما لا تكون الفروق بين الفئات مهمة.
visualizeboolFalseيعرض القيم الحقيقية والإيجابيات الحقيقية والإيجابيات الكاذبة والسلبيات الكاذبة لكل صورة. ويفيد في تصحيح الأخطاء وتفسير النموذج.
show_labelsboolTrueيعرض تسميات الفئات في مرئيات التحقق عندما تكون visualize=True. اضبطها على False للحصول على عرض أوضح للتطابقات والأخطاء.
show_confboolTrueيعرض درجات الثقة في مرئيات التحقق عندما تكون visualize=True. اضبطها على False للحصول على عرض أوضح للتطابقات والأخطاء.
compilebool أو strFalseيمكّن تجميع الرسم البياني باستخدام torch.compile في PyTorch 2.x مع backend='inductor'. يقبل True"default"، أو False → للتعطيل، أو وضعًا نصيًا مثل "default" و"reduce-overhead" و"max-autotune-no-cudagraphs". ويعود إلى التنفيذ الفوري مع إصدار تحذير إذا لم يكن مدعومًا.
channels_lastboolNoneيستخدم تنسيق ذاكرة channels_last (NHWC) للتحقق الأصلي باستخدام PyTorch. يمكّنه None تلقائيًا على وحدات CPU بمعمارية x86 في Linux وWindows المفعّل فيها oneDNN مع PyTorch 1.13 أو أحدث، بينما يعطله False، ويطلبه True على أجهزة CPU بمعمارية x86 أو CUDA المدعومة. وتبقى ARM64 وMPS وإصدارات PyTorch الأقدم ووحدات CPU التي لا تحتوي على oneDNN والتنسيقات المُصدَّرة دون تغيير؛ كما يحافظ التحقق أثناء التدريب على تخطيط نموذج التدريب.
nmsbool، اختياريNoneيشغل استدلال من واحد إلى متعدد مع NMS افتراضيًا (None أو True). قم بتعيين False لاستخدام الرأس الفردي الخالي من NMS عند توفره. راجع دليل الكشف من طرف إلى طرف للحصول على التفاصيل.

يلعب كل إعداد من هذه الإعدادات دورًا حيويًا في عملية التحقق، إذ يتيح تقييم نماذج YOLO بطريقة قابلة للتخصيص وفعالة. ويمكن أن يساعد ضبط هذه المعلمات وفقًا لاحتياجاتك ومواردك المحددة على تحقيق أفضل توازن بين الدقة والأداء.

مثال على التحقق باستخدام الوسائط#



Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More

Explore model validation and different export methods in Google Colab

توضح الأمثلة أدناه التحقق من صحة نموذج YOLO باستخدام وسائط مخصصة في Python وCLI.

مثال
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Customize validation settings
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")
تصدير ConfusionMatrix

يمكنك أيضًا حفظ نتائج ConfusionMatrix بتنسيقات مختلفة باستخدام الكود المتوفر.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())
الدقة والاستدعاء وF1 لكل صورة

يخزّن التحقق مقاييس الدقة والاستدعاء وF1 وTP وFP وFN لكل صورة (عند عتبة IoU تبلغ 0.5) لجميع المهام باستثناء التصنيف. ويمكن الوصول إليها عبر results.box.image_metrics للكشف وOBB، وعبر results.seg.image_metrics للتجزئة، وعبر results.pose.image_metrics للوضعية بعد اكتمال التحقق.

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Validate and access per-image metrics
results = model.val(data="coco8.yaml")

# image_metrics is a dictionary with image filenames as keys
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}

# Access metrics for a specific image
results.box.image_metrics["image1.jpg"]  # {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}

يحتوي كل إدخال في image_metrics على المفاتيح التالية:

المفتاحالوصف
precisionدرجة الدقة للصورة (tp / (tp + fp)).
recallدرجة الاستدعاء للصورة (tp / (tp + fn)).
f1المتوسط التوافقي للدقة والاستدعاء.
tpعدد الإيجابيات الحقيقية للصورة.
fpعدد الإيجابيات الكاذبة للصورة.
fnعدد السلبيات الكاذبة للصورة.

تتوفر هذه الميزة لمهام الكشف والتجزئة والوضعية وOBB.

يعرض كائن المقاييس المُعَاد أيضاً أدوات مساعدة للتصدير من أجل التحليل اللاحق:

الطريقةنوع الإرجاعالوصف
summary()List[Dict[str, Any]]تحوّل نتائج التحقق إلى قاموس موجز.
to_df()DataFrameتعيد نتائج التحقق في إطار بيانات Polars منظم.
to_csv()strتصدّر نتائج التحقق بتنسيق CSV وتعيد سلسلة CSV.
to_json()strتصدّر نتائج التحقق بتنسيق JSON وتعيد سلسلة JSON.

لمزيد من التفاصيل، راجع وثائق فئة DataExportMixin.

ما التالي#

هل أنت راضٍ عن المقاييس؟ صدّر النموذج إلى تنسيق للنشر. وإذا كانت الدقة غير مرضية، عُد وأعد التدريب باستخدام معلمات فائقة مختلفة أو مزيد من بيانات التدريب.

الأسئلة الشائعة#

  • للتحقق من صحة نموذج YOLO26، يمكنك استخدام وضع Val الذي توفره Ultralytics. فعلى سبيل المثال، باستخدام Python API، يمكنك تحميل نموذج وتشغيل التحقق باستخدام:

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Validate the model
    metrics = model.val()
    print(metrics.box.map)  # map50-95

    بدلًا من ذلك، يمكنك استخدام واجهة سطر الأوامر (CLI):

    yolo val model=yolo26n.pt

    لمزيد من التخصيص، يمكنك ضبط وسائط مختلفة مثل imgsz وbatch وconf في وضعي Python وCLI. راجع قسم وسائط التحقق من صحة نموذج YOLO للاطلاع على القائمة الكاملة للمعلمات.

  • يوفر التحقق من صحة نموذج YOLO26 عدة مقاييس رئيسية لتقييم أداء النموذج، ومنها:

    • mAP50 (متوسط Average Precision عند عتبة IoU تبلغ 0.5)
    • mAP75 (متوسط Average Precision عند عتبة IoU تبلغ 0.75)
    • mAP50-95 (متوسط Average Precision عبر عتبات IoU متعددة من 0.5 إلى 0.95)

    باستخدام Python API، يمكنك الوصول إلى هذه المقاييس كما يلي:

    metrics = model.val()  # assumes `model` has been loaded
    print(metrics.box.map)  # mAP50-95
    print(metrics.box.map50)  # mAP50
    print(metrics.box.map75)  # mAP75
    print(metrics.box.maps)  # list of mAP50-95 for each category
    print(metrics.box.image_metrics)  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

    لإجراء تقييم كامل للأداء، من الضروري مراجعة جميع هذه المقاييس. لمزيد من التفاصيل، راجع الميزات الرئيسية لوضع Val.

  • يوفر استخدام Ultralytics YOLO للتحقق عدة مزايا:

    • الدقة: يوفر YOLO26 مقاييس أداء دقيقة، بما في ذلك mAP50 وmAP75 وmAP50-95.
    • السهولة: تتذكر النماذج إعدادات التدريب الخاصة بها، مما يجعل التحقق مباشرًا.
    • المرونة: يمكنك التحقق باستخدام مجموعات البيانات نفسها أو مجموعات مختلفة، وبأحجام صور متباينة.
    • ضبط المعلمات الفائقة: تساعد مقاييس التحقق على ضبط النماذج بدقة لتحسين الأداء.

    تضمن هذه المزايا تقييم نماذجك تقييمًا شاملًا وإمكانية تحسينها لتحقيق نتائج أفضل. تعرّف على المزيد حول هذه المزايا في قسم لماذا نتحقق من الصحة باستخدام Ultralytics YOLO.

  • نعم، يمكنك التحقق من صحة نموذج YOLO26 باستخدام مجموعة بيانات مخصصة. حدّد الوسيطة data مع مسار YAML لمجموعة البيانات، الذي ينبغي أن يتضمن مسار بيانات التحقق. أما التصنيف فيتطلب دليل مجموعة بيانات أو اسم مجموعة بيانات مضمنًا (مثل imagenet10).

    ملاحظة

    يُجرى التحقق باستخدام أسماء الفئات الخاصة بالنموذج نفسه، ويمكنك عرضها باستخدام model.names، وقد تختلف هذه الأسماء عن تلك التي تحددها مجموعة البيانات نفسها.

    مثال باستخدام Python:

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Validate with a custom dataset
    metrics = model.val(data="path/to/your/custom_dataset.yaml")
    print(metrics.box.map)  # map50-95

    مثال باستخدام CLI:

    yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yaml

    للاطلاع على مزيد من الخيارات القابلة للتخصيص أثناء التحقق، راجع قسم مثال على التحقق باستخدام الوسائط.

  • لحفظ نتائج التحقق في ملف JSON، يمكنك تعيين الوسيطة save_json إلى True عند تشغيل التحقق. ويمكن إجراء ذلك باستخدام كلٍّ من Python API وCLI.

    مثال باستخدام Python:

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Save validation results to JSON
    metrics = model.val(save_json=True)

    مثال باستخدام CLI:

    yolo val model=yolo26n.pt save_json=True

    على مجموعة بيانات الاكتشاف، يُبلغ save_json=True أيضاً عن متوسط دقة المواءمة (mAP) للأجسام الصغيرة والمتوسطة والكبيرة من خلال faster-coco-eval. راجع Arguments for YOLO Model Validation لمزيد من التفاصيل.

التعليقات