التحقق من صحة النماذج باستخدام Ultralytics YOLO#
مقدمة#
يُعد التحقق من الصحة خطوة حاسمة في مسار التعلم الآلي، إذ يتيح لك تقييم جودة النماذج المدرَّبة. يوفر وضع Val في Ultralytics YOLO26 مجموعة متينة من الأدوات والمقاييس لتقييم أداء نماذج كشف الأجسام. ويُعد هذا الدليل مرجعًا شاملًا لفهم كيفية استخدام وضع Val بفعالية، لضمان دقة نماذجك وموثوقيتها.
اطّلع على معاينة YOLO27 غير المُصدرة للاطلاع على نتائج التحقق الأولية.
شاهد: شرح تعليمي لأنماط Ultralytics: التحقق
لماذا نتحقق باستخدام Ultralytics YOLO؟#
إليك أسباب تميّز وضع Val في YOLO26:
- الدقة: احصل على مقاييس دقيقة مثل mAP50 وmAP75 وmAP50-95 لتقييم نموذجك تقييمًا شاملًا.
- السهولة: استفد من الميزات المدمجة التي تحفظ إعدادات التدريب، مما يبسّط عملية التحقق.
- المرونة: تحقّق من نموذجك باستخدام مجموعات البيانات وأحجام الصور نفسها أو مختلفة.
- ضبط المعلمات الفائقة: استخدم مقاييس التحقق لضبط نموذجك بدقة وتحسين أدائه.
الميزات الرئيسية لوضع Val#
فيما يلي أبرز الوظائف التي يوفّرها وضع Val في YOLO26:
- الإعدادات التلقائية: تحفظ النماذج إعدادات التدريب الخاصة بها لتسهيل التحقق.
- دعم مقاييس متعددة: قيّم نموذجك استنادًا إلى مجموعة من مقاييس الدقة.
- واجهة سطر الأوامر وواجهة Python البرمجية: اختر واجهة سطر الأوامر أو واجهة Python البرمجية للتحقق، وفقًا لتفضيلاتك.
- التوافق مع البيانات: يعمل بسلاسة مع مجموعات البيانات المستخدمة في التدريب، وكذلك مع مجموعات البيانات المخصصة.
- تحفظ نماذج YOLO26 إعدادات التدريب تلقائيًا، لذا يتحقق
yolo val model=path/to/best.ptأوYOLO("path/to/best.pt").val()على حجم صور التدريب ضمن مجموعة البيانات الأصلية. وتعود الأوزان الرسمية إلى مجموعة البيانات الافتراضية للمهمة؛ مرّرdataلتجاوز هذا الإعداد.
أمثلة الاستخدام#
تحقّق من دقة نموذج YOLO26n مدرّب. لا حاجة إلى تمرير أي وسيطات، إذ يحتفظ model بسمتي التدريب data والوسيطات بوصفها سمات للنموذج: يتحقق path/to/best.pt على مجموعة البيانات التي دُرّب عليها. تسجّل الأوزان الرسمية مسار مجموعة بيانات التدريب، وهو مسار غير موجود على جهازك، لذا تعود إلى coco8.yaml الافتراضية للمهمة مع إصدار تحذير. مرّر data للتحقق على مجموعة بيانات أخرى. راجع قسم الوسيطات أدناه للاطلاع على القائمة الكاملة لوسيطات التحقق.
في Windows، قد تتلقى RuntimeError عند تشغيل التحقق على هيئة نص برمجي. أضف كتلة if __name__ == "__main__": قبل شيفرة التحقق لحل المشكلة.
from ultralytics import YOLO
# تحميل نموذج
model = YOLO("yolo26n.pt") # حمّل نموذجًا رسميًا
model = YOLO("path/to/best.pt") # تحميل نموذج مخصص
# تحقّق من النموذج
metrics = model.val() # لا حاجة إلى وسيطات؛ إذ تُحفظ مجموعة البيانات والإعدادات
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # قائمة تتضمن mAP50-95 لكل فئة
metrics.box.image_metrics # قاموس المقاييس لكل صورة، ويشمل precision وrecall وF1 وTP وFP و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 | يحدد الحد الأدنى لعتبة الثقة للاكتشافات. تزيد القيم الأقل من الاستدعاء، لكنها قد تؤدي إلى مزيد من الإيجابيات الكاذبة. تستخدم منحنيات الدقة والاستدعاء وmAP ومصفوفات الالتباس للاكتشاف هذه القيمة؛ وتؤدي قيمة conf أعلى، مثل 0.25، إلى مصفوفة أقرب إلى مخرجات التنبؤ، لكنها قد تخفض mAP. وتستخدم قيمتا الدقة والاستدعاء الموجزتان قيمة الثقة المقابلة لأقصى 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"/unset استخدام حساب FP16 أو FP32 لنماذج PyTorch وTorchScript (FP32 على CPU)؛ أما التنسيقات الأخرى فتستخدم الدقة التي يحددها الملف الاصطناعي وبيئة التشغيل. عند 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، تُجمّع الصور ذات نسب العرض إلى الارتفاع المتشابهة في أشكال مستطيلة. يُضاف نصف خطوة قبل تقريب كل بُعد إلى مضاعف لخطوة الشبكة (ولا تُضاف نصف خطوة إضافية عند استخدام semantic). عند استخدام خطوة شبكة مقدارها 32، تصبح الصورة ذات الأبعاد 640×640 عند imgsz=640 بأبعاد 672×672 مع إزاحة قدرها 16 px، بينما يستخدم التنبؤ أبعاد 640×640، لذا قد تختلف المقاييس. يطابق rect=False التنبؤ في الصور المربعة. يُتجاهل هذا الإعداد عند استخدام 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 | يفعّل كبت غير الأعظمية غير المرتبط بالفئة، فيكبت الصناديق المتداخلة ذات الدرجات الأقل بصرف النظر عن الفئة المتنبأ بها. يفيد ذلك في التطبيقات التي تركز على المثيلات. في الاستدلال الخالي من 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 بكفاءة مع إمكانية تخصيصه. ويساعد ضبط هذه المعلمات وفقًا لاحتياجاتك ومواردك المحددة على تحقيق أفضل توازن بين الدقة والأداء.
مثال على التحقق باستخدام الوسيطات#
شاهد: كيفية تصدير نتائج التحقق من النموذج إلى CSV وJSON وSQL وإطار بيانات Polars والمزيد
تعرض الأمثلة أدناه التحقق من نماذج YOLO باستخدام وسيطات مخصصة في Python وواجهة سطر الأوامر.
from ultralytics import YOLO
# تحميل نموذج
model = YOLO("yolo26n.pt")
# خصّص إعدادات التحقق
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())يخزّن التحقق مقاييس precision وrecall وF1 وTP وFP وFN لكل صورة (عند حد IoU يساوي 0.5) لجميع المهام، باستثناء التصنيف. ويمكنك الوصول إليها عبر results.box.image_metrics للكشف وOBB، وresults.seg.image_metrics للتجزئة، وresults.pose.image_metrics لتقدير الوضعية، بعد اكتمال التحقق.
from ultralytics import YOLO
# تحميل نموذج
model = YOLO("yolo26n.pt")
# تحقّق من النموذج واطّلع على المقاييس لكل صورة
results = model.val(data="coco8.yaml")
# image_metrics قاموس مفاتيحه أسماء ملفات الصور
print(results.box.image_metrics)
# المخرجات: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}
# اطّلع على مقاييس صورة محددة
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 البرمجية، يمكنك تحميل نموذج وتشغيل التحقق كما يلي:
from ultralytics import YOLO # تحميل نموذج model = YOLO("yolo26n.pt") # تحقّق من النموذج metrics = model.val() print(metrics.box.map) # map50-95بدلًا من ذلك، يمكنك استخدام واجهة سطر الأوامر (CLI):
yolo detect val model=yolo26n.pt data=coco8.yamlلمزيد من التخصيص، يمكنك ضبط وسيطات مختلفة مثل
imgszوbatchوconfفي Python وواجهة CLI. راجع قسم وسيطات التحقق من نماذج YOLO للاطلاع على القائمة الكاملة للمعلمات.يوفّر التحقق من نموذج YOLO26 عدة مقاييس أساسية لتقييم أداء النموذج، ومنها:
- mAP50 (متوسط الدقة عند حد IoU يساوي 0.5)
- mAP75 (متوسط الدقة عند حد IoU يساوي 0.75)
- mAP50-95 (متوسط الدقة عبر حدود IoU متعددة من 0.5 إلى 0.95)
باستخدام واجهة Python البرمجية، يمكنك الوصول إلى هذه المقاييس كما يلي:
metrics = model.val() # يفترض أن `model` قد تم تحميله print(metrics.box.map) # mAP50-95 print(metrics.box.map50) # mAP50 print(metrics.box.map75) # mAP75 print(metrics.box.maps) # قائمة بقيم mAP50-95 لكل فئة print(metrics.box.image_metrics) # قاموس المقاييس لكل صورة، ويشمل precision وrecall وF1 وTP وFP وFNلإجراء تقييم كامل للأداء، من الضروري مراجعة جميع هذه المقاييس. لمزيد من التفاصيل، راجع الميزات الرئيسية لوضع Val.
يوفّر استخدام Ultralytics YOLO للتحقق عدة مزايا:
- الدقة: يوفّر YOLO26 مقاييس أداء دقيقة، تشمل mAP50 وmAP75 وmAP50-95.
- السهولة: تتذكر النماذج إعدادات التدريب الخاصة بها، مما يجعل التحقق مباشرًا.
- المرونة: يمكنك التحقق باستخدام مجموعات البيانات وأحجام الصور نفسها أو مختلفة.
- ضبط المعلمات الفائقة: تساعد مقاييس التحقق على ضبط النماذج بدقة لتحسين الأداء.
تضمن هذه المزايا تقييم نماذجك بدقة وإمكانية تحسينها لتحقيق نتائج أفضل. تعرّف على المزيد حول هذه المزايا في قسم لماذا نتحقق باستخدام Ultralytics YOLO.
نعم، يمكنك التحقق من نموذج YOLO26 باستخدام مجموعة بيانات مخصصة. حدّد الوسيط
dataمع مسار ملف YAML لمجموعة البيانات، الذي ينبغي أن يتضمن مسار بيانات التحقق. أما التصنيف، فيتطلب دليلًا لمجموعة بيانات أو اسم مجموعة بيانات مدمجة (مثلimagenet10).ملاحظةيُجرى التحقق باستخدام أسماء الفئات الخاصة بالنموذج، التي يمكنك عرضها باستخدام
model.names، وقد تختلف عن الأسماء التي تحددها مجموعة البيانات نفسها.مثال باستخدام Python:
from ultralytics import YOLO # تحميل نموذج model = YOLO("yolo26n.pt") # تحقّق باستخدام مجموعة بيانات مخصصة 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 البرمجية أو CLI.مثال باستخدام Python:
from ultralytics import YOLO # تحميل نموذج model = YOLO("yolo26n.pt") # احفظ نتائج التحقق بصيغة JSON metrics = model.val(save_json=True)مثال باستخدام CLI:
yolo val model=yolo26n.pt save_json=Trueفي مجموعات بيانات الكشف، يعرض
save_json=Trueأيضًا mAP للأجسام الصغيرة والمتوسطة والكبيرة عبرfaster-coco-eval. راجع وسيطات التحقق من نماذج YOLO لمزيد من التفاصيل.