Tăng Cường Thời Gian Kiểm Tra (TTA)
📚 Hướng dẫn này giải thích cách sử dụng Test Time Augmentation (TTA) trong quá trình kiểm thử và suy luận để cải thiện mAP và Recall với YOLOv5 🚀.
Trước Khi Bắt Đầu
Sao chép kho lưu trữ và cài đặt requirements.txt trong môi trường Python>=3.8.0, bao gồm PyTorch>=1.8. Mô hình và bộ dữ liệu được tải xuống tự động từ phiên bản phát hành YOLOv5 mới nhất.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
Kiểm tra bình thường
Trước khi thử TTA, chúng ta cần thiết lập hiệu suất cơ bản để so sánh. Lệnh này kiểm tra YOLOv5x trên COCO val2017 ở kích thước ảnh 640 pixel. yolov5x.pt
là mô hình lớn nhất và chính xác nhất hiện có. Các tùy chọn khác là yolov5s.pt
, yolov5m.pt
và yolov5l.pt
, hoặc checkpoint của riêng bạn từ việc huấn luyện một bộ dữ liệu tùy chỉnh ./weights/best.pt
. Để biết chi tiết về tất cả các mô hình có sẵn, vui lòng xem Tài liệu YOLOv5.
python val.py --weights yolov5x.pt --data coco.yaml --img 640 --half
Đầu ra:
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
Kiểm tra với TTA
Nối vào --augment
cho bất kỳ hiện có nào val.py
lệnh để bật TTA và tăng kích thước ảnh lên khoảng 30% để cải thiện kết quả. Lưu ý rằng suy luận với TTA được bật thường sẽ mất khoảng 2-3 lần thời gian suy luận thông thường vì hình ảnh đang được lật trái-phải và xử lý ở 3 độ phân giải khác nhau, với các đầu ra được hợp nhất trước khi NMS. Một phần của việc giảm tốc độ đơn giản là do kích thước hình ảnh lớn hơn (832 so với 640), trong khi một phần là do các hoạt động TTA thực tế.
python val.py --weights yolov5x.pt --data coco.yaml --img 832 --augment --half
Đầu ra:
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
Suy luận với TTA
detect.py
Suy luận TTA hoạt động giống hệt như val.py
TTA: chỉ cần thêm vào --augment
cho bất kỳ hiện có nào detect.py
lệnh:
python detect.py --weights yolov5s.pt --img 832 --source data/images --augment
Đầu ra:
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)
PyTorch Hub TTA
TTA được tự động tích hợp vào tất cả YOLOv5 PyTorch Hub các mô hình và có thể được truy cập bằng cách chuyển augment=True
tại thời điểm suy luận.
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.
Tùy chỉnh
Bạn có thể tùy chỉnh các thao tác TTA được áp dụng trong YOLOv5 forward_augment()
phương thức.
Lợi ích của việc tăng cường dữ liệu trong quá trình kiểm thử
Tăng cường thời gian kiểm tra mang lại một số lợi thế chính cho các tác vụ phát hiện đối tượng:
- Cải thiện độ chính xác: Như đã chứng minh trong các kết quả trên, TTA làm tăng mAP từ 0,504 lên 0,516 và mAR từ 0,681 lên 0,696.
- Phát hiện vật thể nhỏ tốt hơn: TTA đặc biệt tăng cường khả năng phát hiện các vật thể nhỏ, với AP khu vực nhỏ được cải thiện từ 0.351 lên 0.361.
- Tăng cường độ mạnh mẽ: Bằng cách kiểm tra nhiều biến thể của mỗi hình ảnh, TTA giảm tác động của góc nhìn, ánh sáng và các yếu tố môi trường khác.
- Triển khai Đơn giản: Chỉ yêu cầu thêm
--augment
vào các lệnh hiện có.
Đánh đổi là thời gian suy luận tăng lên, làm cho TTA phù hợp hơn cho các ứng dụng mà độ chính xác được ưu tiên hơn tốc độ.
Môi trường được hỗ trợ
Ultralytics cung cấp một loạt các môi trường sẵn sàng sử dụng, mỗi môi trường được cài đặt sẵn các phần phụ thuộc thiết yếu như CUDA, CUDNN, Python và PyTorch, để khởi động các dự án của bạn.
- Sổ tay GPU miễn phí:
- Google Cloud: Hướng dẫn Bắt đầu Nhanh GCP
- Amazon: Hướng dẫn Bắt đầu Nhanh AWS
- Azure: Hướng dẫn Bắt đầu Nhanh AzureML
- Docker: Hướng dẫn Bắt đầu Nhanh Docker
Trạng thái dự án
Huy hiệu này cho biết rằng tất cả các thử nghiệm Tích hợp Liên tục (CI) YOLOv5 GitHub Actions đều vượt qua thành công. Các thử nghiệm CI này kiểm tra nghiêm ngặt chức năng và hiệu suất của YOLOv5 trên nhiều khía cạnh chính: huấn luyện, xác thực, suy luận, xuất và điểm chuẩn. Chúng đảm bảo hoạt động nhất quán và đáng tin cậy trên macOS, Windows và Ubuntu, với các thử nghiệm được thực hiện sau mỗi 24 giờ và sau mỗi cam kết mới.