Link to this sectionXác thực mô hình với Ultralytics YOLO#
Link to this sectionGiới thiệu#
Xác thực là một bước quan trọng trong quy trình machine learning, cho phép bạn đánh giá chất lượng của các mô hình đã được huấn luyện. Chế độ Val trong Ultralytics YOLO26 cung cấp một bộ công cụ và số liệu mạnh mẽ để đánh giá hiệu suất của các mô hình object detection của bạn. Hướng dẫn này đóng vai trò là tài nguyên hoàn chỉnh để hiểu cách sử dụng hiệu quả chế độ Val nhằm đảm bảo các mô hình của bạn vừa chính xác vừa đáng tin cậy.
Watch: Ultralytics Modes Tutorial: Validation
Link to this sectionTại sao nên xác thực bằng Ultralytics YOLO?#
Dưới đây là lý do tại sao việc sử dụng chế độ Val của YOLO26 lại có lợi:
- Độ chính xác (Precision): Nhận các số liệu chính xác như mAP50, mAP75 và mAP50-95 để đánh giá toàn diện mô hình của bạn.
- Sự thuận tiện: Tận dụng các tính năng tích hợp sẵn ghi nhớ các cài đặt huấn luyện, giúp đơn giản hóa quy trình xác thực.
- Tính linh hoạt: Xác thực mô hình của bạn với cùng một bộ dữ liệu hoặc bộ dữ liệu khác và kích thước hình ảnh khác nhau.
- Tinh chỉnh siêu tham số: Sử dụng các số liệu xác thực để tinh chỉnh mô hình của bạn nhằm đạt hiệu suất tốt hơn.
Link to this sectionCác tính năng chính của chế độ Val#
Đây là các chức năng nổi bật được cung cấp bởi chế độ Val của YOLO26:
- Cài đặt tự động: Các mô hình ghi nhớ cấu hình huấn luyện của chúng để xác thực đơn giản.
- Hỗ trợ đa số liệu: Đánh giá mô hình của bạn dựa trên một loạt các số liệu độ chính xác.
- API Python và CLI: Chọn giữa giao diện dòng lệnh hoặc API Python dựa trên sở thích của bạn để xác thực.
- Khả năng tương thích dữ liệu: Hoạt động trơn tru với các bộ dữ liệu được sử dụng trong giai đoạn huấn luyện cũng như các bộ dữ liệu tùy chỉnh.
- Các mô hình YOLO26 tự động ghi nhớ các cài đặt huấn luyện của chúng, vì vậy bạn có thể dễ dàng xác thực một mô hình ở cùng kích thước hình ảnh và trên bộ dữ liệu gốc chỉ với
yolo val model=yolo26n.pthoặcYOLO("yolo26n.pt").val()
Link to this sectionVí dụ Sử dụng#
Xác thực độ chính xác của một mô hình YOLO26n đã được huấn luyện trên bộ dữ liệu COCO8. Không cần tham số nào vì model giữ lại data huấn luyện và các tham số làm thuộc tính mô hình. Xem phần Các tham số bên dưới để biết danh sách đầy đủ các tham số xác thực.
Trên Windows, bạn có thể gặp RuntimeError khi khởi chạy xác thực dưới dạng script. Hãy thêm khối if __name__ == "__main__": trước mã xác thực của bạn để giải quyết vấn đề này.
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 FNLink to this sectionCác tham số để xác thực mô hình YOLO#
Khi xác thực các mô hình YOLO, một số tham số có thể được tinh chỉnh để tối ưu hóa quy trình đánh giá. Các tham số này kiểm soát các khía cạnh như kích thước hình ảnh đầu vào, xử lý theo lô (batch) và ngưỡng hiệu suất. Dưới đây là phân tích chi tiết về từng tham số để giúp bạn tùy chỉnh các cài đặt xác thực của mình một cách hiệu quả.
| Đối số | Loại | Mặc định | Mô tả |
|---|---|---|---|
data | str | None | Chỉ định đường dẫn đến tệp cấu hình tập dữ liệu (ví dụ: coco8.yaml). Tệp này nên bao gồm đường dẫn đến dữ liệu kiểm thử. |
imgsz | int | 640 | Xác định kích thước của ảnh đầu vào. Tất cả ảnh được thay đổi kích thước 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 cho các đối tượng nhỏ nhưng làm tăng thời gian tính toán. |
batch | int | 16 | Thiết lập số lượng ảnh trên mỗi batch. Giá trị cao hơn sử 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_json | bool | False | Nếu True, lưu kết quả vào 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. |
conf | float | 0.001 | Thiết lập ngưỡng tin cậy tối thiểu cho các lần phát hiện. Giá trị thấp hơn làm tăng tỷ lệ nhớ (recall) nhưng có thể làm tăng các trường hợp dương tính giả. Được sử dụng trong quá trình kiểm thử để tính toán các đường cong precision-recall. Mặc định là 0.01 cho kiểm thử OBB để giảm mức sử dụng bộ nhớ. |
iou | float | 0.7 | Thiết lập ngưỡng Intersection Over Union cho Non-Maximum Suppression. Kiểm soát việc loại bỏ các kết quả phát hiện trùng lặp. |
max_det | int | 300 | Giới hạn số lượng phát hiện tối đa trên mỗi ảnh. Hữu ích trong các cảnh dày đặc đối tượng để ngăn chặn quá nhiều kết quả phát hiện và quản lý tài nguyên tính toán. |
quantize | int hoặc str | None | Độ chính xác xác thực: 16/"fp16" cho phép xác thực FP16 trên các GPU được hỗ trợ; 32/"fp32"/không thiết lập là FP32. Lượng tử hóa INT8/PTQ được cấu hình trong quá trình xuất, sau đó được sử dụng bằng cách xác thực model đã xuất. Thay thế cho cờ half đã lỗi thời. |
device | str | None | Chỉ định thiết bị để kiểm thử (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ó. Nhiều thiết bị CUDA có thể được chỉ định bằng cách phân tách bằng dấu phẩy. |
dnn | bool | False | Nếu True, sử dụng mô-đun DNN của OpenCV cho suy luận model ONNX, cung cấp một phương án thay thế cho các phương pháp suy luận của PyTorch. |
plots | bool | True | Khi được đặt thành True, hệ thống sẽ tạo và lưu các biểu đồ dự đoán so với ground truth, ma trận nhầm lẫn (confusion matrices) và đường cong PR để đánh giá trực quan hiệu suất của model. |
classes | list[int] | None | Chỉ định danh sách các ID lớp để đánh giá. Hữu ích cho việc lọc và chỉ tập trung vào một số lớp nhất định trong quá trình đánh giá. |
rect | bool | True | Nếu là True, sử dụng suy luận (inference) theo hình chữ nhật cho batching, giúp giảm padding và có khả năng tăng tốc độ cũng như hiệu quả bằng cách xử lý hình ảnh ở tỷ lệ khung hình gốc. |
split | str | 'val' | Xác định phần tập dữ liệu (dataset split) được sử dụng để xác thực (val, test, hoặc train). Cho phép linh hoạt trong việc chọn đoạn dữ liệu để đánh giá hiệu suất. |
project | str | None | Tên của thư mục dự án nơi lưu các đầu ra xác thực. Giúp sắp xếp kết quả từ các thử nghiệm hoặc model khác nhau. |
name | str | None | Tên của lượt xác thực. Được sử dụng để tạo thư mục con bên trong thư mục dự án, nơi lưu trữ các log và kết quả xác thực. |
verbose | bool | True | Nếu là True, hiển thị thông tin chi tiết trong quá trình xác thực, bao gồm số liệu trên mỗi lớp, tiến trình batch và các thông tin gỡ lỗi bổ sung. |
save_txt | bool | False | Nếu là True, lưu kết quả phát hiện vào các tệp văn bản, mỗi tệp cho một hình ảnh, hữu ích cho việc phân tích sâu hơn, hậu xử lý tùy chỉnh hoặc tích hợp với các hệ thống khác. |
save_conf | bool | False | Nếu là True, bao gồm các giá trị độ tin cậy trong các tệp văn bản đã lưu khi save_txt được bật, cung cấp đầu ra chi tiết hơn để phân tích và lọc. |
workers | int | 8 | Số lượng luồng worker để tải dữ liệu. Các giá trị cao hơn có thể tăng tốc độ tiền xử lý 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 luồng chính, có thể ổn định hơn trong một số môi trường. |
augment | bool | False | Bật tăng cường thời gian kiểm thử (TTA - test-time augmentation) trong quá trình xác thực, có khả năng cải thiện độ chính xác phát hiện nhưng đánh đổi bằng tốc độ suy luận (inference) do chạy suy luận trên các phiên bản đã biến đổi của đầu vào. |
agnostic_nms | bool | False | Bật Non-Maximum Suppression không phụ thuộc vào lớp, giúp hợp nhất các hộp chồng lấp bất kể lớp được dự đoán của chúng. Hữu ích cho các ứng dụng tập trung vào đối tượng (instance). Đối với các model end-to-end (YOLO26, YOLOv10), điều này chỉ ngăn không cho cùng một phát hiện xuất hiện với nhiều nhãn lớp (IoU=1.0 trùng lặp) và không thực hiện việc triệt tiêu dựa trên ngưỡng IoU giữa các hộp riêng biệt. |
single_cls | bool | False | Xem tất cả các lớp là một lớp duy nhất trong quá trình xác thực. Hữu ích để đánh giá hiệu suất model trên các tác vụ phát hiện nhị phân hoặc khi sự phân biệt lớp không quan trọng. |
visualize | bool | False | Trực quan hóa ground truth, true positive, false positive và false negative cho mỗi hình ảnh. Hữu ích cho việc gỡ lỗi và diễn giải model. |
show_labels | bool | True | Hiển thị nhãn lớp trong các trực quan hóa xác thực khi visualize=True. Đặt thành False để có cái nhìn rõ ràng hơn về các kết quả khớp và sai sót. |
show_conf | bool | True | Hiển thị điểm số tin cậy trong các trực quan hóa xác thực khi visualize=True. Đặt thành False để có cái nhìn rõ ràng hơn về các kết quả khớp và sai sót. |
compile | bool hoặc str | False | Bật tính năng biên dịch đồ thị torch.compile của PyTorch 2.x với backend='inductor'. Chấp nhận True → "default", False → tắt, hoặc một chế độ dạng chuỗi như "default", "reduce-overhead", "max-autotune-no-cudagraphs". Nếu không được hỗ trợ, sẽ tự động quay lại chế độ thực thi eager kèm theo cảnh báo. |
end2end | bool | None | Ghi đè chế độ end-to-end trong các model YOLO hỗ trợ suy luận không cần NMS (YOLO26, YOLOv10). Đặt thành False cho phép bạn chạy xác thực bằng pipeline NMS truyền thống, đồng thời cho phép bạn sử dụng đối số iou. |
Mỗi cài đặt này đóng một vai trò quan trọng trong quy trình xác thực, cho phép đánh giá các mô hình YOLO một cách hiệu quả và có thể tùy chỉnh. Việc điều chỉnh các tham số này theo nhu cầu và tài nguyên cụ thể của bạn có thể giúp đạt được sự cân bằng tốt nhất giữa độ chính xác và hiệu suất.
Link to this sectionVí dụ về xác thực với các tham số#
Watch: How to Export Model Validation Results in CSV, JSON, SQL, Polars DataFrame & More
Các ví dụ dưới đây giới thiệu việc xác thực mô hình YOLO với các tham số tùy chỉnh trong Python và CLI.
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")Bạn cũng có thể lưu kết quả ConfusionMatrix ở các định dạng khác nhau bằng cách sử dụng mã đượ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())Quá trình xác thực lưu trữ các số liệu precision, recall, F1, TP, FP và FN trên mỗi ảnh (tại ngưỡng IoU 0.5) cho tất cả các tác vụ ngoại trừ phân loại. Truy cập chúng thông qua results.box.image_metrics cho detection và OBB, results.seg.image_metrics cho segmentation và results.pose.image_metrics cho pose sau khi quá trình xác thực hoàn tất.
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 khóa sau:
| Khóa | Mô tả |
|---|---|
precision | Điểm số Precision cho hình ảnh (tp / (tp + fp)). |
recall | Điểm số Recall cho hình ảnh (tp / (tp + fn)). |
f1 | Trung bình điều hòa của precision và recall. |
tp | Số lượng true positive cho hình ảnh. |
fp | Số lượng false positive cho hình ảnh. |
fn | Số lượng false negative cho hình ảnh. |
Tính năng này khả dụng cho các tác vụ detection, segmentation, pose và OBB.
| Phương thức | Kiể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() | DataFrame | Trả về kết quả xác thực dưới dạng một Polars DataFrame có cấu trúc. |
to_csv() | str | Xuất kết quả xác thực ở định dạng CSV và trả về chuỗi CSV. |
to_json() | str | Xuất kết quả xác thực ở định dạng JSON và trả về chuỗi JSON. |
Để biết thêm chi tiết, hãy xem tài liệu lớp DataExportMixin.
Link to this sectionCâu hỏi thường gặp#
Link to this sectionLàm cách nào để xác thực mô hình YOLO26 của tôi với Ultralytics?#
Để xác thực mô hình YOLO26 của bạn, bạn có thể sử dụng chế độ Val được cung cấp bởi Ultralytics. Ví dụ, sử dụng API Python, bạn có thể tải một mô hình và chạy xác thực với:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt")
# Validate the model
metrics = model.val()
print(metrics.box.map) # map50-95Ngoà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 các tham số khác nhau như imgsz, batch và conf trong cả chế độ Python và CLI. Kiểm tra phần Các tham số để xác thực mô hình YOLO để xem danh sách đầy đủ các tham số.
Link to this sectionTôi có thể nhận được những số liệu nào từ việc xác thực mô hình YOLO26?#
Quá trình xác thực mô hình YOLO26 cung cấp một số số liệu chính để đánh giá hiệu suất mô hình. Bao gồm:
- mAP50 (mean Average Precision tại ngưỡng IoU 0.5)
- mAP75 (mean Average Precision tại ngưỡng IoU 0.75)
- mAP50-95 (mean Average Precision trên nhiều ngưỡng IoU từ 0.5 đến 0.95)
Sử dụng API Python, bạn có thể truy cập các số liệu 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 suất hoàn chỉnh, việc xem xét tất cả các số liệu này là rất quan trọng. Để biết thêm chi tiết, hãy tham khảo Các tính năng chính của chế độ Val.
Link to this sectionSử dụng Ultralytics YOLO để xác thực có những ưu điểm gì?#
Sử dụng Ultralytics YOLO để xác thực mang lại một số ưu điểm:
- Precision: YOLO26 cung cấp các số liệu hiệu suất chính xác bao gồm mAP50, mAP75 và mAP50-95.
- Sự thuận tiện: Các mô hình ghi nhớ cài đặt huấn luyện của chúng, giúp việc xác thực trở nên đơn giản.
- Tính linh hoạt: Bạn có thể xác thực với cùng một bộ dữ liệu hoặc các bộ dữ liệu khác nhau và kích thước hình ảnh khác nhau.
- Tinh chỉnh siêu tham số: Các số liệu xác thực giúp tinh chỉnh các mô hình để đạt hiệu suất tốt hơn.
Những lợi ích này đảm bảo rằng các mô hình của bạn được đánh giá kỹ lưỡng và có thể được tối ưu hóa để có kết quả vượt trội. Tìm hiểu thêm về các ưu điểm này trong phần Tại sao nên xác thực bằng Ultralytics YOLO.
Link to this sectionTôi có thể xác thực mô hình YOLO26 của mình bằng bộ dữ liệu tùy chỉnh không?#
Có, bạn có thể xác thực mô hình YOLO26 của mình bằng bộ dữ liệu tùy chỉnh. Chỉ định tham số data với đường dẫn đến tệp cấu hình bộ dữ liệu của bạn. Tệp này nên bao gồm đường dẫn đến dữ liệu xác thực.
Quá trình xác thực được thực hiện bằng cách sử dụng tên lớp riêng của mô hình, bạn có thể xem bằng model.names, và chúng có thể khác với những tên được chỉ định trong tệp cấu hình bộ dữ liệu.
Ví dụ trong 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-95Ví dụ sử dụng CLI:
yolo val model=yolo26n.pt data=path/to/your/custom_dataset.yamlĐể có thêm các tùy chọn tùy chỉnh trong quá trình xác thực, hãy xem phần Ví dụ về xác thực với các tham số.
Link to this sectionLàm cách nào để lưu kết quả xác thực vào tệp JSON trong YOLO26?#
Để lưu kết quả xác thực vào tệp JSON, bạn có thể đặt tham số save_json thành True khi chạy xác thực. Việc này có thể được thực hiện trong cả API Python và CLI.
Ví dụ trong 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=TrueChức năng này đặc biệt hữu ích cho việc phân tích thêm hoặc tích hợp với các công cụ khác. Kiểm tra Các tham số để xác thực mô hình YOLO để biết thêm chi tiết.