YOLO Vision 2026:

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

📚 يشرح هذا الدليل كيفية استخدام زيادة البيانات وقت الاختبار (TTA) أثناء الاختبار والاستدلال لتحسين mAP والاستدعاء مع 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.

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-3X من وقت الاستدلال العادي، إذ تُقلَب الصور من اليمين إلى اليسار وتُعالج بثلاثة أحجام دقة مختلفة، ثم تُدمج المخرجات قبل إجراء 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/exp2/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 بالطريقة نفسها تمامًا مثل TTA باستخدام val.py: ما عليك سوى إلحاق --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

TTA باستخدام PyTorch Hub#

تُدمج 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 المطبقة في طريقة forward_augment() ضمن YOLOv5.

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

توفر زيادة البيانات وقت الاختبار عدة مزايا رئيسية لمهام اكتشاف الكائنات:

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

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

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

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

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

YOLOv5 CI

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

التعليقات