Đánh giá model với Ultralytics YOLO#
Giới thiệu#
Đánh giá là bước quan trọng trong quy trình machine learning, giú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 bộ công cụ và metric mạnh mẽ để đánh giá hiệu suất 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 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 để tham khảo kết quả đánh giá sơ bộ.
Xem: Hướng dẫn về các chế độ Ultralytics: Xác thực
Tại sao nên xác thực bằng Ultralytics YOLO?#
Sau đây là những ưu điểm khi 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 để ghi nhớ cài đặt 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 bằng cùng hoặc khác dataset và kích thước ảnh.
- Tinh chỉnh hyperparameter: Sử dụng các metric xác thực để tinh chỉnh model nhằm cải thiện hiệu suất.
Các tính năng chính của chế độ Val#
Sau đây là những chức năng nổi bật của chế độ Val trong YOLO26:
- Cài đặt tự động: Model ghi nhớ cấu hình huấn luyện để việc xác thực diễn ra thuận tiệ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 lựa chọn, bạn có thể xác thực bằng giao diện dòng lệnh hoặc Python API.
- Tương thích dữ liệu: Hoạt động liền mạch với dataset dùng trong giai đoạn huấn luyện cũng như dataset tùy chỉnh.
- Các model YOLO26 tự động ghi nhớ cài đặt huấn luyện, vì vậy
yolo val model=path/to/best.pthoặcYOLO("path/to/best.pt").val()sẽ xác thực trên dataset ban đầu với kích thước ảnh dùng khi huấn luyện. Trọng số chính thức sẽ dùng dataset mặc định của tác vụ nếu không tìm thấy dataset ban đầu; truyềndatađể ghi đè.
Ví dụ sử dụng#
Xác thực độ chính xác của model YOLO26n đã huấn luyện. Không cần đối số vì model lưu data và các đối số dùng khi huấn luyện dưới dạng thuộc tính của model: path/to/best.pt sẽ xác thực trên dataset mà model đã được huấn luyện. Trọng số chính thức lưu đường dẫn đến dataset huấn luyện không tồn tại trên máy của bạn, vì vậy chúng sẽ dùng coco8.yaml mặc định của tác vụ và đưa ra cảnh báo. Truyền data để xác thực trên dataset khác. Xem phần Đối số bên dưới để biết danh sách đầy đủ các đối số xác thực.
Trên Windows, bạn có thể gặp RuntimeError khi chạy xác thực dưới dạng script. Thêm khối if __name__ == "__main__": trước mã xác thực để khắc phục.
from ultralytics import YOLO
# Tải model
model = YOLO("yolo26n.pt") # tải model chính thức
model = YOLO("path/to/best.pt") # tải model tùy chỉnh
# Xác thực model
metrics = model.val() # không cần đối số, dataset và cài đặt đã được ghi nhớ
metrics.box.map # map50-95
metrics.box.map50 # map50
metrics.box.map75 # map75
metrics.box.maps # danh sách chứa mAP50-95 cho từng danh mục
metrics.box.image_metrics # dictionary metric theo từng ảnh, gồm precision, recall, F1, TP, FP và FNĐối số xác thực model YOLO#
Khi xác thực model YOLO, bạn có thể tinh chỉnh một số đối số để tối ưu quy trình đánh giá. Các đối 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à ngưỡng hiệu suất. Dưới đây là giải thích chi tiết từng đối số để giúp bạn tùy chỉnh hiệu quả cài đặt xác thực.
| Đối số | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
data | str | None | Chỉ định đường dẫn đến YAML của dataset (ví dụ: coco8.yaml), trong đó cần có đường dẫn đến dữ liệu validation. Với phân loại, thay vào đó, hãy cung cấp thư mục dataset hoặc tên dataset tích hợp sẵn (ví dụ: imagenet10). |
imgsz | int | 640 | Xác định kích thước ảnh đầu vào. Tất cả ảnh được thay đổi kích thước thành 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 các đối tượng nhỏ nhưng làm tăng thời gian tính toán. |
batch | int | 16 | Đặt số lượng ảnh trong mỗi batch. Giá trị cao hơn tận dụng bộ nhớ GPU hiệu quả hơn nhưng cần nhiều VRAM hơn. Điều chỉnh theo tài nguyên phần cứng hiệ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ông cụ khác hoặc gửi lên máy chủ đánh giá như COCO. Với dataset detection, tùy chọn này cũng đánh giá dự đoán bằng faster-coco-eval và báo cáo mAP cho đối tượng nhỏ, vừa và lớn; các chỉ số được ghi trong quá trình huấn luyện dưới dạng metrics/mAP_small(B), metrics/mAP_medium(B) và metrics/mAP_large(B) trong results.csv. |
conf | float | 0.001 | Đặt ngưỡng confidence tối thiểu cho detection. Giá trị thấp hơn làm tăng recall nhưng có thể tạo thêm false positive. Đường cong precision-recall, mAP và ma trận nhầm lẫn detection đều dùng giá trị này; conf cao hơn, chẳng hạn 0.25, tạo ma trận gần với đầu ra dự đoán hơn nhưng có thể làm giảm mAP. Precision và recall tóm tắt dùng confidence F1 tối đa, nên 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ớ. |
iou | float | 0.7 | Đặt ngưỡng Intersection Over Union cho Non-Maximum Suppression. Điều khiển việc loại bỏ detection trùng lặp. |
max_det | int | 300 | Giới hạn số lượng detection tối đa trên mỗi ảnh. Với detect, segment, pose và OBB, nếu giữ ở mức 300, giá trị này sẽ được tăng lên bằng số lượng đối tượng được gán nhãn lớn nhất trong tập dữ liệu validation khi một ảnh vượt quá giới hạn đó, kèm cảnh báo; mọi giá trị khác sẽ được giữ nguyên, đồng thời có cảnh báo rằng recall có thể bị giới hạn nếu ảnh vượt quá giá trị đó. |
quantize | int hoặc str | None | Độ chính xác validation: 16/"fp16" và 32/"fp32"/không đặt sẽ chọn phép tính FP16 hoặc FP32 cho model PyTorch và TorchScript; các định dạng khác tính toán ở độ chính xác do artifact và runtime lựa chọn. Với 16, OpenVINO vẫn làm tròn đầu vào xuống FP16 ở phía client rồi chuyển lại thành FP32 mà không thay đổi độ chính xác runtime sử dụng để tính toán. Cấu hình lượng tử hóa INT8/PTQ trong quá trình export, sau đó dùng bằng cách validation model đã export. Thay thế flag half đã lỗi thời. |
device | str | None | Chỉ định thiết bị dùng cho validation (cpu, cuda:0, npu, npu:0, v.v.). Khi là None, thiết bị khả dụng tốt nhất sẽ được tự động chọn. Có thể chỉ định nhiều thiết bị CUDA bằng cách phân tách bằng dấu phẩy. |
dnn | bool | False | Nếu True, sử dụng module DNN của OpenCV để suy luận model ONNX, cung cấp một phương án thay thế cho các phương thức suy luận PyTorch. |
plots | bool | True | Khi được đặt thành True, tạo và lưu biểu đồ dự đoán so với ground truth, ma trận nhầm lẫn và đường cong PR để đánh giá trực quan hiệu năng model. |
classes | list[int] | None | Chỉ đị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á. |
rect | bool | True | Nếu True, sử dụng suy luận hình chữ nhật khi batching, giảm padding và có thể tăng tốc độ cũng như hiệu quả bằng cách xử lý ảnh theo tỷ lệ khung hình gốc. Bị bỏ qua khi validation depth, vốn kéo giãn mọi ảnh thành hình vuông imgsz cố định thay vì thêm padding. |
split | str | 'val' | Xác định phần chia dataset dùng cho validation (val, test hoặc train). Cho phép linh hoạt chọn phân đoạn dữ liệu để đánh giá hiệu năng. |
fraction | float, int hoặc list | 1.0 | Tập con của phần chia được validation. Với danh sách [train, val, test], áp dụng mục tương ứng với split (1 = toàn bộ phần chia, số nguyên lớn hơn 1 = số lượng ảnh; mục bị bỏ qua sẽ dùng toàn bộ). Giá trị đơn chỉ áp dụng cho split=train; khi đó val và test dùng toàn bộ phần chia. |
project | str | None | Tên thư mục dự án nơi lưu đầu ra validation. 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 lượt chạy validation. Dùng để tạo thư mục con trong thư mục dự án, nơi lưu nhật ký và đầu ra validation. |
verbose | bool | True | Nế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 độ batch và thông tin gỡ lỗi bổ sung. |
save_txt | bool | False | Nếu True, lưu kết quả detection vào các tệp văn bản, mỗi ảnh một tệp; hữu ích cho phân tích thêm, hậu xử lý tùy chỉnh hoặc tích hợp với hệ thống khác. |
save_conf | bool | False | Nếu True, đưa giá trị confidence vào các tệp văn bản đã lưu khi bật save_txt, 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 dùng để tải dữ liệu. Giá trị cao hơn có thể tăng tốc tiền xử lý dữ liệu nhưng cũng có thể làm tăng mức sử dụng CPU. Đặt thành 0 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 lúc kiểm thử (TTA) trong quá trình validation, có thể cải thiện độ chính xác của detection nhưng làm giảm tốc độ suy luận do chạy suy luận trên các phiên bản đã biến đổi của đầu vào. Chỉ khả dụng với model PyTorch của Ultralytics. |
agnostic_nms | bool | False | Bật Non-Maximum Suppression không phụ thuộc class, loại bỏ các box chồng lấp có điểm thấp hơn bất kể class được dự đoán. Hữu ích cho các ứng dụng tập trung vào instance. Với suy luận không dùng NMS (nms=False trên YOLO26 hoặc YOLOv10), tùy chọn này chỉ ngăn cùng một detection xuất hiện với nhiều nhãn class (các bản trùng IoU=1.0), không thực hiện loại bỏ dựa trên ngưỡng IoU giữa các box riêng biệt. |
single_cls | bool | False | Coi tất cả class là một class duy nhất trong quá trình validation. Hữu ích để đánh giá hiệu năng model trên các tác vụ detection nhị phân hoặc khi không cần phân biệt class. |
visualize | bool | False | Trực quan hóa ground truth, true positive, false positive và false negative cho mỗi ả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 class trong hình ảnh trực quan hóa validation khi visualize=True. Đặt thành False để dễ quan sát các trường hợp khớp và lỗi hơn. |
show_conf | bool | True | Hiển thị điểm confidence trong hình ảnh trực quan hóa validation khi visualize=True. Đặt thành False để dễ quan sát các trường hợp khớp và lỗi hơn. |
compile | bool hoặc str | False | Bật biên dịch đồ thị torch.compile của PyTorch 2.x bằng backend='inductor'. Chấp nhận True → "default", False → tắt, hoặc chế độ dạng chuỗi như "default", "reduce-overhead", "max-autotune-no-cudagraphs". Nếu không được hỗ trợ, sẽ chuyển về chế độ eager kèm cảnh báo. |
channels_last | bool | None | Sử dụng định dạng bộ nhớ channels_last (NHWC) cho validation PyTorch gốc. None tự động bật định dạng này trên CPU x86 chạy Linux và Windows có oneDNN, với PyTorch 1.13 trở lên; False tắt định dạng này; còn True yêu cầu sử dụng định dạng này 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 không thay đổi; quá trình validation trong khi huấn luyện giữ nguyên bố cục model huấn luyện. |
nms | bool, không bắt buộc | None | Mặc định chạy suy luận một-nhiều với NMS (None hoặc True). Đặt False để dùng head một-một không có NMS khi khả dụng. Xem hướng dẫn Detection đầu-cuối để biết thêm chi tiết. |
Mỗi cài đặt này đều đóng vai trò quan trọng trong quy trình xác thực, cho phép đánh giá model YOLO một cách linh hoạt và hiệu quả. Đ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ối ưu giữa độ chính xác và hiệu suất.
Ví dụ xác thực với các đối số#
Xem: Cách xuất kết quả xác thực model sang CSV, JSON, SQL, Polars DataFrame và nhiều định dạng khác
Các ví dụ dưới đây minh họa cách xác thực model YOLO bằng đối số tùy chỉnh trong Python và CLI.
from ultralytics import YOLO
# Tải model
model = YOLO("yolo26n.pt")
# Tùy chỉnh cài đặt xác thực
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 ở nhiều định dạng khác nhau bằng đoạn 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 các metric precision, recall, F1, TP, FP và FN theo từng ảnh (ở ngưỡng IoU 0.5) cho tất cả tác vụ ngoại trừ phân loại. Sau khi hoàn tất xác thực, 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.
from ultralytics import YOLO
# Tải model
model = YOLO("yolo26n.pt")
# Xác thực và truy cập metric theo từng ảnh
results = model.val(data="coco8.yaml")
# image_metrics là dictionary có tên tệp ảnh làm khóa
print(results.box.image_metrics)
# Đầu ra: {'image1.jpg': {'precision': 0.85, 'recall': 0.92, 'f1': 0.88, 'tp': 17, 'fp': 3, 'fn': 1}, ...}
# Truy cập metric của một ảnh cụ thể
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 precision của ảnh (tp / (tp + fp)). |
recall | Điểm recall của ảnh (tp / (tp + fn)). |
f1 | Trung bình điều hòa của precision và recall. |
tp | Số lượng true positive của ảnh. |
fp | Số lượng false positive của ảnh. |
fn | Số lượng false negative của ảnh. |
Tính năng này khả dụng cho các tác vụ detection, segmentation, pose và OBB.
Đối tượng metric đượ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:
| Phương thức | Kiểu trả về | Mô tả |
|---|---|---|
summary() | List[Dict[str, Any]] | Chuyển kết quả xác thực thành dictionary tóm tắt. |
to_df() | DataFrame | Trả về kết quả xác thực dưới dạng 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, xem tài liệu về lớp DataExportMixin.
Tiếp theo là gì#
Hài lòng với các metric? Xuất model sang định dạng triển khai. Nếu độ chính xác chưa đạt yêu cầu, quay lại huấn luyện với hyperparameter khác hoặc thêm dữ liệu huấn luyện.
Câu hỏi thường gặp#
Để xác thực model YOLO26, bạn có thể sử dụng chế độ Val do Ultralytics cung cấp. Ví dụ, dùng Python API để tải model và chạy xác thực như sau:
from ultralytics import YOLO # Tải model model = YOLO("yolo26n.pt") # Xác thực 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 detect val model=yolo26n.pt data=coco8.yamlĐể tùy chỉnh thêm, bạn có thể điều chỉnh nhiều đối số như
imgsz,batchvàconftrong cả Python lẫn CLI. Xem phần Đối số xác thực model YOLO để biết danh sách đầy đủ các tham số.Quá trình xác thực model YOLO26 cung cấp một số metric chính để đánh giá hiệu suất model, 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)
Bạn có thể truy cập các metric này bằng Python API như sau:
metrics = model.val() # giả sử `model` đã được tải print(metrics.box.map) # mAP50-95 print(metrics.box.map50) # mAP50 print(metrics.box.map75) # mAP75 print(metrics.box.maps) # danh sách mAP50-95 cho từng danh mục print(metrics.box.image_metrics) # dictionary metric theo từng ảnh, gồm precision, recall, F1, TP, FP và FNĐể đánh giá hiệu suất đầy đủ, 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 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ố ưu điểm:
- Độ chính xác: YOLO26 cung cấp các metric hiệu suất chính xác, bao gồm mAP50, mAP75 và mAP50-95.
- Tiện lợi: Model ghi nhớ cài đặt 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 bằng cùng hoặc khác dataset và kích thước ảnh.
- Tinh chỉnh hyperparameter: Metric xác thực hỗ trợ tinh chỉnh model để cải thiện hiệu suất.
Những lợi ích này đảm bảo model được đánh giá kỹ lưỡng và có thể được tối ưu để đạt kết quả tốt hơn. Tìm hiểu thêm về những ưu điểm này trong phần Tại sao nên xác thực bằng Ultralytics YOLO.
Có, bạn có thể xác thực model YOLO26 bằng dataset tùy chỉnh. Chỉ định đối số
databằng đường dẫn đến YAML của dataset; tệp này cần bao gồm đường dẫn đến dữ liệu xác thực. Với tác vụ phân loại, thay vào đó hãy cung cấp thư mục dataset hoặc tên dataset tích hợp sẵn (ví dụ:imagenet10).Lưu ýQuá trình xác thực sử dụng tên lớp của chính model; bạn có thể xem các tên này bằng
model.names. Tên lớp của model có thể khác với tên lớp do dataset xác định.Ví dụ bằng Python:
from ultralytics import YOLO # Tải model model = YOLO("yolo26n.pt") # Xác thực bằng dataset tùy chỉnh 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Để biết thêm các tùy chọn có thể tùy chỉnh trong quá trình xác thực, xem phần Ví dụ xác thực với các đối số.
Để lưu kết quả xác thực vào tệp JSON, hãy đặt đối số
save_jsonthànhTruekhi chạy xác thực. Bạn có thể thực hiện việc này bằng cả Python API lẫn CLI.Ví dụ bằng Python:
from ultralytics import YOLO # Tải model model = YOLO("yolo26n.pt") # Lưu kết quả xác thực vào JSON metrics = model.val(save_json=True)Ví dụ sử dụng CLI:
yolo val model=yolo26n.pt save_json=TrueTrên dataset detection,
save_json=Truecũng báo cáo mAP cho đối tượng nhỏ, vừa và lớn thông quafaster-coco-eval. Xem Đối số xác thực model YOLO để biết thêm chi tiết.