Ultralytics YOLO27:

Xác thực model với Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Giới thiệu#

Xác thực là một bước quan trọng trong pipeline machine learning, cho phép bạn đánh giá chất lượng của các model đã huấn luyện. Chế độ Val trong Ultralytics YOLO26 cung cấp một bộ công cụ và metric mạnh mẽ để đánh giá hiệu năng của các model phát hiện đối tượng. Hướng dẫn này là tài liệu đầy đủ giúp bạn hiểu cách sử dụng hiệu quả chế độ Val để đảm bảo các model vừa chính xác vừa đáng tin cậy.

Xem bản xem trước YOLO27 chưa phát hành để biết kết quả đánh giá sơ bộ.



Watch: Ultralytics Modes Tutorial: Validation

Tại sao nên xác thực với Ultralytics YOLO?#

Dưới đây là những lợi ích của việc sử dụng chế độ Val của YOLO26:

  • Độ chính xác: Nhận các metric chính xác như mAP50, mAP75 và mAP50-95 để đánh giá toàn diện model.
  • Tiện lợi: Sử dụng các tính năng tích hợp sẵn có khả năng ghi nhớ thiết lập huấn luyện, giúp đơn giản hóa quy trình xác thực.
  • Linh hoạt: Xác thực model trên cùng hoặc các dataset khác nhau và với các kích thước ảnh khác nhau.
  • Tinh chỉnh hyperparameter: Sử dụng các metric xác thực để tinh chỉnh model nhằm đạt hiệu năng tốt hơn.

Các tính năng chính của chế độ Val#

Dưới đây là các chức năng đáng chú ý do chế độ Val của YOLO26 cung cấp:

  • Thiết lập tự động: Model ghi nhớ cấu hình huấn luyện, giúp việc xác thực trở nên đơn giản.
  • Hỗ trợ nhiều metric: Đánh giá model dựa trên nhiều metric độ chính xác.
  • CLI và Python API: Tùy theo nhu cầu, chọn giao diện dòng lệnh hoặc Python API để xác thực.
  • Tương thích dữ liệu: Hoạt động liền mạch với các dataset được sử dụng trong giai đoạn huấn luyện cũng như các dataset tùy chỉnh.
Mẹo
  • Các model YOLO26 tự động ghi nhớ thiết lập huấn luyện, vì vậy bạn có thể dễ dàng xác thực model ở cùng kích thước ảnh và trên dataset ban đầu chỉ bằng yolo val model=yolo26n.pt hoặc YOLO("yolo26n.pt").val()

Ví dụ sử dụng#

Xác thực độ chính xác của model YOLO26n đã huấn luyện trên dataset COCO8. Không cần cung cấp tham số vì model giữ lại data và các tham số huấn luyện dưới dạng thuộc tính của model. Xem phần Arguments bên dưới để biết đầy đủ các tham số xác thực.

Lỗi đa xử lý trên Windows

Trên Windows, bạn có thể nhận được RuntimeError khi khởi chạy xác thực dưới dạng script. Thêm một block if __name__ == "__main__": trước code xác thực để khắc phục lỗi này.

Ví dụ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")  # load an official model
model = YOLO("path/to/best.pt")  # load a custom model

# Validate the model
metrics = model.val()  # no arguments needed, dataset and settings remembered
metrics.box.map  # map50-95
metrics.box.map50  # map50
metrics.box.map75  # map75
metrics.box.maps  # a list containing mAP50-95 for each category
metrics.box.image_metrics  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

Các tham số để xác thực YOLO model#

Khi xác thực các model YOLO, bạn có thể tinh chỉnh một số tham số để tối ưu quy trình đánh giá. Các tham số này kiểm soát những khía cạnh như kích thước ảnh đầu vào, xử lý batch và các ngưỡng hiệu năng. Dưới đây là phân tích chi tiết từng tham số để giúp bạn tùy chỉnh thiết lập xác thực hiệu quả.

Đối sốKiểuMặc địnhMô tả
datastrNoneChỉ định đường dẫn đến YAML của dataset (ví dụ: coco8.yaml), trong đó phải bao gồm đường dẫn đến dữ liệu validation. Với classification, thay vào đó sử dụng thư mục dataset hoặc tên dataset tích hợp sẵn (ví dụ: imagenet10).
imgszint640Xác định kích thước image đầu vào. Tất cả image được resize về kích thước này trước khi xử lý. Kích thước lớn hơn có thể cải thiện độ chính xác đối với object nhỏ nhưng làm tăng thời gian tính toán.
batchint16Đặt số image trong mỗi batch. Giá trị cao hơn tận dụng bộ nhớ GPU hiệu quả hơn nhưng yêu cầu nhiều VRAM hơn. Điều chỉnh dựa trên tài nguyên phần cứng sẵn có.
save_jsonboolFalseNếu True, lưu kết quả vào một tệp JSON để phân tích thêm, tích hợp với các công cụ khác hoặc gửi lên các máy chủ đánh giá như COCO. Trên các tập dữ liệu phát hiện, tính năng này cũng đánh giá các dự đoán bằng faster-coco-eval và báo cáo mAP cho đối tượng nhỏ, trung bình và lớn, được ghi lại trong quá trình huấn luyện dưới dạng metrics/mAP_small(B), metrics/mAP_medium(B)metrics/mAP_large(B) trong results.csv.
conffloat0.001Đặt ngưỡng confidence tối thiểu cho các detection. Giá trị thấp hơn làm tăng recall nhưng có thể tạo thêm false positive. Các đường cong precision-recall mặc định sử dụng 0.001; confusion matrix của detection sử dụng giá trị conf rõ ràng hoặc 0.25 khi giá trị này bị bỏ qua. Precision và recall tổng quan sử dụng confidence max-F1, vì vậy có thể khác với các giá trị suy ra từ confusion_matrix.png. Mặc định là 0.01 cho validation OBB để giảm mức sử dụng bộ nhớ.
ioufloat0.7Đặt ngưỡng Intersection Over Union cho Non-Maximum Suppression. Kiểm soát việc loại bỏ detection trùng lặp.
max_detint300Giới hạn số lượng đối tượng phát hiện tối đa trên mỗi ảnh. Đối với detect, segment, pose và OBB, nếu để mặc định là 300, giá trị này sẽ được nâng lên bằng số lượng đối tượng được gán nhãn lớn nhất trong tập xác thực khi một ảnh vượt quá giới hạn đó, kèm theo cảnh báo; bất kỳ giá trị nào khác đều được giữ nguyên, kèm theo cảnh báo rằng chỉ số recall có thể bị giới hạn khi một ảnh vượt quá ngưỡng đó.
quantizeint hoặc strNoneĐộ chính xác xác thực: 16/"fp16"32/"fp32"/chưa thiết lập chọn tính toán FP16 hoặc FP32 cho các model PyTorch và TorchScript; các định dạng khác tính toán ở độ chính xác mà artifact và runtime của chúng chọn. Tại 16, OpenVINO vẫn làm tròn FP16 đầu vào ở phía client và mở rộng lại thành FP32, mà không làm thay đổi độ chính xác mà runtime tính toán. Lượng tử hóa INT8/PTQ được cấu hình trong quá trình export, sau đó được sử dụng bằng cách xác thực model đã export. Thay thế cờ half đã lỗi thời.
devicestrNoneChỉ định thiết bị cho validation (cpu, cuda:0, npu, npu:0, v.v.). Khi là None, tự động chọn thiết bị tốt nhất hiện có. Có thể chỉ định nhiều thiết bị CUDA bằng cách phân tách bằng dấu phẩy.
dnnboolFalseNếu True, sử dụng module DNN của OpenCV cho inference model ONNX, cung cấp một phương án thay thế cho các phương thức inference bằng PyTorch.
plotsboolTrueKhi được đặt thành True, tạo và lưu các biểu đồ prediction so với ground truth, confusion matrix và đường cong PR để đánh giá trực quan hiệu suất model.
classeslist[int]NoneChỉ định danh sách ID class cần đánh giá. Hữu ích để lọc và chỉ tập trung vào một số class nhất định trong quá trình đánh giá.
rectboolTrueNếu True, sử dụng inference dạng chữ nhật cho batching, giảm padding và có khả năng tăng tốc độ cũng như hiệu quả bằng cách xử lý image theo aspect ratio gốc. Bị bỏ qua đối với validation depth, vốn kéo giãn mọi image thành một hình vuông imgsz cố định thay vì padding.
splitstr'val'Xác định split của dataset được sử dụng cho validation (val, test hoặc train). Cho phép linh hoạt lựa chọn phân đoạn dữ liệu để đánh giá hiệu suất.
fractionfloat, int hoặc list1.0Tập con của tập dữ liệu đã xác thực. Với danh sách [train, val, test], mục khớp với split sẽ được áp dụng (1 = toàn bộ tập, các số nguyên lớn hơn 1 = số lượng ảnh; các mục bị bỏ qua là toàn bộ). Một giá trị vô hướng chỉ áp dụng với split=train; khi đó valtest sử dụng toàn bộ tập dữ liệu.
projectstrNoneTên thư mục project nơi output validation được lưu. Giúp tổ chức kết quả từ các experiment hoặc model khác nhau.
namestrNoneTên của validation run. Được sử dụng để tạo thư mục con trong thư mục project, nơi lưu log và output validation.
verboseboolTrueNếu True, hiển thị thông tin chi tiết trong quá trình validation, bao gồm metric theo từng class, tiến trình batch và thông tin debug bổ sung.
save_txtboolFalseNếu True, lưu kết quả detection vào các file text, mỗi image một file, hữu ích cho phân tích thêm, post-processing tùy chỉnh hoặc tích hợp với các hệ thống khác.
save_confboolFalseNếu True, bao gồm các giá trị confidence trong file text đã lưu khi save_txt được bật, cung cấp output chi tiết hơn cho việc phân tích và lọc.
workersint8Số worker thread dùng để load dữ liệu. Giá trị cao hơn có thể tăng tốc preprocessing dữ liệu nhưng có thể làm tăng mức sử dụng CPU. Đặt thành 0 sẽ sử dụng main thread, có thể ổn định hơn trong một số môi trường.
augmentboolFalseBật test-time augmentation (TTA) trong validation, có khả năng cải thiện độ chính xác detection nhưng làm giảm tốc độ inference bằng cách chạy inference trên các phiên bản đã biến đổi của input. Chỉ khả dụng cho model PyTorch của Ultralytics.
agnostic_nmsboolFalseBật Non-Maximum Suppression không phân biệt lớp, giúp loại bỏ các hộp chồng lấp có điểm số thấp hơn bất kể lớp được dự đoán của chúng là gì. Hữu ích cho các ứng dụng tập trung vào thực thể. Với suy luận không có NMS (nms=False trên YOLO26 hoặc YOLOv10), điều này chỉ ngăn cản cùng một phát hiện xuất hiện với nhiều nhãn lớp (bản sao IoU=1.0) chứ không thực hiện việc loại bỏ dựa trên ngưỡng IoU giữa các hộp riêng biệt.
single_clsboolFalseXem tất cả class như một class duy nhất trong quá trình validation. Hữu ích để đánh giá hiệu suất model trên các tác vụ detection nhị phân hoặc khi sự khác biệt giữa các class không quan trọng.
visualizeboolFalseTrực quan hóa ground truth, true positive, false positive và false negative cho từng image. Hữu ích cho debugging và diễn giải model.
show_labelsboolTrueHiển thị label class trong visualization validation khi visualize=True. Đặt thành False để có chế độ xem gọn hơn về các kết quả khớp và lỗi.
show_confboolTrueHiển thị score confidence trong visualization validation khi visualize=True. Đặt thành False để có chế độ xem gọn hơn về các kết quả khớp và lỗi.
compilebool hoặc strFalseBật biên dịch graph PyTorch 2.x torch.compile với backend='inductor'. Chấp nhận True"default", False → tắt, hoặc một mode chuỗi như "default", "reduce-overhead", "max-autotune-no-cudagraphs". Nếu không được hỗ trợ, sẽ chuyển về eager mode kèm cảnh báo.
channels_lastboolNoneSử dụng định dạng bộ nhớ channels_last (NHWC) cho validation PyTorch native. None tự động bật trên CPU x86 Linux và Windows có oneDNN với PyTorch 1.13 trở lên, False tắt, còn True yêu cầu bật trên CPU x86 hoặc thiết bị CUDA được hỗ trợ. ARM64, MPS, các phiên bản PyTorch cũ hơn, CPU không có oneDNN và các định dạng đã export vẫn không thay đổi; validation trong quá trình training vẫn giữ layout của model training.
nmsbool, tùy chọnNoneChạy suy luận một-nhiều với NMS theo mặc định (None hoặc True). Đặt False để sử dụng phần đầu một-một không có NMS khi khả dụng. Xem hướng dẫn Phát hiện Đầu-cuối để biết chi tiết.

Mỗi thiết lập này đều đóng vai trò quan trọng trong quy trình xác thực, cho phép đánh giá các model YOLO một cách hiệu quả và có thể tùy chỉnh. Điều chỉnh các tham số theo nhu cầu và tài nguyên cụ thể có thể giúp đạt được sự cân bằng tốt nhất giữa độ chính xác và hiệu năng.

Ví dụ xác thực với các tham số#



Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More

Explore model validation and different export methods in Google Colab

Các ví dụ dưới đây minh họa việc xác thực model YOLO với các tham số tùy chỉnh trong Python và CLI.

Ví dụ
from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Customize validation settings
metrics = model.val(data="coco8.yaml", imgsz=640, batch=16, conf=0.25, iou=0.7, device="0")
Export ConfusionMatrix

Bạn cũng có thể lưu kết quả ConfusionMatrix ở nhiều format khác nhau bằng code được cung cấp.

from ultralytics import YOLO

model = YOLO("yolo26n.pt")

results = model.val(data="coco8.yaml", plots=True)
print(results.confusion_matrix.to_df())
Precision, Recall và F1 theo từng ảnh

Quá trình xác thực lưu các metric precision, recall, F1, TP, FP và FN theo từng ảnh (tại ngưỡng IoU 0.5) cho mọi task ngoại trừ classification. Truy cập các metric này qua results.box.image_metrics cho detection và OBB, results.seg.image_metrics cho segmentation và results.pose.image_metrics cho pose sau khi hoàn tất xác thực.

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n.pt")

# Validate and access per-image metrics
results = model.val(data="coco8.yaml")

# image_metrics is a dictionary with image filenames as keys
print(results.box.image_metrics)
# Output: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}

# Access metrics for a specific image
results.box.image_metrics["image1.jpg"]  # {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}

Mỗi mục trong image_metrics chứa các key sau:

KeyMô tả
precisionĐiểm precision của ảnh (tp / (tp + fp)).
recallĐiểm recall của ảnh (tp / (tp + fn)).
f1Trung bình điều hòa của precision và recall.
tpSố lượng true positive của ảnh.
fpSố lượng false positive của ảnh.
fnSố lượng false negative của ảnh.

Tính năng này khả dụng cho các task detection, segmentation, pose và OBB.

Đối tượng số liệu được trả về cũng cung cấp các hàm hỗ trợ xuất dữ liệu để phân tích tiếp theo:

MethodKiểu trả vềMô tả
summary()List[Dict[str, Any]]Chuyển đổi kết quả xác thực thành một dictionary tóm tắt.
to_df()DataFrameTrả về kết quả xác thực dưới dạng Polars DataFrame có cấu trúc.
to_csv()strExport kết quả xác thực ở format CSV và trả về chuỗi CSV.
to_json()strExport kết quả xác thực ở format JSON và trả về chuỗi JSON.

Để biết thêm chi tiết, hãy xem tài liệu về class DataExportMixin.

Tiếp theo là gì?#

Hài lòng với các metric? Export model sang format triển khai. Nếu độ chính xác chưa đạt, quay lại và huấn luyện lại với các hyperparameter khác hoặc nhiều dữ liệu huấn luyện hơn.

FAQ#

  • Để xác thực model YOLO26, bạn có thể sử dụng mode Val do Ultralytics cung cấp. Ví dụ, với Python API, bạn có thể load một model và chạy xác thực bằng:

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Validate the model
    metrics = model.val()
    print(metrics.box.map)  # map50-95

    Ngoài ra, bạn có thể sử dụng giao diện dòng lệnh (CLI):

    yolo val model=yolo26n.pt

    Để tùy chỉnh thêm, bạn có thể điều chỉnh nhiều tham số như imgsz, batchconf trong cả mode Python và CLI. Xem phần Các tham số để xác thực YOLO model để biết danh sách đầy đủ các tham số.

  • Xác thực model YOLO26 cung cấp một số metric chính để đánh giá hiệu năng model. Các metric này bao gồm:

    • mAP50 (độ chính xác trung bình tại ngưỡng IoU 0.5)
    • mAP75 (độ chính xác trung bình tại ngưỡng IoU 0.75)
    • mAP50-95 (độ chính xác trung bình trên nhiều ngưỡng IoU từ 0.5 đến 0.95)

    Sử dụng Python API, bạn có thể truy cập các metric này như sau:

    metrics = model.val()  # assumes `model` has been loaded
    print(metrics.box.map)  # mAP50-95
    print(metrics.box.map50)  # mAP50
    print(metrics.box.map75)  # mAP75
    print(metrics.box.maps)  # list of mAP50-95 for each category
    print(metrics.box.image_metrics)  # per-image metrics dictionary with precision, recall, F1, TP, FP, and FN

    Để đánh giá hiệu năng toàn diện, việc xem xét tất cả các metric này là rất quan trọng. Để biết thêm chi tiết, hãy tham khảo phần Các tính năng chính của chế độ Val.

  • Sử dụng Ultralytics YOLO để xác thực mang lại một số lợi ích:

    • Độ chính xác: YOLO26 cung cấp các metric hiệu năng chính xác, bao gồm mAP50, mAP75 và mAP50-95.
    • Tiện lợi: Các model ghi nhớ thiết lập huấn luyện, giúp việc xác thực trở nên đơn giản.
    • Linh hoạt: Bạn có thể xác thực trên cùng hoặc các dataset khác nhau và với các kích thước ảnh khác nhau.
    • Tinh chỉnh hyperparameter: Các metric xác thực hỗ trợ tinh chỉnh model để đạt hiệu năng tốt hơn.

    Những lợi ích này đảm bảo các model được đánh giá kỹ lưỡng và có thể được tối ưu để đạt kết quả vượt trội. Tìm hiểu thêm về các lợi ích này trong phần Tại sao nên xác thực với Ultralytics YOLO.

  • Có, bạn có thể xác thực model YOLO26 bằng dataset tùy chỉnh. Chỉ định tham số data cùng đường dẫn đến YAML của dataset, trong đó phải bao gồm đường dẫn đến dữ liệu xác thực. Với bài toán classification, tham số này nhận thư mục dataset hoặc tên dataset tích hợp sẵn (ví dụ: imagenet10).

    Lưu ý

    Việc đánh giá được thực hiện bằng chính tên lớp của model, bạn có thể xem các tên này bằng model.names, và chúng có thể khác với các tên lớp do chính tập dữ liệu định nghĩa.

    Ví dụ bằng Python:

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Validate with a custom dataset
    metrics = model.val(data="path/to/your/custom_dataset.yaml")
    print(metrics.box.map)  # map50-95

    Ví dụ sử dụng CLI:

    yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yaml

    Để biết thêm các tùy chọn có thể tùy chỉnh trong quá trình đánh giá, hãy xem phần Ví dụ đánh giá với các tham số.

  • Để lưu kết quả đánh giá vào tệp JSON, bạn có thể đặt tham số save_json thành True khi chạy đánh giá. Bạn có thể thực hiện việc này cả trong Python API và CLI.

    Ví dụ bằng Python:

    from ultralytics import YOLO
    
    # Load a model
    model = YOLO("yolo26n.pt")
    
    # Save validation results to JSON
    metrics = model.val(save_json=True)

    Ví dụ sử dụng CLI:

    yolo val model=yolo26n.pt save_json=True

    Trên các tập dữ liệu phát hiện, save_json=True cũng báo cáo mAP của đối tượng nhỏ, trung bình và lớn thông qua faster-coco-eval. Xem Đối số để Xác thực Mô hình YOLO để biết thêm chi tiết.

Bình luận