Link to this sectionKết hợp mô hình YOLOv5#
📚 Hướng dẫn này giải thích cách sử dụng model ensembling (kết hợp mô hình) của Ultralytics YOLOv5 🚀 trong quá trình kiểm thử và suy luận để cải thiện mAP và Recall.
Ensemble modeling là một quy trình trong đó nhiều mô hình đa dạng được tạo ra để dự đoán kết quả, bằng cách sử dụng nhiều thuật toán mô hình hóa khác nhau hoặc sử dụng các tập training data khác nhau. Mô hình ensemble sau đó tổng hợp các dự đoán của từng mô hình cơ sở và đưa ra một dự đoán cuối cùng cho dữ liệu chưa biết. Động lực để sử dụng các mô hình ensemble là nhằm giảm sai số tổng quát hóa của dự đoán. Miễn là các mô hình cơ sở đa dạng và độc lập, sai số dự đoán của mô hình sẽ giảm khi sử dụng phương pháp ensemble. Cách tiếp cận này tìm kiếm trí tuệ đám đông khi đưa ra dự đoán. Mặc dù mô hình ensemble có nhiều mô hình cơ sở bên trong, nó hoạt động và thực thi như một mô hình duy nhất.
Link to this sectionTrước khi Bắt đầu#
Sao chép repo và cài đặt requirements.txt trong môi trường Python>=3.8.0, bao gồm PyTorch>=1.8. Các model và tập dữ liệu sẽ tự động tải xuống từ 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 # installLink to this sectionKiểm thử thông thường#
Trước khi kết hợp, hãy thiết lập hiệu suất cơ sở của một mô hình đơn lẻ. Lệnh này kiểm thử YOLOv5x trên COCO val2017 với 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 trên tập 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, hãy xem bảng pretrained checkpoints.
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.826Link to this sectionKiểm thử kết hợp (Ensemble Test)#
Nhiều mô hình pretrained có thể được kết hợp với nhau trong quá trình kiểm thử và suy luận bằng cách thêm các mô hình bổ sung vào tham số --weights trong bất kỳ lệnh val.py hoặc detect.py hiện có nào. Ví dụ này kiểm thử một ensemble gồm 2 mô hình cùng nhau:
- YOLOv5x
- YOLOv5l6
python val.py --weights yolov5x.pt yolov5l6.pt --data coco.yaml --img 640 --halfBạn có thể liệt kê bao nhiêu checkpoint tùy thích, bao gồm cả các trọng số tùy chỉnh như runs/train/exp-5/weights/best.pt. YOLOv5 sẽ tự động chạy từng mô hình, căn chỉnh các dự đoán trên cơ sở từng ảnh và tính trung bình các đầu ra trước khi thực hiện NMS.
Đầu ra:
val: data=./data/coco.yaml, weights=['yolov5x.pt', 'yolov5l6.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.6, 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 # Model 1
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients # Model 2
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt'] # Ensemble notice
val: Scanning '../datasets/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:00<00:00, 49695545.02it/s]
Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 157/157 [03:58<00:00, 1.52s/it]
all 5000 36335 0.747 0.637 0.692 0.502
Speed: 0.1ms pre-process, 39.5ms inference, 2.0ms NMS per image at shape (32, 3, 640, 640) # <--- ensemble speed
Evaluating pycocotools mAP... saving runs/val/exp-3/yolov5x_predictions.json...
...
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.515 # <--- ensemble mAP
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.699
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.557
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.356
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.563
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.668
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.387
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.638
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.689 # <--- ensemble mAR
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.526
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.743
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.844Link to this sectionSuy luận kết hợp (Ensemble Inference)#
Thêm các mô hình bổ sung vào tham số --weights để chạy suy luận kết hợp:
python detect.py --weights yolov5x.pt yolov5l6.pt --img 640 --source data/imagesĐầu ra:
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
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt']
image 1/2 /content/yolov5/data/images/bus.jpg: 640x512 4 persons, 1 bus, 1 tie, Done. (0.063s)
image 2/2 /content/yolov5/data/images/zidane.jpg: 384x640 3 persons, 2 ties, Done. (0.056s)
Results saved to runs/detect/exp-2
Done. (0.223s)
Link to this sectionLợi ích của Model Ensembling#
Model ensembling với YOLOv5 mang lại một số ưu điểm:
- Độ chính xác được cải thiện: Như đã chứng minh trong các ví dụ trên, việc kết hợp nhiều mô hình giúp tăng mAP từ 0.504 lên 0.515 và mAR từ 0.681 lên 0.689.
- Tổng quát hóa tốt hơn: Việc kết hợp các mô hình đa dạng giúp giảm overfitting và cải thiện hiệu suất trên các dữ liệu khác nhau.
- Tăng cường tính bền vững: Các ensemble thường bền vững hơn trước nhiễu và các giá trị ngoại lai trong dữ liệu.
- Điểm mạnh bổ trợ: Các mô hình khác nhau có thể xuất sắc trong việc phát hiện các loại đối tượng khác nhau hoặc trong các điều kiện môi trường khác nhau.
Sự đánh đổi chính là thời gian suy luận tăng lên, như được hiển thị trong các chỉ số tốc độ (22.4ms cho mô hình đơn lẻ so với 39.5ms cho ensemble).
Link to this sectionKhi nào nên sử dụng Model Ensembling#
Hãy cân nhắc sử dụng model ensembling trong các tình huống sau:
- Khi độ chính xác quan trọng hơn tốc độ suy luận
- Đối với các ứng dụng quan trọng, nơi cần giảm thiểu tối đa các trường hợp âm tính giả (false negatives)
- Khi xử lý các hình ảnh khó với điều kiện ánh sáng, vật cản hoặc tỷ lệ thay đổi
- Trong các cuộc thi hoặc đánh giá hiệu năng (benchmarking), nơi yêu cầu hiệu suất tối đa
Đối với các ứng dụng thời gian thực có yêu cầu khắt khe về độ trễ, suy luận bằng mô hình đơn lẻ có thể phù hợp hơn.
Link to this sectionCác Môi trường được Hỗ trợ#
Ultralytics cung cấp hàng loạt 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ụ thuộc thiết yếu như CUDA, CUDNN, Python và PyTorch, để khởi động dự án của bạn.
- Free GPU Notebooks:
- Google Cloud: Hướng dẫn bắt đầu nhanh GCP
- Amazon: AWS Quickstart Guide
- Azure: AzureML Quickstart Guide
- Docker: Docker Quickstart Guide
Link to this sectionTrạng thái Dự án#
Huy hiệu này cho biết tất cả các bài kiểm tra Tích hợp liên tục (CI) của YOLOv5 GitHub Actions đều đã vượt qua thành công. Các bài kiểm tra 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 model và benchmarks. 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 bài kiểm tra được thực hiện mỗi 24 giờ và sau mỗi commit mới.