Meet YOLO26: next-gen vision AI.

Link to this sectionKết hợp mô hình YOLOv5#

📚 Hướng dẫn này giải thích cách sử dụng model ensembling (kết hợp mô hình) của Ultralytics YOLOv5 🚀 trong quá trình kiểm thử và suy luận để cải thiện mAP và Recall.

Từ ensemble learning:

Ensemble modeling là một quy trình trong đó nhiều mô hình đa dạng được tạo ra để 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 training data khác nhau. Mô hình ensemble sau đó tổng hợp các dự đoán của từng mô hình cơ sở và đưa ra một dự đoán cuối cùng cho dữ liệu chưa biết. Động lực để sử dụng các mô hình ensemble là nhằm 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 ensemble. Cách tiếp cận này tìm kiếm trí tuệ đám đông khi đưa ra dự đoán. Mặc dù mô hình ensemble có nhiều mô hình cơ sở bên trong, nó hoạt động và thực thi như một mô hình duy nhất.

Link to this sectionTrướ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. Các modeltập dữ liệu sẽ tự động 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 # install

Link to this sectionKiểm thử thông thường#

Trước khi kết hợp, hãy thiết lập hiệu suất cơ sở của một mô hình đơn lẻ. Lệnh này kiểm thử YOLOv5x trên 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 là yolov5s.pt, yolov5m.ptyolov5l.pt, hoặc checkpoint của riêng bạn từ việc 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 có sẵn, hãy xem bảng pretrained checkpoints.

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

Link to this sectionKiểm thử kết hợp (Ensemble Test)#

Nhiều mô hình pretrained có thể được kết hợp với nhau trong quá trình kiểm thử và suy luận bằng cách 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ử một ensemble gồm 2 mô hình cùng nhau:

  • 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 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 cơ sở 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

Link to this sectionSuy 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)
YOLO inference result

Link to this sectionLợ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).

Link to this sectionKhi 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.

Link to this sectionCác Môi trường được Hỗ trợ#

Ultralytics cung cấp hàng loạt 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 dự án của bạn.

Link to this sectionTrạ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 đều đã vượt qua thành công. Các bài kiểm tra 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 modelbenchmarks. 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 tra được thực hiện mỗi 24 giờ và sau mỗi commit mới.

Người đóng góp

Bình luận