Kết hợp model YOLOv5#
📚 Hướng dẫn này giải thích cách sử dụng kết hợp model của Ultralytics YOLOv5 🚀 trong quá trình kiểm thử và suy luận để cải thiện mAP và Recall.
Từ học kết hợp:
Mô hình kết hợp là một quy trình trong đó nhiều model đ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 các tập dữ liệu huấn luyện khác nhau. Sau đó, model kết hợp tổng hợp dự đoán của từng model cơ sở và đưa ra một dự đoán cuối cùng cho dữ liệu chưa từng thấy. Động lực sử dụng các model kết hợp là giảm sai số khái quát hóa của dự đoán. Miễn là các model cơ sở đa dạng và độc lập, sai số dự đoán của model 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ù model kết hợp có nhiều model cơ sở bên trong, nó vẫn hoạt động và cho hiệu năng như một model 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. Model và dataset sẽ tự động được 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 # installKiểm thử thông thường#
Trước khi kết hợp model, hãy thiết lập hiệu năng cơ sở của một model đơn. Lệnh này kiểm thử YOLOv5x trên COCO val2017 với kích thước ảnh 640 pixel. yolov5x.pt là model 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ừ quá trình huấn luyện trên một dataset tùy chỉnh ./weights/best.pt. Để biết thông tin chi tiết về tất cả model hiện có, hãy xem bảng checkpoint pretrained.
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#
Có thể kết hợp nhiều model pretrained với nhau trong thời gian kiểm thử và suy luận bằng cách đơn giản nối thêm các model 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 model:
- 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/exp5/weights/best.pt. YOLOv5 sẽ tự động chạy từng model, căn chỉnh các dự đoán theo từng ảnh và lấy 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/exp3/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#
Nối thêm các model vào đối 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/exp2
Done. (0.223s)
Lợi ích của việc kết hợp model#
Kết hợp model với YOLOv5 mang lại một số lợi ích:
- Độ chính xác được cải thiện: Như minh họa trong các ví dụ trên, việc kết hợp nhiều model làm tăng mAP từ 0.504 lên 0.515 và mAR từ 0.681 lên 0.689.
- Khả năng khái quát hóa tốt hơn: Kết hợp các model đa dạng giúp giảm overfitting và cải thiện hiệu năng trên dữ liệu đa dạng.
- Độ robust được nâng cao: Các ensemble thường robust hơn trước nhiễu và các điểm ngoại lai trong dữ liệu.
- Các thế mạnh bổ trợ: Những model khác nhau có thể nổi 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.
Đánh đổi chính là thời gian suy luận tăng lên, như thể hiện trong các chỉ số tốc độ (22.4ms đối với model đơn so với 39.5ms đối với ensemble).
Khi nào nên sử dụng kết hợp model#
Hãy cân nhắc sử dụng kết hợp model 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, trong đó cần giảm thiểu false negative
- Khi xử lý các ảnh khó với điều kiện chiếu sáng, che khuất hoặc tỷ lệ đa dạng
- Trong các cuộc thi hoặc hoạt động benchmarking yêu cầu hiệu năng tối đa
Đối với các ứng dụng thời gian thực có yêu cầu nghiêm ngặt về độ trễ, suy luận bằng một model đơn 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 được cài đặt sẵn các dependency thiết yếu như CUDA, CUDNN, Python và PyTorch, giúp bạn nhanh chóng bắt đầu các project.
- Notebook 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 với Docker
Trạng thái dự án#
Huy hiệu này cho biết tất cả các bài kiểm thử GitHub Actions của YOLOv5 về Tích hợp liên tục (CI) đề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 năng của YOLOv5 trên nhiều khía cạnh quan trọng: huấn luyện, validation, suy luận, export và benchmark. 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 thử được thực hiện mỗi 24 giờ và sau mỗi commit mới.