رؤية YOLO لعام 2026:

زيادة البيانات في وقت الاختبار (TTA)#

📚 يشرح هذا الدليل كيفية استخدام تعزيز وقت الاختبار (TTA) أثناء الاختبار والاستدلال لتحسين mAP و Recall مع YOLOv5 🚀.

قبل البدء#

استنسخ المستودع وقم بتثبيت requirements.txt في بيئة Python>=3.8.0، بما في ذلك PyTorch>=1.8. يتم تنزيل النماذج ومجموعات البيانات تلقائياً من أحدث إصدار لـ YOLOv5.

git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install

الاختبار العادي#

قبل تجربة TTA، نريد تحديد أداء أساسي للمقارنة به. يقوم هذا الأمر باختبار YOLOv5x على COCO val2017 بحجم صورة 640 بكسل. yolov5x.pt هو النموذج الأكبر والأكثر دقة المتاح. الخيارات الأخرى هي yolov5s.pt و yolov5m.pt و yolov5l.pt، أو نقطة التفتيش الخاصة بك من تدريب مجموعة بيانات مخصصة ./weights/best.pt. للحصول على تفاصيل حول جميع النماذج المتاحة، يرجى الاطلاع على YOLOv5 documentation.

python val.py --weights yolov5x.pt --data coco.yaml --img 640 --half

المخرجات:

val: data=./data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, single_cls=False, augment=False, verbose=False, save_txt=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)

Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients

val: Scanning '../datasets/coco/val2017' images and labels...4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:01<00:00, 2846.03it/s]
val: New cache created: ../datasets/coco/val2017.cache
               Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100% 157/157 [02:30<00:00,  1.05it/s]
                 all       5000      36335      0.746      0.626       0.68       0.49
Speed: 0.1ms pre-process, 22.4ms inference, 1.4ms NMS per image at shape (32, 3, 640, 640)  # <--- baseline speed

Evaluating pycocotools mAP... saving runs/val/exp/yolov5x_predictions.json...
...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.504  # <--- baseline mAP
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.688
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.546
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.351
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.551
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.644
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.382
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.628
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.681  # <--- baseline mAR
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.524
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.735
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.826

الاختبار باستخدام TTA#

أضف --augment إلى أي أمر val.py موجود لتفعيل TTA، وزد حجم الصورة بحوالي 30% لتحسين النتائج. لاحظ أن الاستدلال مع تفعيل TTA سيستغرق عادةً حوالي 2-3 أضعاف وقت الاستدلال العادي حيث يتم قلب الصور يمينًا ويسارًا ومعالجتها بـ 3 دقة مختلفة، مع دمج المخرجات قبل NMS. يرجع جزء من انخفاض السرعة ببساطة إلى أحجام الصور الأكبر (832 مقابل 640)، بينما يرجع جزء إلى عمليات TTA الفعلية، لذا تأكد من أن وحدة معالجة الرسومات (GPU) لديك بها مساحة كافية في الذاكرة قبل زيادة --img.

python val.py --weights yolov5x.pt --data coco.yaml --img 832 --augment --half

المخرجات:

val: data=./data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=832, conf_thres=0.001, iou_thres=0.6, task=val, device=, single_cls=False, augment=True, verbose=False, save_txt=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)

Fusing layers...
/usr/local/lib/python3.7/dist-packages/torch/nn/functional.py:718: UserWarning: Named tensors and all their associated APIs are an experimental feature and subject to change. Please do not use them for anything important until they are released as stable. (Triggered internally at  /pytorch/c10/core/TensorImpl.h:1156.)
  return torch.max_pool2d(input, kernel_size, stride, padding, dilation, ceil_mode)
Model Summary: 476 layers, 87730285 parameters, 0 gradients
val: Scanning '../datasets/coco/val2017' images and labels...4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:01<00:00, 2885.61it/s]
val: New cache created: ../datasets/coco/val2017.cache
               Class     Images     Labels          P          R     mAP@.5 mAP@.5:.95: 100% 157/157 [07:29<00:00,  2.86s/it]
                 all       5000      36335      0.718      0.656      0.695      0.503
Speed: 0.2ms pre-process, 80.6ms inference, 2.7ms NMS per image at shape (32, 3, 832, 832)  # <--- TTA speed

Evaluating pycocotools mAP... saving runs/val/exp-2/yolov5x_predictions.json...
...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.516  # <--- TTA mAP
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.701
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.562
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.361
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.564
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.656
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.388
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.640
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.696  # <--- TTA mAR
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.553
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.744
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.833

الاستنتاج باستخدام TTA#

يعمل استدلال TTA في detect.py بشكل مطبق تمامًا مثل val.py TTA: ما عليك سوى إلحاق --augment بأي أمر detect.py موجود:

python detect.py --weights yolov5s.pt --img 832 --source data/images --augment

المخرجات:

YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)

Downloading https://github.com/ultralytics/yolov5/releases/download/v5.0/yolov5s.pt to yolov5s.pt...
100% 14.1M/14.1M [00:00<00:00, 81.9MB/s]

Fusing layers...
Model Summary: 224 layers, 7266973 parameters, 0 gradients
image 1/2 /content/yolov5/data/images/bus.jpg: 832x640 4 persons, 1 bus, 1 fire hydrant, Done. (0.029s)
image 2/2 /content/yolov5/data/images/zidane.jpg: 480x832 3 persons, 3 ties, Done. (0.024s)
Results saved to runs/detect/exp
Done. (0.156s)
YOLOv5 test time augmentations

PyTorch Hub TTA#

يتم دمج TTA تلقائيًا في جميع نماذج YOLOv5 PyTorch Hub، ويمكن الوصول إليها تمرير augment=True وقت الاستدلال.

import torch

# Model
model = torch.hub.load("ultralytics/yolov5", "yolov5s")  # or yolov5m, yolov5x, custom

# Images
img = "https://ultralytics.com/images/zidane.jpg"  # or file, PIL, OpenCV, numpy, multiple

# Inference
results = model(img, augment=True)  # <--- TTA inference

# Results
results.print()  # or .show(), .save(), .crop(), .pandas(), etc.

التخصيص#

يمكنك تخصيص عمليات TTA المطبقة في YOLOv5 forward_augment() method.

فوائد زيادة البيانات في وقت الاختبار#

يوفر تعزيز وقت الاختبار عدة مزايا رئيسية لمهام object detection:

  • دقة محسنة: كما هو موضح في النتائج أعلاه، تزيد TTA من mAP من 0.504 إلى 0.516 وmAR من 0.681 إلى 0.696.
  • اكتشاف أفضل للكائنات الصغيرة: تعمل TTA بشكل خاص على تحسين اكتشاف الكائنات الصغيرة، حيث تتحسن AP للمساحات الصغيرة من 0.351 إلى 0.361.
  • زيادة المتانة: من خلال اختبار اختلافات متعددة لكل صورة، تقلل TTA من تأثير زاوية العرض والإضاءة والعوامل البيئية الأخرى.
  • Simple Implementation: يتطلب فقط إضافة العلامة --augment إلى الأوامر الموجودة.

المقايضة هي زيادة وقت الاستنتاج، مما يجعل TTA أكثر ملاءمة للتطبيقات التي تُعطى فيها الأولوية للدقة على السرعة.

البيئات المدعومة#

توفر Ultralytics مجموعة من البيئات الجاهزة للاستخدام، وكل منها مثبت مسبقاً بالتبعيات الأساسية مثل CUDA، وCUDNN، وPython، وPyTorch، لبدء مشاريعك بسرعة.

حالة المشروع#

YOLOv5 CI

تشير هذه الشارة إلى أن جميع اختبارات التكامل المستمر (CI) لـ YOLOv5 GitHub Actions تمر بنجاح. تتحقق اختبارات CI هذه بدقة من وظائف وأداء YOLOv5 عبر جوانب رئيسية مختلفة: training، وvalidation، وinference، وexport، وbenchmarks. وهي تضمن تشغيلاً متسقاً وموثوقاً على أنظمة macOS وWindows وUbuntu، مع إجراء اختبارات كل 24 ساعة ومع كل عملية commit جديدة.

التعليقات