YOLO Vision 2026:

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.

Từ ensemble learning:

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. Modelsdatasets 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 # install

Kiể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.ptyolov5l.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.826

Kiể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 --half

Bạ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.844

Suy 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)
YOLO inference result

Lợi ích của Model Ensembling#

Model ensembling với YOLOv5 mang lại một số ưu điểm:

  1. Độ 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.
  2. 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.
  3. 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.
  4. Đ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, 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 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, exportbenchmarks. 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.

Những người đóng góp

Bình luận