Chuyển đến nội dung

Tập hợp mô hình YOLOv5

📚 Hướng dẫn này giải thích cách sử dụng tập 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 tập tập hợp:

Mô hình kết hợp là một quy trình tạo ra nhiều mô hình đa dạng để dự đoán một 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. Mô hình kết hợp sau đó tổng hợp dự đoán của từng mô hình cơ sở và cho ra một dự đoán cuối cùng cho dữ liệu chưa thấy. Động lực để sử dụng các mô hình kết hợp là giảm lỗi 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, lỗi 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 sự thông thái của đám đông trong việc đưa ra dự đoán. Mặc dù mô hình kết hợp có nhiều mô hình cơ sở bên trong, nhưng nó hoạt động và thực hiện như một mô hình duy nhất.

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ìnhbộ 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 kết hợp, hãy thiết lập hiệu suất cơ bản của một mô hình duy nhất. 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.ptyolov5l.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, 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.826

Kiể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 với nhau tại thời điểm kiểm tra và suy luận bằng cách chỉ cần thêm các mô hình bổ sung vào --weights đối số trong bất kỳ lệnh val.py hoặc detect.py hiện có nào. Ví dụ này kiểm tra một tập hợp gồm 2 mô hình với nhau:

  • YOLOv5x
  • YOLOv5l6
python val.py --weights yolov5x.pt yolov5l6.pt --data coco.yaml --img 640 --half

Đầ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.844

Suy luận kết hợp (Ensemble Inference)

Nối thêm các mô hình vào --weights đối số để chạy suy luận tập 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)

Kết quả suy luận YOLO

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ố lợi thế:

  1. Cải thiện độ chính xác: Như đã chứng minh trong các ví dụ trên, việc kết hợp nhiều mô hình làm tăng mAP từ 0,504 lên 0,515 và mAR từ 0,681 lên 0,689.
  2. Khả năng 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 tình trạng overfitting và cải thiện hiệu suất trên nhiều loại dữ liệu khác nhau.
  3. Tăng cường độ mạnh mẽ: Các tập hợp thường mạnh mẽ hơn đối với nhiễu và các giá trị ngoại lệ trong dữ liệu.
  4. Điểm mạnh bổ sung: 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 hiển thị trong các số liệu về tốc độ (22,4ms cho mô hình đơn so với 39,5ms cho tập hợp).

Khi nào nên sử dụng Mô hình Ensembling

Cân nhắc sử dụng ensembling 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 phải giảm thiểu các kết quả âm tính giả
  • Khi xử lý hình ảnh phức tạp với ánh sáng, độ che khuất hoặc tỷ lệ khác nhau
  • Trong các cuộc thi hoặc điểm chuẩn, 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 nghiêm ngặt về độ trễ, suy luận mô hình đơn có thể phù hợp hơn.

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, PythonPyTorch, để khởi động các dự án của bạn.

Trạng thái dự án

YOLOv5 CI

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đ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.



📅 Đã tạo 1 năm trước ✏️ Cập nhật 2 tháng trước

Bình luận