التحقق من صحة النماذج باستخدام Ultralytics YOLO#
مقدمة#
يُعدّ التحقق من الصحة خطوةً حاسمةً في مسار التعلّم الآلي، إذ يتيح لك تقييم جودة النماذج التي درّبتها. يوفر وضع 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، قد تتلقى 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، يمكن ضبط عدة وسائط بدقة لتحسين عملية التقييم. تتحكم هذه الوسائط في جوانب مثل حجم صورة الإدخال، ومعالجة الدُفعات، وعتبات الأداء. فيما يلي تفصيل دقيق لكل وسيطة لمساعدتك على تخصيص إعدادات التحقق بفعالية.
| الوسيطة | النوع | الافتراضي | الوصف |
|---|---|---|---|
data | str | None | يحدد مسار YAML لمجموعة البيانات (مثل coco8.yaml)، الذي ينبغي أن يتضمن مسار بيانات التحقق. أما التصنيف فيتطلب دليل مجموعة بيانات أو اسم مجموعة بيانات مضمنًا (مثل imagenet10). |
imgsz | int | 640 | يحدد حجم صور الإدخال. تُعاد تحجيم جميع الصور إلى هذا البعد قبل المعالجة. قد تحسّن الأحجام الأكبر الدقةَ للأجسام الصغيرة، لكنها تزيد زمن الحساب. |
batch | int | 16 | يحدد عدد الصور في كل دفعة. تستفيد القيم الأعلى من ذاكرة GPU بكفاءة أكبر، لكنها تتطلب قدرًا أكبر من VRAM. اضبط القيمة وفق موارد الأجهزة المتاحة. |
save_json | bool | False | إذا True، يتم حفظ النتائج في ملف JSON لمزيد من التحليل، أو التكامل مع أدوات أخرى، أو الإرسال إلى خوادم التقييم مثل COCO. على مجموعات بيانات الكشف، يتم أيضاً تقييم التنبؤات باستخدام faster-coco-eval والإبلاغ عن مقياس mAP للكائنات الصغيرة والمتوسطة والكبيرة، والذي يتم تسجيله أثناء التدريب كـ metrics/mAP_small(B) وmetrics/mAP_medium(B) وmetrics/mAP_large(B) في results.csv. |
conf | float | 0.001 | يحدد الحد الأدنى لعتبة الثقة لعمليات الكشف. تزيد القيم الأقل من الاستدعاء، لكنها قد تؤدي إلى مزيد من الإيجابيات الكاذبة. تُضبط منحنيات الدقة-الاستدعاء افتراضيًا على 0.001؛ وتستخدم مصفوفات الالتباس الخاصة بالكشف قيمة conf الصريحة، أو 0.25 عند حذفها. يستخدم ملخص الدقة والاستدعاء قيمة الثقة عند max-F1، لذلك قد يختلفان عن القيم المشتقة من confusion_matrix.png. القيمة الافتراضية هي 0.01 للتحقق من OBB لتقليل استخدام الذاكرة. |
iou | float | 0.7 | يحدد عتبة التقاطع على الاتحاد لـكبت غير الأعظم. ويتحكم في إزالة عمليات الكشف المكررة. |
max_det | int | 300 | يحد من الحد الأقصى لعدد الاكتشافات لكل صورة. بالنسبة لـ detect، وsegment، وpose، وOBB، إذا تُرِك عند 300، فسيتم رفعه إلى أكبر عدد من الكائنات الموسومة في التقسيم المُتحقَّق منه عندما تتجاوز الصورة ذلك، مع إصدار تحذير؛ بينما يتم الاحتفاظ بأي قيمة أخرى، مع تحذير من أن الاسترجاع قد يكون محدوداً عندما تتجاوز الصورة ذلك. |
quantize | int أو str | None | دقة التحقق: 16/"fp16" و 32/"fp32"/غير المحدد تحدد حساب FP16 أو FP32 لنماذج PyTorch و TorchScript؛ بينما تحسب التنسيقات الأخرى بالدقة التي تحددها ملفاتها ووقت تشغيلها. عند 16 تقوم OpenVINO بتقريب المدخلات إلى FP16 على العميل وتوسيعها مرة أخرى إلى FP32، دون تغيير ما يحسبه وقت التشغيل. يتم تكوين الكمي INT8/PTQ أثناء التصدير، ثم يُستخدَم عن طريق التحقق من النموذج المصدر. يحل محل علامة half المهملة. |
device | str | None | يحدد الجهاز المستخدم للتحقق (cpu وcuda:0 وnpu وnpu:0 وغير ذلك). عند اختيار None، يُحدد أفضل جهاز متاح تلقائيًا. ويمكن تحديد أجهزة CUDA متعددة بالفصل بينها بفواصل. |
dnn | bool | False | إذا كانت True، تُستخدم وحدة DNN في OpenCV لاستدلال نموذج ONNX، مما يوفر بديلًا لأساليب الاستدلال في PyTorch. |
plots | bool | True | عند ضبطها على True، تُنشأ مخططات التنبؤات مقابل القيم الحقيقية، ومصفوفات الالتباس، ومنحنيات PR وتُحفظ لتقييم أداء النموذج بصريًا. |
classes | list[int] | None | يحدد قائمة بمعرّفات الفئات المراد تقييمها. ويفيد في تصفية الفئات المعينة والتركيز عليها فقط أثناء التقييم. |
rect | bool | True | إذا كانت True، يُستخدم الاستدلال المستطيل لمعالجة الدُفعات، مما يقلل الحشو وقد يزيد السرعة والكفاءة عبر معالجة الصور بنسبة أبعادها الأصلية. ويُتجاهل ذلك في التحقق من depth، الذي يمدد كل صورة إلى مربع ثابت بحجم imgsz بدلًا من إضافة الحشو. |
split | str | 'val' | يحدد تقسيم مجموعة البيانات المستخدم للتحقق (val أو test أو train). ويتيح المرونة في اختيار جزء البيانات لتقييم الأداء. |
fraction | float أو int أو list | 1.0 | مجموعة فرعية من التقسيم الذي تم التحقق من صحته. باستخدام قائمة [train, val, test]، ينطبق المدخل المطابق لـ split (حيث 1 = التقسيم الكامل، والأعداد الصحيحة الأكبر من 1 = عدد الصور؛ المدخلات المستبعدة هي التقسيم الكامل). ينطبق العدد القياسي فقط مع split=train؛ وعندها يستخدم كل من val و test التقسيم الكامل. |
project | str | None | اسم دليل المشروع الذي تُحفظ فيه مخرجات التحقق. ويساعد على تنظيم نتائج التجارب أو النماذج المختلفة. |
name | str | None | اسم تشغيل التحقق. ويُستخدم لإنشاء دليل فرعي داخل مجلد المشروع تُخزَّن فيه سجلات التحقق ومخرجاته. |
verbose | bool | True | إذا كانت True، تُعرض معلومات تفصيلية أثناء عملية التحقق، بما في ذلك المقاييس لكل فئة، وتقدم الدُفعات، ومعلومات تصحيح إضافية. |
save_txt | bool | False | إذا كانت True، تُحفظ نتائج الكشف في ملفات نصية، بملف واحد لكل صورة، للاستفادة منها في مزيد من التحليل أو المعالجة اللاحقة المخصصة أو التكامل مع الأنظمة الأخرى. |
save_conf | bool | False | إذا كانت True، فتُضمَّن قيم الثقة في الملفات النصية المحفوظة عند تمكين save_txt، مما يوفر مخرجات أكثر تفصيلًا للتحليل والتصفية. |
workers | int | 8 | عدد خيوط العاملين لتحميل البيانات. قد تسرّع القيم الأعلى المعالجة المسبقة للبيانات، لكنها قد تزيد استخدام CPU. يؤدي الضبط على 0 إلى استخدام الخيط الرئيسي، وهو ما قد يكون أكثر استقرارًا في بعض البيئات. |
augment | bool | False | يمكّن زيادة البيانات وقت الاختبار (TTA) أثناء التحقق، مما قد يحسّن دقة الكشف على حساب سرعة الاستدلال عبر تشغيل الاستدلال على نسخ محوّلة من الإدخال. ولا يتوفر إلا لنماذج Ultralytics PyTorch. |
agnostic_nms | bool | False | يمكن عملية Non-Maximum Suppression غير المرتبط بالفئة، حيث يتم قمع المربعات المتداخلة الأقل تسجيلًا بغض النظر عن فئتها المتوقعة. مفيد للتطبيقات التي تركز على المثيلات. مع الاستدلال الخالي من NMS (nms=False على YOLO26 أو YOLOv10)، يمنع هذا فقط نفس الاكتشاف من الظهور بتسميات فئات متعددة (تكرارات IoU=1.0) ولا يقوم بقمع يعتمد على عتبة IoU بين المربعات المتميزة. |
single_cls | bool | False | يعامل جميع الفئات كفئة واحدة أثناء التحقق. ويفيد في تقييم أداء النموذج في مهام الكشف الثنائي أو عندما لا تكون الفروق بين الفئات مهمة. |
visualize | bool | False | يعرض القيم الحقيقية والإيجابيات الحقيقية والإيجابيات الكاذبة والسلبيات الكاذبة لكل صورة. ويفيد في تصحيح الأخطاء وتفسير النموذج. |
show_labels | bool | True | يعرض تسميات الفئات في مرئيات التحقق عندما تكون visualize=True. اضبطها على False للحصول على عرض أوضح للتطابقات والأخطاء. |
show_conf | bool | True | يعرض درجات الثقة في مرئيات التحقق عندما تكون visualize=True. اضبطها على False للحصول على عرض أوضح للتطابقات والأخطاء. |
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) للتحقق الأصلي باستخدام PyTorch. يمكّنه None تلقائيًا على وحدات CPU بمعمارية x86 في Linux وWindows المفعّل فيها oneDNN مع PyTorch 1.13 أو أحدث، بينما يعطله False، ويطلبه True على أجهزة CPU بمعمارية x86 أو CUDA المدعومة. وتبقى ARM64 وMPS وإصدارات PyTorch الأقدم ووحدات CPU التي لا تحتوي على oneDNN والتنسيقات المُصدَّرة دون تغيير؛ كما يحافظ التحقق أثناء التدريب على تخطيط نموذج التدريب. |
nms | bool، اختياري | None | يشغل استدلال من واحد إلى متعدد مع NMS افتراضيًا (None أو True). قم بتعيين False لاستخدام الرأس الفردي الخالي من NMS عند توفره. راجع دليل الكشف من طرف إلى طرف للحصول على التفاصيل. |
يلعب كل إعداد من هذه الإعدادات دورًا حيويًا في عملية التحقق، إذ يتيح تقييم نماذج YOLO بطريقة قابلة للتخصيص وفعالة. ويمكن أن يساعد ضبط هذه المعلمات وفقًا لاحتياجاتك ومواردك المحددة على تحقيق أفضل توازن بين الدقة والأداء.
مثال على التحقق باستخدام الوسائط#
Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More
توضح الأمثلة أدناه التحقق من صحة نموذج 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 بتنسيقات مختلفة باستخدام الكود المتوفر.
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())يخزّن التحقق مقاييس الدقة والاستدعاء و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 لمزيد من التفاصيل.