Kết hợp mô hình YOLOv5
📚 Hướng dẫn này giải thích cách sử dụng kết hợp mô hình Ultralytics YOLOv5 🚀 trong quá trình kiểm thử và suy luận để cải thiện mAP và Recall.
Từ học máy kết hợp:
Mô hình kết hợp (Ensemble modeling) là quá trình tạo ra nhiều mô hình đa dạng để 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 dữ liệu huấn luyện khác nhau. Sau đó, mô hình kết hợp sẽ tổng hợp dự đoán từ mỗi mô hình cơ sở và đưa ra kết quả dự đoán cuối cùng cho dữ liệu mới. Động lực của việc sử dụng mô hình kết hợp 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 khi sử dụng phương pháp kết hợp. Phương pháp này tìm kiếm "trí tuệ đám đông" để đưa ra dự đoán. Mặc dù mô hình kết hợp bao gồm nhiều mô hình cơ sở bên trong, nó hoạt động và vận hành như một mô hình đơn lẻ.
Trước khi Bạn 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ẽ tự động tải xuống từ bản YOLOv5 release 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 kết hợp, hãy xác định hiệu suất cơ sở của một mô hình đơn lẻ. Lệnh này kiểm tra YOLOv5x trên tập dữ liệu 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 bao gồm yolov5s.pt, yolov5m.pt và yolov5l.pt, hoặc checkpoint của riêng bạn từ quá trình 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 khả dụng, hãy xem bảng checkpoint đã được huấn luyện trước.
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 mô hình đã được huấn luyện trước có thể được kết hợp cùng nhau tại thời điểm kiểm thử và suy luận bằng cách chỉ cần 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ử việc kết hợp 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 từng ảnh và lấy trung bình các kết quả đầ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)
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)
Lợi ích của việc kết hợp mô hình
Kết hợp mô hình với YOLOv5 mang lại một số ưu điểm:
- Cải thiện độ chính xác: Như đã trình bày 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: Kết hợp các mô hình đa dạng giúp giảm hiện tượng overfitting và cải thiện hiệu suất trên dữ liệu đa dạng.
- Tăng cường độ bền vững: Các mô hình kết hợp thường bền vững hơn trước nhiễu và các dữ liệu ngoại lai.
- Các thế mạnh bổ trợ: Các mô hình khác nhau có thể vượt trội 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 thể hiện trong các chỉ số tốc độ (22.4ms cho mô hình đơn lẻ so với 39.5ms cho mô hình kết hợp).
Khi nào nên sử dụng kết hợp mô hình
Cân nhắc sử dụng kết hợp mô hình trong các trường hợp 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 các trường hợp âm tính giả (false negatives)
- Khi xử lý các hình ảnh khó với ánh sáng, vật che khuất hoặc tỷ lệ khác nhau
- 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.
Môi trường được hỗ trợ
Ultralytics cung cấp nhiều môi trường sẵn sàng sử dụng, mỗi môi trường đều được cài đặt sẵn các phụ thuộc thiết yếu như CUDA, CUDNN, Python, và PyTorch để giúp bạn bắt đầu dự án của mình.
- Notebook GPU miễn phí:
- 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 thử 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 thử 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 quan trọng: huấn luyện, xác thực, suy luận, xuất mô hình, và điểm chuẩn. Chúng đảm bảo hoạt động nhất quán và tin cậy trên macOS, Windows và Ubuntu, với các bài kiểm thử được tiến hành mỗi 24 giờ và sau mỗi lần commit mới.