Kết hợp mô hình YOLOv5#
📚 Hướng dẫn này giải thích cách sử dụng Ultralytics YOLOv5 🚀 model ensembling trong quá trình kiểm thử và inference nhằm cải thiện mAP và Recall.
Ensemble modeling là một quá trình trong đó nhiều mô hình đa dạng được tạo ra để dự đoán một kết quả, bằng cách sử dụng nhiều thuật toán modeling 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 kết quả dự đoán của từng mô hình cơ sở và tạo ra một dự đoán cuối cùng duy nhất cho dữ liệu chưa từng thấy. Động lực đằng sau việc sử dụng các mô hình ensemble là để 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 đi khi áp dụng phương pháp ensemble. Phương pháp này tận dụng trí tuệ tập thể để đưa ra dự đoán. Mặc dù mô hình ensemble chứa nhiều mô hình cơ sở bên trong, nó hoạt động và thể hiện hiệu suất như một mô hình duy nhất.
Trướ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. Models và datasets sẽ được tải xuống tự động từ release YOLOv5 mới nhất.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # installKiểm thử thông thường#
Trước khi thực hiện ensembling, hãy thiết lập hiệu suất baseline của một mô hình đơn lẻ. Lệnh này kiểm thử YOLOv5x trên COCO val2017 ở kích thước ảnh 640 pixel. yolov5x.pt là mô hình lớn nhất và có độ chính xác cao 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ừ quá trình huấn luyện một 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 pretrained checkpoints table.
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.826Kiểm thử kết hợp (Ensemble Test)#
Nhiều pretrained model có thể được kết hợp thành ensemble tại thời điểm test và inference bằng cách đơn giản nối thêm các mô hình bổ sung vào đối 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 lúc:
- 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 ý, 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 theo 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.844Suy luận kết hợp (Ensemble Inference)#
Nối thêm các mô hình bổ sung vào đối số --weights để chạy ensemble inference:
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)
Lợ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).
Khi 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.
Các Môi trường được Hỗ trợ#
Ultralytics cung cấp nhiều loại 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 các dự án của bạn.
- Free GPU Notebooks:
- Google Cloud: GCP Quickstart Guide
- Amazon: AWS Quickstart Guide
- Azure: AzureML Quickstart Guide
- Docker: Docker Quickstart Guide
Trạ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 đã vượt qua thành công. Các bài kiểm tra CI này kiểm tra một cách nghiêm ngặt chức năng và hiệu suất của YOLOv5 qua nhiều khía cạnh quan trọng: training, validation, inference, export và benchmarks. Chúng đảm bảo hoạt động ổn định 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 cứ sau 24 giờ và trên mỗi commit mới.